v0.94.0 — the media suite
Two media builtins take the stdlib to 25: nika:image_generate (generation and editing, local-first providers, provenance manifests, content credentials preserved) and nika:tts_generate (one sovereign /v1/audio/speech wire · a real deterministic WAV under mock). Every run now writes .nika/traces/ by default and --task scopes execution to one upstream cone. The catalog rides the wire (catalog/tools --json plus their MCP twins — 8 read-only tools on protocol 2026-07-28), cost_usd rides task_completed without ever faking a zero, and Hugging Face + NVIDIA join the 16-provider canonical catalog.
Install: brew install supernovae-st/tap/nika · or curl -fsSL https://nika.sh/install.sh | sh
📚 The full arc — changelog with tags · Docs · Roadmap
0.94.0 - 2026-07-06
✨ Highlights
- The media suite — two new builtins take the stdlib to 25.
nika:image_generate(PR 173 · providers v1.1 local-first + xai
PR 174 ·mode: editM-A/M-A.2
PR 188/PR 189) and
nika:tts_generate(PR 176 · one sovereign
/v1/audio/speechwire = LocalAI/Kokoro/Speaches · openai · elevenlabs · a real
deterministic WAV under mock). Assets land on disk with provenance manifests —
content credentials detected and preserved (PR 177) ·
the elevenlabs watermark declared (PR 183). - Every run leaves a journal —
.nika/traces/<ts>-<id>.ndjsonby default
(PR 170 · opt out--no-trace-file/
NIKA_NO_TRACE_FILE), andnika run --task <id>scopes execution to one task
and its upstream cone. CEL expression completion lands in the LSP. - The catalog rides the wire —
nika catalog --json·nika tools --json
(PR 172) + their MCP twins:
the oracle now serves 8 read-only tools, and the server speaks MCP
2026-07-28 natively (PR 171) while
accepting 2025-11-25 clients (PR 185). - Honest money — real per-task spend:
cost_usdridestask_completed
(PR 168 · absent for mock/local,
never a fake zero) and agent loops meter tool-reported cost
(PR 178). - Providers 16 — huggingface + nvidia join the canonical catalog
(PR 167 · ADR-104). nika doctor --ping— the local ports, actually probed
(PR 195 · TCP connect-only ·
300ms cap · loopback/configured URLs only · the default run stays offline).
nika checkfindings carry severity + a docs URL
(PR 184).
🧹 Chore
- pack — re-vendored from spec main: the 16-provider/25-builtin markers ·
the tts error-category ladder · the newmcp:canon section ride the binary. - ci — the test gate runs under nextest (PR 192) ·
public-api baselines canonicalized from the ubuntu artifact ·
iter_over_hash_typedenied (PR 181). - cli — round-8 visual polish (PR 169) ·
the comprehension pass (PR 166) ·
the init hand-off drops its phantom indentation (PR 194).
What's Changed
- docs(readme): teach qwen3.5 on the re-runnable surfaces by @ThibautMelen in #165
- CLI comprehension pass: see WHAT ran — outputs, peek, flow, clarity by @ThibautMelen in #166
- feat(providers): huggingface + nvidia join the canonical catalog (16) by @ThibautMelen in #167
- feat(nika-runtime): real per-task spend — cost_usd rides task_completed by @ThibautMelen in #168
- feat(nika-cli): round-8 visual polish — links, sync frames, heat, one formatter by @ThibautMelen in #169
- feat(nika-mcp): negotiate MCP 2026-07-28 — the stateless rev, natively by @ThibautMelen in #171
- feat(nika-builtin): nika:image_generate — the 24th builtin rides a dedicated image plane by @ThibautMelen in #173
- feat(catalog): export the embedded catalogs on the wire — nika catalog/tools --json + MCP twins by @ThibautMelen in #172
- feat(nika-builtin): image providers v1.1 — local-first + xai by @ThibautMelen in #174
- feat(nika-builtin): image polish — in-file provenance · honest cost · doctor by @ThibautMelen in #175
- feat(nika-builtin): nika:tts_generate — the 25th builtin (stdlib §Audio) by @ThibautMelen in #176
- feat(nika-builtin): content credentials — detect-and-preserve + surface by @ThibautMelen in #177
- feat(nika-verb-agent): meter tool-reported cost through the loop by @ThibautMelen in #178
- feat(nika-cli): doctor names the tts plane by @ThibautMelen in #179
- fix(nika-builtin): heal the tts↔image drift — the architect review's cheap P-items by @ThibautMelen in #180
- chore(lints): deny iter_over_hash_type — determinism as a ratchet by @ThibautMelen in #181
- refactor(nika-builtin): seed the media/ core — first two re-homings by @ThibautMelen in #182
- feat(nika-builtin): tts manifest declares the elevenlabs watermark by @ThibautMelen in #183
- docs(readme): media gif v2 — one file, both senses by @ThibautMelen in #186
- feat(nika-mcp): accept protocol 2025-11-25 — the version clients send today by @ThibautMelen in #185
- refactor(nika-builtin): media/wire — the transient status matrix, named once by @ThibautMelen in #187
- feat(nika-builtin): image mode:edit — M-A (args · permit-gated reads · mock) by @ThibautMelen in #188
- feat(check): findings carry severity + docs_url — the --explain wire by @ThibautMelen in #184
- feat(nika-builtin): openai edit wire — M-A.2 (multipart · proven live) by @ThibautMelen in #189
- feat(cli): the Unix dash — check/graph/inspect read stdin by @ThibautMelen in #190
- ci: the test gate runs under nextest — process isolation, parallel by @ThibautMelen in #192
- docs(nika-catalog): builtins.rs doc-comments catch up to 25 by @ThibautMelen in #191
- feat(nika-cli): painted diagnostics — rustc-grade source frames on check by @ThibautMelen in #193
- fix(nika-cli): init hand-off loses its phantom indentation by @ThibautMelen in #194
- feat(nika-cli): doctor --ping — the local ports, actually probed by @ThibautMelen in #195
- chore(nika-cli): sync public-api baseline — doctor::run gained ping by @ThibautMelen in #198
- feat(run): run journal + --task cone + CEL expression completion by @ThibautMelen in #170
- chore(release): v0.94.0 — media suite · run journal · the catalog on the wire by @ThibautMelen in #201
Full Changelog: v0.93.1...v0.94.0