@kaged/local-config
TOML-backed operator-local configuration with Zod validation, file I/O, provider management, tool overrides, and Langfuse tracing settings
6
source files
2
test files
~1.5k
lines
✓ 95 pass
tests
pass
typecheck
clean
lint
Test results 95
resolveLocalConfigPath > per-user mode with xdgConfigHome
[0.100ms]
resolveLocalConfigPath > per-user mode falls back to userHome/.config
[0.030ms]
resolveLocalConfigPath > per-user mode throws without userHome or xdgConfigHome
[0.070ms]
resolveLocalConfigPath > xdgConfigHome takes priority over userHome in per-user mode
[0.030ms]
resolveLocalConfigPath > system-wide mode builds user-specific path
[0.020ms]
resolveLocalConfigPath > system-wide mode throws without kagedHome
[0.030ms]
resolveLocalConfigPath > system-wide mode throws without userId
[0.020ms]
resolveLocalConfigPath > override takes precedence over everything
[0.030ms]
resolveLocalConfigPath > override works in system-wide mode too
[0.020ms]
serializeLocalConfig > empty config produces valid TOML
[1.12ms]
serializeLocalConfig > config with operator_name round-trips
[1.33ms]
serializeLocalConfig > config with aliases round-trips
[0.390ms]
serializeLocalConfig > config with providers round-trips
[0.300ms]
serializeLocalConfig > config with projects round-trips
[1.18ms]
serializeLocalConfig > config with audit section round-trips
[0.220ms]
serializeLocalConfig > config with plugins round-trips
[0.540ms]
serializeLocalConfig > full config round-trips
[0.520ms]
generateDefaultLocalToml > produces valid TOML
[0.170ms]
generateDefaultLocalToml > starts with comment header
[0.030ms]
generateDefaultLocalToml > parses to config with no projects and no aliases
[0.110ms]
readLocalConfigFile > file I/O > reads and parses valid TOML file
[2.83ms]
readLocalConfigFile > file I/O > throws ENOENT for missing file
[0.480ms]
readLocalConfigFile > file I/O > returns parse errors for invalid TOML
[1.28ms]
readLocalConfigFile > file I/O > reads empty file as empty config
[0.550ms]
writeLocalConfigFile > file I/O > writes valid TOML that can be read back
[1.05ms]
writeLocalConfigFile > file I/O > creates parent directories
[0.640ms]
writeLocalConfigFile > file I/O > file has mode 0600
[0.400ms]
writeLocalConfigFile > file I/O > overwrites existing file
[0.550ms]
ensureLocalConfigFile > file I/O > creates file if missing and returns created=true
[0.850ms]
ensureLocalConfigFile > file I/O > returns existing file with created=false
[0.430ms]
ensureLocalConfigFile > file I/O > created file starts with comment header
[0.430ms]
ensureLocalConfigFile > file I/O > created file has mode 0600
[0.560ms]
ensureLocalConfigFile > file I/O > idempotent — second call returns created=false
[0.460ms]
addProjectEntry > file I/O > adds entry to empty config
[0.750ms]
addProjectEntry > file I/O > appends to existing projects list
[0.940ms]
addProjectEntry > file I/O > upserts entry with same id
[0.760ms]
addProjectEntry > file I/O > preserves other config sections
[0.660ms]
addProjectEntry > file I/O > creates file if it does not exist
[0.480ms]
addProjectEntry > file I/O > persists to disk — survives re-read
[0.680ms]
removeProjectEntry > file I/O > removes existing entry
[0.980ms]
removeProjectEntry > file I/O > no-op for unknown id
[0.630ms]
removeProjectEntry > file I/O > preserves other entries
[1.92ms]
removeProjectEntry > file I/O > preserves other config sections
[0.680ms]
removeProjectEntry > file I/O > persists to disk — survives re-read
[0.850ms]
TOML parsing > parses full config successfully
[0.440ms]
TOML parsing > parses minimal config
[0.190ms]
TOML parsing > empty string parses to empty config
[0.080ms]
TOML parsing > invalid TOML returns error
[0.090ms]
TOML parsing > ui section parsed correctly
[0.330ms]
TOML parsing > invalid ui theme rejected
[0.600ms]
TOML parsing > provider fields parsed
[0.310ms]
TOML parsing > plugin entries parsed
[0.270ms]
TOML parsing > project registry parsed
[0.250ms]
TOML parsing > invalid project status rejected
[0.140ms]
TOML parsing > audit config parsed
[0.290ms]
alias name validation > valid alias names accepted
[0.050ms]
alias name validation > alias with colon rejected
[0.030ms]
alias name validation > reserved names rejected
[0.050ms]
alias name validation > invalid pattern rejected
[0.020ms]
alias name validation > parse warns on invalid alias names
[0.080ms]
alias target validation > valid targets accepted
[0.020ms]
alias target validation > target without colon rejected
[0.020ms]
alias target validation > empty provider rejected
[0.020ms]
alias target validation > empty model rejected
[0.020ms]
alias target validation > parse warns on invalid alias targets
[0.050ms]
alias resolution > resolves known alias to provider + model
[0.120ms]
alias resolution > resolves local provider alias
[0.040ms]
alias resolution > unresolved alias returns alias_unresolved
[0.030ms]
alias resolution > alias with missing provider returns provider_missing
[0.030ms]
alias resolution > alias chaining (alias → alias) is rejected
[0.030ms]
alias resolution > direct provider:model passthrough resolves
[0.030ms]
alias resolution > direct provider:model with missing provider
[0.030ms]
checkProjectAliases > all aliases resolved
[0.090ms]
checkProjectAliases > unresolved alias reported
[0.030ms]
checkProjectAliases > empty required list returns empty results
[0.030ms]
secret redaction > api_key is redacted
[0.180ms]
secret redaction > api_key_env is NOT redacted
[0.080ms]
secret redaction > original config is not mutated
[0.070ms]
secret redaction > config without providers is unchanged
[0.050ms]
plugin store > local plugin is available to all projects
[0.080ms]
plugin store > project-scoped plugin has project list
[0.110ms]
plugin store > plugin with config
[0.090ms]
plugin store > plugin with system_config
[0.070ms]
project registry > project with all fields
[0.200ms]
project registry > project accent_color is optional
[0.120ms]
project registry > project label is parsed
[0.100ms]
project registry > project label is optional
[0.060ms]
project registry > legacy nickname field still parses (back-compat)
[0.070ms]
project registry > multiple projects
[0.080ms]
project registry > all three status values accepted
[0.140ms]
provider config > provider with api_key_env
[0.060ms]
provider config > provider with inline api_key
[0.060ms]
provider config > provider without any auth (ollama-style)
[0.060ms]
provider config > quoted provider name with dash
[0.130ms]
provider config > invalid base_url rejected
[0.480ms]