Releases: SmooAI/config
Releases · SmooAI/config
Release list
v6.11.3
Patch Changes
- 4aed829: SMOODEV-1527: Fix the eso-refresher exiting immediately after its initial mint (it
unref()'d the interval timer, and a pendingawait new Promise(() => {})doesn't hold Node's event loop open — so the process exited 0 → CrashLoopBackOff). The production interval now keeps the daemon alive; tests inject their own scheduler so they're unaffected.
v6.11.2
Patch Changes
- 52b574a: SMOODEV-2389: Mobile SDK parity fixes (ADR-074 / Mobile-Runtime-Mode-Spec). Swift:
publicValue(forKey:)is now truly synchronous (spec row 2) —SmooConfigis a lock-guarded class instead of an actor, the structural twin of the Kotlin SDK. Both SDKs:evaluateLimitgainsstep(snaps to the nearest multiple before the[min, max]clamp, matching TSclampLimit/ Rustclamp_limitper ADR-066), and evaluate failures now throw typed errors carrying the key (featureFlagNotFound/featureFlagContext/featureFlagEvaluation+limit*siblings in Swift;FeatureFlagNotFoundExceptionet al. in Kotlin) so callers can branch on 404/400/5xx without parsing messages. Kotlin:SmooConfigis nowCloseable(releases the Ktor client).
v6.11.1
Patch Changes
- 7f28077: SMOODEV-2382 (ADR-074): mobile SDK consumption enablers — root
Package.swift(SPM resolves only at repo root; consumers pin a revision) andjitpack.yml+ maven-publish for the Kotlin SDK (com.github.SmooAI:config:<sha>via JitPack; Maven Central underai.smoois the durable follow-up). Also sweeps doc/code references ADR-073 → ADR-074 (073 was claimed by a parallel workstream).
v6.11.0
Minor Changes
- a17d3a6: SMOODEV-2381 (ADR-073): Kotlin SDK (
/kotlin,ai.smoo:smooai-config) — the Kotlin/Android twin of the Swift mobile runtime mode. Same parity contract (docs/Mobile-Runtime-Mode-Spec.md): baked public bundle + live user-JWT flag/limit evaluation, offline-safe chains, caller-injected Ktor engine, pure-Kotlin JVM (no Android SDK).
v6.10.0
Minor Changes
- 007c75d: SMOODEV-2380 (ADR-073): Swift SDK (
/swift, SPM packageSmooAIConfig) — the first mobile runtime mode implementation. Baked public-config bundle + live user-JWT flag/limit evaluation against the/config/app/*surface, offline-safe read chains, zero dependencies. Parity contract:docs/Mobile-Runtime-Mode-Spec.md.
v6.9.0
Minor Changes
-
6377b67: SMOODEV-2306: Add limits — a fourth config kind. A limit is a numeric,
segment-resolved, clamp-aware value that resolves live through the same server
segment evaluator as feature flags (never baked) and tunes a soft target
within a client-applied[min, max]clamp.- Schema:
defineConfig({ limitsSchema })+defineLimit({ default, min, max, step }), exposingLimitKeys+_limitsMeta, serialized as bounded JSON-Schema number nodes. - TS client:
ConfigClient.evaluateLimit,createLimitEvaluator,getClientLimit,clampLimit, and alimittier (getLimitsync +evaluateLimitasync, clamped) onbuildClientConfig/buildConfig. - Polyglot parity (mirroring the feature-flag evaluator): Rust
evaluate_limit+clamp_limit, Pythonevaluate_limit+clamp_limit, GoEvaluateLimit+ClampLimit, .NETEvaluateLimitAsync+LimitSpec.Clamp, each with typedLimit*error types.
Endpoint contract:
POST /organizations/{org_id}/config/limits/{key}/evaluate. - Schema:
v6.8.0
Minor Changes
- 23e6577:
bootstrapFetchnow honors aSMOOAI_HARNESS_<KEY>env override (e.g.
SMOOAI_HARNESS_DATABASE_URL,SMOOAI_HARNESS_RLS_DATABASE_URL) that
short-circuits the HTTP fetch entirely — the same §15 escape hatch
packages/dbdrizzleClient.resolveDbUrlalready honors at runtime. This makes
the prod-script override work uniformly across ALL cold-start config consumers
(db-migrate and friends), not just the runtime drizzle client. Previously
bootstrapFetchignored the override and fell through toenv='development'
when no SST stage was set, silently fetching the wrong environment's value.
v6.7.0
Minor Changes
- ad2c77f: SMOODEV-1526: Port the ESO manifest generator (
buildClusterSecretStore+buildExternalSecret) to the Go, Python, Rust, and C# SDKs for language parity with the TypeScript reference. Each emits the same ClusterSecretStore (webhook → real api.smoo.ai config-values endpoint) and per-workload ExternalSecret (secret-tier config keys → UPPER_SNAKE_CASE env vars, with overrides + duplicate guard), using each language's native snakecase util. Epic SMOODEV-1522. - ad2c77f: SMOODEV-1526: Port the ESO bearer-token refresher core (the refresh algorithm +
SecretWriterabstraction) to the Go, Python, Rust, and C# SDKs for parity with the TypeScript reference. Each mirrors the same behavior — invalidate-then-mint each cycle so the bootstrap Secret always holds a near-full-TTL token, fail-loud initial write, non-fatal loop-tick retries — driven by the language's own TokenProvider and unit-tested with a fake writer (no live cluster). The k8s-backed writer is intentionally an optional adapter so base SDK consumers don't pull a heavy k8s client; the TypeScript sidecar remains the canonical deployable. Epic SMOODEV-1522.
v6.6.0
Minor Changes
- bb64793: SMOODEV-1524: Add an ESO manifest generator (
@smooai/config/eso-manifests).buildClusterSecretStore()emits aClusterSecretStorewhose webhook provider points at the realapi.smoo.aiconfig-values endpoint (org + environment baked in, bearer from the bootstrap Secret the eso-refresher keeps fresh), andbuildExternalSecret()emits a per-workloadExternalSecretmapping secret-tier config keys to env-var names (UPPER_SNAKE_CASEby default, with per-key overrides likeDASHSCOPE_API_KEY←alibabaModelStudioApiKey). Replaces the hand-maintained ESO YAML and makes ESO sync a first-class output of the config system. Epic SMOODEV-1522.
v6.5.0
Minor Changes
- 8fe21bd: SMOODEV-1523: Add an ESO bearer-token refresher (
@smooai/config/eso-refresher+smooai-config-eso-refresherbin). It re-mints the OAuth2client_credentialsaccess token on a short interval (reusingTokenProvider) and writes it into the ExternalSecrets bootstrap Kubernetes Secret, so ESO's webhook provider always reads a fresh, non-expired bearer. This is what lets workload secrets sync via ESO instead of being Pulumi-baked at SST deploy time — decoupling@smooai/configsecret-value changes from the ~1h platform deploy (epic SMOODEV-1522).