Releases: dkmnx/kairo
Releases · dkmnx/kairo
v2.8.0
Added
- Support custom provider definitions in
config.yamlwithcustom_providersfield
Changed
- Compute provider display order from priority list instead of hardcoded slice
- Deduplicate config loading with
loadConfigOrExitandloadConfigOrEmpty - Consolidate harness logic and introduce crypto interface
- Move key format validation into provider definitions
- Simplify
providerFromArgswith inline branching - Rename
hasDoubleDashtohasArgsSeparator,yoloFlagtoskipPermissionsFlag - Remove
harnessBinaryidentity function andsetupSignalHandlerdead code - Document custom_providers in config, provider, and dev guides
- Switch contributing guide to Google Go Style
- Fix markdown formatting in config and providers docs
Fixed
- Surface
loadConfigOrEmptyerrors instead of swallowing them - Report errors from config and secret operations instead of silently discarding them
Released by GoReleaser.
v2.7.0
Added
- Add
crushharness option (Charm's Crush CLI) alongside claude, qwen, and pi
Fixed
- Validate model name against actual model ID for provider selection, not the display name
Released by GoReleaser.
v2.6.2
Changed
- Add missing package and type doc comments to config, constants, errors, fsutil, and providers packages
- Remove redundant
ConfigDirglobal state — overrides handled exclusively throughCLIContext.SetConfigDir - Rename
Get-prefixed update functions and addcontext.Contextto blocking methods - Remove stale
tempPathvariable in fsutil afterCreateTempmigration
Fixed
- Prevent goroutine leak in
setupSignalHandlerby returning a stop function for cleanup - Create temp file in target directory in
WriteAtomicto ensure atomic rename across all filesystems
Released by GoReleaser.
v2.6.1
Changed
- Add cosign v2 keyless verification fix to changelog
Fixed
- Add certificate identity and OIDC issuer flags for cosign v2 keyless verification
Released by GoReleaser.
v2.6.0
Added
- Cosign code signing for release artifacts via goreleaser
- Cosign signature verification in install scripts (
install.sh,install.ps1) - Cosign bundle verification in
kairo updateflow - Reject encryption key files with overly permissive permissions in crypto package
Changed
- Banner refactored to harness-aware ASCII art display with
Bannerstruct - Eliminate global mutable state in update package and providers
- Replace mutable global vars with
Depsstruct for dependency injection in cmd package - Decompose large test files into focused modules
- Address medium-priority technical debt across codebase
- Decompose root command
Runfunction into focused helpers (loadRootConfig,lookupProvider,runPiProvider,runStandardProvider,resolveAPIKey) - Replace mutable global vars with
Depsstruct for dependency injection, eliminating save-override-restore test patterns - Centralize
ANTHROPICenvironment variable constants tointernal/constantspackage - Migrate all
os.IsNotExistusage toerrors.Is(err, fs.ErrNotExist) - Wrap bare
fmt.Errorfin cmd package with properKairoErrortypes - Add named file/directory permission constants (
DirPermSecure,FilePermSecure, etc.) replacing magic numbers - Consolidate repeated "No providers configured" boilerplate into single helper
- Replace
EnvProvidertype withconfig.Providerto eliminate duplication - Extract
fsutil.WriteAtomicfor atomic file writes shared by config and crypto packages - Preserve user-set models during config migration instead of overwriting with built-in defaults
- Add
ErrBinaryOutdatedsentinel error replacing fragile string-matching on YAML parse errors - Remove panic from validate package, use
os.Exit(1)instead - Wrap
fsutil.WriteAtomicerrors withFileErrorfor better context - Add
SetHTTPClient/SetEnvFuncsetters for update package test injection - Add pi harness and complete provider list across all documentation
- Migrate golangci-lint from v1.64.8 to v2.12.2
Fixed
- Use default provider when arguments start with
--separator instead of treating them as provider name - Use default provider when
--harnessflag is provided, forwarding positional args as harness arguments - Reduce linter exclusions and improve test coverage
Released by GoReleaser.
v2.5.1
Changed
- Install script checksums now auto-regenerated via pre-commit hook when
scripts/install.shorscripts/install.ps1are modified
Fixed
- Update command checksum verification failure caused by stale
checksums.txtafter install script modification
Released by GoReleaser.
v2.5.0
Added
- Pi harness support:
piis now a valid harness option alongsideclaudeandqwen(kairo harness set pi,--harness pi) env_keyoption for custom providers to specify a custom environment variable name instead of the auto-derived<PROVIDER>_API_KEY- Expanded built-in provider registry to 19 providers matching piexo (zai, minimax, zhipu, moonshot, stepfun, yi, lingyiwanwu, deepseek, baichuan, hunyuan, spark, ernie, qwen, gemma, mistral, groq, together, fireworks)
Changed
- Use
tap.Cancelfor error and cancel messages instead ofui.PrintErrorin tap-based commands - Centralize GitHub URLs in
internal/constants/urls.gowith helper functions for raw file and blob URLs - Google Go Style Guide compliance: doc comments on all exported symbols, remove
Getprefix from getter functions - Remove unnecessary
kairoerrors/kairoversionimport aliases where stdliberrors/versionis not also imported - Extract update business logic (release fetching, checksum verification, install script execution) to
internal/updatepackage
Fixed
- Load all provider API keys for Pi harness instead of only the active provider's key
Released by GoReleaser.
v2.4.1
Fixed
- Release notes extraction now correctly stops at the next version boundary instead of dumping the entire CHANGELOG to EOF
Released by GoReleaser.
v2.4.0
Added
--no-update-checkflag onkairo versionto skip GitHub API calls- Windows ANSI support detection via Virtual Terminal Processing
Changed
- CLI commands now propagate the Cobra command context to child operations and TUI interactions instead of using
context.Background(), enabling proper cancellation on Ctrl+C - Config loading in
deleteandlistcommands now uses the config cache for consistency - Root command decomposed into
runRoot,loadRootConfig, anddispatchExecutionfor maintainability - Removed
DecryptSecrets(string return) in favor ofDecryptSecretsByteswithClearMemoryto allow secure memory clearing of decrypted key material
Fixed
- Release CI now extracts the versioned section from CHANGELOG.md matching the tag, instead of using the
[Unreleased]section which may be empty - Temp auth directory no longer leaks on error paths — cleanup now runs before
os.Exit - Hyphens in custom provider names no longer produce invalid environment variable names (e.g.,
MY-PROVIDER_API_KEY→MY_PROVIDER_API_KEY) mustParseCIDRno longer panics on invalid CIDR constants — useslog.Fatalfwith a clear message- HTTP client in update command now has TLS handshake and response header timeouts for better protection against slow/misbehaving servers
- Capture error from
windows.GetStdHandleinstead of silently discarding it
v2.3.7
Added
- DeepSeek default model updated to
deepseek-v4-pro[1m], withdeepseek-v4-flashset as the haiku/subagent model via env vars
Fixed
- Malformed secret lines are preserved during deletion instead of being silently dropped
- Secrets warnings from
LoadSecretsare now surfaced in the setup flow