Releases: MacroPower/kat
v0.28.1
v0.28.0
Notable Enhancements in v0.28.0
Project Configuration (.katrc.yaml files)
Projects may now include their own .katrc.yaml file to define project-specific rules and profiles. For example, you can include a .katrc.yaml file at the root of your git repository to share and/or version your project-specific runtime config. When kat runs, it searches for this file starting from the target path and walking up the directory tree. If found, the config is merged with your global runtime config, meaning that you can define overrides or extend your global config on a per-project basis.
# yaml-language-server: $schema=https://jacobcolvin.com/kat/schemas/runtimeconfigs.v1beta1.json
apiVersion: kat.jacobcolvin.com/v1beta1
kind: RuntimeConfig
profiles:
helm:
command: my-custom-helm-wrapper
args: [template, .]For your safety, when you execute
katin a location where a runtime configuration exists, you will be prompted to trust the project. This trust is maintained in a separatepolicy.yamlfile in your config directory.
See the katrc documentation for more details!
Changelog
Features
Fixes
- 35a32a9 fix(deps): update charm dependencies
- 53341fa fix(deps): update module github.com/goccy/go-yaml to v1.19.0 (#217)
Others
v0.27.0
Notable Enhancements in v0.27.0
Published Config Schemas
Config schemas are now being published to GitHub pages:
https://jacobcolvin.com/kat/schemas/<kind>.<version>.json
Now, kat will no longer maintain local schema.json files. Instead, config files will be written with a yaml-language-server annotation pointing to the published schema. We still embed these schemas in the kat binary for quick validation of configs, but this should be a nice QOL improvement when editing kat configs in your editor of choice.
This is being done in preparation for upcoming features that will increase the number of config files to enable some additional use cases. Maintaining a schema for each of these files would have become unwieldy.
Less Keystrokes for Everyone
A few small enhancements are also included in this release:
- Menus will be opened relative to the currently rendered project, not at the repo root. This makes switching directories much easier in monorepos where your charts/kustomizations/etc might be deeply nested.
- List filters are now persisted after a resource is viewed. This means that you don't have to re-type your search if you accidentally open the wrong resource, or if you are just wanting to switch back and forth between a subset of resources.
Changelog
Features
- 334eea5 feat: open menu at currently rendered directory (#212)
- 953fc29 feat: point to published schema instead of writing a local file (#213)
Fixes
- 85aeb34 fix(deps): update go to 1.25
- be0e757 fix: persist list filters after a resource is viewed (#211)
Others
v0.26.0
Changelog
Fixes
- c5bd2a9 fix(deps): update github.com/charmbracelet/huh digest to fa7f8a2 (#116)
- 22ffffe fix(deps): update module github.com/charmbracelet/bubbletea to v1.3.10 (#150)
- ba269f7 fix(deps): update module github.com/charmbracelet/bubbletea to v1.3.7 (#136)
- 1cf8c3c fix(deps): update module github.com/charmbracelet/bubbletea to v1.3.8 (#142)
- 891f6bd fix(deps): update module github.com/charmbracelet/bubbletea to v1.3.9 (#146)
- a7e5ee1 fix(deps): update module github.com/charmbracelet/fang to v0.4.0 (#125)
- f8f8d59 fix(deps): update module github.com/charmbracelet/fang to v0.4.1 (#149)
- a8673cb fix(deps): update module github.com/charmbracelet/fang to v0.4.2 (#151)
- 91f837b fix(deps): update module github.com/charmbracelet/fang to v0.4.3 (#165)
- a0abb93 fix(deps): update module github.com/charmbracelet/huh to v0.8.0 (#174)
- 8218e30 fix(deps): update module github.com/charmbracelet/lipgloss/v2 to v2.0.0-beta1 (#152)
- 7746ee3 fix(deps): update module github.com/charmbracelet/x/ansi to v0.10.2 (#164)
- 74ba48e fix(deps): update module github.com/charmbracelet/x/ansi to v0.10.3 (#185)
- ccf0cb1 fix(deps): update module github.com/google/cel-go to v0.26.1 (#123)
- 595e4f9 fix(deps): update module github.com/google/jsonschema-go to v0.2.1 (#143)
- 3b654d3 fix(deps): update module github.com/google/jsonschema-go to v0.2.2 (#145)
- 5a9faa3 fix(deps): update module github.com/google/jsonschema-go to v0.2.3 (#147)
- 627a818 fix(deps): update module github.com/modelcontextprotocol/go-sdk to v0.3.1 (#126)
- 47c1a87 fix(deps): update module github.com/spf13/cobra to v1.10.1 (#132)
- 2733112 fix(deps): update module github.com/spf13/pflag to v1.0.10 (#133)
- 4b4a3db fix(deps): update module github.com/spf13/pflag to v1.0.9 (#129)
- 45658b4 fix(deps): update module github.com/stretchr/testify to v1.11.1 (#122)
- 9b55999 fix(deps): update module golang.org/x/term to v0.35.0 (#139)
- d5cf7e1 fix(deps): update module golang.org/x/term to v0.36.0 (#169)
- 7988175 fix(deps): update module golang.org/x/term to v0.37.0 (#197)
- d3d305a fix(deps): update module golang.org/x/text to v0.29.0 (#140)
- ba896c7 fix(deps): update module golang.org/x/text to v0.30.0 (#170)
- 81a7e4a fix(deps): update module golang.org/x/text to v0.31.0 (#198)
- 6f80922 fix(deps): update module golang.org/x/tools to v0.37.0 (#144)
- 77e7b20 fix(deps): update module golang.org/x/tools to v0.38.0 (#171)
- 10e8e9b fix(deps): update module golang.org/x/tools to v0.39.0 (#199)
- 183a302 fix(deps): update opentelemetry-go monorepo to v1.38.0 (#127)
- 12455e6 fix: data race when testing pkg/config (#207)
- 50bf06a fix: update otel semconvs
Others
- 7bf6cc8 chore(deps): update actions/attest-build-provenance action to v3 (#124)
- d481167 chore(deps): update actions/checkout action to v6 (#206)
- 073a86b chore(deps): update actions/setup-go action to v6 (#135)
- d84748f chore(deps): update dependency cosign to v2.6.0 (#155)
- da565b1 chore(deps): update dependency cosign to v2.6.1 (#175)
- e9ffe3c chore(deps): update dependency cosign to v3 (#189)
- 646d797 chore(deps): update dependency git to v2.51.0 (#156)
- 6b9963e chore(deps): update dependency git to v2.51.2 (#202)
- 67090bf chore(deps): update dependency go (#157)
- b5e0cde chore(deps): update dependency go to v1.25.1 (#134)
- 8e3caea chore(deps): update dependency go to v1.25.1 (#176)
- 5b2e1fd chore(deps): update dependency go to v1.25.2 (#183)
- 65a698b chore(deps): update dependency go to v1.25.3 (#173)
- 8aadea0 chore(deps): update dependency go to v1.25.3 (#203)
- 9f2db3f chore(deps): update dependency go to v1.25.4 (#190)
- 541d80a chore(deps): update dependency go-task to v3.45.4 (#178)
- dc9b5b8 chore(deps): update dependency go-task to v3.45.5 (#205)
- e973fe2 chore(deps): update dependency golangci-lint to v2.4.0 (#158)
- 490c4ab chore(deps): update dependency golangci-lint to v2.5.0 (#179)
- 48cf112 chore(deps): update dependency golangci-lint to v2.6.0 (#186)
- 10e01cb chore(deps): update dependency golangci-lint to v2.6.1 (#196)
- ff66c7d chore(deps): update dependency golangci-lint to v2.6.2 (#204)
- 23d2f40 chore(deps): update dependency goreleaser to v2.12.0 (#159)
- e5a1203 chore(deps): update dependency goreleaser to v2.12.5 (#177)
- 2c213d6 chore(deps): update dependency goreleaser to v2.12.7 (#184)
- 28638a3 chore(deps): update dependency syft to v1.33.0 (#160)
- 9b1af3f chore(deps): update dependency syft to v1.36.0 (#187)
- ea85729 chore(deps): update dependency syft to v1.37.0 (#201)
- 728aee0 chore(deps): update dependency zizmor to v1.13.0 (#161)
- 40d14a8 chore(deps): update dependency zizmor to v1.16.1 (#188)
- 4881670 chore(deps): update dependency zizmor to v1.16.3 (#200)
- 98e9e56 chore(deps): update golangci/golangci-lint-action action to v9 (#194)
- 8d59c38 chore(deps): update jetify-com/devbox-install-action action to v0.14.0 (#162)
- 9947c20 chore(deps): update renovatebot/github-action action to v43.0.10 (#131)
- e3a6f76 chore(deps): update renovatebot/github-action action to v43.0.11 (#138)
- b3bdb94 chore(deps): update renovatebot/github-action action to v43.0.12 (#148)
- 55da27a chore(deps): update renovatebot/github-action action to v43.0.13 (#153)
- f8bdea5 chore(deps): update renovatebot/github-action action to v43.0.14 (#163)
- af20810 chore(deps): update renovatebot/github-action action to v43.0.15 (#167)
- 31400af chore(deps): update renovatebot/github-action action to v43.0.16 (#168)
- 9732254 chore(deps): update renovatebot/github-action action to v43.0.17 (#172)
- 81ba382 chore(deps): update renovatebot/github-action action to v43.0.18 (#180)
- 814f601 chore(deps): update renovatebot/github-action action to v43.0.19 (#181)
- 8ee7a83 chore(deps): update renovatebot/github-action action to v43.0.20 (#182)
- a8dd2f0 chore(deps): update renovatebot/github-action action to v44 (#193)
- cfff914 chore(deps): update renovatebot/github-action action to v44.0.4 (#208)
- 937d996 chore: add direnv
- d11e51d ci: fix cosign signature
- 6cc48d4 ci: fix dockerfile formatting
- c949f89 ci: force static builds
- 6f769af ci: print extra kat binary info for debugging
- 6b25365 ci: print kat binary info for debugging
- 37cfd14 refactor: re-run formatters
v0.25.1
v0.25.0
Notable Enhancements in v0.25.0
Menu for changing target directory/profile
In monorepos, you can now change the target directory/profile and set extra arguments dynamically.
- Press
:to open the menu - File picker will show any folders/files that match any rules (applies recursively)
- Navigate with arrow keys or hjkl
- Press enter to select a file or folder
- See the matched profile and enter any extra args if desired
- Press enter again to render
Note: Internally,
katuses go'sos.Root, thus you are not able to escape the directory where you launchedkatoriginally.
MCP Server (Experimental)
You can now launch kat with an MCP server:
kat --serve-mcp :50165It includes two tools, list_resources and get_resource. These tools are designed to:
- Improve AI performance and predictability, especially when debugging manifest sources (e.g. helm charts) that generate a huge amount of output.
- Largely remove the need/temptation to give an AI agent access to your cluster or your command line.
For more information, see docs/mcp.md.
Changelog
Features
- 6bbf781 feat(merge): add mcp server (#119)
- e9cb669 feat(merge): add support for changing directory/profile in monorepos (#114)
- 2418866 feat: add charm huh
- 4b54c9a feat: add mcp server
- 2f609bc feat: add menu
- 5d8dc57 feat: add otel trace exporter
- bab45a3 feat: batch file system events
- 69f4374 feat: filter file entries in runner fs
- 0aae613 feat: improve mcp server instructions
- ea2ca66 feat: improve mcp server instructions
- d9e49f4 feat: improve tracing
- 981648b feat: path switching in mcp server
- c990899 feat: profile switching
- fdf21d3 feat: propagate config changes
- 32b9833 feat: show the resource that was last fetched via mcp
- e94f41d feat: simplify menu layout
- c428959 feat: wrap mcp server with otel
Fixes
- d855dd4 fix(deps): update github.com/modelcontextprotocol/go-sdk to v0.3.0
- c67e0b5 fix(deps): update module github.com/stretchr/testify to v1.11.0 (#120)
- b9ef76f fix: allow help to work in menu
- 8b3f5ea fix: always enable file watcher if mcp server is enabled
- 3bf71a5 fix: clean file paths provided to the runner
- cdc93a1 fix: document unload logic
- b97c779 fix: file watching after changing paths
- 41eb9a1 fix: menu keybinds
- bd31609 fix: menu statusbar text
- 16b0b89 fix: prevent configured paths from escaping the root directory
- a760bbe fix: ui event delays
Others
- b98a78c Merge remote-tracking branch 'origin/main' into feat/mcp
- 79b227b chore(deps): update actions/checkout action to v5 (#110)
- 1877e22 chore(deps): update dependency go to v1.25.0 (#113)
- 3659d34 chore(deps): update golangci-lint to v2.4
- 7c83ce8 chore(deps): update renovatebot/github-action action to v43.0.8 (#115)
- 7c20bcf chore: update config schema
- 05903aa docs: add mcp server to features
- 67c4552 docs: add menu.tape
- ca543a5 docs: hide installation instructions
- 7ddf739 docs: move mcp docs to docs/mcp.md
- 4bd63cb docs: note that mcp server is experimental
- 3025e55 docs: update mcp.md
- 175e09b perf: buffer the ui listener channel
- e22ca3e refactor: decouple rules and profiles
- ef043d1 refactor: segment mcp responsibilities
- 90b98cf refactor: simplify mcp locks
- 7c7df1a test: fix mcp response assertions
- 5f0a0dc test: improve runner test consistency
v0.24.1
Changelog
Fixes
Others
- 7e14e04 chore(deps): update dependency syft to v1.30.0 (#112)
- b48fbec chore(deps): update renovatebot/github-action action to v43.0.7 (#109)
- 9ae9978 docs: remove impossible condition from example reload expr
- 3a435a6 refactor: add executor interface
- b1ebfd5 refactor: add public methods for controlling list and pager
v0.24.0
Notable Enhancements in v0.24.0
Profile Reload Expressions
Thanks to @JefeDavis for suggesting this feature.
The v0.24.0 release adds a new reload field to profiles that allows them to filter reload events using CEL expressions. If the expression returns true, the profile will be reloaded, if false, the reload will be skipped.
profiles:
helm:
command: helm
args: [template, .]
source: >-
files.filter(f, pathExt(f) in [".yaml", ".yml", ".tpl"])
reload: >-
fs.event.has(fs.WRITE) &&
render.stage < render.STAGE_POST_RENDER &&
render.result != render.RESULT_CANCELIf no reload expression is provided, profiles will continue to work as before (reloading on all events).
New CEL EnvOptions
New CEL functions and constants are available for reload expressions. Note: existing path functions are also available.
File System Variables:
file- The subject of the event.fs.event- The triggering file system event.
File System Functions:
has(event, flag...): Check if file system events contain specific flags
File System Constants:
fs.CREATE,fs.WRITE,fs.REMOVE,fs.RENAME,fs.CHMOD: Event type constants
Render Status Variables:
render.stage- The current render stage.render.result- The last render result.
Render Status Constants:
render.STAGE_*: Track current render stage (NONE, PRE_RENDER, RENDER, POST_RENDER)render.RESULT_*: Track last render result (NONE, OK, ERROR, CANCEL)
Example Use Cases
# Skip reloads for certain files
reload: >-
pathBase(file) != "kustomization.yaml"
# Only reload on write events
reload: >-
fs.event.has(fs.WRITE)
# Prevent reloads during active rendering
reload: >-
render.stage < render.STAGE_RENDER
# Skip reloads if last operation was canceled
reload: >-
render.result != render.RESULT_CANCELNote: Using --log-level=debug will emit some additional info for expression evaluation, which should be useful for troubleshooting these expressions.
For more information and examples, see docs/CEL.md.
Changelog
Features
Fixes
- bd66a0d fix(deps): update module github.com/alecthomas/chroma/v2 to v2.20.0 (#95)
- ed9db7f fix(deps): update module github.com/charmbracelet/lipgloss/v2 to v2.0.0-beta.3 (#93)
- 0b335dd fix(deps): update module github.com/charmbracelet/x/ansi to v0.10.1 (#96)
- a023295 fix(deps): update module github.com/spf13/pflag to v1.0.7 (#94)
- e383b0e fix(deps): update module golang.org/x/term to v0.34.0 (#104)
- 76c3f6d fix(deps): update module golang.org/x/text to v0.28.0 (#105)
- 9c9b39d fix(deps): update module golang.org/x/tools to v0.36.0 (#107)
Others
- b4ed6c7 chore(deps): update dependency git to v2.50.1 (#98)
- b660df4 chore(deps): update dependency go to v1.24.5 (#99)
- 4167ab5 chore(deps): update dependency go to v1.24.6 (#97)
- 24aa3fc chore(deps): update dependency go-task to v3.44.1 (#100)
- 156b16b chore(deps): update dependency golangci-lint to v2.3.1 (#101)
- a8b393b chore(deps): update dependency goreleaser to v2.11.2 (#102)
- 69e164c chore(deps): update dependency syft to v1.29.1 (#103)
- bb42551 chore(deps): update renovatebot/github-action action to v43.0.6 (#106)
