From b6957b82498d969714a9851d7b55f694a5052319 Mon Sep 17 00:00:00 2001 From: default <216188+jdx@users.noreply.github.com> Date: Sun, 23 Aug 2026 19:24:10 +0000 Subject: [PATCH 1/2] perf(go): measure Go parsers the way the Rust ones are measured MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Go card on the landing page reported whole-process wall time with the Go runtime's ~1 ms startup subtracted, while the Rust card reported in-process parse throughput. Two cards, two estimators, one of them a difference between numbers two orders of magnitude larger than the bar it drew. Worse, the usage-go bar was the binder alone against the other three frameworks' whole job. So: `benches/go/cmd/sweep` is `benches/gate/src/bin/time-sweep.rs` in Go. Every parser runs repeatedly in one process and the fastest of many short rounds is reported, with the collector off during a round and run between rounds — left on, it moved urfave's minimum by 2x between runs. usage-go's row is `Parse`, argv to a filled struct, because that is the whole of what cobra, urfave and kong each do in one call. urfave/cli v3 and kong get generated mise-scale shadows, so all four rows are the same CLI from the same checked-in spec rather than two of them being hand-measured against programs that were not in the repository. What each framework cannot express is counted and printed as before: kong loses most, since a flag reaches every command below the one that declares it and mise redeclares 222 of them. Whole-process cost is still measured and still reported, in `go/README.md` rather than on the chart: it is mostly the Go runtime, and it cannot resolve a 5.9 µs parse. Its instruction counts are now taken with `GOMAXPROCS=1` — valgrind serializes every thread onto one core and an unpinned Go runtime spends the wait spinning, which read twenty cobra resolves as 56M on one run and 5,002M on the next. At mise's scale, in-process: usage-go 5.9 µs, cobra 110 µs, urfave 200 µs, kong 3.0 ms. The typed front door costs about eighty times the binder under it, most of it in two maps the generated `Parse` allocates per call, which is now written down in the README rather than stepped around by charting the binder. Co-Authored-By: Claude Opus 5 --- benches/go/cmd/parse-n-cobra/main.go | 38 + benches/go/cmd/parse-n-kong/main.go | 38 + benches/go/cmd/parse-n-urfave/main.go | 38 + benches/go/cmd/sweep/main.go | 168 + benches/go/cobra/go.mod | 15 - benches/go/cobra/go.sum | 13 - benches/go/go.mod | 29 + benches/go/go.sum | 30 + .../go/{cobra/main.go => mise-cobra/cobra.go} | 52 +- benches/go/mise-kong/kong.go | 1705 ++ benches/go/mise-urfave/urfave.go | 256 + benches/go/mise/tables.go | 14350 ++++++++++++++++ benches/go/shadows_test.go | 77 + docs/.vitepress/theme/UsageBenches.vue | 57 +- docs/go/index.md | 6 +- go/README.md | 192 +- go/internal/bench/bind-n/main.go | 44 + go/internal/bench/parse-n/main.go | 60 +- mise.toml | 47 +- tasks/perf-go.sh | 353 +- xtask/src/{ => go}/cobra.rs | 163 +- xtask/src/go/kong.rs | 412 + xtask/src/go/mod.rs | 148 + xtask/src/go/urfave.rs | 254 + xtask/src/main.rs | 14 +- 25 files changed, 18073 insertions(+), 486 deletions(-) create mode 100644 benches/go/cmd/parse-n-cobra/main.go create mode 100644 benches/go/cmd/parse-n-kong/main.go create mode 100644 benches/go/cmd/parse-n-urfave/main.go create mode 100644 benches/go/cmd/sweep/main.go delete mode 100644 benches/go/cobra/go.mod delete mode 100644 benches/go/cobra/go.sum create mode 100644 benches/go/go.mod create mode 100644 benches/go/go.sum rename benches/go/{cobra/main.go => mise-cobra/cobra.go} (99%) create mode 100644 benches/go/mise-kong/kong.go create mode 100644 benches/go/mise-urfave/urfave.go create mode 100644 benches/go/mise/tables.go create mode 100644 benches/go/shadows_test.go create mode 100644 go/internal/bench/bind-n/main.go rename xtask/src/{ => go}/cobra.rs (50%) create mode 100644 xtask/src/go/kong.rs create mode 100644 xtask/src/go/mod.rs create mode 100644 xtask/src/go/urfave.rs diff --git a/benches/go/cmd/parse-n-cobra/main.go b/benches/go/cmd/parse-n-cobra/main.go new file mode 100644 index 000000000..489e2db16 --- /dev/null +++ b/benches/go/cmd/parse-n-cobra/main.go @@ -0,0 +1,38 @@ +// Command parse-n-cobra resolves the same command line N times, N coming from the +// environment, against cobra's command tree. +// +// The counterpart of `go/internal/bench/parse-n` for one of the frameworks usage-go +// is compared against, and the same protocol: differencing two runs of one binary +// separates what the resolves cost from what the Go runtime costs to start, without +// subtracting a second binary whose startup is not the same size. +// +// What this answers that `cmd/sweep` cannot: instruction counts, which are +// deterministic where wall clock is not, and what a whole process costs — the number +// an adopter feels, most of which is the runtime rather than the parser. +package main + +import ( + "fmt" + "os" + "strconv" + + misecobra "github.com/jdx/usage/benches/go/mise-cobra" +) + +func main() { + n := 1 + if v, err := strconv.Atoi(os.Getenv("PARSE_N")); err == nil { + n = v + } + + // Printed at the end, and it is what keeps the measurement honest: a rejected + // command line is cheap to resolve, so a harness that did not check would happily + // report the cost of failing early. + seen := 0 + for i := 0; i < n; i++ { + if misecobra.Resolve(os.Args[1:]) { + seen = 1 + } + } + fmt.Println(seen) +} diff --git a/benches/go/cmd/parse-n-kong/main.go b/benches/go/cmd/parse-n-kong/main.go new file mode 100644 index 000000000..87841706c --- /dev/null +++ b/benches/go/cmd/parse-n-kong/main.go @@ -0,0 +1,38 @@ +// Command parse-n-kong resolves the same command line N times, N coming from the +// environment, against kong's reflected grammar. +// +// The counterpart of `go/internal/bench/parse-n` for one of the frameworks usage-go +// is compared against, and the same protocol: differencing two runs of one binary +// separates what the resolves cost from what the Go runtime costs to start, without +// subtracting a second binary whose startup is not the same size. +// +// What this answers that `cmd/sweep` cannot: instruction counts, which are +// deterministic where wall clock is not, and what a whole process costs — the number +// an adopter feels, most of which is the runtime rather than the parser. +package main + +import ( + "fmt" + "os" + "strconv" + + misekong "github.com/jdx/usage/benches/go/mise-kong" +) + +func main() { + n := 1 + if v, err := strconv.Atoi(os.Getenv("PARSE_N")); err == nil { + n = v + } + + // Printed at the end, and it is what keeps the measurement honest: a rejected + // command line is cheap to resolve, so a harness that did not check would happily + // report the cost of failing early. + seen := 0 + for i := 0; i < n; i++ { + if misekong.Resolve(os.Args[1:]) { + seen = 1 + } + } + fmt.Println(seen) +} diff --git a/benches/go/cmd/parse-n-urfave/main.go b/benches/go/cmd/parse-n-urfave/main.go new file mode 100644 index 000000000..cb073ec16 --- /dev/null +++ b/benches/go/cmd/parse-n-urfave/main.go @@ -0,0 +1,38 @@ +// Command parse-n-urfave resolves the same command line N times, N coming from the +// environment, against urfave's command tree. +// +// The counterpart of `go/internal/bench/parse-n` for one of the frameworks usage-go +// is compared against, and the same protocol: differencing two runs of one binary +// separates what the resolves cost from what the Go runtime costs to start, without +// subtracting a second binary whose startup is not the same size. +// +// What this answers that `cmd/sweep` cannot: instruction counts, which are +// deterministic where wall clock is not, and what a whole process costs — the number +// an adopter feels, most of which is the runtime rather than the parser. +package main + +import ( + "fmt" + "os" + "strconv" + + miseurfave "github.com/jdx/usage/benches/go/mise-urfave" +) + +func main() { + n := 1 + if v, err := strconv.Atoi(os.Getenv("PARSE_N")); err == nil { + n = v + } + + // Printed at the end, and it is what keeps the measurement honest: a rejected + // command line is cheap to resolve, so a harness that did not check would happily + // report the cost of failing early. + seen := 0 + for i := 0; i < n; i++ { + if miseurfave.Resolve(os.Args[1:]) { + seen = 1 + } + } + fmt.Println(seen) +} diff --git a/benches/go/cmd/sweep/main.go b/benches/go/cmd/sweep/main.go new file mode 100644 index 000000000..5b419f1c8 --- /dev/null +++ b/benches/go/cmd/sweep/main.go @@ -0,0 +1,168 @@ +// Command sweep is wall clock for the four Go parsers, measured so it survives a +// loaded machine. +// +// This is `benches/gate/src/bin/time-sweep.rs` in Go, deliberately: the two cards on +// the landing page should be answering the same question with the same estimator, and +// what a parse costs is a question about parsing rather than about how long a Go +// process takes to start. A whole-process measurement cannot answer it — 0.95 ms of a +// Go process is the runtime coming up, which is three orders of magnitude larger than +// the thing being compared and varies run to run by more than the thing being +// compared costs. +// +// So each parser runs repeatedly in one process and the report is the *fastest* +// per-parse time from many short rounds. Noise from other tenants is additive — +// nothing another process does can make this one faster — so the minimum is the +// estimator to want, and short rounds are the ones an interruption can only spoil +// individually. Each framework gets rounds sized to about the same wall time rather +// than the same iteration count, so a parser 200x slower than another is not asked +// for 200x the work. +// +// Two things this does not measure, both reported elsewhere by `tasks/perf-go.sh`: +// what a whole process costs, which is the number an adopter feels, and the garbage +// collection an allocating parser causes, which a minimum over short rounds mostly +// steps around. The median column is printed beside the minimum because that is where +// collection shows up. +package main + +import ( + "flag" + "fmt" + "os" + "runtime" + "runtime/debug" + "sort" + "strings" + "time" + + "github.com/jdx/usage/benches/go/mise" + misecobra "github.com/jdx/usage/benches/go/mise-cobra" + misekong "github.com/jdx/usage/benches/go/mise-kong" + miseurfave "github.com/jdx/usage/benches/go/mise-urfave" + "github.com/jdx/usage/go/argv" +) + +// The one command line every row is measured against, the same one the Rust shadows +// use, so the two cards describe the same work. +var words = []string{"use", "-g", "node@20"} + +// Rounds, and per-round iteration counts chosen so a round is ~0.5-3ms of work. +const rounds = 4000 + +// sink keeps a parse from being optimized away. Go has no `black_box`, and a compiler +// that can see the result is unused is within its rights to skip producing it. +var sink bool + +type stats struct { + min, p01, p10, median float64 +} + +// sweep times iters calls of f, rounds times, and describes the distribution per call. +// +// The collector is off for the duration and asked to run between rounds, outside the +// timed interval. Three frameworks here build a model per parse and drop it, so left to +// itself the collector runs inside most rounds and lands unevenly: two runs of this +// program read urfave's minimum as 266 µs and 546 µs, which is not a measurement of +// anything. Off, every round measures the same work. +// +// Excluding it is also the closer answer for a CLI. A process that parses one command +// line and gets on with it usually exits before the collector was ever going to run; what +// the garbage costs shows up in the whole-process table instead, where a real process pays +// for it. +func sweep(rounds, iters int, f func() bool) stats { + defer debug.SetGCPercent(debug.SetGCPercent(-1)) + + // Warm the allocator, the caches, the branch predictors and — for the frameworks + // that build a model per call — the heap they will keep reusing. Whatever the first + // call pays for is not what a parse costs on the millionth. + warm := iters + if warm < 200 { + warm = 200 + } + for i := 0; i < warm; i++ { + sink = f() + } + + perCall := make([]float64, 0, rounds) + for r := 0; r < rounds; r++ { + // Between rounds, never inside one: with the collector off, whatever the last + // round allocated is still on the heap, and a round that has to grow it is + // measuring the allocator's bad day rather than the parser. + runtime.GC() + start := time.Now() + for i := 0; i < iters; i++ { + sink = f() + } + perCall = append(perCall, float64(time.Since(start).Nanoseconds())/float64(iters)) + } + sort.Float64s(perCall) + at := func(q float64) float64 { + return perCall[int(float64(len(perCall)-1)*q)] + } + return stats{min: perCall[0], p01: at(0.01), p10: at(0.10), median: at(0.50)} +} + +// row is one framework, and how much work to ask it for. +type row struct { + label string + rounds int + iters int + f func() bool +} + +func main() { + tsv := flag.Bool("tsv", false, "one tab-separated row per parser, for a script to read") + flag.Parse() + + rows := []row{ + {"usage-go, argv -> struct", rounds, 2_000, func() bool { + cli, err := mise.Parse(words) + return err == nil && cli.Use != nil + }}, + // The binder alone, without the post-binding rules or the structs it fills. + // Reported because it is the part that is comparable to nothing else here: no + // other framework has a stage that answers "which token is which" and stops. + {"usage-go, argv -> events", rounds, 2_000, func() bool { + p := argv.New(mise.Root, words) + reached := false + for p.Next() { + if ev := p.Event(); ev.Kind == argv.KindCommand { + reached = true + } + } + return p.Err() == nil && reached + }}, + {"urfave/cli v3, build tree + run", rounds / 8, 4, func() bool { + return miseurfave.Resolve(words) + }}, + {"cobra, build tree + resolve", rounds / 8, 4, func() bool { + return misecobra.Resolve(words) + }}, + {"kong, reflect over structs + parse", rounds / 40, 1, func() bool { + return misekong.Resolve(words) + }}, + } + + // Every row is checked before any row is timed. A parser that rejected this command + // line would be cheap for the wrong reason, and a table that reported it anyway + // would be measuring how fast a framework can fail. + for _, r := range rows { + if !r.f() { + fmt.Fprintf(os.Stderr, + "sweep: %s did not reach a subcommand on `%s`, so there is nothing worth measuring\n", + r.label, strings.Join(words, " ")) + os.Exit(1) + } + } + + if !*tsv { + fmt.Printf("%-40s%9s %9s %9s %9s\n", "", "min", "p01", "p10", "median") + } + for _, r := range rows { + s := sweep(r.rounds, r.iters, r.f) + if *tsv { + fmt.Printf("%s\t%.0f\t%.0f\t%.0f\t%.0f\n", r.label, s.min, s.p01, s.p10, s.median) + continue + } + fmt.Printf("%-40s%9.0f %9.0f %9.0f %9.0f ns\n", r.label, s.min, s.p01, s.p10, s.median) + } +} diff --git a/benches/go/cobra/go.mod b/benches/go/cobra/go.mod deleted file mode 100644 index 57351288a..000000000 --- a/benches/go/cobra/go.mod +++ /dev/null @@ -1,15 +0,0 @@ -// A module of its own, so that cobra is not a dependency of `github.com/jdx/usage/go`. -// -// That module has none, deliberately: an adopter's binary carries the tables and nothing -// else. A benchmark that put cobra in its go.mod would be measuring the thing it is -// comparing against while claiming to have no dependencies. -module github.com/jdx/usage/benches/go/cobra - -go 1.24 - -require github.com/spf13/cobra v1.10.2 - -require ( - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/spf13/pflag v1.0.9 // indirect -) diff --git a/benches/go/cobra/go.sum b/benches/go/cobra/go.sum deleted file mode 100644 index 2342cd127..000000000 --- a/benches/go/cobra/go.sum +++ /dev/null @@ -1,13 +0,0 @@ -github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= -github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= -github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= -github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= -github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= -github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/benches/go/go.mod b/benches/go/go.mod new file mode 100644 index 000000000..c3a2b6da5 --- /dev/null +++ b/benches/go/go.mod @@ -0,0 +1,29 @@ +// One module for every mise-scale Go shadow, and the only place in the repository +// where another CLI framework is a dependency. +// +// `github.com/jdx/usage/go` has none, deliberately: an adopter's binary carries the +// tables and nothing else. A benchmark that put cobra, urfave/cli or kong in *that* +// go.mod would be measuring the thing it is comparing against while claiming to have +// no dependencies. So the four shadows live here, together, and the sweep that times +// them links all four into one binary — the Go counterpart of `benches/gate`, which +// does the same for the Rust four. +module github.com/jdx/usage/benches/go + +go 1.24 + +require ( + github.com/alecthomas/kong v1.16.1 + github.com/jdx/usage/go v0.0.0 + github.com/spf13/cobra v1.10.2 + github.com/urfave/cli/v3 v3.11.0 +) + +require ( + github.com/expr-lang/expr v1.17.8 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/spf13/pflag v1.0.9 // indirect +) + +// The Go module is unreleased, and what is being measured is this checkout of it +// rather than a published version. +replace github.com/jdx/usage/go => ../../go diff --git a/benches/go/go.sum b/benches/go/go.sum new file mode 100644 index 000000000..f3a546124 --- /dev/null +++ b/benches/go/go.sum @@ -0,0 +1,30 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/kong v1.16.1 h1:ixhCt93XkJ98kGposQ54+bl0IK6XwqB40AsMynU7Z8E= +github.com/alecthomas/kong v1.16.1/go.mod h1:wrlbXem1CWqUV5Vbmss5ISYhsVPkBb1Yo7YKJghju2I= +github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs= +github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/expr-lang/expr v1.17.8 h1:W1loDTT+0PQf5YteHSTpju2qfUfNoBt4yw9+wOEU9VM= +github.com/expr-lang/expr v1.17.8/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/urfave/cli/v3 v3.11.0 h1:P/euJp99kb9p0tlVY+iYTLYYTAQlfl0hR2gUO1Img1Q= +github.com/urfave/cli/v3 v3.11.0/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/benches/go/cobra/main.go b/benches/go/mise-cobra/cobra.go similarity index 99% rename from benches/go/cobra/main.go rename to benches/go/mise-cobra/cobra.go index dfc321f56..f52a72817 100644 --- a/benches/go/cobra/main.go +++ b/benches/go/mise-cobra/cobra.go @@ -1,23 +1,12 @@ // Code generated by `xtask gen-shadow benches/mise.usage.kdl cobra`. DO NOT EDIT. // -// mise declared in cobra, from the same spec the usage tables are generated from, so -// that the two rows of `go/README.md`'s table describe the same CLI. Regenerate with -// `mise run gen-shadow` rather than editing: a hand-edit here is a difference no -// reviewer can see, in a program whose whole job is to be comparable. -// -// The tree is built inside the loop on purpose. That is what cobra does on every -// process start — a `&cobra.Command` per subcommand, each with its own flag set — and -// it is the cost the comparison is about. Hoisting it out would measure a parser -// against a program that had already paid for its model. -package main - -import ( - "fmt" - "os" - "strconv" +// mise declared in cobra, from the same spec the usage tables are generated +// from, so that the rows of `go/README.md`'s tables describe the same CLI. +// Regenerate with `mise run gen-shadow` rather than editing: a hand-edit here is a +// difference no reviewer can see, in a program whose whole job is to be comparable. +package misecobra - "github.com/spf13/cobra" -) +import "github.com/spf13/cobra" // build declares the whole CLI, as a cobra program's `init` or `main` would. func build() *cobra.Command { @@ -1205,25 +1194,14 @@ func build() *cobra.Command { return root } -func main() { - n := 1 - if v, err := strconv.Atoi(os.Getenv("PARSE_N")); err == nil { - n = v - } - - // Find and ParseFlags rather than Execute: the comparison is about resolving a - // command line, and Execute would run the command as well. This is the same work - // the usage side does — reach a command, bind its flags — and no more. - seen := 0 - for i := 0; i < n; i++ { - root := build() - cmd, flags, err := root.Find(os.Args[1:]) - if err == nil { - err = cmd.ParseFlags(flags) - } - if err == nil && cmd != root { - seen = 1 - } +// Resolve builds cobra's model of the CLI and resolves argv against it, reporting +// whether a subcommand was reached. Both halves are the measurement: cobra has no +// way to answer a command line without first constructing the tree. +func Resolve(argv []string) bool { + root := build() + cmd, flags, err := root.Find(argv) + if err == nil { + err = cmd.ParseFlags(flags) } - fmt.Println(seen) + return err == nil && cmd != root } diff --git a/benches/go/mise-kong/kong.go b/benches/go/mise-kong/kong.go new file mode 100644 index 000000000..401b9d00a --- /dev/null +++ b/benches/go/mise-kong/kong.go @@ -0,0 +1,1705 @@ +// Code generated by `xtask gen-shadow benches/mise.usage.kdl kong`. DO NOT EDIT. +// +// mise declared in kong, from the same spec the usage tables are generated from, +// so that the rows of `go/README.md`'s tables describe the same CLI. Regenerate +// with `mise run gen-shadow` rather than editing. +// +// One struct per command and one tag per flag, as an author would write them. +// `kong.New` walks all of it with reflection inside `Resolve`, because that is +// what a kong program does on every process start. +package misekong + +import ( + "io" + + "github.com/alecthomas/kong" +) + +// Cli is the root command. +type Cli struct { + ContinueOnError bool "name:\"continue-on-error\" short:\"c\" help:\"Continue running tasks even if one fails\" hidden:\"\"" + Cd string "name:\"cd\" short:\"C\" help:\"Change directory before running command\"" + Env []string "name:\"env\" short:\"E\" help:\"Set the environment for loading `mise..toml`\"" + Force bool "name:\"force\" short:\"f\" help:\"Force the operation\" hidden:\"\"" + Jobs string "name:\"jobs\" short:\"j\" help:\"How many jobs to run in parallel; values below 1 are treated as 1 [default: 8]\" env:\"MISE_JOBS\"" + DryRun bool "name:\"dry-run\" short:\"n\" help:\"Dry run, don't actually do anything\" hidden:\"\"" + Profile []string "name:\"profile\" short:\"P\" help:\"Set the profile (environment)\" hidden:\"\"" + Quiet bool "name:\"quiet\" short:\"q\" help:\"Suppress non-error messages\"" + Shell string "name:\"shell\" short:\"s\" hidden:\"\"" + Tool []string "name:\"tool\" short:\"t\" help:\"Tool(s) to run in addition to what is in mise.toml files e.g.: node@20 python@3.10\" hidden:\"\" env:\"MISE_QUIET\"" + Verbose int "name:\"verbose\" short:\"v\" help:\"Show extra output (use -vv for even more)\" type:\"counter\"" + Version bool "name:\"version\" short:\"V\" hidden:\"\"" + Yes bool "name:\"yes\" short:\"y\" help:\"Answer yes to all confirmation prompts\"" + Debug bool "name:\"debug\" help:\"Sets log level to debug\" hidden:\"\"" + LogLevel string "name:\"log-level\" hidden:\"\"" + NoConfig bool "name:\"no-config\" help:\"Do not load any config files\"" + NoEnv bool "name:\"no-env\" help:\"Do not load environment variables from config files\"" + NoHooks bool "name:\"no-hooks\" help:\"Do not execute hooks from config files\"" + NoTimings bool "name:\"no-timings\" aliases:\"no-timing\" help:\"Hides elapsed time after each task completes\" hidden:\"\"" + Output string "name:\"output\"" + Raw bool "name:\"raw\" help:\"Read/write directly to stdin/stdout/stderr instead of by line\"" + Locked bool "name:\"locked\" help:\"Require lockfile URLs to be present during installation\"" + Silent bool "name:\"silent\" help:\"Suppress all task output and mise non-error messages\"" + Timings bool "name:\"timings\" aliases:\"timing\" help:\"Shows elapsed time after each task completes\" hidden:\"\"" + Trace bool "name:\"trace\" help:\"Sets log level to trace\" hidden:\"\"" + Activate ActivateCmd "cmd:\"\" name:\"activate\" help:\"Initializes mise in the current shell session\"" + ToolAlias ToolAliasCmd "cmd:\"\" name:\"tool-alias\" help:\"Manage tool version aliases.\" aliases:\"alias,aliases\"" + Asdf AsdfCmd "cmd:\"\" name:\"asdf\" help:\"[internal] simulates asdf for plugins that call \\\"asdf\\\" internally\" hidden:\"\"" + Backends BackendsCmd "cmd:\"\" name:\"backends\" help:\"Manage backends\" aliases:\"b,backend,backend-list\"" + BinPaths BinPathsCmd "cmd:\"\" name:\"bin-paths\" help:\"List all the active runtime bin paths\"" + Bootstrap BootstrapCmd "cmd:\"\" name:\"bootstrap\" help:\"Set up a machine for the current config in one command\" aliases:\"bs\"" + Cache CacheCmd "cmd:\"\" name:\"cache\" help:\"Manage the mise cache\"" + Completion CompletionCmd "cmd:\"\" name:\"completion\" help:\"Generate shell completions\" aliases:\"complete,completions\"" + Config ConfigCmd "cmd:\"\" name:\"config\" help:\"Manage config files\" aliases:\"cfg,toml\"" + Current CurrentCmd "cmd:\"\" name:\"current\" help:\"Shows current active and installed runtime versions\" hidden:\"\"" + Deactivate DeactivateCmd "cmd:\"\" name:\"deactivate\" help:\"Disable mise for current shell session\"" + Direnv DirenvCmd "cmd:\"\" name:\"direnv\" help:\"Output direnv function to use mise inside direnv\" hidden:\"\"" + Dotfiles DotfilesCmd "cmd:\"\" name:\"dotfiles\" help:\"Manage dotfiles from `[dotfiles]` (deprecated)\" hidden:\"\"" + Doctor DoctorCmd "cmd:\"\" name:\"doctor\" help:\"Check mise installation for possible problems\" aliases:\"dr\"" + En EnCmd "cmd:\"\" name:\"en\" help:\"Starts a new shell with the mise environment built from the current configuration\"" + Env2 EnvCmd "cmd:\"\" name:\"env\" help:\"Exports env vars to activate mise a single time\" aliases:\"e\"" + Exec ExecCmd "cmd:\"\" name:\"exec\" help:\"Execute a command with tool(s) set\" aliases:\"x\"" + Fmt FmtCmd "cmd:\"\" name:\"fmt\" help:\"Formats mise.toml\"" + Generate GenerateCmd "cmd:\"\" name:\"generate\" help:\"Generate files for various tools/services\" aliases:\"gen,g\"" + Github GithubCmd "cmd:\"\" name:\"github\" help:\"GitHub related commands\" hidden:\"\"" + Global GlobalCmd "cmd:\"\" name:\"global\" help:\"Sets/gets the global tool version(s)\" hidden:\"\"" + HookEnv HookEnvCmd "cmd:\"\" name:\"hook-env\" help:\"[internal] called by activate hook to update env vars directory change\" hidden:\"\"" + HookNotFound HookNotFoundCmd "cmd:\"\" name:\"hook-not-found\" help:\"[internal] called by shell when a command is not found\" hidden:\"\"" + Implode ImplodeCmd "cmd:\"\" name:\"implode\" help:\"Removes mise CLI and all related data\"" + Edit EditCmd "cmd:\"\" name:\"edit\" help:\"Edit mise.toml interactively\"" + Install InstallCmd "cmd:\"\" name:\"install\" help:\"Install a tool version\" aliases:\"i\"" + InstallInto InstallIntoCmd "cmd:\"\" name:\"install-into\" help:\"Install a tool version to a specific path\"" + Latest LatestCmd "cmd:\"\" name:\"latest\" help:\"Gets the latest available version for a plugin\"" + Link LinkCmd "cmd:\"\" name:\"link\" help:\"Symlinks a tool version into mise\" aliases:\"ln\"" + Local LocalCmd "cmd:\"\" name:\"local\" help:\"Sets/gets tool version in local .tool-versions or mise.toml\" aliases:\"l\" hidden:\"\"" + Lock LockCmd "cmd:\"\" name:\"lock\" help:\"Update lockfile checksums and URLs for all specified platforms\"" + Ls LsCmd "cmd:\"\" name:\"ls\" help:\"List installed and active tool versions\" aliases:\"list\"" + LsRemote LsRemoteCmd "cmd:\"\" name:\"ls-remote\" help:\"List runtime versions available for install.\" aliases:\"list-all,list-remote\"" + Mcp McpCmd "cmd:\"\" name:\"mcp\" help:\"Run Model Context Protocol (MCP) server\"" + Oci OciCmd "cmd:\"\" name:\"oci\" help:\"[experimental] Build OCI container images from a mise.toml\"" + Outdated OutdatedCmd "cmd:\"\" name:\"outdated\" help:\"Shows outdated tool versions\"" + Patrons PatronsCmd "cmd:\"\" name:\"patrons\" help:\"Show the individuals supporting mise as Patron-tier members\"" + Plugins PluginsCmd "cmd:\"\" name:\"plugins\" help:\"Manage plugins\" aliases:\"p,plugin,plugin-list\"" + Deps DepsCmd "cmd:\"\" name:\"deps\" help:\"[experimental] Manage project dependencies\" aliases:\"dep,prepare\"" + Prune PruneCmd "cmd:\"\" name:\"prune\" help:\"Delete unused versions of tools\"" + Registry RegistryCmd "cmd:\"\" name:\"registry\" help:\"List available tools to install\"" + RenderHelp RenderHelpCmd "cmd:\"\" name:\"render-help\" help:\"internal command to generate markdown from help\" hidden:\"\"" + Reshim ReshimCmd "cmd:\"\" name:\"reshim\" help:\"Creates new shims based on bin paths from currently installed tools.\"" + Run RunCmd "cmd:\"\" name:\"run\" help:\"Run task(s)\" aliases:\"r\"" + Search SearchCmd "cmd:\"\" name:\"search\" help:\"Search for tools in the registry\"" + SelfUpdate SelfUpdateCmd "cmd:\"\" name:\"self-update\" help:\"Updates mise itself.\"" + Set SetCmd "cmd:\"\" name:\"set\" help:\"Set environment variables in mise.toml\" aliases:\"ev,env-vars\"" + Settings SettingsCmd "cmd:\"\" name:\"settings\" help:\"Manage settings\"" + Shell2 ShellCmd "cmd:\"\" name:\"shell\" help:\"Sets a tool version for the current session.\" aliases:\"sh\"" + ShellAlias ShellAliasCmd "cmd:\"\" name:\"shell-alias\" help:\"Manage shell aliases.\"" + Sponsors SponsorsCmd "cmd:\"\" name:\"sponsors\" help:\"Show the companies sponsoring mise and the jdx.dev open source tools\"" + Sync SyncCmd "cmd:\"\" name:\"sync\" help:\"Synchronize tools from other version managers with mise\"" + Tasks TasksCmd "cmd:\"\" name:\"tasks\" help:\"Manage tasks\" aliases:\"t,task\"" + TestTool TestToolCmd "cmd:\"\" name:\"test-tool\" help:\"Test a tool installs and executes\"" + Token TokenCmd "cmd:\"\" name:\"token\" help:\"Display git provider tokens mise will use\"" + Tool2 ToolCmd "cmd:\"\" name:\"tool\" help:\"Gets information about a tool\"" + ToolStub ToolStubCmd "cmd:\"\" name:\"tool-stub\" help:\"Execute a tool stub\"" + Trust TrustCmd "cmd:\"\" name:\"trust\" help:\"Marks a config file as trusted\"" + Uninstall UninstallCmd "cmd:\"\" name:\"uninstall\" help:\"Removes installed tool versions\"" + Unset UnsetCmd "cmd:\"\" name:\"unset\" help:\"Remove environment variable(s) from the config file.\"" + Untrust UntrustCmd "cmd:\"\" name:\"untrust\" help:\"Remove explicit trust for a config\"" + Unuse UnuseCmd "cmd:\"\" name:\"unuse\" help:\"Removes installed tool versions from mise.toml\" aliases:\"rm,remove\"" + Upgrade UpgradeCmd "cmd:\"\" name:\"upgrade\" help:\"Upgrades outdated tools\" aliases:\"up\"" + Usage UsageCmd "cmd:\"\" name:\"usage\" help:\"Generate a usage CLI spec\" hidden:\"\"" + Use UseCmd "cmd:\"\" name:\"use\" help:\"Installs a tool and adds the version to mise.toml.\" aliases:\"u\"" + Version2 VersionCmd "cmd:\"\" name:\"version\" help:\"Display the version of mise\" aliases:\"v\"" + Watch WatchCmd "cmd:\"\" name:\"watch\" help:\"Run task(s) and watch for changes to rerun it\" aliases:\"w\"" + Where WhereCmd "cmd:\"\" name:\"where\" help:\"Display the installation path for a tool\"" + Which WhichCmd "cmd:\"\" name:\"which\" help:\"Shows the path that a tool's bin points to.\"" +} + +// ActivateCmd is `activate`: Initializes mise in the current shell session +type ActivateCmd struct { + NoHookEnv bool "name:\"no-hook-env\" help:\"Do not automatically call hook-env\"" + Shims bool "name:\"shims\" help:\"Use shims instead of modifying PATH Effectively the same as:\"" + Status bool "name:\"status\" help:\"Show \\\"mise: @\\\" message when changing directories\" hidden:\"\"" + SHELLTYPE string "arg:\"\" name:\"SHELL_TYPE\" optional:\"\" help:\"Shell type to generate the script for\"" +} + +// ToolAliasCmd is `tool-alias`: Manage tool version aliases. +type ToolAliasCmd struct { + NoHeader bool "name:\"no-header\" help:\"Don't show table header\"" + Get ToolAliasGetCmd "cmd:\"\" name:\"get\" help:\"Show an alias for a tool\"" + Ls ToolAliasLsCmd "cmd:\"\" name:\"ls\" help:\"List tool version aliases Shows the aliases that can be specified. These can come from user config or from plugins in `bin/list-aliases`.\" aliases:\"list\"" + Set ToolAliasSetCmd "cmd:\"\" name:\"set\" help:\"Add/update an alias for a tool/backend\" aliases:\"add,create\"" + Unset ToolAliasUnsetCmd "cmd:\"\" name:\"unset\" help:\"Clears an alias for a tool/backend\" aliases:\"rm,remove,delete,del\"" +} + +// ToolAliasGetCmd is `tool-alias get`: Show an alias for a tool +type ToolAliasGetCmd struct { + TOOL string "arg:\"\" name:\"TOOL\" help:\"The tool to show the alias for\"" + ALIAS string "arg:\"\" name:\"ALIAS\" help:\"The alias to show\"" +} + +// ToolAliasLsCmd is `tool-alias ls`: List tool version aliases +type ToolAliasLsCmd struct { + TOOL string "arg:\"\" name:\"TOOL\" optional:\"\" help:\"Show aliases for \"" +} + +// ToolAliasSetCmd is `tool-alias set`: Add/update an alias for a tool/backend +type ToolAliasSetCmd struct { + TOOL string "arg:\"\" name:\"TOOL\" help:\"The tool/backend to set the alias for\"" + ALIAS string "arg:\"\" name:\"ALIAS\" help:\"The alias to set\"" + VALUE string "arg:\"\" name:\"VALUE\" optional:\"\" help:\"The value to set the alias to\"" +} + +// ToolAliasUnsetCmd is `tool-alias unset`: Clears an alias for a tool/backend +type ToolAliasUnsetCmd struct { + TOOL string "arg:\"\" name:\"TOOL\" help:\"The tool/backend to remove the alias from\"" + ALIAS string "arg:\"\" name:\"ALIAS\" optional:\"\" help:\"The alias to remove\"" +} + +// AsdfCmd is `asdf`: [internal] simulates asdf for plugins that call "asdf" internally +type AsdfCmd struct { + ARGS []string "arg:\"\" name:\"ARGS\" optional:\"\" help:\"all arguments\"" +} + +// BackendsCmd is `backends`: Manage backends +type BackendsCmd struct { + Ls BackendsLsCmd "cmd:\"\" name:\"ls\" help:\"List built-in backends\" aliases:\"list\"" +} + +// BackendsLsCmd is `backends ls`: List built-in backends +type BackendsLsCmd struct { +} + +// BinPathsCmd is `bin-paths`: List all the active runtime bin paths +type BinPathsCmd struct { + BinNames bool "name:\"bin-names\" help:\"Output executable names instead of bin directories\"" + Json bool "name:\"json\" short:\"J\" help:\"Output executable entries in JSON format (implies --bin-names)\"" + TOOLVERSION []string "arg:\"\" name:\"TOOL@VERSION\" optional:\"\" help:\"Tool(s) to look up e.g.: ruby@3\"" +} + +// BootstrapCmd is `bootstrap`: Set up a machine for the current config in one command +type BootstrapCmd struct { + ForceDotfiles bool "name:\"force-dotfiles\" help:\"Overwrite existing files that conflict with whole-file dotfile entries\"" + Only []string "name:\"only\" help:\"Run only one or more bootstrap parts\"" + PromptSecrets bool "name:\"prompt-secrets\" help:\"Prompt securely for missing bootstrap secret inputs\"" + Skip []string "name:\"skip\" help:\"Skip one or more bootstrap parts\"" + Update bool "name:\"update\" help:\"Refresh package manager metadata and update configured repos\"" + ApplyAccountPlan BootstrapApplyAccountPlanCmd "cmd:\"\" name:\"__apply-account-plan\" hidden:\"\"" + ApplyServicePlan BootstrapApplyServicePlanCmd "cmd:\"\" name:\"__apply-service-plan\" hidden:\"\"" + ApplyFirewallPlan BootstrapApplyFirewallPlanCmd "cmd:\"\" name:\"__apply-firewall-plan\" hidden:\"\"" + ApplySystemPlan BootstrapApplySystemPlanCmd "cmd:\"\" name:\"__apply-system-plan\" hidden:\"\"" + InspectSystemFiles BootstrapInspectSystemFilesCmd "cmd:\"\" name:\"__inspect-system-files\" hidden:\"\"" + InspectFirewallPlan BootstrapInspectFirewallPlanCmd "cmd:\"\" name:\"__inspect-firewall-plan\" hidden:\"\"" + Accounts BootstrapAccountsCmd "cmd:\"\" name:\"accounts\" help:\"Manage Linux users and groups from `[bootstrap.users]` and `[bootstrap.groups]`\"" + Compose BootstrapComposeCmd "cmd:\"\" name:\"compose\" help:\"Manage Docker Compose projects from `[bootstrap.compose]`\"" + Dotfiles BootstrapDotfilesCmd "cmd:\"\" name:\"dotfiles\" help:\"Manage dotfiles from `[dotfiles]`\"" + Files BootstrapFilesCmd "cmd:\"\" name:\"files\" help:\"Manage privileged files and directories from `[bootstrap.files]` and `[bootstrap.directories]`\"" + Firewall BootstrapFirewallCmd "cmd:\"\" name:\"firewall\" help:\"Manage the Linux host firewall from `[bootstrap.linux.firewall]`\"" + Launchd BootstrapLaunchdCmd "cmd:\"\" name:\"launchd\" help:\"Manage macOS LaunchAgents from `[bootstrap.macos.launchd.agents]`\" hidden:\"\"" + Linux BootstrapLinuxCmd "cmd:\"\" name:\"linux\" help:\"Manage Linux bootstrap config from `[bootstrap.linux]`\"" + Macos BootstrapMacosCmd "cmd:\"\" name:\"macos\" help:\"Manage macOS bootstrap config from `[bootstrap.macos]`\"" + MacosDefaults BootstrapMacosDefaultsCmd2 "cmd:\"\" name:\"macos-defaults\" help:\"Manage macOS defaults from `[bootstrap.macos.defaults]`\" hidden:\"\"" + MiseShellActivate BootstrapMiseShellActivateCmd "cmd:\"\" name:\"mise-shell-activate\" help:\"Manage mise shell activation from `[bootstrap.mise_shell_activate]`\" aliases:\"shell\"" + Packages BootstrapPackagesCmd "cmd:\"\" name:\"packages\" help:\"Manage bootstrap system packages from `[bootstrap.packages]`\"" + Plan BootstrapPlanCmd "cmd:\"\" name:\"plan\" help:\"Show the changes declarative bootstrap resources would make\"" + Plugins BootstrapPluginsCmd "cmd:\"\" name:\"plugins\" help:\"Manage package manager plugins declared in `[bootstrap.plugins]`\"" + Remote BootstrapRemoteCmd "cmd:\"\" name:\"remote\" help:\"Bootstrap one or more machines over OpenSSH\"" + Repos BootstrapReposCmd "cmd:\"\" name:\"repos\" help:\"Manage git repo checkouts from `[bootstrap.repos]`\"" + Secrets BootstrapSecretsCmd "cmd:\"\" name:\"secrets\" help:\"Inspect bootstrap secret inputs without revealing their values\"" + Services BootstrapServicesCmd "cmd:\"\" name:\"services\" help:\"Manage Linux system services from `[bootstrap.services]`\"" + Status BootstrapStatusCmd "cmd:\"\" name:\"status\" help:\"Show the aggregate bootstrap status\" aliases:\"ls\"" + Systemd BootstrapSystemdCmd "cmd:\"\" name:\"systemd\" help:\"Manage systemd user services from `[bootstrap.linux.systemd.units]`\" hidden:\"\"" + User BootstrapUserCmd "cmd:\"\" name:\"user\" help:\"Manage current-user bootstrap settings from `[bootstrap.user]`\"" +} + +// BootstrapApplyAccountPlanCmd is `bootstrap __apply-account-plan`. +type BootstrapApplyAccountPlanCmd struct { +} + +// BootstrapApplyServicePlanCmd is `bootstrap __apply-service-plan`. +type BootstrapApplyServicePlanCmd struct { +} + +// BootstrapApplyFirewallPlanCmd is `bootstrap __apply-firewall-plan`. +type BootstrapApplyFirewallPlanCmd struct { +} + +// BootstrapApplySystemPlanCmd is `bootstrap __apply-system-plan`. +type BootstrapApplySystemPlanCmd struct { +} + +// BootstrapInspectSystemFilesCmd is `bootstrap __inspect-system-files`. +type BootstrapInspectSystemFilesCmd struct { +} + +// BootstrapInspectFirewallPlanCmd is `bootstrap __inspect-firewall-plan`. +type BootstrapInspectFirewallPlanCmd struct { +} + +// BootstrapAccountsCmd is `bootstrap accounts`: Manage Linux users and groups from `[bootstrap.users]` and `[bootstrap.groups]` +type BootstrapAccountsCmd struct { + Apply BootstrapAccountsApplyCmd "cmd:\"\" name:\"apply\" help:\"Apply configured Linux users and groups\"" + Status BootstrapAccountsStatusCmd "cmd:\"\" name:\"status\" help:\"Show configured Linux user and group state\"" +} + +// BootstrapAccountsApplyCmd is `bootstrap accounts apply`: Apply configured Linux users and groups +type BootstrapAccountsApplyCmd struct { +} + +// BootstrapAccountsStatusCmd is `bootstrap accounts status`: Show configured Linux user and group state +type BootstrapAccountsStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 when any account is not converged\"" +} + +// BootstrapComposeCmd is `bootstrap compose`: Manage Docker Compose projects from `[bootstrap.compose]` +type BootstrapComposeCmd struct { + Apply BootstrapComposeApplyCmd "cmd:\"\" name:\"apply\" help:\"Apply configured Docker Compose project state\"" + Status BootstrapComposeStatusCmd "cmd:\"\" name:\"status\" help:\"Show configured Docker Compose project state\"" +} + +// BootstrapComposeApplyCmd is `bootstrap compose apply`: Apply configured Docker Compose project state +type BootstrapComposeApplyCmd struct { +} + +// BootstrapComposeStatusCmd is `bootstrap compose status`: Show configured Docker Compose project state +type BootstrapComposeStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 when any Compose project is not converged\"" +} + +// BootstrapDotfilesCmd is `bootstrap dotfiles`: Manage dotfiles from `[dotfiles]` +type BootstrapDotfilesCmd struct { + Add BootstrapDotfilesAddCmd "cmd:\"\" name:\"add\" help:\"Add or update dotfiles in `[dotfiles]`\"" + Apply BootstrapDotfilesApplyCmd "cmd:\"\" name:\"apply\" help:\"Apply dotfiles from `[dotfiles]`\"" + Edit BootstrapDotfilesEditCmd "cmd:\"\" name:\"edit\" help:\"Edit a managed dotfile source\"" + Status BootstrapDotfilesStatusCmd "cmd:\"\" name:\"status\" help:\"Show the status of dotfiles from `[dotfiles]`\"" + Unapply BootstrapDotfilesUnapplyCmd "cmd:\"\" name:\"unapply\" help:\"Remove dotfiles applied from `[dotfiles]`\"" +} + +// BootstrapDotfilesAddCmd is `bootstrap dotfiles add`: Add or update dotfiles in `[dotfiles]` +type BootstrapDotfilesAddCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Write to the global config\"" + Local bool "name:\"local\" short:\"l\" help:\"Write to the local config instead of the global config\"" + Mode string "name:\"mode\" short:\"m\" help:\"Dotfile mode to write\"" + NoApply bool "name:\"no-apply\" help:\"Add the entry without applying it\"" + Path string "name:\"path\" short:\"p\" help:\"Write to this config file or directory\"" + Source string "name:\"source\" help:\"Source path to use for a single target\"" + TARGET []string "arg:\"\" name:\"TARGET\" help:\"Targets to add or update\"" +} + +// BootstrapDotfilesApplyCmd is `bootstrap dotfiles apply`: Apply dotfiles from `[dotfiles]` +type BootstrapDotfilesApplyCmd struct { + TARGET []string "arg:\"\" name:\"TARGET\" optional:\"\" help:\"Only apply these targets\"" +} + +// BootstrapDotfilesEditCmd is `bootstrap dotfiles edit`: Edit a managed dotfile source +type BootstrapDotfilesEditCmd struct { + Apply bool "name:\"apply\" help:\"Apply this target after the editor exits\"" + Mode string "name:\"mode\" short:\"m\" help:\"Dotfile mode to use if the target is not yet managed\"" + Source string "name:\"source\" help:\"Source path to use if the target is not yet managed\"" + TARGET string "arg:\"\" name:\"TARGET\" help:\"Target to edit\"" +} + +// BootstrapDotfilesStatusCmd is `bootstrap dotfiles status`: Show the status of dotfiles from `[dotfiles]` +type BootstrapDotfilesStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured dotfiles are not in their desired state (missing, source missing, differs)\"" + TARGET []string "arg:\"\" name:\"TARGET\" optional:\"\" help:\"Only show these targets\"" +} + +// BootstrapDotfilesUnapplyCmd is `bootstrap dotfiles unapply`: Remove dotfiles applied from `[dotfiles]` +type BootstrapDotfilesUnapplyCmd struct { + TARGET []string "arg:\"\" name:\"TARGET\" optional:\"\" help:\"Only unapply these targets\"" +} + +// BootstrapFilesCmd is `bootstrap files`: Manage privileged files and directories from `[bootstrap.files]` and `[bootstrap.directories]` +type BootstrapFilesCmd struct { + Apply BootstrapFilesApplyCmd "cmd:\"\" name:\"apply\" help:\"Apply configured privileged files and directories\"" + Status BootstrapFilesStatusCmd "cmd:\"\" name:\"status\" help:\"Show configured privileged file and directory state\"" +} + +// BootstrapFilesApplyCmd is `bootstrap files apply`: Apply configured privileged files and directories +type BootstrapFilesApplyCmd struct { +} + +// BootstrapFilesStatusCmd is `bootstrap files status`: Show configured privileged file and directory state +type BootstrapFilesStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 when any resource is not converged\"" +} + +// BootstrapFirewallCmd is `bootstrap firewall`: Manage the Linux host firewall from `[bootstrap.linux.firewall]` +type BootstrapFirewallCmd struct { + Apply BootstrapFirewallApplyCmd "cmd:\"\" name:\"apply\" help:\"Apply the configured Linux host firewall\"" + Status BootstrapFirewallStatusCmd "cmd:\"\" name:\"status\" help:\"Show configured Linux host firewall state\"" +} + +// BootstrapFirewallApplyCmd is `bootstrap firewall apply`: Apply the configured Linux host firewall +type BootstrapFirewallApplyCmd struct { +} + +// BootstrapFirewallStatusCmd is `bootstrap firewall status`: Show configured Linux host firewall state +type BootstrapFirewallStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 when the firewall is not converged\"" +} + +// BootstrapLaunchdCmd is `bootstrap launchd`: Manage macOS LaunchAgents from `[bootstrap.macos.launchd.agents]` +type BootstrapLaunchdCmd struct { + Apply BootstrapLaunchdApplyCmd "cmd:\"\" name:\"apply\"" + Status BootstrapLaunchdStatusCmd "cmd:\"\" name:\"status\"" +} + +// BootstrapLaunchdApplyCmd is `bootstrap launchd apply`. +type BootstrapLaunchdApplyCmd struct { +} + +// BootstrapLaunchdStatusCmd is `bootstrap launchd status`. +type BootstrapLaunchdStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured LaunchAgent is not in its desired state\"" +} + +// BootstrapLinuxCmd is `bootstrap linux`: Manage Linux bootstrap config from `[bootstrap.linux]` +type BootstrapLinuxCmd struct { + SystemdUnits BootstrapLinuxSystemdUnitsCmd "cmd:\"\" name:\"systemd-units\" help:\"Manage systemd user services from `[bootstrap.linux.systemd.units]`\" aliases:\"systemd\"" +} + +// BootstrapLinuxSystemdUnitsCmd is `bootstrap linux systemd-units`: Manage systemd user services from `[bootstrap.linux.systemd.units]` +type BootstrapLinuxSystemdUnitsCmd struct { + Apply BootstrapLinuxSystemdUnitsApplyCmd "cmd:\"\" name:\"apply\"" + Status BootstrapLinuxSystemdUnitsStatusCmd "cmd:\"\" name:\"status\"" +} + +// BootstrapLinuxSystemdUnitsApplyCmd is `bootstrap linux systemd-units apply`. +type BootstrapLinuxSystemdUnitsApplyCmd struct { +} + +// BootstrapLinuxSystemdUnitsStatusCmd is `bootstrap linux systemd-units status`. +type BootstrapLinuxSystemdUnitsStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured systemd user service is not in its desired state\"" +} + +// BootstrapMacosCmd is `bootstrap macos`: Manage macOS bootstrap config from `[bootstrap.macos]` +type BootstrapMacosCmd struct { + Defaults BootstrapMacosDefaultsCmd "cmd:\"\" name:\"defaults\" help:\"Manage macOS defaults from `[bootstrap.macos.defaults]`\"" + LaunchdAgents BootstrapMacosLaunchdAgentsCmd "cmd:\"\" name:\"launchd-agents\" help:\"Manage macOS LaunchAgents from `[bootstrap.macos.launchd.agents]`\" aliases:\"launchd\"" +} + +// BootstrapMacosDefaultsCmd is `bootstrap macos defaults`: Manage macOS defaults from `[bootstrap.macos.defaults]` +type BootstrapMacosDefaultsCmd struct { + Apply BootstrapMacosDefaultsApplyCmd "cmd:\"\" name:\"apply\"" + Status BootstrapMacosDefaultsStatusCmd "cmd:\"\" name:\"status\"" +} + +// BootstrapMacosDefaultsApplyCmd is `bootstrap macos defaults apply`. +type BootstrapMacosDefaultsApplyCmd struct { +} + +// BootstrapMacosDefaultsStatusCmd is `bootstrap macos defaults status`. +type BootstrapMacosDefaultsStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured defaults are not in their desired state\"" +} + +// BootstrapMacosLaunchdAgentsCmd is `bootstrap macos launchd-agents`: Manage macOS LaunchAgents from `[bootstrap.macos.launchd.agents]` +type BootstrapMacosLaunchdAgentsCmd struct { + Apply BootstrapMacosLaunchdAgentsApplyCmd "cmd:\"\" name:\"apply\"" + Status BootstrapMacosLaunchdAgentsStatusCmd "cmd:\"\" name:\"status\"" +} + +// BootstrapMacosLaunchdAgentsApplyCmd is `bootstrap macos launchd-agents apply`. +type BootstrapMacosLaunchdAgentsApplyCmd struct { +} + +// BootstrapMacosLaunchdAgentsStatusCmd is `bootstrap macos launchd-agents status`. +type BootstrapMacosLaunchdAgentsStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured LaunchAgent is not in its desired state\"" +} + +// BootstrapMacosDefaultsCmd2 is `bootstrap macos-defaults`: Manage macOS defaults from `[bootstrap.macos.defaults]` +type BootstrapMacosDefaultsCmd2 struct { + Apply BootstrapMacosDefaultsCmd2ApplyCmd "cmd:\"\" name:\"apply\"" + Status BootstrapMacosDefaultsCmd2StatusCmd "cmd:\"\" name:\"status\"" +} + +// BootstrapMacosDefaultsCmd2ApplyCmd is `bootstrap macos-defaults apply`. +type BootstrapMacosDefaultsCmd2ApplyCmd struct { +} + +// BootstrapMacosDefaultsCmd2StatusCmd is `bootstrap macos-defaults status`. +type BootstrapMacosDefaultsCmd2StatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured defaults are not in their desired state\"" +} + +// BootstrapMiseShellActivateCmd is `bootstrap mise-shell-activate`: Manage mise shell activation from `[bootstrap.mise_shell_activate]` +type BootstrapMiseShellActivateCmd struct { + Apply BootstrapMiseShellActivateApplyCmd "cmd:\"\" name:\"apply\"" + Status BootstrapMiseShellActivateStatusCmd "cmd:\"\" name:\"status\"" +} + +// BootstrapMiseShellActivateApplyCmd is `bootstrap mise-shell-activate apply`. +type BootstrapMiseShellActivateApplyCmd struct { +} + +// BootstrapMiseShellActivateStatusCmd is `bootstrap mise-shell-activate status`. +type BootstrapMiseShellActivateStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured shell activation is not in its desired state\"" +} + +// BootstrapPackagesCmd is `bootstrap packages`: Manage bootstrap system packages from `[bootstrap.packages]` +type BootstrapPackagesCmd struct { + Apply BootstrapPackagesApplyCmd "cmd:\"\" name:\"apply\" help:\"Apply system packages from `[bootstrap.packages]`\" aliases:\"i,install\"" + Brew BootstrapPackagesBrewCmd "cmd:\"\" name:\"brew\" help:\"Manage Homebrew taps used by bootstrap packages\"" + Import BootstrapPackagesImportCmd "cmd:\"\" name:\"import\" help:\"Import installed system packages into `[bootstrap.packages]`\"" + Prune BootstrapPackagesPruneCmd "cmd:\"\" name:\"prune\" help:\"Prune installed system packages no longer declared in `[bootstrap.packages]`\"" + Status BootstrapPackagesStatusCmd "cmd:\"\" name:\"status\" help:\"Show the status of system packages from `[bootstrap.packages]`\" aliases:\"ls\"" + Upgrade BootstrapPackagesUpgradeCmd "cmd:\"\" name:\"upgrade\" help:\"Upgrade installed bootstrap packages from `[bootstrap.packages]`\" aliases:\"up\"" + Use BootstrapPackagesUseCmd "cmd:\"\" name:\"use\" help:\"Add bootstrap packages to [bootstrap.packages] and install them\" aliases:\"u\"" +} + +// BootstrapPackagesApplyCmd is `bootstrap packages apply`: Apply system packages from `[bootstrap.packages]` +type BootstrapPackagesApplyCmd struct { + Manager string "name:\"manager\" short:\"m\" help:\"Only install packages for this built-in or plugin manager\"" + PACKAGE []string "arg:\"\" name:\"PACKAGE\" optional:\"\" help:\"Packages in `manager:package` form; defaults to everything configured in [bootstrap.packages]\"" +} + +// BootstrapPackagesBrewCmd is `bootstrap packages brew`: Manage Homebrew taps used by bootstrap packages +type BootstrapPackagesBrewCmd struct { + Tap BootstrapPackagesBrewTapCmd "cmd:\"\" name:\"tap\" help:\"Add a Homebrew tap URL to [bootstrap.brew.taps]\"" + Untap BootstrapPackagesBrewUntapCmd "cmd:\"\" name:\"untap\" help:\"Remove Homebrew tap URLs from [bootstrap.brew.taps]\" aliases:\"remove,rm\"" +} + +// BootstrapPackagesBrewTapCmd is `bootstrap packages brew tap`: Add a Homebrew tap URL to [bootstrap.brew.taps] +type BootstrapPackagesBrewTapCmd struct { + Local bool "name:\"local\" short:\"l\" help:\"Write to the local config instead of the global config\"" + Path string "name:\"path\" short:\"p\" aliases:\"file\" help:\"Write to this config file or directory\"" + TAP string "arg:\"\" name:\"TAP\" help:\"Tap name, e.g. `owner/repo`\"" + URL string "arg:\"\" name:\"URL\" optional:\"\" help:\"GitHub URL for the tap. Defaults to https://github.com//homebrew-.git\"" +} + +// BootstrapPackagesBrewUntapCmd is `bootstrap packages brew untap`: Remove Homebrew tap URLs from [bootstrap.brew.taps] +type BootstrapPackagesBrewUntapCmd struct { + Local bool "name:\"local\" short:\"l\" help:\"Write to the local config instead of the global config\"" + Path string "name:\"path\" short:\"p\" aliases:\"file\" help:\"Write to this config file or directory\"" + TAPS []string "arg:\"\" name:\"TAPS\" help:\"Tap name(s), e.g. `owner/repo`\"" +} + +// BootstrapPackagesImportCmd is `bootstrap packages import`: Import installed system packages into `[bootstrap.packages]` +type BootstrapPackagesImportCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Write to the global config (~/.config/mise/config.toml)\"" + Manager string "name:\"manager\" short:\"m\" help:\"Only import packages for this manager. Currently only `brew` is supported.\" default:\"brew\"" + All bool "name:\"all\" help:\"Import every linked formula, including dependencies\"" + Path string "name:\"path\" short:\"p\" aliases:\"file\" help:\"Write to this config file or directory\"" +} + +// BootstrapPackagesPruneCmd is `bootstrap packages prune`: Prune installed system packages no longer declared in `[bootstrap.packages]` +type BootstrapPackagesPruneCmd struct { + Manager string "name:\"manager\" short:\"m\" help:\"Only prune packages for this manager\" default:\"brew\"" +} + +// BootstrapPackagesStatusCmd is `bootstrap packages status`: Show the status of system packages from `[bootstrap.packages]` +type BootstrapPackagesStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured packages are not in their desired state\"" +} + +// BootstrapPackagesUpgradeCmd is `bootstrap packages upgrade`: Upgrade installed bootstrap packages from `[bootstrap.packages]` +type BootstrapPackagesUpgradeCmd struct { + Manager string "name:\"manager\" short:\"m\" help:\"Only upgrade packages for this built-in or plugin manager\"" + PACKAGE []string "arg:\"\" name:\"PACKAGE\" optional:\"\" help:\"Packages in `manager:package` form; defaults to everything configured in [bootstrap.packages]\"" +} + +// BootstrapPackagesUseCmd is `bootstrap packages use`: Add bootstrap packages to [bootstrap.packages] and install them +type BootstrapPackagesUseCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Write to the global config (~/.config/mise/config.toml) instead of the local one\"" + Path string "name:\"path\" short:\"p\" aliases:\"file\" help:\"Write to this config file or directory\"" + PACKAGE []string "arg:\"\" name:\"PACKAGE\" help:\"Packages in `manager:package[@version]` form\"" +} + +// BootstrapPlanCmd is `bootstrap plan`: Show the changes declarative bootstrap resources would make +type BootstrapPlanCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output a stable machine-readable plan in JSON format\"" + DetailedExitcode bool "name:\"detailed-exitcode\" help:\"Exit 2 when the plan contains changes, 0 when unchanged, and 1 on errors\"" +} + +// BootstrapPluginsCmd is `bootstrap plugins`: Manage package manager plugins declared in `[bootstrap.plugins]` +type BootstrapPluginsCmd struct { + Apply BootstrapPluginsApplyCmd "cmd:\"\" name:\"apply\"" + Status BootstrapPluginsStatusCmd "cmd:\"\" name:\"status\"" +} + +// BootstrapPluginsApplyCmd is `bootstrap plugins apply`. +type BootstrapPluginsApplyCmd struct { +} + +// BootstrapPluginsStatusCmd is `bootstrap plugins status`. +type BootstrapPluginsStatusCmd struct { + Missing bool "name:\"missing\" help:\"Exit with code 1 if a declared plugin is missing\"" +} + +// BootstrapRemoteCmd is `bootstrap remote`: Bootstrap one or more machines over OpenSSH +type BootstrapRemoteCmd struct { + All bool "name:\"all\" help:\"Select every configured inventory host\"" + BootstrapCommand string "name:\"bootstrap-command\" help:\"Explicit remote shell command that installs mise and places it on PATH\"" + ConnectTimeout string "name:\"connect-timeout\" help:\"SSH connection timeout in seconds\" default:\"10\"" + CopyLink []string "name:\"copy-link\" help:\"Dereference one source-relative symbolic link; repeat for multiple links\"" + CopyLinks bool "name:\"copy-links\" help:\"Dereference every symbolic link in the source archive\"" + Exclude []string "name:\"exclude\" help:\"Additional archive pattern to exclude; repeat for multiple patterns\"" + FailFast bool "name:\"fail-fast\" help:\"Stop after the first failed target\"" + Host []string "name:\"host\" help:\"Ad-hoc SSH destination (`[user@]host`); repeat for multiple hosts\"" + IdentityFile string "name:\"identity-file\" short:\"i\" help:\"SSH identity file override\"" + KeepStaging bool "name:\"keep-staging\" help:\"Keep the remote staging directory for debugging\"" + MiseBin string "name:\"mise-bin\" help:\"Local mise binary to upload (escape hatch for custom architectures)\"" + Port string "name:\"port\" help:\"SSH port override\"" + RemoteEnv []string "name:\"remote-env\" help:\"Config environments to load on the remote host; repeat or delimit with commas (for example, ci,dotfiles)\"" + RemoteMise string "name:\"remote-mise\" help:\"Existing mise executable name or path; relative paths use the staged project\"" + Source string "name:\"source\" help:\"Local directory archived and sent to each target\"" + SshOption []string "name:\"ssh-option\" help:\"OpenSSH `-o` option; repeat for multiple options\"" + Tag []string "name:\"tag\" help:\"Select configured hosts with this tag; repeat to match any tag\"" + TARGET []string "arg:\"\" name:\"TARGET\" optional:\"\" help:\"Inventory host names from `[bootstrap.remote.hosts]`\"" +} + +// BootstrapReposCmd is `bootstrap repos`: Manage git repo checkouts from `[bootstrap.repos]` +type BootstrapReposCmd struct { + Apply BootstrapReposApplyCmd "cmd:\"\" name:\"apply\"" + Exec BootstrapReposExecCmd "cmd:\"\" name:\"exec\"" + Status BootstrapReposStatusCmd "cmd:\"\" name:\"status\"" + Update BootstrapReposUpdateCmd "cmd:\"\" name:\"update\"" +} + +// BootstrapReposApplyCmd is `bootstrap repos apply`. +type BootstrapReposApplyCmd struct { +} + +// BootstrapReposExecCmd is `bootstrap repos exec`. +type BootstrapReposExecCmd struct { + PATH []string "arg:\"\" name:\"PATH\" optional:\"\" help:\"Run only in matching configured or expanded paths\"" +} + +// BootstrapReposStatusCmd is `bootstrap repos status`. +type BootstrapReposStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured repo is not in its desired state\"" +} + +// BootstrapReposUpdateCmd is `bootstrap repos update`. +type BootstrapReposUpdateCmd struct { + PATH []string "arg:\"\" name:\"PATH\" optional:\"\" help:\"Update only matching configured or expanded paths\"" +} + +// BootstrapSecretsCmd is `bootstrap secrets`: Inspect bootstrap secret inputs without revealing their values +type BootstrapSecretsCmd struct { + Status BootstrapSecretsStatusCmd "cmd:\"\" name:\"status\" help:\"Show whether declared bootstrap secret inputs are available\"" +} + +// BootstrapSecretsStatusCmd is `bootstrap secrets status`: Show whether declared bootstrap secret inputs are available +type BootstrapSecretsStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if a declared secret input is unavailable\"" +} + +// BootstrapServicesCmd is `bootstrap services`: Manage Linux system services from `[bootstrap.services]` +type BootstrapServicesCmd struct { + Apply BootstrapServicesApplyCmd "cmd:\"\" name:\"apply\" help:\"Apply configured Linux system service state\"" + Status BootstrapServicesStatusCmd "cmd:\"\" name:\"status\" help:\"Show configured Linux system service state\"" +} + +// BootstrapServicesApplyCmd is `bootstrap services apply`: Apply configured Linux system service state +type BootstrapServicesApplyCmd struct { +} + +// BootstrapServicesStatusCmd is `bootstrap services status`: Show configured Linux system service state +type BootstrapServicesStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 when any service is not converged\"" +} + +// BootstrapStatusCmd is `bootstrap status`: Show the aggregate bootstrap status +type BootstrapStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured bootstrap state is not in its desired state\"" +} + +// BootstrapSystemdCmd is `bootstrap systemd`: Manage systemd user services from `[bootstrap.linux.systemd.units]` +type BootstrapSystemdCmd struct { + Apply BootstrapSystemdApplyCmd "cmd:\"\" name:\"apply\"" + Status BootstrapSystemdStatusCmd "cmd:\"\" name:\"status\"" +} + +// BootstrapSystemdApplyCmd is `bootstrap systemd apply`. +type BootstrapSystemdApplyCmd struct { +} + +// BootstrapSystemdStatusCmd is `bootstrap systemd status`. +type BootstrapSystemdStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured systemd user service is not in its desired state\"" +} + +// BootstrapUserCmd is `bootstrap user`: Manage current-user bootstrap settings from `[bootstrap.user]` +type BootstrapUserCmd struct { + Apply BootstrapUserApplyCmd "cmd:\"\" name:\"apply\"" + Status BootstrapUserStatusCmd "cmd:\"\" name:\"status\"" +} + +// BootstrapUserApplyCmd is `bootstrap user apply`. +type BootstrapUserApplyCmd struct { +} + +// BootstrapUserStatusCmd is `bootstrap user status`. +type BootstrapUserStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured user setting is not in its desired state\"" +} + +// CacheCmd is `cache`: Manage the mise cache +type CacheCmd struct { + Clear CacheClearCmd "cmd:\"\" name:\"clear\" help:\"Deletes all cache files in mise\" aliases:\"c,clean\"" + Path CachePathCmd "cmd:\"\" name:\"path\" help:\"Show the cache directory path\" aliases:\"dir\"" + Prune CachePruneCmd "cmd:\"\" name:\"prune\" help:\"Removes stale mise cache files\" aliases:\"p\"" + Task CacheTaskCmd "cmd:\"\" name:\"task\" help:\"Inspect output cache entries for a task\"" +} + +// CacheClearCmd is `cache clear`: Deletes all cache files in mise +type CacheClearCmd struct { + Outdate bool "name:\"outdate\" help:\"Mark all cache files as old\" hidden:\"\"" + Task string "name:\"task\" help:\"Clear output cache entries for a task name or pattern\"" + TOOL []string "arg:\"\" name:\"TOOL\" optional:\"\" help:\"Tool(s) to clear cache for e.g.: node, python\"" +} + +// CachePathCmd is `cache path`: Show the cache directory path +type CachePathCmd struct { +} + +// CachePruneCmd is `cache prune`: Removes stale mise cache files +type CachePruneCmd struct { + TOOL []string "arg:\"\" name:\"TOOL\" optional:\"\" help:\"Tool(s) to prune cache for e.g.: node, python\"" +} + +// CacheTaskCmd is `cache task`: Inspect output cache entries for a task +type CacheTaskCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + TASK string "arg:\"\" name:\"TASK\" help:\"Task name or pattern to inspect\"" +} + +// CompletionCmd is `completion`: Generate shell completions +type CompletionCmd struct { + IncludeBashCompletionLib bool "name:\"include-bash-completion-lib\" help:\"Include the bash completion library in the bash completion script\"" + Usage bool "name:\"usage\" help:\"Always use usage for completions. Currently, usage is the default for fish and bash but not zsh since it has a few quirks to work out first.\" hidden:\"\"" + SHELL string "arg:\"\" name:\"SHELL\" optional:\"\" help:\"Shell type to generate completions for\"" +} + +// ConfigCmd is `config`: Manage config files +type ConfigCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + NoHeader bool "name:\"no-header\" aliases:\"no-headers\" help:\"Do not print table header\"" + TrackedConfigs bool "name:\"tracked-configs\" help:\"List all tracked config files\"" + Get ConfigGetCmd "cmd:\"\" name:\"get\" help:\"Display the value of a setting in a mise.toml file\"" + Ls ConfigLsCmd "cmd:\"\" name:\"ls\" help:\"List config files currently in use\" aliases:\"list\"" + Set ConfigSetCmd "cmd:\"\" name:\"set\" help:\"Set the value of a setting in a mise.toml file\"" +} + +// ConfigGetCmd is `config get`: Display the value of a setting in a mise.toml file +type ConfigGetCmd struct { + File string "name:\"file\" aliases:\"path\" help:\"The path to the mise.toml file to read\"" + KEY string "arg:\"\" name:\"KEY\" optional:\"\" help:\"The path of the config to display\"" +} + +// ConfigLsCmd is `config ls`: List config files currently in use +type ConfigLsCmd struct { +} + +// ConfigSetCmd is `config set`: Set the value of a setting in a mise.toml file +type ConfigSetCmd struct { + File string "name:\"file\" aliases:\"path\" help:\"The path to the mise.toml file to edit\"" + Type string "name:\"type\" default:\"infer\"" + KEY string "arg:\"\" name:\"KEY\" help:\"The path of the config to display\"" + VALUE string "arg:\"\" name:\"VALUE\" optional:\"\" help:\"The value to set the key to (optional if provided as KEY=VALUE)\"" +} + +// CurrentCmd is `current`: Shows current active and installed runtime versions +type CurrentCmd struct { + PLUGIN string "arg:\"\" name:\"PLUGIN\" optional:\"\" help:\"Plugin to show versions of e.g.: ruby, node, cargo:eza, npm:prettier, etc.\"" +} + +// DeactivateCmd is `deactivate`: Disable mise for current shell session +type DeactivateCmd struct { +} + +// DirenvCmd is `direnv`: Output direnv function to use mise inside direnv +type DirenvCmd struct { + Activate DirenvActivateCmd "cmd:\"\" name:\"activate\" help:\"Output direnv function to use mise inside direnv\" hidden:\"\"" + Envrc DirenvEnvrcCmd "cmd:\"\" name:\"envrc\" help:\"[internal] This is an internal command that writes an envrc file for direnv to consume.\" hidden:\"\"" + Exec DirenvExecCmd "cmd:\"\" name:\"exec\" help:\"[internal] This is an internal command that writes an envrc file for direnv to consume.\" hidden:\"\"" +} + +// DirenvActivateCmd is `direnv activate`: Output direnv function to use mise inside direnv +type DirenvActivateCmd struct { +} + +// DirenvEnvrcCmd is `direnv envrc`: [internal] This is an internal command that writes an envrc file +type DirenvEnvrcCmd struct { +} + +// DirenvExecCmd is `direnv exec`: [internal] This is an internal command that writes an envrc file +type DirenvExecCmd struct { +} + +// DotfilesCmd is `dotfiles`: Manage dotfiles from `[dotfiles]` (deprecated) +type DotfilesCmd struct { + Add DotfilesAddCmd "cmd:\"\" name:\"add\" help:\"Add or update dotfiles in `[dotfiles]`\" hidden:\"\"" + Apply DotfilesApplyCmd "cmd:\"\" name:\"apply\" help:\"Apply dotfiles from `[dotfiles]`\" hidden:\"\"" + Edit DotfilesEditCmd "cmd:\"\" name:\"edit\" help:\"Edit a managed dotfile source\" hidden:\"\"" + Status DotfilesStatusCmd "cmd:\"\" name:\"status\" help:\"Show the status of dotfiles from `[dotfiles]`\" aliases:\"ls\" hidden:\"\"" + Unapply DotfilesUnapplyCmd "cmd:\"\" name:\"unapply\" help:\"Remove dotfiles applied from `[dotfiles]`\" hidden:\"\"" +} + +// DotfilesAddCmd is `dotfiles add`: Add or update dotfiles in `[dotfiles]` +type DotfilesAddCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Write to the global config\"" + Local bool "name:\"local\" short:\"l\" help:\"Write to the local config instead of the global config\"" + Mode string "name:\"mode\" short:\"m\" help:\"Dotfile mode to write\"" + NoApply bool "name:\"no-apply\" help:\"Add the entry without applying it\"" + Path string "name:\"path\" short:\"p\" help:\"Write to this config file or directory\"" + Source string "name:\"source\" help:\"Source path to use for a single target\"" + TARGET []string "arg:\"\" name:\"TARGET\" help:\"Targets to add or update\"" +} + +// DotfilesApplyCmd is `dotfiles apply`: Apply dotfiles from `[dotfiles]` +type DotfilesApplyCmd struct { + TARGET []string "arg:\"\" name:\"TARGET\" optional:\"\" help:\"Only apply these targets\"" +} + +// DotfilesEditCmd is `dotfiles edit`: Edit a managed dotfile source +type DotfilesEditCmd struct { + Apply bool "name:\"apply\" help:\"Apply this target after the editor exits\"" + Mode string "name:\"mode\" short:\"m\" help:\"Dotfile mode to use if the target is not yet managed\"" + Source string "name:\"source\" help:\"Source path to use if the target is not yet managed\"" + TARGET string "arg:\"\" name:\"TARGET\" help:\"Target to edit\"" +} + +// DotfilesStatusCmd is `dotfiles status`: Show the status of dotfiles from `[dotfiles]` +type DotfilesStatusCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Missing bool "name:\"missing\" help:\"Exit with code 1 if any configured dotfiles are not in their desired state (missing, source missing, differs)\"" + TARGET []string "arg:\"\" name:\"TARGET\" optional:\"\" help:\"Only show these targets\"" +} + +// DotfilesUnapplyCmd is `dotfiles unapply`: Remove dotfiles applied from `[dotfiles]` +type DotfilesUnapplyCmd struct { + TARGET []string "arg:\"\" name:\"TARGET\" optional:\"\" help:\"Only unapply these targets\"" +} + +// DoctorCmd is `doctor`: Check mise installation for possible problems +type DoctorCmd struct { + Json bool "name:\"json\" short:\"J\"" + Path DoctorPathCmd "cmd:\"\" name:\"path\" help:\"Print the current PATH entries mise is providing\" aliases:\"paths\"" +} + +// DoctorPathCmd is `doctor path`: Print the current PATH entries mise is providing +type DoctorPathCmd struct { + Full bool "name:\"full\" help:\"Print all entries including those not provided by mise\"" +} + +// EnCmd is `en`: Starts a new shell with the mise environment built from the current configuration +type EnCmd struct { + DIR string "arg:\"\" name:\"DIR\" optional:\"\" help:\"Directory to start the shell in\"" +} + +// EnvCmd is `env`: Exports env vars to activate mise a single time +type EnvCmd struct { + Dotenv bool "name:\"dotenv\" short:\"D\" help:\"Output in dotenv format\"" + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + JsonExtended bool "name:\"json-extended\" help:\"Output in JSON format with additional information (source, tool)\"" + Redacted bool "name:\"redacted\" help:\"Only show redacted environment variables\"" + Values bool "name:\"values\" help:\"Only show values of environment variables\"" + TOOLVERSION []string "arg:\"\" name:\"TOOL@VERSION\" optional:\"\" help:\"Tool(s) to use\"" +} + +// ExecCmd is `exec`: Execute a command with tool(s) set +type ExecCmd struct { + Command string "name:\"command\" help:\"Command string to execute\"" + AllowEnv []string "name:\"allow-env\" help:\"Allow specific env var through (implies --deny-env for everything else) Supports wildcards, e.g. --allow-env='MYAPP_*'\"" + AllowNet []string "name:\"allow-net\" help:\"Allow network to specific host (implies --deny-net for everything else) macOS only in v1; on Linux falls back to allowing all network\"" + AllowRead []string "name:\"allow-read\" help:\"Allow reads from specific path (implies --deny-read for everything else)\"" + AllowWrite []string "name:\"allow-write\" help:\"Allow writes to specific path (implies --deny-write for everything else)\"" + DenyAll bool "name:\"deny-all\" help:\"Block reads, writes, network, and env vars\"" + DenyEnv bool "name:\"deny-env\" help:\"Block env var inheritance (only PATH, HOME, USER, SHELL, TERM, LANG pass through)\"" + DenyNet bool "name:\"deny-net\" help:\"Block all network access\"" + DenyRead bool "name:\"deny-read\" help:\"Block filesystem reads (system libs and tool dirs still accessible)\"" + DenyWrite bool "name:\"deny-write\" help:\"Block all filesystem writes\"" + FreshEnv bool "name:\"fresh-env\" help:\"Bypass the environment cache and recompute the environment\"" + NoDeps bool "name:\"no-deps\" help:\"Skip automatic dependency preparation\"" + TOOLVERSION []string "arg:\"\" name:\"TOOL@VERSION\" optional:\"\" help:\"Tool(s) to start e.g.: node@20 python@3.10\"" +} + +// FmtCmd is `fmt`: Formats mise.toml +type FmtCmd struct { + All bool "name:\"all\" short:\"a\" help:\"Format all files from the current directory\"" + Check bool "name:\"check\" help:\"Check if the configs are formatted, no formatting is done\"" + Stdin bool "name:\"stdin\" help:\"Read config from stdin and write its formatted version into stdout\"" +} + +// GenerateCmd is `generate`: Generate files for various tools/services +type GenerateCmd struct { + Bootstrap GenerateBootstrapCmd "cmd:\"\" name:\"bootstrap\" help:\"Generate a script to download+execute mise\"" + Config GenerateConfigCmd "cmd:\"\" name:\"config\" help:\"Generate a mise.toml file\"" + Devcontainer GenerateDevcontainerCmd "cmd:\"\" name:\"devcontainer\" help:\"Generate a devcontainer to execute mise\"" + GitPreCommit GenerateGitPreCommitCmd "cmd:\"\" name:\"git-pre-commit\" help:\"Generate a git pre-commit hook\" aliases:\"pre-commit\"" + GithubAction GenerateGithubActionCmd "cmd:\"\" name:\"github-action\" help:\"Generate a GitHub Action workflow file\"" + TaskDocs GenerateTaskDocsCmd "cmd:\"\" name:\"task-docs\" help:\"Generate documentation for tasks in a project\"" + TaskStubs GenerateTaskStubsCmd "cmd:\"\" name:\"task-stubs\" help:\"Generates shims to run mise tasks\"" + ToolStub GenerateToolStubCmd "cmd:\"\" name:\"tool-stub\" help:\"Generate a tool stub for HTTP-based tools\"" +} + +// GenerateBootstrapCmd is `generate bootstrap`: Generate a script to download+execute mise +type GenerateBootstrapCmd struct { + Localize bool "name:\"localize\" short:\"l\" help:\"Sandboxes mise internal directories like MISE_DATA_DIR and MISE_CACHE_DIR into a `.mise` directory in the project\"" + Write string "name:\"write\" short:\"w\" help:\"instead of outputting the script to stdout, write to a file and make it executable\"" + LocalizedDir string "name:\"localized-dir\" help:\"Directory to put localized data into\" default:\".mise\"" + Windows bool "name:\"windows\" help:\"Also write a Windows launcher, `.cmd`\"" +} + +// GenerateConfigCmd is `generate config`: Generate a mise.toml file +type GenerateConfigCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Generate the global config file (~/.config/mise/config.toml)\"" + ToolVersions string "name:\"tool-versions\" help:\"Path to a .tool-versions file to import tools from\"" + PATH string "arg:\"\" name:\"PATH\" optional:\"\" help:\"Path to the config file to create\"" +} + +// GenerateDevcontainerCmd is `generate devcontainer`: Generate a devcontainer to execute mise +type GenerateDevcontainerCmd struct { + Image string "name:\"image\" short:\"i\" help:\"The image to use for the devcontainer\"" + MountMiseData bool "name:\"mount-mise-data\" short:\"m\" help:\"Bind the mise-data-volume to the devcontainer\"" + Name string "name:\"name\" help:\"The name of the devcontainer\"" + Write bool "name:\"write\" short:\"w\" help:\"write to .devcontainer/devcontainer.json\"" +} + +// GenerateGitPreCommitCmd is `generate git-pre-commit`: Generate a git pre-commit hook +type GenerateGitPreCommitCmd struct { + Task string "name:\"task\" help:\"The task to run when the pre-commit hook is triggered\" default:\"pre-commit\"" + Write bool "name:\"write\" short:\"w\" help:\"write to .git/hooks/pre-commit and make it executable\"" + Hook string "name:\"hook\" help:\"Which hook to generate (saves to .git/hooks/$hook)\" default:\"pre-commit\"" + MISEARG []string "arg:\"\" name:\"MISE_ARG\" optional:\"\" help:\"mise flags to embed in the generated hook, given after `--`\"" +} + +// GenerateGithubActionCmd is `generate github-action`: Generate a GitHub Action workflow file +type GenerateGithubActionCmd struct { + Task string "name:\"task\" help:\"The task to run when the workflow is triggered\" default:\"ci\"" + Write bool "name:\"write\" short:\"w\" help:\"write to .github/workflows/$name.yml\"" + Name string "name:\"name\" help:\"the name of the workflow to generate\" default:\"ci\"" +} + +// GenerateTaskDocsCmd is `generate task-docs`: Generate documentation for tasks in a project +type GenerateTaskDocsCmd struct { + Inject bool "name:\"inject\" short:\"i\" help:\"inserts the documentation into an existing file\"" + Index bool "name:\"index\" short:\"I\" help:\"write only an index of tasks, intended for use with `--multi`\"" + Multi bool "name:\"multi\" short:\"m\" help:\"render each task as a separate document, requires `--output` to be a directory\"" + Root string "name:\"root\" short:\"r\" help:\"root directory to search for tasks\"" + Style string "name:\"style\" default:\"simple\"" +} + +// GenerateTaskStubsCmd is `generate task-stubs`: Generates shims to run mise tasks +type GenerateTaskStubsCmd struct { + Dir string "name:\"dir\" short:\"d\" help:\"Directory to create task stubs inside of\" default:\"bin\"" + MiseBin string "name:\"mise-bin\" short:\"m\" help:\"Path to a mise bin to use when running the task stub.\" default:\"mise\"" +} + +// GenerateToolStubCmd is `generate tool-stub`: Generate a tool stub for HTTP-based tools +type GenerateToolStubCmd struct { + Bin string "name:\"bin\" short:\"b\" help:\"Binary path within the extracted archive\"" + Bootstrap bool "name:\"bootstrap\" help:\"Wrap stub in a bootstrap script that installs mise if not already present\"" + BootstrapVersion string "name:\"bootstrap-version\" help:\"Specify mise version for the bootstrap script\"" + ChecksumAlgorithm string "name:\"checksum-algorithm\" help:\"Checksum algorithm to use when downloading artifacts\" default:\"blake3\"" + Fetch bool "name:\"fetch\" help:\"Fetch checksums and sizes for an existing tool stub file\"" + Http string "name:\"http\" help:\"HTTP backend type to use\" default:\"http\"" + Lock bool "name:\"lock\" help:\"Resolve and embed lockfile data (exact version + platform URLs/checksums) into an existing stub file for reproducible installs without runtime API calls\"" + PlatformBin []string "name:\"platform-bin\" help:\"Platform-specific binary paths in the format platform:path\"" + PlatformUrl []string "name:\"platform-url\" help:\"Platform-specific URLs in the format platform:url or just url (auto-detect platform)\"" + SkipDownload bool "name:\"skip-download\" help:\"Skip downloading for checksum and binary path detection (faster but less informative)\"" + Url string "name:\"url\" short:\"u\" help:\"URL for downloading the tool\"" + OUTPUT string "arg:\"\" name:\"OUTPUT\" help:\"Output file path for the tool stub\"" +} + +// GithubCmd is `github`: GitHub related commands +type GithubCmd struct { + Token GithubTokenCmd "cmd:\"\" name:\"token\" help:\"Display the GitHub token mise will use for a given host\" hidden:\"\"" +} + +// GithubTokenCmd is `github token`: Display the GitHub token mise will use for a given host +type GithubTokenCmd struct { + Oauth bool "name:\"oauth\" help:\"Force native GitHub OAuth device flow instead of normal token resolution\"" + Refresh bool "name:\"refresh\" help:\"Mint a fresh OAuth token even if the cached one has not expired, via the refresh-token grant or a new device-code flow\"" + Unmask bool "name:\"unmask\" help:\"Show the full unmasked token\"" + HOST string "arg:\"\" name:\"HOST\" optional:\"\" help:\"GitHub hostname\"" +} + +// GlobalCmd is `global`: Sets/gets the global tool version(s) +type GlobalCmd struct { + Fuzzy bool "name:\"fuzzy\" help:\"Save fuzzy version to `~/.tool-versions` e.g.: `mise global --fuzzy node@20` will save `node 20` to ~/.tool-versions this is the default behavior unless MISE_ASDF_COMPAT=1\"" + Path bool "name:\"path\" help:\"Get the path of the global config file\"" + Pin bool "name:\"pin\" help:\"Save exact version to `~/.tool-versions` e.g.: `mise global --pin node@20` will save `node 20.0.0` to ~/.tool-versions\"" + Remove []string "name:\"remove\" aliases:\"rm,unset\" help:\"Remove the tool(s) from ~/.tool-versions\"" + TOOLVERSION []string "arg:\"\" name:\"TOOL@VERSION\" optional:\"\" help:\"Tool(s) to add to .tool-versions e.g.: node@20 If this is a single tool with no version, the current value of the global .tool-versions will be displayed\"" +} + +// HookEnvCmd is `hook-env`: [internal] called by activate hook to update env vars directory change +type HookEnvCmd struct { + Reason string "name:\"reason\" help:\"Reason for calling hook-env (e.g., \\\"precmd\\\", \\\"chpwd\\\")\" hidden:\"\"" + Status bool "name:\"status\" help:\"Show \\\"mise: @\\\" message when changing directories\" hidden:\"\"" +} + +// HookNotFoundCmd is `hook-not-found`: [internal] called by shell when a command is not found +type HookNotFoundCmd struct { + BIN string "arg:\"\" name:\"BIN\" help:\"Attempted bin to run\"" +} + +// ImplodeCmd is `implode`: Removes mise CLI and all related data +type ImplodeCmd struct { + Config bool "name:\"config\" help:\"Also remove config directory\"" +} + +// EditCmd is `edit`: Edit mise.toml interactively +type EditCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Edit the global config file (~/.config/mise/config.toml)\"" + ToolVersions string "name:\"tool-versions\" help:\"Path to a .tool-versions file to import tools from\"" + PATH string "arg:\"\" name:\"PATH\" optional:\"\" help:\"Path to the config file to create\"" +} + +// InstallCmd is `install`: Install a tool version +type InstallCmd struct { + DryRunCode bool "name:\"dry-run-code\" help:\"Like --dry-run but exits with code 1 if there are tools to install\"" + IncludeTaskTools bool "name:\"include-task-tools\" help:\"Also install tools required by tasks in the current scope\"" + MinimumReleaseAge string "name:\"minimum-release-age\" aliases:\"before\" help:\"Only install versions released before this date or older than this duration\"" + Monorepo bool "name:\"monorepo\" help:\"Install tools from every [monorepo].config_roots config root\" env:\"MISE_MONOREPO\"" + Shared string "name:\"shared\" help:\"Install tool(s) to a shared directory\"" + System bool "name:\"system\" help:\"Install tool(s) to the system-wide shared directory\"" + TOOLVERSION []string "arg:\"\" name:\"TOOL@VERSION\" optional:\"\" help:\"Tool(s) to install e.g.: node@20\"" +} + +// InstallIntoCmd is `install-into`: Install a tool version to a specific path +type InstallIntoCmd struct { + TOOLVERSION string "arg:\"\" name:\"TOOL@VERSION\" help:\"Tool to install e.g.: node@20\"" + PATH string "arg:\"\" name:\"PATH\" help:\"Path to install the tool into\"" +} + +// LatestCmd is `latest`: Gets the latest available version for a plugin +type LatestCmd struct { + Installed bool "name:\"installed\" short:\"i\" help:\"Show latest installed instead of available version\"" + MinimumReleaseAge string "name:\"minimum-release-age\" aliases:\"before\" help:\"Only consider versions released before this date or older than this duration\"" + TOOLVERSION string "arg:\"\" name:\"TOOL@VERSION\" help:\"Tool to get the latest version of\"" + ASDFVERSION string "arg:\"\" name:\"ASDF_VERSION\" optional:\"\" help:\"The version prefix to use when querying the latest version same as the first argument after the \\\"@\\\" used for asdf compatibility\"" +} + +// LinkCmd is `link`: Symlinks a tool version into mise +type LinkCmd struct { + TOOLVERSION string "arg:\"\" name:\"TOOL@VERSION\" help:\"Tool name and version to create a symlink for\"" + PATH string "arg:\"\" name:\"PATH\" help:\"The local path to the tool version e.g.: ~/.nvm/versions/node/v20.0.0\"" +} + +// LocalCmd is `local`: Sets/gets tool version in local .tool-versions or mise.toml +type LocalCmd struct { + Parent bool "name:\"parent\" short:\"p\" help:\"Recurse up to find a .tool-versions file rather than using the current directory only by default this command will only set the tool in the current directory (\\\"$PWD/.tool-versions\\\")\"" + Fuzzy bool "name:\"fuzzy\" help:\"Save fuzzy version to `.tool-versions` e.g.: `mise local --fuzzy node@20` will save `node 20` to .tool-versions This is the default behavior unless MISE_ASDF_COMPAT=1\"" + Path bool "name:\"path\" help:\"Get the path of the config file\"" + Pin bool "name:\"pin\" help:\"Save exact version to `.tool-versions` e.g.: `mise local --pin node@20` will save `node 20.0.0` to .tool-versions\"" + Remove []string "name:\"remove\" aliases:\"rm,unset\" help:\"Remove the tool(s) from .tool-versions\"" + TOOLVERSION []string "arg:\"\" name:\"TOOL@VERSION\" optional:\"\" help:\"Tool(s) to add to .tool-versions/mise.toml e.g.: node@20 if this is a single tool with no version, the current value of .tool-versions/mise.toml will be displayed\"" +} + +// LockCmd is `lock`: Update lockfile checksums and URLs for all specified platforms +type LockCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Target only global config lockfiles (~/.config/mise/mise.lock and system config) By default, only the active project config root is locked\"" + Platform []string "name:\"platform\" short:\"p\" help:\"Comma-separated list of platforms to target e.g.: linux-x64,macos-arm64,windows-x64 If not specified, all platforms already in lockfile will be updated\"" + Bump bool "name:\"bump\" help:\"Re-resolve fuzzy version selectors against the latest available versions\"" + Json bool "name:\"json\" help:\"Output version changes as JSON\"" + Local bool "name:\"local\" help:\"Update mise.local.lock instead of mise.lock Use for tools defined in .local.toml configs\"" + MinimumReleaseAge string "name:\"minimum-release-age\" aliases:\"before\" help:\"Only lock versions released before this age or date\"" + TOOL []string "arg:\"\" name:\"TOOL\" optional:\"\" help:\"Tool(s) to update in lockfile e.g.: node python If not specified, all configured and task-specific tools will be updated\"" +} + +// LsCmd is `ls`: List installed and active tool versions +type LsCmd struct { + Current bool "name:\"current\" help:\"Only show tool versions currently specified in a mise.toml\"" + Global bool "name:\"global\" short:\"g\" help:\"Only show tool versions currently specified in the global mise.toml\"" + Installed bool "name:\"installed\" short:\"i\" help:\"Only show tool versions that are installed (Hides tools defined in mise.toml but not installed)\"" + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Local bool "name:\"local\" short:\"l\" help:\"Only show tool versions currently specified in the local mise.toml\"" + Missing bool "name:\"missing\" short:\"m\" help:\"Display missing tool versions\"" + Offline bool "name:\"offline\" short:\"o\" help:\"Don't fetch information such as outdated versions\" hidden:\"\"" + Plugin string "name:\"plugin\" short:\"p\" hidden:\"\"" + AllSources bool "name:\"all-sources\" help:\"Display all tracked config sources for tools\"" + Monorepo bool "name:\"monorepo\" help:\"List tools from every [monorepo].config_roots config root\" env:\"MISE_MONOREPO\"" + NoHeader bool "name:\"no-header\" aliases:\"no-headers\" help:\"Don't display headers\"" + Outdated bool "name:\"outdated\" help:\"Display whether a version is outdated\"" + Prefix string "name:\"prefix\" help:\"Display versions matching this prefix\"" + Prunable bool "name:\"prunable\" help:\"List only tools that can be pruned with `mise prune`\"" + INSTALLEDTOOL []string "arg:\"\" name:\"INSTALLED_TOOL\" optional:\"\" help:\"Only show tool versions from [TOOL]\"" +} + +// LsRemoteCmd is `ls-remote`: List runtime versions available for install. +type LsRemoteCmd struct { + All bool "name:\"all\" help:\"Show all installed plugins and versions\"" + MinimumReleaseAge string "name:\"minimum-release-age\" aliases:\"before\" help:\"Only show versions released before this age or date\"" + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format (includes version metadata like created_at timestamps when available)\"" + NoVersionsHost bool "name:\"no-versions-host\" help:\"Disable checking the mise-versions host\"" + Prerelease bool "name:\"prerelease\" help:\"Include pre-release versions in the output for backends that report upstream prerelease metadata or opt in to regex-based prerelease detection. Equivalent to setting `MISE_PRERELEASES=1` or the `prereleases` setting for the duration of this command.\"" + StrictMetadata bool "name:\"strict-metadata\" help:\"Fail if release metadata fetches fail\"" + TOOLVERSION string "arg:\"\" name:\"TOOL@VERSION\" optional:\"\" help:\"Tool to get versions for\"" + PREFIX string "arg:\"\" name:\"PREFIX\" optional:\"\" help:\"The version prefix to use when querying the latest version same as the first argument after the \\\"@\\\"\"" +} + +// McpCmd is `mcp`: Run Model Context Protocol (MCP) server +type McpCmd struct { +} + +// OciCmd is `oci`: [experimental] Build OCI container images from a mise.toml +type OciCmd struct { + Build OciBuildCmd "cmd:\"\" name:\"build\" help:\"[experimental] Build an OCI image from the current mise.toml\"" + Push OciPushCmd "cmd:\"\" name:\"push\" help:\"[experimental] Build an OCI image and push it to a registry\"" + Run OciRunCmd "cmd:\"\" name:\"run\" help:\"[experimental] Build an OCI image from the current mise.toml and run a command in it\"" +} + +// OciBuildCmd is `oci build`: [experimental] Build an OCI image from the current mise.toml +type OciBuildCmd struct { + Copy []string "name:\"copy\" help:\"Copy a host file, directory, or symlink into the image (repeatable, HOST:IMAGE)\"" + From string "name:\"from\" help:\"Base image reference (overrides [oci].from and the oci.default_from setting)\"" + IncludeGlobal bool "name:\"include-global\" help:\"Also include tools from the global / system config (default: project-only)\"" + Tag string "name:\"tag\" help:\"Tag to record in the image index (the org.opencontainers.image.ref.name annotation)\"" + MountPoint string "name:\"mount-point\" help:\"Where to place tool installs inside the image (default: /mise)\"" + NoMise bool "name:\"no-mise\" help:\"Do not embed the currently-running mise binary at /usr/local/bin/mise\"" + Owner string "name:\"owner\" help:\"UID[:GID] to assign to every tar entry in generated layers\"" +} + +// OciPushCmd is `oci push`: [experimental] Build an OCI image and push it to a registry +type OciPushCmd struct { + CacheFrom string "name:\"cache-from\" help:\"Reuse unchanged tool layers from this image instead of the destination ref\"" + From string "name:\"from\" help:\"Base image for the build (ignored with --image-dir)\"" + ImageDir string "name:\"image-dir\" help:\"Push an already-built OCI image layout (skip the build step)\"" + IncludeGlobal bool "name:\"include-global\" help:\"Also include tools from the global / system config (default: project-only)\"" + MountPoint string "name:\"mount-point\" help:\"Override in-image mount point (ignored with --image-dir)\"" + NoCache bool "name:\"no-cache\" help:\"Don't reuse tool layers from the previously pushed image\"" + NoMise bool "name:\"no-mise\" help:\"Don't embed the mise binary (ignored with --image-dir)\"" + Owner string "name:\"owner\" help:\"UID[:GID] to assign to every tar entry when building (conflicts with --image-dir)\"" + UpdateIndex bool "name:\"update-index\" help:\"Maintain the tag as a multi-arch image index\"" + REF string "arg:\"\" name:\"REF\" help:\"Destination registry reference (e.g. `ghcr.io/me/devenv:latest`)\"" +} + +// OciRunCmd is `oci run`: [experimental] Build an OCI image from the current mise.toml and run a command in it +type OciRunCmd struct { + Engine string "name:\"engine\" help:\"Container engine to use (`auto`, `podman`, or `docker`)\" default:\"auto\"" + From string "name:\"from\" help:\"Base image reference for the build (ignored with --image-dir)\"" + ImageDir string "name:\"image-dir\" help:\"Use an already-built OCI image layout instead of building fresh\"" + IncludeGlobal bool "name:\"include-global\" help:\"Also include tools from the global / system config (default: project-only)\"" + Keep bool "name:\"keep\" help:\"Keep the loaded image in the engine's storage after the run\"" + MountPoint string "name:\"mount-point\" help:\"Override in-image mount point (ignored with --image-dir)\"" + NoMise bool "name:\"no-mise\" help:\"Don't embed the mise binary (ignored with --image-dir)\"" + Owner string "name:\"owner\" help:\"UID[:GID] to assign to every tar entry when building (conflicts with --image-dir)\"" + Volume []string "name:\"volume\" aliases:\"mount\" help:\"Bind-mount a host path (repeatable, `HOST:CONTAINER[:MODE]`)\"" + Interactive bool "name:\"interactive\" short:\"i\" help:\"Run interactively (pass `-i` to the engine)\"" + Tty bool "name:\"tty\" help:\"Allocate a TTY (pass `-t` to the engine)\"" + Workdir string "name:\"workdir\" short:\"w\" help:\"Working directory inside the container\"" + CMD []string "arg:\"\" name:\"CMD\" optional:\"\" help:\"Command and arguments to run inside the container (after `--`)\"" +} + +// OutdatedCmd is `outdated`: Shows outdated tool versions +type OutdatedCmd struct { + Bump bool "name:\"bump\" short:\"b\" help:\"Compares against the latest versions available, not what matches the current config\"" + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Inactive bool "name:\"inactive\" help:\"Show outdated tools including installed-but-inactive tools not present in the current config\"" + Local bool "name:\"local\" help:\"Only show outdated tools defined in local config files\"" + Monorepo bool "name:\"monorepo\" help:\"Placeholder for future monorepo outdated checks; `mise outdated --monorepo` is not implemented yet.\"" + NoHeader bool "name:\"no-header\" help:\"Don't show table header\"" + TOOLVERSION []string "arg:\"\" name:\"TOOL@VERSION\" optional:\"\" help:\"Tool(s) to show outdated versions for e.g.: node@20 python@3.10 If not specified, all tools in global and local configs will be shown\"" +} + +// PatronsCmd is `patrons`: Show the individuals supporting mise as Patron-tier members +type PatronsCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Refresh bool "name:\"refresh\" help:\"Bypass the local cache and re-fetch\"" +} + +// PluginsCmd is `plugins`: Manage plugins +type PluginsCmd struct { + All bool "name:\"all\" short:\"a\" help:\"list all available remote plugins\" hidden:\"\"" + Core bool "name:\"core\" help:\"The built-in plugins only Normally these are not shown\"" + Urls bool "name:\"urls\" short:\"u\" aliases:\"url\" help:\"Show the git url for each plugin e.g.: https://github.com/mise-plugins/vfox-cmake.git\"" + Refs bool "name:\"refs\" help:\"Show the git refs for each plugin e.g.: main 1234abc\" hidden:\"\"" + User bool "name:\"user\" help:\"List installed plugins\"" + Install PluginsInstallCmd "cmd:\"\" name:\"install\" help:\"Install a plugin\" aliases:\"i,a,add\"" + Link PluginsLinkCmd "cmd:\"\" name:\"link\" help:\"Symlinks a plugin into mise\" aliases:\"ln\"" + Ls PluginsLsCmd "cmd:\"\" name:\"ls\" help:\"List installed plugins\" aliases:\"list\"" + LsRemote PluginsLsRemoteCmd "cmd:\"\" name:\"ls-remote\" help:\"List all available remote plugins\" aliases:\"list-remote,list-all\"" + Uninstall PluginsUninstallCmd "cmd:\"\" name:\"uninstall\" help:\"Removes a plugin\" aliases:\"remove,rm\"" + Update PluginsUpdateCmd "cmd:\"\" name:\"update\" help:\"Updates a plugin to the latest version\" aliases:\"up,upgrade\"" +} + +// PluginsInstallCmd is `plugins install`: Install a plugin +type PluginsInstallCmd struct { + NEWPLUGIN string "arg:\"\" name:\"NEW_PLUGIN\" optional:\"\" help:\"The name of the plugin to install e.g.: cmake, poetry Can specify multiple plugins: `mise plugins install cmake poetry`\"" + GITURL string "arg:\"\" name:\"GIT_URL\" optional:\"\" help:\"The git url of the plugin\"" + REST []string "arg:\"\" name:\"REST\" optional:\"\"" +} + +// PluginsLinkCmd is `plugins link`: Symlinks a plugin into mise +type PluginsLinkCmd struct { + NAME string "arg:\"\" name:\"NAME\" help:\"The name of the plugin e.g.: cmake, poetry\"" + DIR string "arg:\"\" name:\"DIR\" optional:\"\" help:\"The local path to the plugin e.g.: ./vfox-cmake\"" +} + +// PluginsLsCmd is `plugins ls`: List installed plugins +type PluginsLsCmd struct { + Outdated bool "name:\"outdated\" short:\"o\" help:\"Show plugins with available updates Checks the remote for newer versions and only displays plugins that are outdated\"" +} + +// PluginsLsRemoteCmd is `plugins ls-remote`: List all available remote plugins +type PluginsLsRemoteCmd struct { + OnlyNames bool "name:\"only-names\" help:\"Only show the name of each plugin by default it will show a \\\"*\\\" next to installed plugins\"" +} + +// PluginsUninstallCmd is `plugins uninstall`: Removes a plugin +type PluginsUninstallCmd struct { + Purge bool "name:\"purge\" short:\"p\" help:\"Also remove the plugin's installs, downloads, and cache\"" + PLUGIN []string "arg:\"\" name:\"PLUGIN\" optional:\"\" help:\"Plugin(s) to remove\"" +} + +// PluginsUpdateCmd is `plugins update`: Updates a plugin to the latest version +type PluginsUpdateCmd struct { + PLUGIN []string "arg:\"\" name:\"PLUGIN\" optional:\"\" help:\"Plugin(s) to update\"" +} + +// DepsCmd is `deps`: [experimental] Manage project dependencies +type DepsCmd struct { + Explain bool "name:\"explain\" help:\"Show why a provider is fresh or stale (requires a provider argument)\"" + List bool "name:\"list\" help:\"Show what deps providers are available\"" + Monorepo bool "name:\"monorepo\" help:\"Install dependencies from every [monorepo].config_roots config root\" env:\"MISE_MONOREPO\"" + Only []string "name:\"only\" help:\"Run specific deps rule(s) only\"" + Skip []string "name:\"skip\" help:\"Skip specific deps rule(s)\"" + Add DepsAddCmd "cmd:\"\" name:\"add\" help:\"Add a dependency\"" + Install DepsInstallCmd "cmd:\"\" name:\"install\" help:\"Install all project dependencies\"" + Remove DepsRemoveCmd "cmd:\"\" name:\"remove\" help:\"Remove a dependency\"" +} + +// DepsAddCmd is `deps add`: Add a dependency +type DepsAddCmd struct { + Dev bool "name:\"dev\" short:\"D\" help:\"Add as a development dependency\"" + PACKAGES []string "arg:\"\" name:\"PACKAGES\" help:\"Package(s) to add (e.g., npm:react, npm:@types/react@19)\"" +} + +// DepsInstallCmd is `deps install`: Install all project dependencies +type DepsInstallCmd struct { + PROVIDER string "arg:\"\" name:\"PROVIDER\" optional:\"\" help:\"Provider to operate on (runs only this provider, or use with --explain)\"" +} + +// DepsRemoveCmd is `deps remove`: Remove a dependency +type DepsRemoveCmd struct { + PACKAGES []string "arg:\"\" name:\"PACKAGES\" help:\"Package(s) to remove (e.g., npm:lodash)\"" +} + +// PruneCmd is `prune`: Delete unused versions of tools +type PruneCmd struct { + Configs bool "name:\"configs\" help:\"Prune only tracked and trusted configuration links that point to nonexistent configurations\"" + DryRunCode bool "name:\"dry-run-code\" help:\"Like --dry-run but exits with code 1 if there are tools to prune\"" + Monorepo bool "name:\"monorepo\" help:\"Placeholder for future monorepo pruning; `mise prune --monorepo` is not implemented yet.\"" + Tools bool "name:\"tools\" help:\"Prune only unused versions of tools\"" + INSTALLEDTOOL []string "arg:\"\" name:\"INSTALLED_TOOL\" optional:\"\" help:\"Prune only these tools\"" +} + +// RegistryCmd is `registry`: List available tools to install +type RegistryCmd struct { + Backend string "name:\"backend\" short:\"b\" help:\"Show only tools for this backend\"" + Complete bool "name:\"complete\" help:\"Print all tools with descriptions for shell completions\" hidden:\"\"" + HideAliased bool "name:\"hide-aliased\" help:\"Hide aliased tools\"" + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Security bool "name:\"security\" help:\"Include security features for each tool's backends in JSON output.\"" + NAME string "arg:\"\" name:\"NAME\" optional:\"\" help:\"Show only the specified tool's full name\"" +} + +// RenderHelpCmd is `render-help`: internal command to generate markdown from help +type RenderHelpCmd struct { +} + +// ReshimCmd is `reshim`: Creates new shims based on bin paths from currently installed tools. +type ReshimCmd struct { + TOOL string "arg:\"\" name:\"TOOL\" optional:\"\"" + VERSION string "arg:\"\" name:\"VERSION\" optional:\"\"" +} + +// RunCmd is `run`: Run task(s) +type RunCmd struct { + Affected bool "name:\"affected\" help:\"Run matching tasks only for projects affected by Git changes\"" + AffectedBase string "name:\"affected-base\" help:\"Git base revision for --affected Defaults to MISE_AFFECTED_BASE, CI metadata, or HEAD~1\"" + AffectedExplain bool "name:\"affected-explain\" help:\"Explain why projects and tasks were selected by --affected\"" + AffectedHead string "name:\"affected-head\" help:\"Git head revision for --affected Defaults to MISE_AFFECTED_HEAD, CI metadata, or HEAD\"" + AffectedJson bool "name:\"affected-json\" help:\"Output affected projects and tasks as JSON without running tasks\"" + All bool "name:\"all\" help:\"Open the interactive selector with all tasks from the entire monorepo\"" + AllowEnv []string "name:\"allow-env\" help:\"Allow specific env var through (implies --deny-env for everything else) Supports wildcards, e.g. --allow-env='MYAPP_*'\"" + AllowNet []string "name:\"allow-net\" help:\"Allow network to specific host (implies --deny-net for everything else)\"" + AllowRead []string "name:\"allow-read\" help:\"Allow reads from specific path (implies --deny-read for everything else)\"" + AllowWrite []string "name:\"allow-write\" help:\"Allow writes to specific path (implies --deny-write for everything else)\"" + DenyAll bool "name:\"deny-all\" help:\"Block reads, writes, network, and env vars\"" + DenyEnv bool "name:\"deny-env\" help:\"Block env var inheritance (only PATH, HOME, USER, SHELL, TERM, LANG pass through)\"" + DenyNet bool "name:\"deny-net\" help:\"Block all network access\"" + DenyRead bool "name:\"deny-read\" help:\"Block filesystem reads (system libs and tool dirs still accessible)\"" + DenyWrite bool "name:\"deny-write\" help:\"Block all filesystem writes\"" + FreshEnv bool "name:\"fresh-env\" help:\"Bypass the environment cache and recompute the environment\"" + NoCache bool "name:\"no-cache\" help:\"Do not use cache on remote tasks\" env:\"MISE_TASK_REMOTE_NO_CACHE\"" + NoDeps bool "name:\"no-deps\" help:\"Skip automatic dependency preparation\"" + SkipDeps bool "name:\"skip-deps\" help:\"Run only the specified tasks skipping all dependencies\" env:\"MISE_TASK_SKIP_DEPENDS\"" + SkipTools bool "name:\"skip-tools\" help:\"Skip installing tools before running tasks\"" + TaskCache string "name:\"task-cache\" help:\"Set task output cache access for this run\" env:\"MISE_TASK_CACHE\" default:\"read-write\"" + TaskCacheExplain bool "name:\"task-cache-explain\" help:\"Explain the inputs that produced each task's output cache key\"" + TaskCacheExplainJson bool "name:\"task-cache-explain-json\" help:\"Output cache-key input details as JSON Lines without running tasks\"" + TaskCacheStats bool "name:\"task-cache-stats\" help:\"Report task output cache hits, restored bytes, and time saved\"" + Timeout string "name:\"timeout\" help:\"Timeout for the task to complete e.g.: 30s, 5m\"" +} + +// SearchCmd is `search`: Search for tools in the registry +type SearchCmd struct { + Interactive bool "name:\"interactive\" short:\"i\" help:\"Show interactive search\"" + MatchType string "name:\"match-type\" short:\"m\" help:\"Match type: equal, contains, or fuzzy\" default:\"fuzzy\"" + NoHeader bool "name:\"no-header\" aliases:\"no-headers\" help:\"Don't display headers\"" + NAME string "arg:\"\" name:\"NAME\" optional:\"\" help:\"The tool to search for\"" +} + +// SelfUpdateCmd is `self-update`: Updates mise itself. +type SelfUpdateCmd struct { + NoPlugins bool "name:\"no-plugins\" help:\"Disable auto-updating plugins\"" + VERSION string "arg:\"\" name:\"VERSION\" optional:\"\" help:\"Update to a specific version\"" +} + +// SetCmd is `set`: Set environment variables in mise.toml +type SetCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Set the environment variable in the global config file\"" + AgeEncrypt bool "name:\"age-encrypt\" help:\"[experimental] Encrypt the value with age before storing\"" + AgeKeyFile string "name:\"age-key-file\" help:\"[experimental] Age identity file for encryption\"" + AgeRecipient []string "name:\"age-recipient\" help:\"[experimental] Age recipient (x25519 public key) for encryption\"" + AgeSshRecipient []string "name:\"age-ssh-recipient\" help:\"[experimental] SSH recipient (public key or path) for age encryption\"" + Complete bool "name:\"complete\" help:\"Render completions\" hidden:\"\"" + File string "name:\"file\" aliases:\"path\" help:\"The TOML file to update\"" + NoRedact bool "name:\"no-redact\" help:\"Show raw values instead of redacting secrets\"" + Prompt bool "name:\"prompt\" help:\"Prompt for environment variable values\"" + Remove []string "name:\"remove\" aliases:\"rm,unset\" help:\"Remove the environment variable from config file\" hidden:\"\"" + Stdin bool "name:\"stdin\" help:\"Read the value from stdin (for multiline input)\"" + ENVVAR []string "arg:\"\" name:\"ENV_VAR\" optional:\"\" help:\"Environment variable(s) to set e.g.: NODE_ENV=production\"" +} + +// SettingsCmd is `settings`: Manage settings +type SettingsCmd struct { + All bool "name:\"all\" short:\"a\" help:\"List all settings\"" + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Local bool "name:\"local\" short:\"l\" help:\"Use the local config file instead of the global one\"" + Toml bool "name:\"toml\" short:\"T\" help:\"Output in TOML format\"" + Complete bool "name:\"complete\" help:\"Print all settings with descriptions for shell completions\" hidden:\"\"" + JsonExtended bool "name:\"json-extended\" help:\"Output in JSON format with sources\"" + Add SettingsAddCmd "cmd:\"\" name:\"add\" help:\"Adds a setting to the configuration file\"" + Get SettingsGetCmd "cmd:\"\" name:\"get\" help:\"Show a current setting\"" + Ls SettingsLsCmd "cmd:\"\" name:\"ls\" help:\"Show current settings\" aliases:\"list\"" + Set SettingsSetCmd "cmd:\"\" name:\"set\" help:\"Add/update a setting\" aliases:\"create\"" + Unset SettingsUnsetCmd "cmd:\"\" name:\"unset\" help:\"Clears a setting\" aliases:\"rm,remove,delete,del\"" +} + +// SettingsAddCmd is `settings add`: Adds a setting to the configuration file +type SettingsAddCmd struct { + SETTING string "arg:\"\" name:\"SETTING\" help:\"The setting to set\"" + VALUE string "arg:\"\" name:\"VALUE\" optional:\"\" help:\"The value to set (optional if provided as KEY=VALUE)\"" +} + +// SettingsGetCmd is `settings get`: Show a current setting +type SettingsGetCmd struct { + SETTING string "arg:\"\" name:\"SETTING\" help:\"The setting to show\"" +} + +// SettingsLsCmd is `settings ls`: Show current settings +type SettingsLsCmd struct { + SETTING string "arg:\"\" name:\"SETTING\" optional:\"\" help:\"Name of setting\"" +} + +// SettingsSetCmd is `settings set`: Add/update a setting +type SettingsSetCmd struct { + SETTING string "arg:\"\" name:\"SETTING\" help:\"The setting to set\"" + VALUE string "arg:\"\" name:\"VALUE\" optional:\"\" help:\"The value to set (optional if provided as KEY=VALUE)\"" +} + +// SettingsUnsetCmd is `settings unset`: Clears a setting +type SettingsUnsetCmd struct { + KEY string "arg:\"\" name:\"KEY\" help:\"The setting to remove\"" +} + +// ShellCmd is `shell`: Sets a tool version for the current session. +type ShellCmd struct { + Unset bool "name:\"unset\" short:\"u\" help:\"Removes a previously set version\"" + TOOLVERSION []string "arg:\"\" name:\"TOOL@VERSION\" help:\"Tool(s) to use\"" +} + +// ShellAliasCmd is `shell-alias`: Manage shell aliases. +type ShellAliasCmd struct { + NoHeader bool "name:\"no-header\" help:\"Don't show table header\"" + Get ShellAliasGetCmd "cmd:\"\" name:\"get\" help:\"Show the command for a shell alias\"" + Ls ShellAliasLsCmd "cmd:\"\" name:\"ls\" help:\"List shell aliases\" aliases:\"list\"" + Set ShellAliasSetCmd "cmd:\"\" name:\"set\" help:\"Add/update a shell alias\" aliases:\"add,create\"" + Unset ShellAliasUnsetCmd "cmd:\"\" name:\"unset\" help:\"Removes a shell alias\" aliases:\"rm,remove,delete,del\"" +} + +// ShellAliasGetCmd is `shell-alias get`: Show the command for a shell alias +type ShellAliasGetCmd struct { + ShellAlias string "arg:\"\" name:\"shell_alias\" help:\"The alias to show\"" +} + +// ShellAliasLsCmd is `shell-alias ls`: List shell aliases +type ShellAliasLsCmd struct { +} + +// ShellAliasSetCmd is `shell-alias set`: Add/update a shell alias +type ShellAliasSetCmd struct { + ShellAlias string "arg:\"\" name:\"shell_alias\" help:\"The alias name\"" + COMMAND string "arg:\"\" name:\"COMMAND\" optional:\"\" help:\"The command to run (optional if provided as ALIAS=COMMAND)\"" +} + +// ShellAliasUnsetCmd is `shell-alias unset`: Removes a shell alias +type ShellAliasUnsetCmd struct { + ShellAlias string "arg:\"\" name:\"shell_alias\" help:\"The alias to remove\"" +} + +// SponsorsCmd is `sponsors`: Show the companies sponsoring mise and the jdx.dev open source tools +type SponsorsCmd struct { +} + +// SyncCmd is `sync`: Synchronize tools from other version managers with mise +type SyncCmd struct { + Node SyncNodeCmd "cmd:\"\" name:\"node\" help:\"Symlinks all tool versions from an external tool into mise\"" + Python SyncPythonCmd "cmd:\"\" name:\"python\" help:\"Symlinks all tool versions from an external tool into mise\"" + Ruby SyncRubyCmd "cmd:\"\" name:\"ruby\" help:\"Symlinks all ruby tool versions from an external tool into mise\"" +} + +// SyncNodeCmd is `sync node`: Symlinks all tool versions from an external tool into mise +type SyncNodeCmd struct { + Brew bool "name:\"brew\" help:\"Get tool versions from Homebrew\"" + Nodenv bool "name:\"nodenv\" help:\"Get tool versions from nodenv\"" + Nvm bool "name:\"nvm\" help:\"Get tool versions from nvm\"" +} + +// SyncPythonCmd is `sync python`: Symlinks all tool versions from an external tool into mise +type SyncPythonCmd struct { + Pyenv bool "name:\"pyenv\" help:\"Get tool versions from pyenv\"" + Uv bool "name:\"uv\" help:\"Sync tool versions with uv (2-way sync)\"" +} + +// SyncRubyCmd is `sync ruby`: Symlinks all ruby tool versions from an external tool into mise +type SyncRubyCmd struct { + Brew bool "name:\"brew\" help:\"Get tool versions from Homebrew\" required:\"\"" +} + +// TasksCmd is `tasks`: Manage tasks +type TasksCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Only show global tasks\"" + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Local bool "name:\"local\" short:\"l\" help:\"Only show non-global tasks\"" + Extended bool "name:\"extended\" short:\"x\" help:\"Show all columns\"" + All bool "name:\"all\" help:\"Load all tasks from the entire monorepo, including sibling directories. By default, only tasks from the current directory hierarchy are loaded.\"" + Complete bool "name:\"complete\" help:\"Display tasks for usage completion\" hidden:\"\"" + Hidden bool "name:\"hidden\" help:\"Show hidden tasks\"" + NameOnly bool "name:\"name-only\" help:\"Only show task names, one per line. Useful for piping to fzf and similar tools.\"" + NoHeader bool "name:\"no-header\" aliases:\"no-headers\" help:\"Do not print table header\"" + Sort string "name:\"sort\" help:\"Sort by column. Default is name.\"" + SortOrder string "name:\"sort-order\" help:\"Sort order. Default is asc.\"" + Usage bool "name:\"usage\" hidden:\"\"" + Add TasksAddCmd "cmd:\"\" name:\"add\" help:\"Create a new task\"" + Deps TasksDepsCmd "cmd:\"\" name:\"deps\" help:\"Display a tree visualization of a dependency graph\"" + Edit TasksEditCmd "cmd:\"\" name:\"edit\" help:\"Edit a task with $EDITOR\"" + Graph TasksGraphCmd "cmd:\"\" name:\"graph\" help:\"[experimental] Inspect the workspace project graph\"" + Info TasksInfoCmd "cmd:\"\" name:\"info\" help:\"Get information about a task\"" + Ls TasksLsCmd "cmd:\"\" name:\"ls\" help:\"List available tasks to execute These may be included from the config file or from the project's .mise/tasks directory mise will merge all tasks from all parent directories into this list.\"" + Run TasksRunCmd "cmd:\"\" name:\"run\" help:\"Run task(s)\" aliases:\"r\"" + Validate TasksValidateCmd "cmd:\"\" name:\"validate\" help:\"Validate tasks for common errors and issues\"" +} + +// TasksAddCmd is `tasks add`: Create a new task +type TasksAddCmd struct { + Alias []string "name:\"alias\" short:\"a\" help:\"Other names for the task\"" + Depends []string "name:\"depends\" short:\"d\" help:\"Add dependencies to the task\"" + Dir string "name:\"dir\" short:\"D\" help:\"Run the task in a specific directory\"" + File bool "name:\"file\" help:\"Create a file task instead of a toml task\"" + Hide bool "name:\"hide\" short:\"H\" help:\"Hide the task from `mise tasks` and completions\"" + Sources []string "name:\"sources\" help:\"Glob patterns of files this task uses as input\"" + WaitFor []string "name:\"wait-for\" short:\"w\" help:\"Wait for these tasks to complete if they are to run\"" + DependsPost []string "name:\"depends-post\" help:\"Dependencies to run after the task runs\"" + Description string "name:\"description\" help:\"Description of the task\"" + Outputs []string "name:\"outputs\" help:\"Glob patterns of files this task creates, to skip if they are not modified\"" + RunWindows string "name:\"run-windows\" help:\"Command to run on windows\"" + TASK string "arg:\"\" name:\"TASK\" help:\"Tasks name to add\"" + RUN []string "arg:\"\" name:\"RUN\" optional:\"\"" +} + +// TasksDepsCmd is `tasks deps`: Display a tree visualization of a dependency graph +type TasksDepsCmd struct { + Compact bool "name:\"compact\" help:\"Collapse repeated dependencies after their first occurrence\"" + Dot bool "name:\"dot\" help:\"Display dependencies in DOT format\"" + TASKS []string "arg:\"\" name:\"TASKS\" optional:\"\" help:\"Tasks to show dependencies for Can specify multiple tasks by separating with spaces e.g.: mise tasks deps lint test check\"" +} + +// TasksEditCmd is `tasks edit`: Edit a task with $EDITOR +type TasksEditCmd struct { + Path bool "name:\"path\" short:\"p\" help:\"Display the path to the task instead of editing it\"" + TASK string "arg:\"\" name:\"TASK\" help:\"Task to edit\"" +} + +// TasksGraphCmd is `tasks graph`: [experimental] Inspect the workspace project graph +type TasksGraphCmd struct { + Explain bool "name:\"explain\" help:\"Explain provider attribution for inferred projects and tasks\"" +} + +// TasksInfoCmd is `tasks info`: Get information about a task +type TasksInfoCmd struct { + TASK string "arg:\"\" name:\"TASK\" help:\"Name of the task to get information about\"" +} + +// TasksLsCmd is `tasks ls`: List available tasks to execute +type TasksLsCmd struct { +} + +// TasksRunCmd is `tasks run`: Run task(s) +type TasksRunCmd struct { + Affected bool "name:\"affected\" help:\"Run matching tasks only for projects affected by Git changes\"" + AffectedBase string "name:\"affected-base\" help:\"Git base revision for --affected Defaults to MISE_AFFECTED_BASE, CI metadata, or HEAD~1\"" + AffectedExplain bool "name:\"affected-explain\" help:\"Explain why projects and tasks were selected by --affected\"" + AffectedHead string "name:\"affected-head\" help:\"Git head revision for --affected Defaults to MISE_AFFECTED_HEAD, CI metadata, or HEAD\"" + AffectedJson bool "name:\"affected-json\" help:\"Output affected projects and tasks as JSON without running tasks\"" + AllowEnv []string "name:\"allow-env\" help:\"Allow specific env var through (implies --deny-env for everything else) Supports wildcards, e.g. --allow-env='MYAPP_*'\"" + AllowNet []string "name:\"allow-net\" help:\"Allow network to specific host (implies --deny-net for everything else)\"" + AllowRead []string "name:\"allow-read\" help:\"Allow reads from specific path (implies --deny-read for everything else)\"" + AllowWrite []string "name:\"allow-write\" help:\"Allow writes to specific path (implies --deny-write for everything else)\"" + DenyAll bool "name:\"deny-all\" help:\"Block reads, writes, network, and env vars\"" + DenyEnv bool "name:\"deny-env\" help:\"Block env var inheritance (only PATH, HOME, USER, SHELL, TERM, LANG pass through)\"" + DenyNet bool "name:\"deny-net\" help:\"Block all network access\"" + DenyRead bool "name:\"deny-read\" help:\"Block filesystem reads (system libs and tool dirs still accessible)\"" + DenyWrite bool "name:\"deny-write\" help:\"Block all filesystem writes\"" + FreshEnv bool "name:\"fresh-env\" help:\"Bypass the environment cache and recompute the environment\"" + NoCache bool "name:\"no-cache\" help:\"Do not use cache on remote tasks\" env:\"MISE_TASK_REMOTE_NO_CACHE\"" + NoDeps bool "name:\"no-deps\" help:\"Skip automatic dependency preparation\"" + SkipDeps bool "name:\"skip-deps\" help:\"Run only the specified tasks skipping all dependencies\" env:\"MISE_TASK_SKIP_DEPENDS\"" + SkipTools bool "name:\"skip-tools\" help:\"Skip installing tools before running tasks\"" + TaskCache string "name:\"task-cache\" help:\"Set task output cache access for this run\" env:\"MISE_TASK_CACHE\" default:\"read-write\"" + TaskCacheExplain bool "name:\"task-cache-explain\" help:\"Explain the inputs that produced each task's output cache key\"" + TaskCacheExplainJson bool "name:\"task-cache-explain-json\" help:\"Output cache-key input details as JSON Lines without running tasks\"" + TaskCacheStats bool "name:\"task-cache-stats\" help:\"Report task output cache hits, restored bytes, and time saved\"" + Timeout string "name:\"timeout\" help:\"Timeout for the task to complete e.g.: 30s, 5m\"" + TASK string "arg:\"\" name:\"TASK\" optional:\"\" help:\"Tasks to run Can specify multiple tasks by separating with `:::` e.g.: mise run task1 arg1 arg2 ::: task2 arg1 arg2 Defaults to `default` when omitted\"" + ARGS []string "arg:\"\" name:\"ARGS\" optional:\"\" help:\"Arguments to pass to the tasks. Use \\\":::\\\" to separate tasks.\"" +} + +// TasksValidateCmd is `tasks validate`: Validate tasks for common errors and issues +type TasksValidateCmd struct { + ErrorsOnly bool "name:\"errors-only\" help:\"Only show errors (skip warnings)\"" + TASKS []string "arg:\"\" name:\"TASKS\" optional:\"\" help:\"Tasks to validate If not specified, validates all tasks\"" +} + +// TestToolCmd is `test-tool`: Test a tool installs and executes +type TestToolCmd struct { + All bool "name:\"all\" short:\"a\" help:\"Test every tool specified in registry/\"" + AllConfig bool "name:\"all-config\" help:\"Test all tools specified in config files\"" + IncludeNonDefined bool "name:\"include-non-defined\" help:\"Also test tools not defined in registry/, guessing how to test it\"" + TOOLS []string "arg:\"\" name:\"TOOLS\" optional:\"\" help:\"Tool(s) to test\"" +} + +// TokenCmd is `token`: Display git provider tokens mise will use +type TokenCmd struct { + Forgejo TokenForgejoCmd "cmd:\"\" name:\"forgejo\" help:\"Forgejo token\"" + Github TokenGithubCmd "cmd:\"\" name:\"github\" help:\"GitHub token\"" + Gitlab TokenGitlabCmd "cmd:\"\" name:\"gitlab\" help:\"GitLab token\"" +} + +// TokenForgejoCmd is `token forgejo`: Forgejo token +type TokenForgejoCmd struct { + Unmask bool "name:\"unmask\" help:\"Show the full unmasked token\"" + HOST string "arg:\"\" name:\"HOST\" optional:\"\" help:\"Forgejo hostname\"" +} + +// TokenGithubCmd is `token github`: GitHub token +type TokenGithubCmd struct { + Oauth bool "name:\"oauth\" help:\"Resolve only via the native GitHub OAuth source (cache, refresh, or device-code flow), bypassing other token sources\"" + Refresh bool "name:\"refresh\" help:\"Mint a fresh OAuth token even if the cached one has not expired, via the refresh-token grant or a new device-code flow. Use after changing the GitHub App's installations or permissions: cached tokens keep their original access until they expire\"" + Unmask bool "name:\"unmask\" help:\"Show the full unmasked token\"" + HOST string "arg:\"\" name:\"HOST\" optional:\"\" help:\"GitHub hostname\"" +} + +// TokenGitlabCmd is `token gitlab`: GitLab token +type TokenGitlabCmd struct { + Unmask bool "name:\"unmask\" help:\"Show the full unmasked token\"" + HOST string "arg:\"\" name:\"HOST\" optional:\"\" help:\"GitLab hostname\"" +} + +// ToolCmd is `tool`: Gets information about a tool +type ToolCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Output in JSON format\"" + Active bool "name:\"active\" help:\"Only show active versions\"" + Backend bool "name:\"backend\" help:\"Only show backend field\"" + ConfigSource bool "name:\"config-source\" help:\"Only show config source\"" + Description bool "name:\"description\" help:\"Only show description field\"" + Installed bool "name:\"installed\" help:\"Only show installed versions\"" + Requested bool "name:\"requested\" help:\"Only show requested versions\"" + ToolOptions bool "name:\"tool-options\" help:\"Only show tool options\"" + TOOL string "arg:\"\" name:\"TOOL\" help:\"Tool name to get information about\"" +} + +// ToolStubCmd is `tool-stub`: Execute a tool stub +type ToolStubCmd struct { + FILE string "arg:\"\" name:\"FILE\" help:\"Path to the TOML tool stub file to execute\"" + ARGS []string "arg:\"\" name:\"ARGS\" optional:\"\" help:\"Arguments to pass to the tool\"" +} + +// TrustCmd is `trust`: Marks a config file as trusted +type TrustCmd struct { + All bool "name:\"all\" short:\"a\" help:\"Trust all config files in the current directory, its parents, and its subdirectories\"" + Ignore bool "name:\"ignore\" help:\"Do not trust this config and ignore it in the future\"" + Show bool "name:\"show\" help:\"Show the trusted status of config files from the current directory and its parents. Does not trust or untrust any files.\"" + Untrust bool "name:\"untrust\" help:\"Remove explicit trust for this config\"" + CONFIGFILE string "arg:\"\" name:\"CONFIG_FILE\" optional:\"\" help:\"The config file whose trust status to change\"" +} + +// UninstallCmd is `uninstall`: Removes installed tool versions +type UninstallCmd struct { + All bool "name:\"all\" short:\"a\" help:\"Delete all installed versions\"" + DryRunCode bool "name:\"dry-run-code\" help:\"Like --dry-run but exits with code 1 if there are tools to uninstall\"" + INSTALLEDTOOLVERSION []string "arg:\"\" name:\"INSTALLED_TOOL@VERSION\" optional:\"\" help:\"Tool(s) to remove\"" +} + +// UnsetCmd is `unset`: Remove environment variable(s) from the config file. +type UnsetCmd struct { + File string "name:\"file\" aliases:\"path\" help:\"Specify a file to use instead of `mise.toml`\"" + Global bool "name:\"global\" short:\"g\" help:\"Use the global config file\"" + ENVKEY []string "arg:\"\" name:\"ENV_KEY\" optional:\"\" help:\"Environment variable(s) to remove e.g.: NODE_ENV\"" +} + +// UntrustCmd is `untrust`: Remove explicit trust for a config +type UntrustCmd struct { + CONFIGFILE string "arg:\"\" name:\"CONFIG_FILE\" optional:\"\" help:\"The config file to untrust\"" +} + +// UnuseCmd is `unuse`: Removes installed tool versions from mise.toml +type UnuseCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Use the global config file (`~/.config/mise/config.toml`) instead of the local one\"" + Path string "name:\"path\" short:\"p\" aliases:\"file\" help:\"Specify a path to a config file or directory\"" + NoPrune bool "name:\"no-prune\" help:\"Do not also prune the installed version\"" + INSTALLEDTOOLVERSION []string "arg:\"\" name:\"INSTALLED_TOOL@VERSION\" help:\"Tool(s) to remove\"" +} + +// UpgradeCmd is `upgrade`: Upgrades outdated tools +type UpgradeCmd struct { + Bump bool "name:\"bump\" short:\"b\" help:\"Upgrades to the latest version available, bumping the version in mise.toml\"" + Interactive bool "name:\"interactive\" short:\"i\" help:\"Display multiselect menu to choose which tools to upgrade\"" + Exclude []string "name:\"exclude\" short:\"x\" help:\"Tool(s) to exclude from upgrading e.g.: go python\"" + DryRunCode bool "name:\"dry-run-code\" help:\"Like --dry-run but exits with code 1 if there are outdated tools\"" + Inactive bool "name:\"inactive\" help:\"Upgrade all tools, including installed-but-inactive tools not present in the current config\"" + Local bool "name:\"local\" help:\"Only upgrade tools defined in local config files\"" + MinimumReleaseAge string "name:\"minimum-release-age\" aliases:\"before\" help:\"Only upgrade to versions released before this date or older than this duration\"" + Monorepo bool "name:\"monorepo\" help:\"Placeholder for future monorepo upgrades; `mise upgrade --monorepo` is not implemented yet.\"" + NoPrune bool "name:\"no-prune\" help:\"Do not uninstall the versions that were upgraded away from\"" + Prune bool "name:\"prune\" help:\"Uninstall the versions that were upgraded away from\"" + INSTALLEDTOOLVERSION []string "arg:\"\" name:\"INSTALLED_TOOL@VERSION\" optional:\"\" help:\"Tool(s) to upgrade e.g.: node@20 python@3.10 If not specified, all current tools will be upgraded\"" +} + +// UsageCmd is `usage`: Generate a usage CLI spec +type UsageCmd struct { +} + +// UseCmd is `use`: Installs a tool and adds the version to mise.toml. +type UseCmd struct { + Global bool "name:\"global\" short:\"g\" help:\"Use the global config file (`~/.config/mise/config.toml`) instead of the local one\"" + Path string "name:\"path\" short:\"p\" help:\"Specify a path to a config file or directory\"" + DryRunCode bool "name:\"dry-run-code\" help:\"Like --dry-run but exits with code 1 if there are changes to make\"" + Fuzzy bool "name:\"fuzzy\" help:\"Save fuzzy version to config file\"" + MinimumReleaseAge string "name:\"minimum-release-age\" aliases:\"before\" help:\"Only install versions released before this date or older than this duration\"" + Pin bool "name:\"pin\" help:\"Save the resolved concrete version to the config file\"" + Remove []string "name:\"remove\" aliases:\"rm,unset\" help:\"Remove the tool(s) from config file\"" + TOOLVERSION []string "arg:\"\" name:\"TOOL@VERSION\" optional:\"\" help:\"Tool(s) to add to config file\"" +} + +// VersionCmd is `version`: Display the version of mise +type VersionCmd struct { + Json bool "name:\"json\" short:\"J\" help:\"Print the version information in JSON format\"" +} + +// WatchCmd is `watch`: Run task(s) and watch for changes to rerun it +type WatchCmd struct { + TaskFlag []string "name:\"task-flag\" help:\"Tasks to run\" hidden:\"\"" + Glob []string "name:\"glob\" short:\"g\" help:\"Files to watch Defaults to sources from the task(s)\" hidden:\"\"" + SkipDeps bool "name:\"skip-deps\" help:\"Run only the specified tasks skipping all dependencies\"" + Watch []string "name:\"watch\" short:\"w\" help:\"Watch a specific file or directory\"" + WatchNonRecursive []string "name:\"watch-non-recursive\" short:\"W\" help:\"Watch a specific directory, non-recursively\"" + WatchFile string "name:\"watch-file\" short:\"F\" help:\"Watch files and directories from a file\"" + Clear string "name:\"clear\" help:\"Clear screen before running command\"" + OnBusyUpdate string "name:\"on-busy-update\" short:\"o\" help:\"What to do when receiving events while the command is running\" default:\"do-nothing\"" + Restart bool "name:\"restart\" short:\"r\" help:\"Restart the process if it's still running\"" + Signal string "name:\"signal\" help:\"Send a signal to the process when it's still running\"" + StopSignal string "name:\"stop-signal\" help:\"Signal to send to stop the command\"" + StopTimeout string "name:\"stop-timeout\" help:\"Time to wait for the command to exit gracefully\" default:\"10s\"" + MapSignal []string "name:\"map-signal\" help:\"Translate signals from the OS to signals to send to the command\"" + Debounce string "name:\"debounce\" short:\"d\" help:\"Time to wait for new events before taking action\" default:\"50ms\"" + StdinQuit bool "name:\"stdin-quit\" help:\"Exit when stdin closes\"" + NoVcsIgnore bool "name:\"no-vcs-ignore\" help:\"Don't load gitignores\"" + NoProjectIgnore bool "name:\"no-project-ignore\" help:\"Don't load project-local ignores\"" + NoGlobalIgnore bool "name:\"no-global-ignore\" help:\"Don't load global ignores\"" + NoDefaultIgnore bool "name:\"no-default-ignore\" help:\"Don't use internal default ignores\"" + NoDiscoverIgnore bool "name:\"no-discover-ignore\" help:\"Don't discover ignore files at all\"" + IgnoreNothing bool "name:\"ignore-nothing\" help:\"Don't ignore anything at all\"" + Postpone bool "name:\"postpone\" short:\"p\" help:\"Wait until first change before running command\"" + DelayRun string "name:\"delay-run\" help:\"Sleep before running the command\"" + Poll string "name:\"poll\" aliases:\"force-poll\" help:\"Poll for filesystem changes\"" + EmitEventsTo string "name:\"emit-events-to\" help:\"Configure event emission\" default:\"none\"" + OnlyEmitEvents bool "name:\"only-emit-events\" help:\"Only emit events to stdout, run no commands.\"" + WrapProcess string "name:\"wrap-process\" help:\"Configure how the process is wrapped\"" + Notify bool "name:\"notify\" short:\"N\" help:\"Alert when commands start and end\"" + Color string "name:\"color\" aliases:\"colour\" help:\"When to use terminal colours\" default:\"auto\"" + Bell bool "name:\"bell\" help:\"Ring the terminal bell on command completion\"" + ProjectOrigin string "name:\"project-origin\" help:\"Set the project origin\"" + Workdir string "name:\"workdir\" help:\"Set the working directory\"" + Exts []string "name:\"exts\" short:\"e\" help:\"Filename extensions to filter to\"" + Filter []string "name:\"filter\" help:\"Filename patterns to filter to\"" + FilterFile []string "name:\"filter-file\" help:\"Files to load filters from\" env:\"WATCHEXEC_FILTER_FILES\"" + FilterProg []string "name:\"filter-prog\" short:\"J\" help:\"[experimental] Filter programs.\"" + Ignore []string "name:\"ignore\" short:\"i\" help:\"Filename patterns to filter out\"" + IgnoreFile []string "name:\"ignore-file\" help:\"Files to load ignores from\" env:\"WATCHEXEC_IGNORE_FILES\"" + FsEvents []string "name:\"fs-events\" help:\"Filesystem events to filter to\"" + NoMeta bool "name:\"no-meta\" help:\"Don't emit fs events for metadata changes\"" + PrintEvents bool "name:\"print-events\" help:\"Print events that trigger actions\"" + Manual bool "name:\"manual\" help:\"Show the manual page\"" + TASK string "arg:\"\" name:\"TASK\" optional:\"\" help:\"Tasks to run Can specify multiple tasks by separating with `:::` e.g.: `mise run task1 arg1 arg2 ::: task2 arg1 arg2` Defaults to `default`\"" + ARGS []string "arg:\"\" name:\"ARGS\" optional:\"\" help:\"Task and arguments to run\"" +} + +// WhereCmd is `where`: Display the installation path for a tool +type WhereCmd struct { + TOOLVERSION string "arg:\"\" name:\"TOOL@VERSION\" help:\"Tool(s) to look up e.g.: ruby@3 if \\\"@\\\" is specified, it will show the latest installed version that matches the prefix otherwise, it will show the current, active installed version\"" + ASDFVERSION string "arg:\"\" name:\"ASDF_VERSION\" optional:\"\" help:\"the version prefix to use when querying the latest version same as the first argument after the \\\"@\\\" used for asdf compatibility\"" +} + +// WhichCmd is `which`: Shows the path that a tool's bin points to. +type WhichCmd struct { + Complete bool "name:\"complete\" hidden:\"\"" + Plugin bool "name:\"plugin\" help:\"Show the plugin name instead of the path\"" + BINNAME string "arg:\"\" name:\"BIN_NAME\" optional:\"\" help:\"The bin to look up\"" +} + +// Resolve builds kong's model of the CLI by reflecting over the structs above and +// parses argv against it, reporting whether a subcommand was reached. +// +// Both halves are the measurement: kong has no way to answer a command line +// without first walking the whole grammar. +func Resolve(argv []string) bool { + var target Cli + parser, err := kong.New(&target, kong.Name("mise"), + kong.Exit(func(int) {}), kong.Writers(io.Discard, io.Discard)) + if err != nil { + return false + } + ctx, err := parser.Parse(argv) + if err != nil { + return false + } + return ctx.Selected() != nil +} diff --git a/benches/go/mise-urfave/urfave.go b/benches/go/mise-urfave/urfave.go new file mode 100644 index 000000000..53eb34504 --- /dev/null +++ b/benches/go/mise-urfave/urfave.go @@ -0,0 +1,256 @@ +// Code generated by `xtask gen-shadow benches/mise.usage.kdl urfave`. DO NOT EDIT. +// +// mise declared in urfave/cli v3, from the same spec the usage tables are +// generated from, so that the rows of `go/README.md`'s tables describe the same +// CLI. Regenerate with `mise run gen-shadow` rather than editing. +// +// The tree is built inside `Resolve` on purpose: that is what an urfave program +// does on every process start, and it is the cost the comparison is about. +package miseurfave + +import ( + "context" + "io" + + "github.com/urfave/cli/v3" +) + +// build declares the whole CLI, as an urfave program's `main` would. +// +// `hit` is set by the action of whichever subcommand the parse arrives at, which is +// how this shadow answers the same question the others do — was a subcommand +// reached — without an action that does any work. +func build(hit *bool) *cli.Command { + noop := func(context.Context, *cli.Command) error { return nil } + reached := func(context.Context, *cli.Command) error { *hit = true; return nil } + cmd1 := &cli.Command{Name: "activate", Usage: "Initializes mise in the current shell session", Description: "Initializes mise in the current shell session\n\nThis should go into your shell's rc file or login shell. Otherwise, it will only take effect in the current session. (e.g. ~/.zshrc, ~/.zprofile, ~/.zshenv, ~/.bashrc, ~/.bash_profile, ~/.profile, ~/.config/fish/config.fish, or $PROFILE for powershell)\n\nTypically, this can be added with something like the following:\n\n echo 'eval \"$(mise activate zsh)\"' >> ~/.zshrc\n\nHowever, this requires that \"mise\" is in your PATH. If it is not, you need to specify the full path like this:\n\n echo 'eval \"$(/path/to/mise activate zsh)\"' >> ~/.zshrc\n\nCustomize status output with `status` settings.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "quiet", Aliases: []string{"q"}, Usage: "Suppress non-error messages", Local: true}, &cli.StringFlag{Name: "shell", Aliases: []string{"s"}, Usage: "Shell type to generate the script for", Hidden: true, Local: true}, &cli.BoolFlag{Name: "no-hook-env", Usage: "Do not automatically call hook-env", Local: true}, &cli.BoolFlag{Name: "shims", Usage: "Use shims instead of modifying PATH\nEffectively the same as:", Local: true}, &cli.BoolFlag{Name: "status", Usage: "Show \"mise: @\" message when changing directories", Hidden: true, Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "SHELL_TYPE"}}} + cmd2 := &cli.Command{Name: "get", Usage: "Show an alias for a tool", Description: "Show an alias for a tool\n\nThis is the contents of a tool_alias. entry in ~/.config/mise/config.toml", Action: reached, Arguments: []cli.Argument{&cli.StringArg{Name: "TOOL"}, &cli.StringArg{Name: "ALIAS"}}} + cmd3 := &cli.Command{Name: "ls", Usage: "List tool version aliases\nShows the aliases that can be specified.\nThese can come from user config or from plugins in `bin/list-aliases`.", Description: "List tool version aliases\nShows the aliases that can be specified.\nThese can come from user config or from plugins in `bin/list-aliases`.\n\nFor user config, aliases are defined like the following in `~/.config/mise/config.toml`:\n\n [tool_alias.node.versions]\n lts = \"22.0.0\"", Aliases: []string{"list"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "no-header", Usage: "Don't show table header", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TOOL"}}} + cmd4 := &cli.Command{Name: "set", Usage: "Add/update an alias for a tool/backend", Description: "Add/update an alias for a tool/backend\n\nThis modifies the contents of ~/.config/mise/config.toml", Aliases: []string{"add", "create"}, Action: reached, Arguments: []cli.Argument{&cli.StringArg{Name: "TOOL"}, &cli.StringArg{Name: "ALIAS"}, &cli.StringArg{Name: "VALUE"}}} + cmd5 := &cli.Command{Name: "unset", Usage: "Clears an alias for a tool/backend", Description: "Clears an alias for a tool/backend\n\nThis modifies the contents of ~/.config/mise/config.toml", Aliases: []string{"rm", "remove", "delete", "del"}, Action: reached, Arguments: []cli.Argument{&cli.StringArg{Name: "TOOL"}, &cli.StringArg{Name: "ALIAS"}}} + cmd6 := &cli.Command{Name: "tool-alias", Usage: "Manage tool version aliases.", Aliases: []string{"alias", "aliases"}, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "tool", Aliases: []string{"p", "plugin"}, Usage: "Filter aliases by tool", Local: true}, &cli.BoolFlag{Name: "no-header", Usage: "Don't show table header", Local: true}}, Commands: []*cli.Command{cmd2, cmd3, cmd4, cmd5}} + cmd7 := &cli.Command{Name: "asdf", Usage: "[internal] simulates asdf for plugins that call \"asdf\" internally", Hidden: true, Action: reached, Arguments: []cli.Argument{&cli.StringArgs{Name: "ARGS", Min: 0, Max: -1}}} + cmd8 := &cli.Command{Name: "ls", Usage: "List built-in backends", Aliases: []string{"list"}, Action: reached} + cmd9 := &cli.Command{Name: "backends", Usage: "Manage backends", Aliases: []string{"b", "backend", "backend-list"}, Action: reached, Commands: []*cli.Command{cmd8}} + cmd10 := &cli.Command{Name: "bin-paths", Usage: "List all the active runtime bin paths", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "bin-names", Usage: "Output executable names instead of bin directories", Local: true}, &cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output executable entries in JSON format (implies --bin-names)", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL@VERSION", Min: 0, Max: -1}}} + cmd11 := &cli.Command{Name: "__apply-account-plan", Hidden: true, Action: reached} + cmd12 := &cli.Command{Name: "__apply-service-plan", Hidden: true, Action: reached} + cmd13 := &cli.Command{Name: "__apply-firewall-plan", Hidden: true, Action: reached} + cmd14 := &cli.Command{Name: "__apply-system-plan", Hidden: true, Action: reached} + cmd15 := &cli.Command{Name: "__inspect-system-files", Hidden: true, Action: reached} + cmd16 := &cli.Command{Name: "__inspect-firewall-plan", Hidden: true, Action: reached} + cmd17 := &cli.Command{Name: "apply", Usage: "Apply configured Linux users and groups", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print what would change without changing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd18 := &cli.Command{Name: "status", Usage: "Show configured Linux user and group state", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 when any account is not converged", Local: true}}} + cmd19 := &cli.Command{Name: "accounts", Usage: "Manage Linux users and groups from `[bootstrap.users]` and `[bootstrap.groups]`", Action: reached, Commands: []*cli.Command{cmd17, cmd18}} + cmd20 := &cli.Command{Name: "apply", Usage: "Apply configured Docker Compose project state", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print what would change without changing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd21 := &cli.Command{Name: "status", Usage: "Show configured Docker Compose project state", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 when any Compose project is not converged", Local: true}}} + cmd22 := &cli.Command{Name: "compose", Usage: "Manage Docker Compose projects from `[bootstrap.compose]`", Action: reached, Commands: []*cli.Command{cmd20, cmd21}} + cmd23 := &cli.Command{Name: "add", Usage: "Add or update dotfiles in `[dotfiles]`", Description: "Add or update dotfiles in `[dotfiles]`\n\nIf the target is already managed, this updates its source from the live target. Otherwise it creates a `[dotfiles]` entry and seeds the source under `dotfiles.root` unless `--source` is provided.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Overwrite existing sources without prompting", Local: true}, &cli.BoolFlag{Name: "global", Aliases: []string{"g"}, Usage: "Write to the global config", Local: true}, &cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Write to the local config instead of the global config", Local: true}, &cli.StringFlag{Name: "mode", Aliases: []string{"m"}, Usage: "Dotfile mode to write", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the config/source updates without writing anything", Local: true}, &cli.BoolFlag{Name: "no-apply", Usage: "Add the entry without applying it", Local: true}, &cli.StringFlag{Name: "path", Aliases: []string{"p"}, Usage: "Write to this config file or directory", Local: true}, &cli.StringFlag{Name: "source", Aliases: []string{"s"}, Usage: "Source path to use for a single target", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TARGET", Min: 1, Max: -1}}} + cmd24 := &cli.Command{Name: "apply", Usage: "Apply dotfiles from `[dotfiles]`", Description: "Apply dotfiles from `[dotfiles]`\n\nApplies configured whole-file entries and edits that aren't in their desired state. Whole-file entries may symlink, copy, or render templates. Edit entries manage a marker-delimited block or a single line in a file mise doesn't otherwise own.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Overwrite existing files that conflict with whole-file dotfile entries", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the actions that would run without writing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TARGET", Min: 0, Max: -1}}} + cmd25 := &cli.Command{Name: "edit", Usage: "Edit a managed dotfile source", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "apply", Usage: "Apply this target after the editor exits", Local: true}, &cli.StringFlag{Name: "mode", Aliases: []string{"m"}, Usage: "Dotfile mode to use if the target is not yet managed", Local: true}, &cli.StringFlag{Name: "source", Aliases: []string{"s"}, Usage: "Source path to use if the target is not yet managed", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt when adding an unmanaged target", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TARGET"}}} + cmd26 := &cli.Command{Name: "status", Usage: "Show the status of dotfiles from `[dotfiles]`", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured dotfiles are not in their desired\nstate (missing, source missing, differs)", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TARGET", Min: 0, Max: -1}}} + cmd27 := &cli.Command{Name: "unapply", Usage: "Remove dotfiles applied from `[dotfiles]`", Description: "Remove dotfiles applied from `[dotfiles]`\n\nRemoves configured whole-file entries and edits while preserving files mise cannot identify as managed. Modified copies, templates, and plain-line edits require `--force`.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Remove modified or otherwise ambiguous managed files and lines", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the actions that would run without writing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TARGET", Min: 0, Max: -1}}} + cmd28 := &cli.Command{Name: "dotfiles", Usage: "Manage dotfiles from `[dotfiles]`", Action: reached, Commands: []*cli.Command{cmd23, cmd24, cmd25, cmd26, cmd27}} + cmd29 := &cli.Command{Name: "apply", Usage: "Apply configured privileged files and directories", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print what would change without changing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}, &cli.BoolFlag{Name: "prompt-secrets", Usage: "Prompt securely for missing bootstrap secret inputs", Local: true}}} + cmd30 := &cli.Command{Name: "status", Usage: "Show configured privileged file and directory state", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 when any resource is not converged", Local: true}, &cli.BoolFlag{Name: "prompt-secrets", Usage: "Prompt securely for missing bootstrap secret inputs", Local: true}}} + cmd31 := &cli.Command{Name: "files", Usage: "Manage privileged files and directories from `[bootstrap.files]` and `[bootstrap.directories]`", Action: reached, Commands: []*cli.Command{cmd29, cmd30}} + cmd32 := &cli.Command{Name: "apply", Usage: "Apply the configured Linux host firewall", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print what would change without changing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd33 := &cli.Command{Name: "status", Usage: "Show configured Linux host firewall state", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 when the firewall is not converged", Local: true}}} + cmd34 := &cli.Command{Name: "firewall", Usage: "Manage the Linux host firewall from `[bootstrap.linux.firewall]`", Action: reached, Commands: []*cli.Command{cmd32, cmd33}} + cmd35 := &cli.Command{Name: "apply", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd36 := &cli.Command{Name: "status", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured LaunchAgent is not in its desired state", Local: true}}} + cmd37 := &cli.Command{Name: "launchd", Usage: "Manage macOS LaunchAgents from `[bootstrap.macos.launchd.agents]`", Hidden: true, Action: reached, Commands: []*cli.Command{cmd35, cmd36}} + cmd38 := &cli.Command{Name: "apply", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd39 := &cli.Command{Name: "status", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured systemd user service is not in its desired state", Local: true}}} + cmd40 := &cli.Command{Name: "systemd-units", Usage: "Manage systemd user services from `[bootstrap.linux.systemd.units]`", Aliases: []string{"systemd"}, Action: reached, Commands: []*cli.Command{cmd38, cmd39}} + cmd41 := &cli.Command{Name: "linux", Usage: "Manage Linux bootstrap config from `[bootstrap.linux]`", Action: reached, Commands: []*cli.Command{cmd40}} + cmd42 := &cli.Command{Name: "apply", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd43 := &cli.Command{Name: "status", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured defaults are not in their desired state", Local: true}}} + cmd44 := &cli.Command{Name: "defaults", Usage: "Manage macOS defaults from `[bootstrap.macos.defaults]`", Action: reached, Commands: []*cli.Command{cmd42, cmd43}} + cmd45 := &cli.Command{Name: "apply", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd46 := &cli.Command{Name: "status", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured LaunchAgent is not in its desired state", Local: true}}} + cmd47 := &cli.Command{Name: "launchd-agents", Usage: "Manage macOS LaunchAgents from `[bootstrap.macos.launchd.agents]`", Aliases: []string{"launchd"}, Action: reached, Commands: []*cli.Command{cmd45, cmd46}} + cmd48 := &cli.Command{Name: "macos", Usage: "Manage macOS bootstrap config from `[bootstrap.macos]`", Action: reached, Commands: []*cli.Command{cmd44, cmd47}} + cmd49 := &cli.Command{Name: "apply", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd50 := &cli.Command{Name: "status", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured defaults are not in their desired state", Local: true}}} + cmd51 := &cli.Command{Name: "macos-defaults", Usage: "Manage macOS defaults from `[bootstrap.macos.defaults]`", Hidden: true, Action: reached, Commands: []*cli.Command{cmd49, cmd50}} + cmd52 := &cli.Command{Name: "apply", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the actions that would run without writing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd53 := &cli.Command{Name: "status", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured shell activation is not in its desired state", Local: true}}} + cmd54 := &cli.Command{Name: "mise-shell-activate", Usage: "Manage mise shell activation from `[bootstrap.mise_shell_activate]`", Aliases: []string{"shell"}, Action: reached, Commands: []*cli.Command{cmd52, cmd53}} + cmd55 := &cli.Command{Name: "apply", Usage: "Apply system packages from `[bootstrap.packages]`", Description: "Apply system packages from `[bootstrap.packages]`\n\nChecks which configured packages are missing and installs them with the system package manager. Built-in system managers may elevate with sudo when not running as root (see `system_packages.sudo`); package plugins never do.\n\nPackages can also be given explicitly in `manager:package` form (e.g. `apk:zlib-dev`, `apt:curl`, `brew:jq`); they are installed whether or not they appear in the config. Explicit packages and `--manager` scope the run to packages only. `install` is accepted as an alias for this command.", Aliases: []string{"i", "install"}, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "manager", Aliases: []string{"m"}, Usage: "Only install packages for this built-in or plugin manager", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}, &cli.BoolFlag{Name: "update", Usage: "Refresh package manager metadata first (apk: `--update-cache`, apt: `apt-get update`)", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "PACKAGE", Min: 0, Max: -1}}} + cmd56 := &cli.Command{Name: "tap", Usage: "Add a Homebrew tap URL to [bootstrap.brew.taps]", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Write to the local config instead of the global config", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the config change without writing it", Local: true}, &cli.StringFlag{Name: "path", Aliases: []string{"p", "file"}, Usage: "Write to this config file or directory", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TAP"}, &cli.StringArg{Name: "URL"}}} + cmd57 := &cli.Command{Name: "untap", Usage: "Remove Homebrew tap URLs from [bootstrap.brew.taps]", Aliases: []string{"remove", "rm"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Write to the local config instead of the global config", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the config change without writing it", Local: true}, &cli.StringFlag{Name: "path", Aliases: []string{"p", "file"}, Usage: "Write to this config file or directory", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TAPS", Min: 1, Max: -1}}} + cmd58 := &cli.Command{Name: "brew", Usage: "Manage Homebrew taps used by bootstrap packages", Description: "Manage Homebrew taps used by bootstrap packages\n\nThese commands edit `[bootstrap.brew.taps]` so tapped formulae and casks can be fetched directly by mise without a Homebrew installation.", Action: reached, Commands: []*cli.Command{cmd56, cmd57}} + cmd59 := &cli.Command{Name: "import", Usage: "Import installed system packages into `[bootstrap.packages]`", Description: "Import installed system packages into `[bootstrap.packages]`\n\nCurrently supports Homebrew formulae only. By default, imports linked formulae whose active keg receipt says they were installed on request. Pass `--all` to import every linked formula, including dependencies.", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "env", Aliases: []string{"e"}, Usage: "Write to the config file for this environment (mise..toml)", Local: true}, &cli.BoolFlag{Name: "global", Aliases: []string{"g"}, Usage: "Write to the global config (~/.config/mise/config.toml)", Local: true}, &cli.StringFlag{Name: "manager", Aliases: []string{"m"}, Usage: "Only import packages for this manager. Currently only `brew` is supported.", Local: true, Value: "brew"}, &cli.BoolFlag{Name: "all", Usage: "Import every linked formula, including dependencies", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the config change without writing config", Local: true}, &cli.StringFlag{Name: "path", Aliases: []string{"p", "file"}, Usage: "Write to this config file or directory", Local: true}}} + cmd60 := &cli.Command{Name: "prune", Usage: "Prune installed system packages no longer declared in `[bootstrap.packages]`", Description: "Prune installed system packages no longer declared in `[bootstrap.packages]`\n\nSupports Homebrew formulae and conservatively removable, mise-owned casks. Pruning keeps packages needed by the current config or by trusted, loadable tracked configs.", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "manager", Aliases: []string{"m"}, Usage: "Only prune packages for this manager", Local: true, Value: "brew"}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print what would be removed without deleting anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd61 := &cli.Command{Name: "status", Usage: "Show the status of system packages from `[bootstrap.packages]`", Aliases: []string{"ls"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured packages are not in their desired state", Local: true}}} + cmd62 := &cli.Command{Name: "upgrade", Usage: "Upgrade installed bootstrap packages from `[bootstrap.packages]`", Description: "Upgrade installed bootstrap packages from `[bootstrap.packages]`\n\nRefreshes package manager metadata and upgrades the configured packages that are already installed: apk/apt/dnf/pacman upgrade to the newest available version (apk, apt, and dnf honor a version pinned in config), brew pours the formula's current bottle and replaces the old keg, brew-cask installs the current cask artifact, flatpak and flatpak-user update applications and runtimes, and mas upgrades App Store apps. Packages that are not installed yet are skipped — use `mise bootstrap packages apply` for those.\n\nPackages can also be given explicitly in `manager:package` form.", Aliases: []string{"up"}, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "manager", Aliases: []string{"m"}, Usage: "Only upgrade packages for this built-in or plugin manager", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "PACKAGE", Min: 0, Max: -1}}} + cmd63 := &cli.Command{Name: "use", Usage: "Add bootstrap packages to [bootstrap.packages] and install them", Description: "Add bootstrap packages to [bootstrap.packages] and install them\n\nLike `mise use` for tools: writes `\"manager:package\" = \"version\"` entries to mise.toml (the local config by default, the global one with `-g`) and then installs whatever is missing.\n\nVersions are pinned with `@`: `mise bootstrap packages use apt:curl@8.5.0-2`. Without `@` (or with `@latest`) no pin is written. brew formulae and casks version through their names instead (for example `brew:postgresql@17`, `brew-cask:temurin@17`), where `@` is part of the Homebrew name rather than a mise version selector. mas uses numeric ADAM IDs and does not support pins.", Aliases: []string{"u"}, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "env", Aliases: []string{"e"}, Usage: "Write to the config file for this environment (mise..toml)", Local: true}, &cli.BoolFlag{Name: "global", Aliases: []string{"g"}, Usage: "Write to the global config (~/.config/mise/config.toml) instead of the local one", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without writing config or installing", Local: true}, &cli.StringFlag{Name: "path", Aliases: []string{"p", "file"}, Usage: "Write to this config file or directory", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "PACKAGE", Min: 1, Max: -1}}} + cmd64 := &cli.Command{Name: "packages", Usage: "Manage bootstrap system packages from `[bootstrap.packages]`", Action: reached, Commands: []*cli.Command{cmd55, cmd58, cmd59, cmd60, cmd61, cmd62, cmd63}} + cmd65 := &cli.Command{Name: "plan", Usage: "Show the changes declarative bootstrap resources would make", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output a stable machine-readable plan in JSON format", Local: true}, &cli.BoolFlag{Name: "detailed-exitcode", Usage: "Exit 2 when the plan contains changes, 0 when unchanged, and 1 on errors", Local: true}, &cli.BoolFlag{Name: "prompt-secrets", Usage: "Prompt securely for missing bootstrap secret inputs", Local: true}}} + cmd66 := &cli.Command{Name: "apply", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print what would happen without installing plugins", Local: true}}} + cmd67 := &cli.Command{Name: "status", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if a declared plugin is missing", Local: true}}} + cmd68 := &cli.Command{Name: "plugins", Usage: "Manage package manager plugins declared in `[bootstrap.plugins]`", Action: reached, Commands: []*cli.Command{cmd66, cmd67}} + cmd69 := &cli.Command{Name: "remote", Usage: "Bootstrap one or more machines over OpenSSH", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "all", Usage: "Select every configured inventory host", Local: true}, &cli.StringFlag{Name: "bootstrap-command", Usage: "Explicit remote shell command that installs mise and places it on PATH", Local: true}, &cli.StringFlag{Name: "connect-timeout", Usage: "SSH connection timeout in seconds", Local: true, Value: "10"}, &cli.StringSliceFlag{Name: "copy-link", Usage: "Dereference one source-relative symbolic link; repeat for multiple links", Local: true}, &cli.BoolFlag{Name: "copy-links", Usage: "Dereference every symbolic link in the source archive", Local: true}, &cli.StringSliceFlag{Name: "exclude", Usage: "Additional archive pattern to exclude; repeat for multiple patterns", Local: true}, &cli.BoolFlag{Name: "fail-fast", Usage: "Stop after the first failed target", Local: true}, &cli.BoolFlag{Name: "force-dotfiles", Usage: "Allow remote dotfile conflicts to be replaced", Local: true}, &cli.StringSliceFlag{Name: "host", Usage: "Ad-hoc SSH destination (`[user@]host`); repeat for multiple hosts", Local: true}, &cli.StringFlag{Name: "identity-file", Aliases: []string{"i"}, Usage: "SSH identity file override", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the remote bootstrap changes without applying them", Local: true}, &cli.BoolFlag{Name: "keep-staging", Usage: "Keep the remote staging directory for debugging", Local: true}, &cli.StringFlag{Name: "mise-bin", Usage: "Local mise binary to upload (escape hatch for custom architectures)", Local: true}, &cli.StringSliceFlag{Name: "only", Usage: "Run only one or more remote bootstrap parts", Local: true}, &cli.StringFlag{Name: "port", Usage: "SSH port override", Local: true}, &cli.BoolFlag{Name: "prompt-secrets", Usage: "Prompt securely for missing secret inputs on the remote host", Local: true}, &cli.StringSliceFlag{Name: "remote-env", Usage: "Config environments to load on the remote host; repeat or delimit with commas (for example, ci,dotfiles)", Local: true}, &cli.StringFlag{Name: "remote-mise", Usage: "Existing mise executable name or path; relative paths use the staged project", Local: true}, &cli.StringSliceFlag{Name: "skip", Usage: "Skip one or more remote bootstrap parts", Local: true}, &cli.StringFlag{Name: "source", Usage: "Local directory archived and sent to each target", Local: true}, &cli.StringSliceFlag{Name: "ssh-option", Usage: "OpenSSH `-o` option; repeat for multiple options", Local: true}, &cli.StringSliceFlag{Name: "tag", Usage: "Select configured hosts with this tag; repeat to match any tag", Local: true}, &cli.BoolFlag{Name: "update", Usage: "Refresh package manager metadata and update configured repos remotely", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip remote confirmation prompts", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TARGET", Min: 0, Max: -1}}} + cmd70 := &cli.Command{Name: "apply", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd71 := &cli.Command{Name: "exec", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "continue-on-error", Aliases: []string{"c"}, Usage: "Continue running in other repos after a command fails", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "PATH", Min: 0, Max: -1}, &cli.StringArgs{Name: "COMMAND", Min: 1, Max: -1}}} + cmd72 := &cli.Command{Name: "status", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured repo is not in its desired state", Local: true}}} + cmd73 := &cli.Command{Name: "update", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "PATH", Min: 0, Max: -1}}} + cmd74 := &cli.Command{Name: "repos", Usage: "Manage git repo checkouts from `[bootstrap.repos]`", Action: reached, Commands: []*cli.Command{cmd70, cmd71, cmd72, cmd73}} + cmd75 := &cli.Command{Name: "status", Usage: "Show whether declared bootstrap secret inputs are available", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if a declared secret input is unavailable", Local: true}}} + cmd76 := &cli.Command{Name: "secrets", Usage: "Inspect bootstrap secret inputs without revealing their values", Action: reached, Commands: []*cli.Command{cmd75}} + cmd77 := &cli.Command{Name: "apply", Usage: "Apply configured Linux system service state", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print what would change without changing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd78 := &cli.Command{Name: "status", Usage: "Show configured Linux system service state", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 when any service is not converged", Local: true}}} + cmd79 := &cli.Command{Name: "services", Usage: "Manage Linux system services from `[bootstrap.services]`", Action: reached, Commands: []*cli.Command{cmd77, cmd78}} + cmd80 := &cli.Command{Name: "status", Usage: "Show the aggregate bootstrap status", Aliases: []string{"ls"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured bootstrap state is not in its desired state", Local: true}, &cli.BoolFlag{Name: "prompt-secrets", Usage: "Prompt securely for missing bootstrap secret inputs", Local: true}}} + cmd81 := &cli.Command{Name: "apply", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd82 := &cli.Command{Name: "status", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured systemd user service is not in its desired state", Local: true}}} + cmd83 := &cli.Command{Name: "systemd", Usage: "Manage systemd user services from `[bootstrap.linux.systemd.units]`", Hidden: true, Action: reached, Commands: []*cli.Command{cmd81, cmd82}} + cmd84 := &cli.Command{Name: "apply", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the commands that would run without running them", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}} + cmd85 := &cli.Command{Name: "status", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured user setting is not in its desired state", Local: true}}} + cmd86 := &cli.Command{Name: "user", Usage: "Manage current-user bootstrap settings from `[bootstrap.user]`", Action: reached, Commands: []*cli.Command{cmd84, cmd85}} + cmd87 := &cli.Command{Name: "bootstrap", Usage: "Set up a machine for the current config in one command", Description: "Set up a machine for the current config in one command\n\nRuns the bootstrap steps for the current config in order:\n\n0. `mise bootstrap accounts apply` — converge `[bootstrap.users]` and\n `[bootstrap.groups]` (Linux)\n1. `mise bootstrap plugins apply` — install `[bootstrap.plugins]`\n 1.7. `[bootstrap.hooks.pre-packages]` — optional setup hook\n2. Install built-in-manager entries from `[bootstrap.packages]` 3. `mise bootstrap files apply` — converge `[bootstrap.files]` and\n `[bootstrap.directories]`\n4. `mise bootstrap services apply` — converge `[bootstrap.services]`\n systemd system services (Linux)\n5. `mise bootstrap firewall apply` — converge `[bootstrap.linux.firewall]`\n host firewall policy and rules (Linux)\n6. `mise bootstrap compose apply` — converge `[bootstrap.compose]`\n Docker Compose projects\n7. `mise bootstrap repos apply` — clone/converge `[bootstrap.repos]`\n surrounded by `pre-repos`/`post-repos` hooks\n8. `mise bootstrap dotfiles apply` — apply dotfiles from `[dotfiles]`\n surrounded by `pre-dotfiles`/`post-dotfiles` hooks\n9. `mise bootstrap mise-shell-activate apply` — configure shell activation\n from `[bootstrap.mise_shell_activate]`\n10. `mise bootstrap macos defaults apply` — write\n `[bootstrap.macos.defaults]` entries (macOS)\n surrounded by `pre-defaults`/`post-defaults` hooks\n11. `mise bootstrap macos launchd-agents apply` — install/load\n `[bootstrap.macos.launchd.agents]`\n12. `mise bootstrap linux systemd-units apply` — install/start\n `[bootstrap.linux.systemd.units]`\n13. `mise bootstrap user apply` — set `[bootstrap.user].login_shell`\n (Unix)\n surrounded by `pre-user`/`post-user` hooks\n14. `mise install` — install missing tools from `[tools]`\n surrounded by `pre-tools`/`post-tools` hooks; package-plugin entries\n from `[bootstrap.packages]` install afterward, followed by\n `[bootstrap.hooks.post-packages]`\n15. `mise run bootstrap` — if a task named `bootstrap` is defined 16. `[bootstrap.hooks.final]` — optional final hook\n\nThe declarative steps converge — anything already in its desired state is skipped, so re-running is safe. The `bootstrap` task runs on every invocation; keep it idempotent. Use it for any project-specific setup that doesn't fit the declarative sections (seeding databases, auth flows, etc.) — it runs with the installed tools on PATH.\n\nUse `--skip ` to skip named parts, or `--only ` to run just named parts. Both flags can be repeated or comma-separated, but they cannot be used together.", Aliases: []string{"bs"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print what would happen without installing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip confirmation prompts", Local: true}, &cli.BoolFlag{Name: "force-dotfiles", Usage: "Overwrite existing files that conflict with whole-file dotfile entries", Local: true}, &cli.StringSliceFlag{Name: "only", Usage: "Run only one or more bootstrap parts", Local: true}, &cli.BoolFlag{Name: "prompt-secrets", Usage: "Prompt securely for missing bootstrap secret inputs", Local: true}, &cli.StringSliceFlag{Name: "skip", Usage: "Skip one or more bootstrap parts", Local: true}, &cli.BoolFlag{Name: "update", Usage: "Refresh package manager metadata and update configured repos", Local: true}}, Commands: []*cli.Command{cmd11, cmd12, cmd13, cmd14, cmd15, cmd16, cmd19, cmd22, cmd28, cmd31, cmd34, cmd37, cmd41, cmd48, cmd51, cmd54, cmd64, cmd65, cmd68, cmd69, cmd74, cmd76, cmd79, cmd80, cmd83, cmd86}} + cmd88 := &cli.Command{Name: "clear", Usage: "Deletes all cache files in mise", Aliases: []string{"c", "clean"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "outdate", Usage: "Mark all cache files as old", Hidden: true, Local: true}, &cli.StringFlag{Name: "task", Usage: "Clear output cache entries for a task name or pattern", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL", Min: 0, Max: -1}}} + cmd89 := &cli.Command{Name: "path", Usage: "Show the cache directory path", Aliases: []string{"dir"}, Action: reached} + cmd90 := &cli.Command{Name: "prune", Usage: "Removes stale mise cache files", Description: "Removes stale mise cache files\n\nBy default, this command will remove files that have not been accessed in 30 days. Change this with the MISE_CACHE_PRUNE_AGE environment variable.", Aliases: []string{"p"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "verbose", Aliases: []string{"v"}, Usage: "Show pruned files", Local: true, Config: cli.BoolConfig{Count: new(int)}}, &cli.BoolFlag{Name: "dry-run", Usage: "Just show what would be pruned", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL", Min: 0, Max: -1}}} + cmd91 := &cli.Command{Name: "task", Usage: "Inspect output cache entries for a task", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TASK"}}} + cmd92 := &cli.Command{Name: "cache", Usage: "Manage the mise cache", Description: "Manage the mise cache\n\nRun `mise cache` with no args to view the current cache directory.", Action: reached, Commands: []*cli.Command{cmd88, cmd89, cmd90, cmd91}} + cmd93 := &cli.Command{Name: "completion", Usage: "Generate shell completions", Aliases: []string{"complete", "completions"}, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "shell", Aliases: []string{"s"}, Usage: "Shell type to generate completions for", Hidden: true, Local: true}, &cli.BoolFlag{Name: "include-bash-completion-lib", Usage: "Include the bash completion library in the bash completion script", Local: true}, &cli.BoolFlag{Name: "usage", Usage: "Always use usage for completions.\nCurrently, usage is the default for fish and bash but not zsh since it has a few quirks\nto work out first.", Hidden: true, Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "SHELL"}}} + cmd94 := &cli.Command{Name: "get", Usage: "Display the value of a setting in a mise.toml file", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "file", Aliases: []string{"f", "path"}, Usage: "The path to the mise.toml file to read", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "KEY"}}} + cmd95 := &cli.Command{Name: "ls", Usage: "List config files currently in use", Aliases: []string{"list"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "no-header", Aliases: []string{"no-headers"}, Usage: "Do not print table header", Local: true}, &cli.BoolFlag{Name: "tracked-configs", Usage: "List all tracked config files", Local: true}}} + cmd96 := &cli.Command{Name: "set", Usage: "Set the value of a setting in a mise.toml file", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "file", Aliases: []string{"f", "path"}, Usage: "The path to the mise.toml file to edit", Local: true}, &cli.StringFlag{Name: "type", Aliases: []string{"t"}, Local: true, Value: "infer"}}, Arguments: []cli.Argument{&cli.StringArg{Name: "KEY"}, &cli.StringArg{Name: "VALUE"}}} + cmd97 := &cli.Command{Name: "config", Usage: "Manage config files", Aliases: []string{"cfg", "toml"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "no-header", Aliases: []string{"no-headers"}, Usage: "Do not print table header", Local: true}, &cli.BoolFlag{Name: "tracked-configs", Usage: "List all tracked config files", Local: true}}, Commands: []*cli.Command{cmd94, cmd95, cmd96}} + cmd98 := &cli.Command{Name: "current", Usage: "Shows current active and installed runtime versions", Description: "Shows current active and installed runtime versions\n\nThis is similar to `mise ls --current`, but this only shows the runtime and/or version. It's designed to fit into scripts more easily.", Hidden: true, Action: reached, Arguments: []cli.Argument{&cli.StringArg{Name: "PLUGIN"}}} + cmd99 := &cli.Command{Name: "deactivate", Usage: "Disable mise for current shell session", Description: "Disable mise for current shell session\n\nThis can be used to temporarily disable mise in a shell session.", Action: reached} + cmd100 := &cli.Command{Name: "activate", Usage: "Output direnv function to use mise inside direnv", Description: "Output direnv function to use mise inside direnv\n\nSee https://mise.jdx.dev/direnv.html for more information\n\nBecause this generates the idiomatic files based on currently installed plugins, you should run this command after installing new plugins. Otherwise direnv may not know to update environment variables when idiomatic file versions change.", Hidden: true, Action: reached} + cmd101 := &cli.Command{Name: "envrc", Usage: "[internal] This is an internal command that writes an envrc file\nfor direnv to consume.", Hidden: true, Action: reached} + cmd102 := &cli.Command{Name: "exec", Usage: "[internal] This is an internal command that writes an envrc file\nfor direnv to consume.", Hidden: true, Action: reached} + cmd103 := &cli.Command{Name: "direnv", Usage: "Output direnv function to use mise inside direnv", Description: "Output direnv function to use mise inside direnv\n\nSee https://mise.jdx.dev/direnv.html for more information\n\nBecause this generates the idiomatic files based on currently installed plugins, you should run this command after installing new plugins. Otherwise direnv may not know to update environment variables when idiomatic file versions change.", Hidden: true, Action: reached, Commands: []*cli.Command{cmd100, cmd101, cmd102}} + cmd104 := &cli.Command{Name: "add", Usage: "Add or update dotfiles in `[dotfiles]`", Description: "Add or update dotfiles in `[dotfiles]`\n\nIf the target is already managed, this updates its source from the live target. Otherwise it creates a `[dotfiles]` entry and seeds the source under `dotfiles.root` unless `--source` is provided.", Hidden: true, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Overwrite existing sources without prompting", Local: true}, &cli.BoolFlag{Name: "global", Aliases: []string{"g"}, Usage: "Write to the global config", Local: true}, &cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Write to the local config instead of the global config", Local: true}, &cli.StringFlag{Name: "mode", Aliases: []string{"m"}, Usage: "Dotfile mode to write", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the config/source updates without writing anything", Local: true}, &cli.BoolFlag{Name: "no-apply", Usage: "Add the entry without applying it", Local: true}, &cli.StringFlag{Name: "path", Aliases: []string{"p"}, Usage: "Write to this config file or directory", Local: true}, &cli.StringFlag{Name: "source", Aliases: []string{"s"}, Usage: "Source path to use for a single target", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TARGET", Min: 1, Max: -1}}} + cmd105 := &cli.Command{Name: "apply", Usage: "Apply dotfiles from `[dotfiles]`", Description: "Apply dotfiles from `[dotfiles]`\n\nApplies configured whole-file entries and edits that aren't in their desired state. Whole-file entries may symlink, copy, or render templates. Edit entries manage a marker-delimited block or a single line in a file mise doesn't otherwise own.", Hidden: true, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Overwrite existing files that conflict with whole-file dotfile entries", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the actions that would run without writing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TARGET", Min: 0, Max: -1}}} + cmd106 := &cli.Command{Name: "edit", Usage: "Edit a managed dotfile source", Hidden: true, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "apply", Usage: "Apply this target after the editor exits", Local: true}, &cli.StringFlag{Name: "mode", Aliases: []string{"m"}, Usage: "Dotfile mode to use if the target is not yet managed", Local: true}, &cli.StringFlag{Name: "source", Aliases: []string{"s"}, Usage: "Source path to use if the target is not yet managed", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt when adding an unmanaged target", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TARGET"}}} + cmd107 := &cli.Command{Name: "status", Usage: "Show the status of dotfiles from `[dotfiles]`", Aliases: []string{"ls"}, Hidden: true, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "missing", Usage: "Exit with code 1 if any configured dotfiles are not in their desired\nstate (missing, source missing, differs)", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TARGET", Min: 0, Max: -1}}} + cmd108 := &cli.Command{Name: "unapply", Usage: "Remove dotfiles applied from `[dotfiles]`", Description: "Remove dotfiles applied from `[dotfiles]`\n\nRemoves configured whole-file entries and edits while preserving files mise cannot identify as managed. Modified copies, templates, and plain-line edits require `--force`.", Hidden: true, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Remove modified or otherwise ambiguous managed files and lines", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Print the actions that would run without writing anything", Local: true}, &cli.BoolFlag{Name: "yes", Aliases: []string{"y"}, Usage: "Skip the confirmation prompt", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TARGET", Min: 0, Max: -1}}} + cmd109 := &cli.Command{Name: "dotfiles", Usage: "Manage dotfiles from `[dotfiles]` (deprecated)", Description: "Manage dotfiles from `[dotfiles]` (deprecated)\n\nUse `mise bootstrap dotfiles` instead.", Hidden: true, Action: reached, Commands: []*cli.Command{cmd104, cmd105, cmd106, cmd107, cmd108}} + cmd110 := &cli.Command{Name: "path", Usage: "Print the current PATH entries mise is providing", Aliases: []string{"paths"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "full", Aliases: []string{"f"}, Usage: "Print all entries including those not provided by mise", Local: true}}} + cmd111 := &cli.Command{Name: "doctor", Usage: "Check mise installation for possible problems", Aliases: []string{"dr"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Local: true}}, Commands: []*cli.Command{cmd110}} + cmd112 := &cli.Command{Name: "en", Usage: "Starts a new shell with the mise environment built from the current configuration", Description: "Starts a new shell with the mise environment built from the current configuration\n\nThis is an alternative to `mise activate` that allows you to explicitly start a mise session. It will have the tools and environment variables in the configs loaded. Note that changing directories will not update the mise environment.", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "shell", Aliases: []string{"s"}, Usage: "Shell to start", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "DIR"}}} + cmd113 := &cli.Command{Name: "env", Usage: "Exports env vars to activate mise a single time", Description: "Exports env vars to activate mise a single time\n\nUse this if you don't want to permanently install mise. It's not necessary to use this if you have `mise activate` in your shell rc file.", Aliases: []string{"e"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dotenv", Aliases: []string{"D"}, Usage: "Output in dotenv format", Local: true}, &cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.StringFlag{Name: "shell", Aliases: []string{"s"}, Usage: "Shell type to generate environment variables for", Local: true}, &cli.BoolFlag{Name: "json-extended", Usage: "Output in JSON format with additional information (source, tool)", Local: true}, &cli.BoolFlag{Name: "redacted", Usage: "Only show redacted environment variables", Local: true}, &cli.BoolFlag{Name: "values", Usage: "Only show values of environment variables", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL@VERSION", Min: 0, Max: -1}}} + cmd114 := &cli.Command{Name: "exec", Usage: "Execute a command with tool(s) set", Description: "Execute a command with tool(s) set\n\nuse this to avoid modifying the shell session or running ad-hoc commands with mise tools set.\n\nTools will be loaded from mise.toml, though they can be overridden with args Note that only the plugin specified will be overridden, so if a `mise.toml` file includes \"node 20\" but you run `mise exec python@3.11`; it will still load node@20.\n\nThe \"--\" separates runtimes from the commands to pass along to the subprocess.", Aliases: []string{"x"}, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "command", Aliases: []string{"c"}, Usage: "Command string to execute", Local: true}, &cli.StringFlag{Name: "jobs", Aliases: []string{"j"}, Usage: "Number of jobs to run in parallel\nValues below 1 are treated as 1\n[default: 4]", Local: true, Sources: cli.EnvVars("MISE_JOBS")}, &cli.StringSliceFlag{Name: "allow-env", Usage: "Allow specific env var through (implies --deny-env for everything else)\nSupports wildcards, e.g. --allow-env='MYAPP_*'", Local: true}, &cli.StringSliceFlag{Name: "allow-net", Usage: "Allow network to specific host (implies --deny-net for everything else)\nmacOS only in v1; on Linux falls back to allowing all network", Local: true}, &cli.StringSliceFlag{Name: "allow-read", Usage: "Allow reads from specific path (implies --deny-read for everything else)", Local: true}, &cli.StringSliceFlag{Name: "allow-write", Usage: "Allow writes to specific path (implies --deny-write for everything else)", Local: true}, &cli.BoolFlag{Name: "deny-all", Usage: "Block reads, writes, network, and env vars", Local: true}, &cli.BoolFlag{Name: "deny-env", Usage: "Block env var inheritance (only PATH, HOME, USER, SHELL, TERM, LANG pass through)", Local: true}, &cli.BoolFlag{Name: "deny-net", Usage: "Block all network access", Local: true}, &cli.BoolFlag{Name: "deny-read", Usage: "Block filesystem reads (system libs and tool dirs still accessible)", Local: true}, &cli.BoolFlag{Name: "deny-write", Usage: "Block all filesystem writes", Local: true}, &cli.BoolFlag{Name: "fresh-env", Usage: "Bypass the environment cache and recompute the environment", Local: true}, &cli.BoolFlag{Name: "no-deps", Usage: "Skip automatic dependency preparation", Local: true}, &cli.BoolFlag{Name: "raw", Usage: "Connect backend install command stdin/stdout/stderr directly to the terminal Implies --jobs=1", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL@VERSION", Min: 0, Max: -1}, &cli.StringArgs{Name: "COMMAND", Min: 0, Max: -1}}} + cmd115 := &cli.Command{Name: "fmt", Usage: "Formats mise.toml", Description: "Formats mise.toml\n\nSorts keys and cleans up whitespace in mise.toml", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "all", Aliases: []string{"a"}, Usage: "Format all files from the current directory", Local: true}, &cli.BoolFlag{Name: "check", Aliases: []string{"c"}, Usage: "Check if the configs are formatted, no formatting is done", Local: true}, &cli.BoolFlag{Name: "stdin", Aliases: []string{"s"}, Usage: "Read config from stdin and write its formatted version into stdout", Local: true}}} + cmd116 := &cli.Command{Name: "bootstrap", Usage: "Generate a script to download+execute mise", Description: "Generate a script to download+execute mise\n\nThis is designed to be used in a project where contributors may not have mise installed.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "localize", Aliases: []string{"l"}, Usage: "Sandboxes mise internal directories like MISE_DATA_DIR and MISE_CACHE_DIR into a `.mise` directory in the project", Local: true}, &cli.StringFlag{Name: "version", Aliases: []string{"V"}, Usage: "Specify mise version to fetch", Local: true}, &cli.StringFlag{Name: "write", Aliases: []string{"w"}, Usage: "instead of outputting the script to stdout, write to a file and make it executable", Local: true}, &cli.StringFlag{Name: "localized-dir", Usage: "Directory to put localized data into", Local: true, Value: ".mise"}, &cli.BoolFlag{Name: "windows", Usage: "Also write a Windows launcher, `.cmd`", Local: true}}} + cmd117 := &cli.Command{Name: "config", Usage: "Generate a mise.toml file", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "global", Aliases: []string{"g"}, Usage: "Generate the global config file (~/.config/mise/config.toml)", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Show what would be generated without writing to file", Local: true}, &cli.StringFlag{Name: "tool-versions", Aliases: []string{"t"}, Usage: "Path to a .tool-versions file to import tools from", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "PATH"}}} + cmd118 := &cli.Command{Name: "devcontainer", Usage: "Generate a devcontainer to execute mise", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "image", Aliases: []string{"i"}, Usage: "The image to use for the devcontainer", Local: true}, &cli.BoolFlag{Name: "mount-mise-data", Aliases: []string{"m"}, Usage: "Bind the mise-data-volume to the devcontainer", Local: true}, &cli.StringFlag{Name: "name", Aliases: []string{"n"}, Usage: "The name of the devcontainer", Local: true}, &cli.BoolFlag{Name: "write", Aliases: []string{"w"}, Usage: "write to .devcontainer/devcontainer.json", Local: true}}} + cmd119 := &cli.Command{Name: "git-pre-commit", Usage: "Generate a git pre-commit hook", Description: "Generate a git pre-commit hook\n\nThis command generates a git pre-commit hook that runs a mise task like `mise run pre-commit` when you commit changes to your repository.\n\nStaged files are passed to the task as `STAGED`.\n\nFor more advanced pre-commit functionality, see mise's sister project: https://hk.jdx.dev/", Aliases: []string{"pre-commit"}, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "task", Aliases: []string{"t"}, Usage: "The task to run when the pre-commit hook is triggered", Local: true, Value: "pre-commit"}, &cli.BoolFlag{Name: "write", Aliases: []string{"w"}, Usage: "write to .git/hooks/pre-commit and make it executable", Local: true}, &cli.StringFlag{Name: "hook", Usage: "Which hook to generate (saves to .git/hooks/$hook)", Local: true, Value: "pre-commit"}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "MISE_ARG", Min: 0, Max: -1}}} + cmd120 := &cli.Command{Name: "github-action", Usage: "Generate a GitHub Action workflow file", Description: "Generate a GitHub Action workflow file\n\nThis command generates a GitHub Action workflow file that runs a mise task like `mise run ci` when you push changes to your repository.", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "task", Aliases: []string{"t"}, Usage: "The task to run when the workflow is triggered", Local: true, Value: "ci"}, &cli.BoolFlag{Name: "write", Aliases: []string{"w"}, Usage: "write to .github/workflows/$name.yml", Local: true}, &cli.StringFlag{Name: "name", Usage: "the name of the workflow to generate", Local: true, Value: "ci"}}} + cmd121 := &cli.Command{Name: "task-docs", Usage: "Generate documentation for tasks in a project", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "inject", Aliases: []string{"i"}, Usage: "inserts the documentation into an existing file", Local: true}, &cli.BoolFlag{Name: "index", Aliases: []string{"I"}, Usage: "write only an index of tasks, intended for use with `--multi`", Local: true}, &cli.BoolFlag{Name: "multi", Aliases: []string{"m"}, Usage: "render each task as a separate document, requires `--output` to be a directory", Local: true}, &cli.StringFlag{Name: "output", Aliases: []string{"o"}, Usage: "writes the generated docs to a file/directory", Local: true}, &cli.StringFlag{Name: "root", Aliases: []string{"r"}, Usage: "root directory to search for tasks", Local: true}, &cli.StringFlag{Name: "style", Aliases: []string{"s"}, Local: true, Value: "simple"}}} + cmd122 := &cli.Command{Name: "task-stubs", Usage: "Generates shims to run mise tasks", Description: "Generates shims to run mise tasks\n\nBy default, this will build shims like ./bin/. These can be paired with `mise generate bootstrap` so contributors to a project can execute mise tasks without installing mise into their system. When a parent and nested task both exist, the parent stub is written to `/_default`.", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "dir", Aliases: []string{"d"}, Usage: "Directory to create task stubs inside of", Local: true, Value: "bin"}, &cli.StringFlag{Name: "mise-bin", Aliases: []string{"m"}, Usage: "Path to a mise bin to use when running the task stub.", Local: true, Value: "mise"}}} + cmd123 := &cli.Command{Name: "tool-stub", Usage: "Generate a tool stub for HTTP-based tools", Description: "Generate a tool stub for HTTP-based tools\n\nThis command generates tool stubs that can automatically download and execute tools from HTTP URLs. It can detect checksums, file sizes, and binary paths automatically by downloading and analyzing the tool.\n\nWhen generating stubs with platform-specific URLs, the command will append new platforms to existing stub files rather than overwriting them. This allows you to incrementally build cross-platform tool stubs.", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "bin", Aliases: []string{"b"}, Usage: "Binary path within the extracted archive", Local: true}, &cli.BoolFlag{Name: "bootstrap", Usage: "Wrap stub in a bootstrap script that installs mise if not already present", Local: true}, &cli.StringFlag{Name: "bootstrap-version", Usage: "Specify mise version for the bootstrap script", Local: true}, &cli.StringFlag{Name: "checksum-algorithm", Usage: "Checksum algorithm to use when downloading artifacts", Local: true, Value: "blake3"}, &cli.BoolFlag{Name: "fetch", Usage: "Fetch checksums and sizes for an existing tool stub file", Local: true}, &cli.StringFlag{Name: "http", Usage: "HTTP backend type to use", Local: true, Value: "http"}, &cli.BoolFlag{Name: "lock", Usage: "Resolve and embed lockfile data (exact version + platform URLs/checksums) into an existing stub file for reproducible installs without runtime API calls", Local: true}, &cli.StringSliceFlag{Name: "platform-bin", Usage: "Platform-specific binary paths in the format platform:path", Local: true}, &cli.StringSliceFlag{Name: "platform-url", Usage: "Platform-specific URLs in the format platform:url or just url (auto-detect platform)", Local: true}, &cli.BoolFlag{Name: "skip-download", Usage: "Skip downloading for checksum and binary path detection (faster but less informative)", Local: true}, &cli.StringFlag{Name: "url", Aliases: []string{"u"}, Usage: "URL for downloading the tool", Local: true}, &cli.StringFlag{Name: "version", Usage: "Version of the tool", Local: true, Value: "latest"}}, Arguments: []cli.Argument{&cli.StringArg{Name: "OUTPUT"}}} + cmd124 := &cli.Command{Name: "generate", Usage: "Generate files for various tools/services", Aliases: []string{"gen", "g"}, Action: reached, Commands: []*cli.Command{cmd116, cmd117, cmd118, cmd119, cmd120, cmd121, cmd122, cmd123}} + cmd125 := &cli.Command{Name: "token", Usage: "Display the GitHub token mise will use for a given host", Description: "Display the GitHub token mise will use for a given host\n\nShows which token source mise would use, useful for debugging authentication issues. The token is masked by default.", Hidden: true, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "oauth", Usage: "Force native GitHub OAuth device flow instead of normal token resolution", Local: true}, &cli.BoolFlag{Name: "raw", Usage: "Print only the token value", Local: true}, &cli.BoolFlag{Name: "refresh", Usage: "Mint a fresh OAuth token even if the cached one has not expired, via the refresh-token grant or a new device-code flow", Local: true}, &cli.BoolFlag{Name: "unmask", Usage: "Show the full unmasked token", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "HOST"}}} + cmd126 := &cli.Command{Name: "github", Usage: "GitHub related commands", Hidden: true, Action: reached, Commands: []*cli.Command{cmd125}} + cmd127 := &cli.Command{Name: "global", Usage: "Sets/gets the global tool version(s)", Description: "Sets/gets the global tool version(s)\n\nDisplays the contents of global config after writing. The file is `$HOME/.config/mise/config.toml` by default. It can be changed with `$MISE_GLOBAL_CONFIG_FILE`. If `$MISE_GLOBAL_CONFIG_FILE` is set to anything that ends in `.toml`, it will be parsed as `mise.toml`. Otherwise, it will be parsed as a `.tool-versions` file.\n\nUse MISE_ASDF_COMPAT=1 to default the global config to ~/.tool-versions\n\nUse `mise local` to set a tool version locally in the current directory.", Hidden: true, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "fuzzy", Usage: "Save fuzzy version to `~/.tool-versions`\ne.g.: `mise global --fuzzy node@20` will save `node 20` to ~/.tool-versions\nthis is the default behavior unless MISE_ASDF_COMPAT=1", Local: true}, &cli.BoolFlag{Name: "path", Usage: "Get the path of the global config file", Local: true}, &cli.BoolFlag{Name: "pin", Usage: "Save exact version to `~/.tool-versions`\ne.g.: `mise global --pin node@20` will save `node 20.0.0` to ~/.tool-versions", Local: true}, &cli.StringSliceFlag{Name: "remove", Aliases: []string{"rm", "unset"}, Usage: "Remove the tool(s) from ~/.tool-versions", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL@VERSION", Min: 0, Max: -1}}} + cmd128 := &cli.Command{Name: "hook-env", Usage: "[internal] called by activate hook to update env vars directory change", Hidden: true, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Skip early exit check", Local: true}, &cli.BoolFlag{Name: "quiet", Aliases: []string{"q"}, Usage: "Hide warnings such as when a tool is not installed", Local: true}, &cli.StringFlag{Name: "shell", Aliases: []string{"s"}, Usage: "Shell type to generate script for", Local: true}, &cli.StringFlag{Name: "reason", Usage: "Reason for calling hook-env (e.g., \"precmd\", \"chpwd\")", Hidden: true, Local: true}, &cli.BoolFlag{Name: "status", Usage: "Show \"mise: @\" message when changing directories", Hidden: true, Local: true}}} + cmd129 := &cli.Command{Name: "hook-not-found", Usage: "[internal] called by shell when a command is not found", Hidden: true, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "shell", Aliases: []string{"s"}, Usage: "Shell type to generate script for", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "BIN"}}} + cmd130 := &cli.Command{Name: "implode", Usage: "Removes mise CLI and all related data", Description: "Removes mise CLI and all related data\n\nSkips config directory by default.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "List directories that would be removed without actually removing them", Local: true}, &cli.BoolFlag{Name: "config", Usage: "Also remove config directory", Local: true}}} + cmd131 := &cli.Command{Name: "edit", Usage: "Edit mise.toml interactively", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "global", Aliases: []string{"g"}, Usage: "Edit the global config file (~/.config/mise/config.toml)", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Show what would be generated without writing to file", Local: true}, &cli.StringFlag{Name: "tool-versions", Aliases: []string{"t"}, Usage: "Path to a .tool-versions file to import tools from", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "PATH"}}} + cmd132 := &cli.Command{Name: "install", Usage: "Install a tool version", Description: "Install a tool version\n\nInstalls a tool version to `~/.local/share/mise/installs//` Installing alone will not activate the tools so they won't be in PATH. To install and/or activate in one command, use `mise use` which will create a `mise.toml` file in the current directory to activate this tool when inside the directory. Alternatively, run `mise exec @ -- ` to execute a tool without creating config files.\n\nTools will be installed in parallel. To disable, set `--jobs=1` or `MISE_JOBS=1`", Aliases: []string{"i"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Force reinstall even if already installed\nWith no tools specified, reinstall all configured tools", Local: true}, &cli.StringFlag{Name: "jobs", Aliases: []string{"j"}, Usage: "Number of jobs to run in parallel\nValues below 1 are treated as 1\n[default: 4]", Local: true, Sources: cli.EnvVars("MISE_JOBS")}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Show what would be installed without actually installing", Local: true}, &cli.BoolFlag{Name: "verbose", Aliases: []string{"v"}, Usage: "Show installation output", Local: true, Config: cli.BoolConfig{Count: new(int)}}, &cli.BoolFlag{Name: "dry-run-code", Usage: "Like --dry-run but exits with code 1 if there are tools to install", Local: true}, &cli.BoolFlag{Name: "include-task-tools", Usage: "Also install tools required by tasks in the current scope", Local: true}, &cli.StringFlag{Name: "minimum-release-age", Aliases: []string{"before"}, Usage: "Only install versions released before this date or older than this duration", Local: true}, &cli.BoolFlag{Name: "monorepo", Usage: "Install tools from every [monorepo].config_roots config root", Local: true, Sources: cli.EnvVars("MISE_MONOREPO")}, &cli.BoolFlag{Name: "raw", Usage: "Connect backend install command stdin/stdout/stderr directly to the terminal Implies --jobs=1", Local: true}, &cli.StringFlag{Name: "shared", Usage: "Install tool(s) to a shared directory", Local: true}, &cli.BoolFlag{Name: "system", Usage: "Install tool(s) to the system-wide shared directory", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL@VERSION", Min: 0, Max: -1}}} + cmd133 := &cli.Command{Name: "install-into", Usage: "Install a tool version to a specific path", Description: "Install a tool version to a specific path\n\nUsed for building a tool to a directory for use outside of mise", Action: reached, Arguments: []cli.Argument{&cli.StringArg{Name: "TOOL@VERSION"}, &cli.StringArg{Name: "PATH"}}} + cmd134 := &cli.Command{Name: "latest", Usage: "Gets the latest available version for a plugin", Description: "Gets the latest available version for a plugin\n\nSupports prefixes such as `node@20` to get the latest version of node 20.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "installed", Aliases: []string{"i"}, Usage: "Show latest installed instead of available version", Local: true}, &cli.StringFlag{Name: "minimum-release-age", Aliases: []string{"before"}, Usage: "Only consider versions released before this date or older than this duration", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TOOL@VERSION"}, &cli.StringArg{Name: "ASDF_VERSION"}}} + cmd135 := &cli.Command{Name: "link", Usage: "Symlinks a tool version into mise", Description: "Symlinks a tool version into mise\n\nUse this for adding installs either custom compiled outside mise or built with a different tool.", Aliases: []string{"ln"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Overwrite an existing tool version if it exists", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TOOL@VERSION"}, &cli.StringArg{Name: "PATH"}}} + cmd136 := &cli.Command{Name: "local", Usage: "Sets/gets tool version in local .tool-versions or mise.toml", Description: "Sets/gets tool version in local .tool-versions or mise.toml\n\nUse this to set a tool's version when within a directory Use `mise global` to set a tool version globally This uses `.tool-version` by default unless there is a `mise.toml` file or if `MISE_USE_TOML` is set. A future v2 release of mise will default to using `mise.toml`.", Aliases: []string{"l"}, Hidden: true, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "parent", Aliases: []string{"p"}, Usage: "Recurse up to find a .tool-versions file rather than using the current directory only\nby default this command will only set the tool in the current directory (\"$PWD/.tool-versions\")", Local: true}, &cli.BoolFlag{Name: "fuzzy", Usage: "Save fuzzy version to `.tool-versions` e.g.: `mise local --fuzzy node@20` will save `node 20` to .tool-versions This is the default behavior unless MISE_ASDF_COMPAT=1", Local: true}, &cli.BoolFlag{Name: "path", Usage: "Get the path of the config file", Local: true}, &cli.BoolFlag{Name: "pin", Usage: "Save exact version to `.tool-versions`\ne.g.: `mise local --pin node@20` will save `node 20.0.0` to .tool-versions", Local: true}, &cli.StringSliceFlag{Name: "remove", Aliases: []string{"rm", "unset"}, Usage: "Remove the tool(s) from .tool-versions", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL@VERSION", Min: 0, Max: -1}}} + cmd137 := &cli.Command{Name: "lock", Usage: "Update lockfile checksums and URLs for all specified platforms", Description: "Update lockfile checksums and URLs for all specified platforms\n\nUpdates checksums and download URLs for all platforms already specified in the lockfile. If no lockfile exists, shows what would be created based on the current configuration, including tools declared by tasks. This allows you to refresh lockfile data for platforms other than the one you're currently on. Operates on the lockfile in the current config root. Use TOOL arguments to target specific tools.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "global", Aliases: []string{"g"}, Usage: "Target only global config lockfiles (~/.config/mise/mise.lock and system config)\nBy default, only the active project config root is locked", Local: true}, &cli.StringFlag{Name: "jobs", Aliases: []string{"j"}, Usage: "Number of jobs to run in parallel\nValues below 1 are treated as 1", Local: true, Sources: cli.EnvVars("MISE_JOBS")}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Show what would be updated without making changes", Local: true}, &cli.StringSliceFlag{Name: "platform", Aliases: []string{"p"}, Usage: "Comma-separated list of platforms to target\ne.g.: linux-x64,macos-arm64,windows-x64\nIf not specified, all platforms already in lockfile will be updated", Local: true}, &cli.BoolFlag{Name: "bump", Usage: "Re-resolve fuzzy version selectors against the latest available versions", Local: true}, &cli.BoolFlag{Name: "json", Usage: "Output version changes as JSON", Local: true}, &cli.BoolFlag{Name: "local", Usage: "Update mise.local.lock instead of mise.lock\nUse for tools defined in .local.toml configs", Local: true}, &cli.StringFlag{Name: "minimum-release-age", Aliases: []string{"before"}, Usage: "Only lock versions released before this age or date", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL", Min: 0, Max: -1}}} + cmd138 := &cli.Command{Name: "ls", Usage: "List installed and active tool versions", Description: "List installed and active tool versions\n\nThis command lists tools that mise \"knows about\". These may be tools that are currently installed, or those that are in a config file (active) but may or may not be installed.\n\nIt's a useful command to get the current state of your tools.", Aliases: []string{"list"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "current", Aliases: []string{"c"}, Usage: "Only show tool versions currently specified in a mise.toml", Local: true}, &cli.BoolFlag{Name: "global", Aliases: []string{"g"}, Usage: "Only show tool versions currently specified in the global mise.toml", Local: true}, &cli.BoolFlag{Name: "installed", Aliases: []string{"i"}, Usage: "Only show tool versions that are installed (Hides tools defined in mise.toml but not installed)", Local: true}, &cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Only show tool versions currently specified in the local mise.toml", Local: true}, &cli.BoolFlag{Name: "missing", Aliases: []string{"m"}, Usage: "Display missing tool versions", Local: true}, &cli.BoolFlag{Name: "offline", Aliases: []string{"o"}, Usage: "Don't fetch information such as outdated versions", Hidden: true, Local: true}, &cli.StringFlag{Name: "plugin", Aliases: []string{"p"}, Hidden: true, Local: true}, &cli.BoolFlag{Name: "all-sources", Usage: "Display all tracked config sources for tools", Local: true}, &cli.BoolFlag{Name: "monorepo", Usage: "List tools from every [monorepo].config_roots config root", Local: true, Sources: cli.EnvVars("MISE_MONOREPO")}, &cli.BoolFlag{Name: "no-header", Aliases: []string{"no-headers"}, Usage: "Don't display headers", Local: true}, &cli.BoolFlag{Name: "outdated", Usage: "Display whether a version is outdated", Local: true}, &cli.StringFlag{Name: "prefix", Usage: "Display versions matching this prefix", Local: true}, &cli.BoolFlag{Name: "prunable", Usage: "List only tools that can be pruned with `mise prune`", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "INSTALLED_TOOL", Min: 0, Max: -1}}} + cmd139 := &cli.Command{Name: "ls-remote", Usage: "List runtime versions available for install.", Description: "List runtime versions available for install.\n\nNote that the results may be cached, run `mise cache clean` to clear the cache and get fresh results.", Aliases: []string{"list-all", "list-remote"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "all", Usage: "Show all installed plugins and versions", Local: true}, &cli.StringFlag{Name: "minimum-release-age", Aliases: []string{"before"}, Usage: "Only show versions released before this age or date", Local: true}, &cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format (includes version metadata like created_at timestamps when available)", Local: true}, &cli.BoolFlag{Name: "no-versions-host", Usage: "Disable checking the mise-versions host", Local: true}, &cli.BoolFlag{Name: "prerelease", Usage: "Include pre-release versions in the output for backends that report\nupstream prerelease metadata or opt in to regex-based prerelease\ndetection. Equivalent to setting `MISE_PRERELEASES=1` or the\n`prereleases` setting for the duration of this command.", Local: true}, &cli.BoolFlag{Name: "strict-metadata", Usage: "Fail if release metadata fetches fail", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TOOL@VERSION"}, &cli.StringArg{Name: "PREFIX"}}} + cmd140 := &cli.Command{Name: "mcp", Usage: "Run Model Context Protocol (MCP) server", Description: "Run Model Context Protocol (MCP) server\n\nThis command starts an MCP server that exposes mise functionality to AI assistants over stdin/stdout using JSON-RPC protocol.\n\nThe MCP server provides access to: - Installed and available tools - Task definitions and execution - Environment variables - Configuration information - Task execution via the run_task tool\n\nResources available: - mise://tools - List all tools (use ?include_inactive=true to include inactive tools) - mise://tasks - List all tasks with their configurations - mise://env - List all environment variables - mise://config - Show configuration files and project root\n\nTools available: - list_commands - Every mise command, with its declared effect on the world - install_tool - Install a tool with an optional version (not yet implemented) - run_task - Execute a mise task with optional arguments\n\nNote: This is primarily intended for integration with AI assistants like Claude, Cursor, or other tools that support the Model Context Protocol.", Action: reached} + cmd141 := &cli.Command{Name: "build", Usage: "[experimental] Build an OCI image from the current mise.toml", Description: "[experimental] Build an OCI image from the current mise.toml\n\nEach tool version becomes its own content-addressable OCI layer. Bumping a tool version only invalidates that tool's layer — other tools, the base image, and config are reused unchanged. The output directory conforms to the OCI image-layout spec and can be consumed by `skopeo`, `crane`, or `podman load`.\n\nRequires `mise settings experimental=true` (or `MISE_EXPERIMENTAL=1`).", Action: reached, Flags: []cli.Flag{&cli.StringSliceFlag{Name: "copy", Usage: "Copy a host file, directory, or symlink into the image (repeatable, HOST:IMAGE)", Local: true}, &cli.StringFlag{Name: "output", Aliases: []string{"o"}, Usage: "Output directory for the OCI image layout", Local: true, Value: "./mise-oci"}, &cli.StringFlag{Name: "from", Usage: "Base image reference (overrides [oci].from and the oci.default_from setting)", Local: true}, &cli.BoolFlag{Name: "include-global", Usage: "Also include tools from the global / system config (default: project-only)", Local: true}, &cli.StringFlag{Name: "tag", Aliases: []string{"t"}, Usage: "Tag to record in the image index (the org.opencontainers.image.ref.name annotation)", Local: true}, &cli.StringFlag{Name: "mount-point", Usage: "Where to place tool installs inside the image (default: /mise)", Local: true}, &cli.BoolFlag{Name: "no-mise", Usage: "Do not embed the currently-running mise binary at /usr/local/bin/mise", Local: true}, &cli.StringFlag{Name: "owner", Usage: "UID[:GID] to assign to every tar entry in generated layers", Local: true}}} + cmd142 := &cli.Command{Name: "push", Usage: "[experimental] Build an OCI image and push it to a registry", Description: "[experimental] Build an OCI image and push it to a registry\n\nPushes with mise's built-in registry client — no skopeo/crane/docker required. If `--image-dir` is not passed, builds fresh from the current mise.toml first. Only blobs the registry doesn't already have are uploaded, so repeat pushes of mostly-unchanged toolsets are cheap.\n\nTool layers whose tool, version, mount point, and file owner match the previously pushed image (or `--cache-from`) are reused without being rebuilt — those tools don't even need to be installed locally. Pass `--no-cache` to force a full local rebuild.\n\nCredentials are read from the same places docker and podman use: `$REGISTRY_AUTH_FILE`, `$XDG_RUNTIME_DIR/containers/auth.json`, `~/.config/containers/auth.json`, and `~/.docker/config.json` (including credential helpers) — so `docker login` / `podman login` is all the setup needed.\n\nRequires `mise settings experimental=true` (or `MISE_EXPERIMENTAL=1`).", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "cache-from", Usage: "Reuse unchanged tool layers from this image instead of the destination ref", Local: true}, &cli.StringFlag{Name: "from", Usage: "Base image for the build (ignored with --image-dir)", Local: true}, &cli.StringFlag{Name: "image-dir", Usage: "Push an already-built OCI image layout (skip the build step)", Local: true}, &cli.BoolFlag{Name: "include-global", Usage: "Also include tools from the global / system config (default: project-only)", Local: true}, &cli.StringFlag{Name: "mount-point", Usage: "Override in-image mount point (ignored with --image-dir)", Local: true}, &cli.BoolFlag{Name: "no-cache", Usage: "Don't reuse tool layers from the previously pushed image", Local: true}, &cli.BoolFlag{Name: "no-mise", Usage: "Don't embed the mise binary (ignored with --image-dir)", Local: true}, &cli.StringFlag{Name: "owner", Usage: "UID[:GID] to assign to every tar entry when building (conflicts with --image-dir)", Local: true}, &cli.BoolFlag{Name: "update-index", Usage: "Maintain the tag as a multi-arch image index", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "REF"}}} + cmd143 := &cli.Command{Name: "run", Usage: "[experimental] Build an OCI image from the current mise.toml and run a command in it", Description: "[experimental] Build an OCI image from the current mise.toml and run a command in it\n\nEquivalent to `mise oci build` followed by `docker run` / `podman run`. The built image is loaded into the local container engine (podman pulls the OCI layout natively; docker receives it via `docker load`) and the given command is executed inside it with stdin/stdout/stderr inherited.\n\nRequires `mise settings experimental=true` (or `MISE_EXPERIMENTAL=1`) and one of: `podman`, `docker`.", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "engine", Usage: "Container engine to use (`auto`, `podman`, or `docker`)", Local: true, Value: "auto"}, &cli.StringFlag{Name: "from", Usage: "Base image reference for the build (ignored with --image-dir)", Local: true}, &cli.StringFlag{Name: "image-dir", Usage: "Use an already-built OCI image layout instead of building fresh", Local: true}, &cli.BoolFlag{Name: "include-global", Usage: "Also include tools from the global / system config (default: project-only)", Local: true}, &cli.BoolFlag{Name: "keep", Usage: "Keep the loaded image in the engine's storage after the run", Local: true}, &cli.StringFlag{Name: "mount-point", Usage: "Override in-image mount point (ignored with --image-dir)", Local: true}, &cli.BoolFlag{Name: "no-mise", Usage: "Don't embed the mise binary (ignored with --image-dir)", Local: true}, &cli.StringFlag{Name: "owner", Usage: "UID[:GID] to assign to every tar entry when building (conflicts with --image-dir)", Local: true}, &cli.StringSliceFlag{Name: "volume", Aliases: []string{"mount"}, Usage: "Bind-mount a host path (repeatable, `HOST:CONTAINER[:MODE]`)", Local: true}, &cli.StringSliceFlag{Name: "env", Aliases: []string{"e"}, Usage: "Set environment variable in the container (repeatable, `KEY=VAL`)", Local: true}, &cli.BoolFlag{Name: "interactive", Aliases: []string{"i"}, Usage: "Run interactively (pass `-i` to the engine)", Local: true}, &cli.BoolFlag{Name: "tty", Aliases: []string{"t"}, Usage: "Allocate a TTY (pass `-t` to the engine)", Local: true}, &cli.StringFlag{Name: "workdir", Aliases: []string{"w"}, Usage: "Working directory inside the container", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "CMD", Min: 0, Max: -1}}} + cmd144 := &cli.Command{Name: "oci", Usage: "[experimental] Build OCI container images from a mise.toml", Description: "[experimental] Build OCI container images from a mise.toml\n\nEach tool becomes its own OCI layer, so bumping any single tool version only invalidates one content-addressable blob — unlike a Dockerfile where changing an early `RUN` invalidates every layer above it.\n\nThis command is experimental and requires `mise settings experimental=true` (or `MISE_EXPERIMENTAL=1`). Behavior, flags, and output layout may change in future releases.", Action: reached, Commands: []*cli.Command{cmd141, cmd142, cmd143}} + cmd145 := &cli.Command{Name: "outdated", Usage: "Shows outdated tool versions", Description: "Shows outdated tool versions\n\nSee `mise upgrade` to upgrade these versions.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "bump", Aliases: []string{"b"}, Usage: "Compares against the latest versions available, not what matches the current config", Local: true}, &cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "inactive", Usage: "Show outdated tools including installed-but-inactive tools not present in the current config", Local: true}, &cli.BoolFlag{Name: "local", Usage: "Only show outdated tools defined in local config files", Local: true}, &cli.BoolFlag{Name: "monorepo", Usage: "Placeholder for future monorepo outdated checks; `mise outdated --monorepo` is not implemented yet.", Local: true}, &cli.BoolFlag{Name: "no-header", Usage: "Don't show table header", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL@VERSION", Min: 0, Max: -1}}} + cmd146 := &cli.Command{Name: "patrons", Usage: "Show the individuals supporting mise as Patron-tier members", Description: "Show the individuals supporting mise as Patron-tier members\n\nLists the individuals on the Patron tier from . The list refreshes daily; supporting terminals will render each patron's name as a clickable link via OSC 8 hyperlinks.\n\nTo appear here, become a patron at .", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "refresh", Usage: "Bypass the local cache and re-fetch", Local: true}}} + cmd147 := &cli.Command{Name: "install", Usage: "Install a plugin", Description: "Install a plugin\n\nnote that mise can automatically install plugins when you install a tool e.g.: `mise install cmake@3.30` will autoinstall the cmake plugin\n\nThis behavior can be modified in ~/.config/mise/config.toml", Aliases: []string{"i", "a", "add"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "all", Aliases: []string{"a"}, Usage: "Install all missing plugins\nThis will only install plugins that have matching shorthands.\ni.e.: they don't need the full git repo url", Local: true}, &cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Reinstall even if plugin exists", Local: true}, &cli.StringFlag{Name: "jobs", Aliases: []string{"j"}, Usage: "Number of jobs to run in parallel\nValues below 1 are treated as 1", Local: true}, &cli.BoolFlag{Name: "verbose", Aliases: []string{"v"}, Usage: "Show installation output", Local: true, Config: cli.BoolConfig{Count: new(int)}}}, Arguments: []cli.Argument{&cli.StringArg{Name: "NEW_PLUGIN"}, &cli.StringArg{Name: "GIT_URL"}, &cli.StringArgs{Name: "REST", Min: 0, Max: -1}}} + cmd148 := &cli.Command{Name: "link", Usage: "Symlinks a plugin into mise", Description: "Symlinks a plugin into mise\n\nThis is used for developing a plugin.", Aliases: []string{"ln"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Overwrite existing plugin", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "NAME"}, &cli.StringArg{Name: "DIR"}}} + cmd149 := &cli.Command{Name: "ls", Usage: "List installed plugins", Description: "List installed plugins\n\nCan also show remotely available plugins to install.", Aliases: []string{"list"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "all", Aliases: []string{"a"}, Usage: "List all available remote plugins\nSame as `mise plugins ls-remote`", Hidden: true, Local: true}, &cli.BoolFlag{Name: "core", Aliases: []string{"c"}, Usage: "The built-in plugins only\nNormally these are not shown", Hidden: true, Local: true}, &cli.BoolFlag{Name: "outdated", Aliases: []string{"o"}, Usage: "Show plugins with available updates\nChecks the remote for newer versions and only displays plugins that are outdated", Local: true}, &cli.BoolFlag{Name: "urls", Aliases: []string{"u", "url"}, Usage: "Show the git url for each plugin\ne.g.: https://github.com/mise-plugins/vfox-cmake.git", Local: true}, &cli.BoolFlag{Name: "refs", Usage: "Show the git refs for each plugin\ne.g.: main 1234abc", Hidden: true, Local: true}, &cli.BoolFlag{Name: "user", Usage: "List installed plugins", Hidden: true, Local: true}}} + cmd150 := &cli.Command{Name: "ls-remote", Usage: "List all available remote plugins", Description: "\nList all available remote plugins\n\nThe full list is here: https://github.com/jdx/mise/blob/main/registry/\n\nExamples:\n\n $ mise plugins ls-remote\n", Aliases: []string{"list-remote", "list-all"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "urls", Aliases: []string{"u"}, Usage: "Show the git url for each plugin e.g.: https://github.com/mise-plugins/mise-poetry.git", Local: true}, &cli.BoolFlag{Name: "only-names", Usage: "Only show the name of each plugin by default it will show a \"*\" next to installed plugins", Local: true}}} + cmd151 := &cli.Command{Name: "uninstall", Usage: "Removes a plugin", Aliases: []string{"remove", "rm"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "all", Aliases: []string{"a"}, Usage: "Remove all plugins", Local: true}, &cli.BoolFlag{Name: "purge", Aliases: []string{"p"}, Usage: "Also remove the plugin's installs, downloads, and cache", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "PLUGIN", Min: 0, Max: -1}}} + cmd152 := &cli.Command{Name: "update", Usage: "Updates a plugin to the latest version", Description: "Updates a plugin to the latest version\n\nnote: this updates the plugin itself, not the runtime versions", Aliases: []string{"up", "upgrade"}, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "jobs", Aliases: []string{"j"}, Usage: "Number of jobs to run in parallel\nValues below 1 are treated as 1\nDefault: 4", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "PLUGIN", Min: 0, Max: -1}}} + cmd153 := &cli.Command{Name: "plugins", Usage: "Manage plugins", Aliases: []string{"p", "plugin", "plugin-list"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "all", Aliases: []string{"a"}, Usage: "list all available remote plugins", Hidden: true, Local: true}, &cli.BoolFlag{Name: "core", Aliases: []string{"c"}, Usage: "The built-in plugins only\nNormally these are not shown", Local: true}, &cli.BoolFlag{Name: "urls", Aliases: []string{"u", "url"}, Usage: "Show the git url for each plugin\ne.g.: https://github.com/mise-plugins/vfox-cmake.git", Local: true}, &cli.BoolFlag{Name: "refs", Usage: "Show the git refs for each plugin\ne.g.: main 1234abc", Hidden: true, Local: true}, &cli.BoolFlag{Name: "user", Usage: "List installed plugins", Local: true}}, Commands: []*cli.Command{cmd147, cmd148, cmd149, cmd150, cmd151, cmd152}} + cmd154 := &cli.Command{Name: "add", Usage: "Add a dependency", Description: "Add a dependency\n\nAdds one or more packages to the project using the appropriate package manager. Package specs use the format `ecosystem:package`, e.g., `npm:react` or `npm:@types/react@19`.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dev", Aliases: []string{"D"}, Usage: "Add as a development dependency", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "PACKAGES", Min: 1, Max: -1}}} + cmd155 := &cli.Command{Name: "install", Usage: "Install all project dependencies", Description: "Install all project dependencies\n\nChecks if dependency lockfiles are newer than installed outputs and runs install commands if needed.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "explain", Usage: "Show why a provider is fresh or stale (requires a provider argument)", Local: true}, &cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Force run all deps steps even if outputs are fresh", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Only check if deps install is needed, don't run commands", Local: true}, &cli.BoolFlag{Name: "list", Usage: "Show what deps providers are available", Local: true}, &cli.BoolFlag{Name: "monorepo", Usage: "Install dependencies from every [monorepo].config_roots config root", Local: true, Sources: cli.EnvVars("MISE_MONOREPO")}, &cli.StringSliceFlag{Name: "only", Usage: "Run specific deps rule(s) only", Local: true}, &cli.StringSliceFlag{Name: "skip", Usage: "Skip specific deps rule(s)", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "PROVIDER"}}} + cmd156 := &cli.Command{Name: "remove", Usage: "Remove a dependency", Description: "Remove a dependency\n\nRemoves one or more packages from the project using the appropriate package manager. Package specs use the format `ecosystem:package`, e.g., `npm:lodash`.", Action: reached, Arguments: []cli.Argument{&cli.StringArgs{Name: "PACKAGES", Min: 1, Max: -1}}} + cmd157 := &cli.Command{Name: "deps", Usage: "[experimental] Manage project dependencies", Description: "[experimental] Manage project dependencies\n\nRuns all applicable dependency install steps for the current project. This checks if dependency lockfiles are newer than installed outputs (e.g., package-lock.json vs node_modules/) and runs install commands if needed.\n\nProviders with `auto = true` are automatically invoked before `mise x` and `mise run` unless skipped with the --no-deps flag.", Aliases: []string{"dep", "prepare"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "explain", Usage: "Show why a provider is fresh or stale (requires a provider argument)", Local: true}, &cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Force run all deps steps even if outputs are fresh", Local: true}, &cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Only check if deps install is needed, don't run commands", Local: true}, &cli.BoolFlag{Name: "list", Usage: "Show what deps providers are available", Local: true}, &cli.BoolFlag{Name: "monorepo", Usage: "Install dependencies from every [monorepo].config_roots config root", Local: true, Sources: cli.EnvVars("MISE_MONOREPO")}, &cli.StringSliceFlag{Name: "only", Usage: "Run specific deps rule(s) only", Local: true}, &cli.StringSliceFlag{Name: "skip", Usage: "Skip specific deps rule(s)", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "PROVIDER"}}, Commands: []*cli.Command{cmd154, cmd155, cmd156}} + cmd158 := &cli.Command{Name: "prune", Usage: "Delete unused versions of tools", Description: "Delete unused versions of tools\n\nmise tracks which config files have been used in ~/.local/state/mise/tracked-configs Versions which are no longer the latest specified in any of those configs are deleted. Versions installed only with environment variables `MISE__VERSION` will be deleted, as will versions only referenced on the command line `mise exec @`.\n\nTool stubs that have been executed are tracked in ~/.local/state/mise/tracked-stubs. Versions still referenced by a tracked stub are not deleted.\n\nYou can list prunable tools with `mise ls --prunable`", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "dry-run", Aliases: []string{"n"}, Usage: "Do not actually delete anything", Local: true}, &cli.BoolFlag{Name: "configs", Usage: "Prune only tracked and trusted configuration links that point to nonexistent configurations", Local: true}, &cli.BoolFlag{Name: "dry-run-code", Usage: "Like --dry-run but exits with code 1 if there are tools to prune", Local: true}, &cli.BoolFlag{Name: "monorepo", Usage: "Placeholder for future monorepo pruning; `mise prune --monorepo` is not implemented yet.", Local: true}, &cli.BoolFlag{Name: "tools", Usage: "Prune only unused versions of tools", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "INSTALLED_TOOL", Min: 0, Max: -1}}} + cmd159 := &cli.Command{Name: "registry", Usage: "List available tools to install", Description: "List available tools to install\n\nThis command lists the tools available in the registry as shorthand names.\n\nFor example, `poetry` is shorthand for `asdf:mise-plugins/mise-poetry`.", Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "backend", Aliases: []string{"b"}, Usage: "Show only tools for this backend", Local: true}, &cli.BoolFlag{Name: "complete", Usage: "Print all tools with descriptions for shell completions", Hidden: true, Local: true}, &cli.BoolFlag{Name: "hide-aliased", Usage: "Hide aliased tools", Local: true}, &cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "security", Usage: "Include security features for each tool's backends in JSON output.", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "NAME"}}} + cmd160 := &cli.Command{Name: "render-help", Usage: "internal command to generate markdown from help", Hidden: true, Action: reached} + cmd161 := &cli.Command{Name: "reshim", Usage: "Creates new shims based on bin paths from currently installed tools.", Description: "Creates new shims based on bin paths from currently installed tools.\n\nThis creates new shims in ~/.local/share/mise/shims for CLIs that have been added. mise will try to do this automatically for commands like `npm i -g` but there are other ways to install things (like using yarn or pnpm for node) that mise does not know about and so it will be necessary to call this explicitly.\n\nIf you think mise should automatically call this for a particular command, please open an issue on the mise repo. You can also set up a shell function to reshim automatically (it's really fast so you don't need to worry about overhead):\n\n npm() {\n command npm \"$@\"\n mise reshim\n }\n\nNote that this creates shims for _all_ installed tools, not just the ones that are currently active in mise.toml.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "force", Aliases: []string{"f"}, Usage: "Removes all shims before reshimming", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TOOL"}, &cli.StringArg{Name: "VERSION"}}} + cmd162 := &cli.Command{Name: "run", Usage: "Run task(s)", Description: "Run task(s)\n\nThis command will run a task, or multiple tasks in parallel. Tasks may have dependencies on other tasks or on source files. If source is configured on a task, it will only run if the source files have changed.\n\nTasks can be defined in mise.toml or as standalone scripts. In mise.toml, tasks take this form:\n\n [tasks.build]\n run = \"npm run build\"\n sources = [\"src/**/*.ts\"]\n outputs = [\"dist/**/*.js\"]\n\nAlternatively, tasks can be defined as standalone scripts. These must be located in `mise-tasks`, `.mise-tasks`, `.mise/tasks`, `mise/tasks` or `.config/mise/tasks`. The name of the script will be the name of the tasks.\n\n $ cat .mise/tasks/build<` to create/modify environment-specific config files like `mise..toml`.", Aliases: []string{"ev", "env-vars"}, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "env", Aliases: []string{"E"}, Usage: "Create/modify an environment-specific config file like .mise..toml", Local: true}, &cli.BoolFlag{Name: "global", Aliases: []string{"g"}, Usage: "Set the environment variable in the global config file", Local: true}, &cli.BoolFlag{Name: "age-encrypt", Usage: "[experimental] Encrypt the value with age before storing", Local: true}, &cli.StringFlag{Name: "age-key-file", Usage: "[experimental] Age identity file for encryption", Local: true}, &cli.StringSliceFlag{Name: "age-recipient", Usage: "[experimental] Age recipient (x25519 public key) for encryption", Local: true}, &cli.StringSliceFlag{Name: "age-ssh-recipient", Usage: "[experimental] SSH recipient (public key or path) for age encryption", Local: true}, &cli.BoolFlag{Name: "complete", Usage: "Render completions", Hidden: true, Local: true}, &cli.StringFlag{Name: "file", Aliases: []string{"path"}, Usage: "The TOML file to update", Local: true}, &cli.BoolFlag{Name: "no-redact", Usage: "Show raw values instead of redacting secrets", Local: true}, &cli.BoolFlag{Name: "prompt", Usage: "Prompt for environment variable values", Local: true}, &cli.StringSliceFlag{Name: "remove", Aliases: []string{"rm", "unset"}, Usage: "Remove the environment variable from config file", Hidden: true, Local: true}, &cli.BoolFlag{Name: "stdin", Usage: "Read the value from stdin (for multiline input)", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "ENV_VAR", Min: 0, Max: -1}}} + cmd166 := &cli.Command{Name: "add", Usage: "Adds a setting to the configuration file", Description: "Adds a setting to the configuration file\n\nUsed with an array setting, this will append the value to the array. This modifies the contents of ~/.config/mise/config.toml", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Use the local config file instead of the global one", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "SETTING"}, &cli.StringArg{Name: "VALUE"}}} + cmd167 := &cli.Command{Name: "get", Usage: "Show a current setting", Description: "Show a current setting\n\nThis is the contents of a single entry in ~/.config/mise/config.toml\n\nNote that aliases are also stored in this file but managed separately with `mise tool-alias get`", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Use the local config file instead of the global one", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "SETTING"}}} + cmd168 := &cli.Command{Name: "ls", Usage: "Show current settings", Description: "Show current settings\n\nThis is the contents of ~/.config/mise/config.toml\n\nNote that aliases are also stored in this file but managed separately with `mise tool-alias`", Aliases: []string{"list"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "all", Aliases: []string{"a"}, Usage: "List all settings", Local: true}, &cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Use the local config file instead of the global one"}, &cli.BoolFlag{Name: "toml", Aliases: []string{"T"}, Usage: "Output in TOML format", Local: true}, &cli.BoolFlag{Name: "complete", Usage: "Print all settings with descriptions for shell completions", Hidden: true, Local: true}, &cli.BoolFlag{Name: "json-extended", Usage: "Output in JSON format with sources", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "SETTING"}}} + cmd169 := &cli.Command{Name: "set", Usage: "Add/update a setting", Description: "Add/update a setting\n\nThis modifies the contents of ~/.config/mise/config.toml by default. With `--local`, modifies the local config file instead. See https://mise.jdx.dev/configuration.html#target-file-for-write-operations", Aliases: []string{"create"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Use the local config file instead of the global one", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "SETTING"}, &cli.StringArg{Name: "VALUE"}}} + cmd170 := &cli.Command{Name: "unset", Usage: "Clears a setting", Description: "Clears a setting\n\nThis modifies the contents of ~/.config/mise/config.toml", Aliases: []string{"rm", "remove", "delete", "del"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Use the local config file instead of the global one", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "KEY"}}} + cmd171 := &cli.Command{Name: "settings", Usage: "Manage settings", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "all", Aliases: []string{"a"}, Usage: "List all settings", Local: true}, &cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Use the local config file instead of the global one"}, &cli.BoolFlag{Name: "toml", Aliases: []string{"T"}, Usage: "Output in TOML format", Local: true}, &cli.BoolFlag{Name: "complete", Usage: "Print all settings with descriptions for shell completions", Hidden: true, Local: true}, &cli.BoolFlag{Name: "json-extended", Usage: "Output in JSON format with sources", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "SETTING"}, &cli.StringArg{Name: "VALUE"}}, Commands: []*cli.Command{cmd166, cmd167, cmd168, cmd169, cmd170}} + cmd172 := &cli.Command{Name: "shell", Usage: "Sets a tool version for the current session.", Description: "Sets a tool version for the current session.\n\nOnly works in a session where mise is already activated.\n\nThis works by setting environment variables for the current shell session such as `MISE_NODE_VERSION=20` which is \"eval\"ed as a shell function created by `mise activate`.", Aliases: []string{"sh"}, Action: reached, Flags: []cli.Flag{&cli.StringFlag{Name: "jobs", Aliases: []string{"j"}, Usage: "Number of jobs to run in parallel\nValues below 1 are treated as 1\n[default: 4]", Local: true, Sources: cli.EnvVars("MISE_JOBS")}, &cli.BoolFlag{Name: "unset", Aliases: []string{"u"}, Usage: "Removes a previously set version", Local: true}, &cli.BoolFlag{Name: "raw", Usage: "Connect backend install command stdin/stdout/stderr directly to the terminal Implies --jobs=1", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TOOL@VERSION", Min: 1, Max: -1}}} + cmd173 := &cli.Command{Name: "get", Usage: "Show the command for a shell alias", Action: reached, Arguments: []cli.Argument{&cli.StringArg{Name: "shell_alias"}}} + cmd174 := &cli.Command{Name: "ls", Usage: "List shell aliases", Description: "List shell aliases\n\nShows the shell aliases that are set in the current directory. These are defined in `mise.toml` under the `[shell_alias]` section.", Aliases: []string{"list"}, Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "no-header", Usage: "Don't show table header", Local: true}}} + cmd175 := &cli.Command{Name: "set", Usage: "Add/update a shell alias", Description: "Add/update a shell alias\n\nThis modifies the contents of ~/.config/mise/config.toml", Aliases: []string{"add", "create"}, Action: reached, Arguments: []cli.Argument{&cli.StringArg{Name: "shell_alias"}, &cli.StringArg{Name: "COMMAND"}}} + cmd176 := &cli.Command{Name: "unset", Usage: "Removes a shell alias", Description: "Removes a shell alias\n\nThis modifies the contents of ~/.config/mise/config.toml", Aliases: []string{"rm", "remove", "delete", "del"}, Action: reached, Arguments: []cli.Argument{&cli.StringArg{Name: "shell_alias"}}} + cmd177 := &cli.Command{Name: "shell-alias", Usage: "Manage shell aliases.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "no-header", Usage: "Don't show table header", Local: true}}, Commands: []*cli.Command{cmd173, cmd174, cmd175, cmd176}} + cmd178 := &cli.Command{Name: "sponsors", Usage: "Show the companies sponsoring mise and the jdx.dev open source tools", Action: reached} + cmd179 := &cli.Command{Name: "node", Usage: "Symlinks all tool versions from an external tool into mise", Description: "Symlinks all tool versions from an external tool into mise\n\nFor example, use this to import all Homebrew node installs into mise\n\nThis won't overwrite managed installs, runtime aliases, or links from other providers.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "brew", Usage: "Get tool versions from Homebrew", Local: true}, &cli.BoolFlag{Name: "nodenv", Usage: "Get tool versions from nodenv", Local: true}, &cli.BoolFlag{Name: "nvm", Usage: "Get tool versions from nvm", Local: true}}} + cmd180 := &cli.Command{Name: "python", Usage: "Symlinks all tool versions from an external tool into mise", Description: "Symlinks all tool versions from an external tool into mise\n\nFor example, use this to import all pyenv installs into mise\n\nThis won't overwrite managed installs, runtime aliases, or links from other providers.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "pyenv", Usage: "Get tool versions from pyenv", Local: true}, &cli.BoolFlag{Name: "uv", Usage: "Sync tool versions with uv (2-way sync)", Local: true}}} + cmd181 := &cli.Command{Name: "ruby", Usage: "Symlinks all ruby tool versions from an external tool into mise", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "brew", Usage: "Get tool versions from Homebrew", Required: true, Local: true}}} + cmd182 := &cli.Command{Name: "sync", Usage: "Synchronize tools from other version managers with mise", Action: reached, Commands: []*cli.Command{cmd179, cmd180, cmd181}} + cmd183 := &cli.Command{Name: "add", Usage: "Create a new task", Description: "Create a new task\n\nAdds a task to the local mise.toml file. See https://mise.jdx.dev/configuration.html#target-file-for-write-operations", Action: reached, Flags: []cli.Flag{&cli.StringSliceFlag{Name: "alias", Aliases: []string{"a"}, Usage: "Other names for the task", Local: true}, &cli.StringSliceFlag{Name: "depends", Aliases: []string{"d"}, Usage: "Add dependencies to the task", Local: true}, &cli.StringFlag{Name: "dir", Aliases: []string{"D"}, Usage: "Run the task in a specific directory", Local: true}, &cli.BoolFlag{Name: "file", Aliases: []string{"f"}, Usage: "Create a file task instead of a toml task", Local: true}, &cli.BoolFlag{Name: "hide", Aliases: []string{"H"}, Usage: "Hide the task from `mise tasks` and completions", Local: true}, &cli.BoolFlag{Name: "quiet", Aliases: []string{"q"}, Usage: "Do not print the command before running", Local: true}, &cli.BoolFlag{Name: "raw", Aliases: []string{"r"}, Usage: "Directly connect stdin/stdout/stderr", Local: true}, &cli.StringSliceFlag{Name: "sources", Aliases: []string{"s"}, Usage: "Glob patterns of files this task uses as input", Local: true}, &cli.StringSliceFlag{Name: "wait-for", Aliases: []string{"w"}, Usage: "Wait for these tasks to complete if they are to run", Local: true}, &cli.StringSliceFlag{Name: "depends-post", Usage: "Dependencies to run after the task runs", Local: true}, &cli.StringFlag{Name: "description", Usage: "Description of the task", Local: true}, &cli.StringSliceFlag{Name: "outputs", Usage: "Glob patterns of files this task creates, to skip if they are not modified", Local: true}, &cli.StringFlag{Name: "run-windows", Usage: "Command to run on windows", Local: true}, &cli.StringFlag{Name: "shell", Usage: "Run the task in a specific shell", Local: true}, &cli.BoolFlag{Name: "silent", Usage: "Do not print the command or its output", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TASK"}, &cli.StringArgs{Name: "RUN", Min: 0, Max: -1}}} + cmd184 := &cli.Command{Name: "deps", Usage: "Display a tree visualization of a dependency graph", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "compact", Usage: "Collapse repeated dependencies after their first occurrence", Local: true}, &cli.BoolFlag{Name: "dot", Usage: "Display dependencies in DOT format", Local: true}, &cli.BoolFlag{Name: "hidden", Usage: "Show hidden tasks", Local: true}}, Arguments: []cli.Argument{&cli.StringArgs{Name: "TASKS", Min: 0, Max: -1}}} + cmd185 := &cli.Command{Name: "edit", Usage: "Edit a task with $EDITOR", Description: "Edit a task with $EDITOR\n\nThe task will be created as a standalone script if it does not already exist.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "path", Aliases: []string{"p"}, Usage: "Display the path to the task instead of editing it", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TASK"}}} + cmd186 := &cli.Command{Name: "graph", Usage: "[experimental] Inspect the workspace project graph", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output the project graph as JSON", Local: true}, &cli.BoolFlag{Name: "explain", Usage: "Explain provider attribution for inferred projects and tasks", Local: true}, &cli.BoolFlag{Name: "no-header", Aliases: []string{"no-headers"}, Usage: "Do not print table headers", Local: true}}} + cmd187 := &cli.Command{Name: "info", Usage: "Get information about a task", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}}, Arguments: []cli.Argument{&cli.StringArg{Name: "TASK"}}} + cmd188 := &cli.Command{Name: "ls", Usage: "List available tasks to execute\nThese may be included from the config file or from the project's .mise/tasks directory\nmise will merge all tasks from all parent directories into this list.", Description: "List available tasks to execute\nThese may be included from the config file or from the project's .mise/tasks directory\nmise will merge all tasks from all parent directories into this list.\n\nSo if you have global tasks in `~/.config/mise/tasks/*` and project-specific tasks in\n~/myproject/.mise/tasks/*, then they'll both be available but the project-specific\ntasks will override the global ones if they have the same name.", Action: reached, Flags: []cli.Flag{&cli.BoolFlag{Name: "global", Aliases: []string{"g"}, Usage: "Only show global tasks", Local: true}, &cli.BoolFlag{Name: "json", Aliases: []string{"J"}, Usage: "Output in JSON format", Local: true}, &cli.BoolFlag{Name: "local", Aliases: []string{"l"}, Usage: "Only show non-global tasks", Local: true}, &cli.BoolFlag{Name: "extended", Aliases: []string{"x"}, Usage: "Show all columns", Local: true}, &cli.BoolFlag{Name: "all", Usage: "Load all tasks from the entire monorepo, including sibling directories.\nBy default, only tasks from the current directory hierarchy are loaded.", Local: true}, &cli.BoolFlag{Name: "complete", Usage: "Display tasks for usage completion", Hidden: true, Local: true}, &cli.BoolFlag{Name: "hidden", Usage: "Show hidden tasks", Local: true}, &cli.BoolFlag{Name: "name-only", Usage: "Only show task names, one per line. Useful for piping to fzf and similar tools.", Local: true}, &cli.BoolFlag{Name: "no-header", Aliases: []string{"no-headers"}, Usage: "Do not print table header", Local: true}, &cli.StringFlag{Name: "sort", Usage: "Sort by column. Default is name.", Local: true}, &cli.StringFlag{Name: "sort-order", Usage: "Sort order. Default is asc.", Local: true}, &cli.BoolFlag{Name: "usage", Hidden: true, Local: true}}} + cmd189 := &cli.Command{Name: "run", Usage: "Run task(s)", Description: "Run task(s)\n\nThis command will run a task, or multiple tasks in parallel. Tasks may have dependencies on other tasks or on source files. If source is configured on a task, it will only run if the source files have changed.\n\nTasks can be defined in mise.toml or as standalone scripts. In mise.toml, tasks take this form:\n\n [tasks.build]\n run = \"npm run build\"\n sources = [\"src/**/*.ts\"]\n outputs = [\"dist/**/*.js\"]\n\nAlternatively, tasks can be defined as standalone scripts. These must be located in `mise-tasks`, `.mise-tasks`, `.mise/tasks`, `mise/tasks` or `.config/mise/tasks`. The name of the script will be the name of the tasks.\n\n $ cat .mise/tasks/build<