Repository navigation
v0.19.0
What's New in v0.19.0
Minor release. Theme: agent-facing API surface + audit-grade history —
machine-readable route introspection, verify/repair over HTTP and MCP, an
append-only audit timeline, budgeted context packing, and two namespace
correctness fixes. Note: the previously prepared [0.18.2] patch line
(unified doc recall fix + honest embedding-write reporting, merged to
develop on 2026-09-18) was never tagged — no v0.18.2 tag or release exists,
the latest release remains v0.18.1 — so its contents ship in this version.
Added
- Audit-grade timeline — history survives forget and deprecation (#1280, schema v20) - the
timeline_eventstable is rebuilt without theON DELETE CASCADEforeign key, so deleting a memory no longer wipes its history;deprecate_with_reasonrecords adeprecatedevent with its reason (idempotent), hardforget()writes aforgottombstone before the delete, and the migration backfillscreatedevents for memories that predate the timeline. New MCP tooluteke_timeline(id, optionallimit) reads the trail, including tombstones of forgotten memories. Owner decision 2026-09-18: the timeline is the audit layer — history is never deleted. - Verify/repair over HTTP and MCP (#1272) -
POST /verifyreports the SQLite row count vs vector index size with a match flag,POST /repairrebuilds the vector index from stored embeddings, and MCP gainsuteke_verify/uteke_repair— a live store can be audited and repaired without restartinguteke-serve(write-token surface). Motivated by the stale-vector-index failure mode: rows exist in SQLite+FTS5 but not in the vector index, so memories go missing under fusion/hybrid until repaired. - SKILL.md ships in version lockstep with the CLI (#1274) - the bundled agent skill's version line tracks
CARGO_PKG_VERSION, enforced by two CI tests (parity with the workspace version, byte-equality with the canonical repo copy); content refreshed with the stale-index pitfall and a search-strategy guide (namespace = identity, room = context, tags = scope, when to preferfts5). - Tier-tagged API registry + generated CORE contract list (#1276, uteke-cloud #81) - every registered endpoint carries a contract tier (33 CORE, each verified against uteke-cloud's routers, and 44 LAB); docgen additionally emits
docs/core-contract.json, the machine-readable CORE/LAB list consumed by uteke-cloud's route-parity gate, and the API Docs Fresh CI gate fails when it goes stale. CORE changes now require the cloud contract process, so semantic drift is flagged automatically. - Budgeted context pack:
recall --pack(#1281 Phase 1) -uteke recall --pack [--budget <chars>] [--exclude-ids <ids>]returns a{selected, skipped, budget_used, budget_chars}envelope instead of a bare ranked list: rank-order preserving greedy fill of a character budget, with per-item skip reasons (excludedfor caller-supplied memory IDs already injected this turn,budgetfor items that no longer fit). Deterministic and LLM-free — ranking is untouched (fusion RRF remains the default strategy); this is a selection primitive, not a re-ranker. Surfaces: CLI flags, HTTPPOST /recall("pack": true,"budget_chars","exclude_ids"), MCPuteke_recall(pack,budget_chars,exclude_ids). Phase 2 (MMR diversity) is an experiment gated on LongMemEval + redundancy benchmarks per the issue. GET /routes— machine-readable API route introspection (#1289) -uteke-servenow serves the endpoint registry as JSON: method, path, tier (CORE/LAB), description, request/response types, and related issues for every route, straight fromapi_registry::ENDPOINTS— the same single source of truth that generatesdocs/api-reference.md. Consumers (typed clients, MCP tool descriptions, agent skill notes) can validate against the real contract instead of stale notes, closing the GET-vs-POST and param-name mismatch class that produced false "missing feature" reports. Auth follows the standard rules: anonymous callers get 401 when a token is configured (GET is allowed for read-only tokens, like every read endpoint). Registry entry is LAB tier (introspection only, no CORE contract impact); usage text and docgen grouping updated.
Changed
rememberreports embedding-write failures honestly (#1273) - when embedding generation fails after retries, the vector insert fails, or index persistence fails, the memory is still stored (SQLite + FTS5, keyword-searchable) but every surface now says so instead of failing hard or passing silently:remember_detailed/remember_typed_detailed/remember_auto_infer_detailedreturn aRememberOutcome { id, embedding_written, warning };POST /rememberandPOST /room/rememberresponses carryembedding_written+warning; the CLI prints a warning line and includes both fields in JSON output; MCPuteke_rememberappends the warning to its result text. Recoverable any time viauteke repair. (Originally slated for the untagged v0.18.2 patch line.)
Fixed
- Doc list honors
--namespaceon CLI, HTTP, and MCP (#1268, #1269) -doc listaccepted a namespace nowhere despite the server help text advertising one; newStore::list_documents_nsapplies an exact-match SQL filter, the HTTPDocListParamsgains a back-compatnamespacefield, MCPuteke_doc_listacceptsnamespace, and NULL-namespace documents remain global-view-only by design (consistent with memory listing). - Unified recall (
--type all) no longer floods results with cross-namespace documents (#1270, #1271) - the document arm ignored the recall's namespace (doc_search'snsparameter was unused), so documents from any namespace — including NULL-namespace rows — leaked into every scoped recall; newUteke::doc_search_in(query, limit, mode, namespace)retains only exact-namespace documents (NULL-namespace docs are global-view-only, matching the #1269 doc-list semantics on develop). Document scores are now the raw hybrid RRF sum (~0.016–0.033) instead of the rank-derived(k+1)/(k+1+rank)that reported a fake 1.000 for rank-0 regardless of query and outranked every memory fusion score. The memory arm is called withmin_score 0.0(#1223 rank-based scores) and the caller's threshold is applied post-merge, so--min/--strictbehave consistently on both result types. Unified document results now carry theirnamespace. Core-only change (crates/uteke-core/src/lib.rs) — CLI/MCP/HTTP surface unchanged. Design note: documents are global by design (NULL namespace = global view), so namespace-scoped unified recall returns memories only; documents remain discoverable via globaldoc search. (Originally slated for the untagged v0.18.2 patch line.) GET /room/memorieshonors thenamespacequery param (#1288) - the endpoint parsed onlyroom_id,limit, andauthor, so anynamespacevalue was silently ignored and callers got a 200 with the room's full cross-namespace list — wrong scope presented as success (issue repro: 72 entries returned instead of the 19 in the requested namespace). The param is now parsed in the handler and applied at the SQL level via newUteke::recall_room_scoped(room_id, author, namespace, limit);recall_roomremains as a compatibility wrapper with the old cross-namespace default. Filtering happens inside the same query as LIMIT (no fetch-then-post-filter, #1085 class), the four duplicated SQL variants collapse into one dynamically composed WHERE clause (literal fragments stay in SQL text, all values bound as parameters), and usage text, registry description, anddocs/api-reference.mdwere regenerated. New core and server tests cover the scoped filter, author+namespace combination, legacy signature, and ghost namespaces.
Docs
- Evergreen README hero banner + install URL consistency (#1283), star-history embed replaces the self-hosted chart (#1265), AGENTS.md points at the written CORE/LAB contract as source of truth (#1275).
Dependencies
- clap 4.6.7, clap_complete 4.6.11, uuid 1.26.1, toml 1.1.6+spec-1.1.0, vecq-core 0.3.1.
📦 Downloads
Each archive contains three binaries + ONNX Runtime shared library:
| Binary | Description |
|---|---|
uteke |
CLI tool |
uteke-serve |
HTTP server daemon |
uteke-mcp |
MCP server (stdio + HTTP) |
libonnxruntime.so* / libonnxruntime*.dylib / onnxruntime*.dll |
ONNX Runtime |
| Platform | File |
|---|---|
| Linux x86_64 (AVX2) | uteke-x86_64-unknown-linux-gnu-v0.19.0.tar.gz |
| Linux x86_64 (Legacy, SSE4.2) | uteke-x86_64-unknown-linux-gnu-legacy-v0.19.0.tar.gz |
| Linux ARM64 | uteke-aarch64-unknown-linux-gnu-v0.19.0.tar.gz |
| macOS Apple Silicon | uteke-aarch64-apple-darwin-v0.19.0.tar.gz |
| Windows x86_64 | uteke-x86_64-pc-windows-msvc-v0.19.0.zip |
Legacy Bundle (Linux only) — Includes a SSE4.2-only ORT sidecar (
ort-legacy/) for CPUs without AVX2 (Intel Celeron J4125/N4020). Use this bundle to avoid SIGILL crashes on older hardware.
🚀 Quick Start
# Quick install (Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/codecoradev/uteke/main/install.sh | sh
# Pin a specific version
UTEKE_VERSION=v0.19.0 curl -fsSL https://raw.githubusercontent.com/codecoradev/uteke/main/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/codecoradev/uteke/blob/main/CHANGELOG.md
Community contributors
(No external contributions in this cycle. Full contributor list: https://github.com/codecoradev/uteke/graphs/contributors)