What's Changed
- Stop whole-schema claim test fixtures deleting other xdist workers' operations by @nicoloboschi in #3469
- docs: changelog and blog post for v0.9.1 by @nicoloboschi in #3438
- docs: rework the topbar, page chrome and skill installer by @nicoloboschi in #3495
- docs: specify Claude Sonnet benchmark version by @Sanderhoff-alt in #3468
- fix(retain): enqueue relink victims before delta chunk deletion by @koriyoshi2041 in #3420
- fix(db): keep the DSN's application_name across pool reuse (blank pg_stat_activity behind pgbouncer) by @nicoloboschi in #3491
- fix(retain): entity postings and witness coverage inside a write-group by @nicoloboschi in #3497
- fix(recall): keep the most selective terms for native BM25 long queries by @nicoloboschi in #3498
- perf(worker): one pooled connection per poll cycle, one statement of session setup by @nicoloboschi in #3501
- feat(coding-agents): DeepSeek Harness (dsh) support by @nicoloboschi in #3504
- blog: Give DeepSeek Harness a Memory of Your Codebase by @benfrank241 in #3507
- fix(api): batch the retention sweep so it stops stalling foreground queries by @nicoloboschi in #3539
- fix(mental-models): last_refreshed_at records the refresh, not the source watermark by @nicoloboschi in #3538
- fix(coding-agents): start the local daemon for plugin harnesses too by @nicoloboschi in #3542
- fix(maintenance): skip a schema under concurrent DDL instead of deadlocking by @nicoloboschi in #3543
- fix(ci): authenticate Hermes compatibility clone by @Sanderhoff-alt in #3536
- fix(coding-agents): stop forcing a 300s idle timeout on the shared daemon by @nicoloboschi in #3544
- fix(tests): stop the LLM judge mistaking context for the response by @nicoloboschi in #3546
- fix(engine): stamp memory_units.updated_at on the writes that change a memory (#3490) by @nicoloboschi in #3502
- fix: disable automatic cache affinity for Azure OpenAI by @koriyoshi2041 in #3521
- docs(recall): say that the created_after/created_before window filters updated_at by @nicoloboschi in #3551
- perf(maintenance): make the cross-tenant sweeps proportionate to tenant count by @nicoloboschi in #3552
- fix: report total on the mental-model and directive list endpoints by @nicoloboschi in #3548
- blog: 20,000 Stars — How Hindsight Got Here, Version by Version by @benfrank241 in #3503
- fix(knowledge-base): patch a page's trigger instead of replacing it, on create and update by @nicoloboschi in #3549
- fix(mental-models): keep at most one queued refresh per model (#3487) by @nicoloboschi in #3550
- feat(coding-agents): make the knowledge-page refresh trigger configurable by @nicoloboschi in #3545
- fix(coding-agents): scope knowledge pages to the repository they are about by @nicoloboschi in #3571
- fix(deps): bump google-genai past the eu/us multi-region 404 fix by @ferrastas in #3568
- fix: use ASCII boundaries for memory defense patterns by @oldnicke in #3569
- fix(coding-agents): pin the bank to where the session started in a non-git tree by @nicoloboschi in #3573
- fix(coding-agents): consolidate one set of observations per bank by @nicoloboschi in #3575
- feat(knowledge-base): expose a page's refresh trigger on the tree by @nicoloboschi in #3572
- feat(embeddings): asymmetric query/passage prefixes for text-in providers by @nicoloboschi in #3570
- fix(engine): drop null metadata values at retain and recall (#3209) by @NovaLux12 in #3531
- fix(consolidation): keep source dates when observations merge by @nicoloboschi in #3500
- fix(embed): harden daemon and UI lifecycle (#3099, #3100, #3517, #3520, #3527) by @nicoloboschi in #3585
- fix(memory): add resolve_entities flag to update_memory and retain by @nicoloboschi in #3576
- fix(api): paginate the bank list by @nicoloboschi in #3586
- fix(recall): keep the observation graph arm out of a nested-loop plan (#3510) by @nicoloboschi in #3588
- fix(db): earn per-bank vector indexes by size instead of creating three per bank (#3485) by @nicoloboschi in #3561
- test: assert memory state via the engine read API, not raw SQL by @nicoloboschi in #3591
- fix(recall): make the recall budget reach the vector index by @nicoloboschi in #3541
- fix(coding-agents): let hindsight_reflect wait as long as it is configured to (#3590) by @nicoloboschi in #3592
- fix(coding-agents): timestamp the aggregated git-log document so its facts get occurrence dates (#3602) by @nicoloboschi in #3605
- docs(readme): track hindsight-client downloads, cover the missing concepts by @nicoloboschi in #3608
- fix(coding-agents): keep a long-lived host's credential live, and say which one it used (#3600) by @nicoloboschi in #3606
- fix(coding-agents): honor retainSessions in the hook harnesses (#3596) by @nicoloboschi in #3607
- feat(mcp): expose knowledge-base CRUD as native MCP tools by @nicoloboschi in #3611
- fix(embed): inherit unset LLM settings instead of overwriting them (#3253) by @Sanderhoff-alt in #3359
- fix(knowledge): cast the mental_models.name bind for vchord writes by @valda in #3615
- fix(coding-agents): name the calling harness in every MCP registration by @nicoloboschi in #3612
- fix(knowledge-base): answer page staleness per scope, not from the bank watermark (#3291) by @nicoloboschi in #3589
- fix: preserve Voyage asymmetric embedding semantics by @Tosko4 in #3515
- fix(cli): suppress ANSI color and spinner when output is not a TTY by @yossiovadia in #3598
- fix(coding-agents): recapture an initiative when the plan changes (#3616) by @nicoloboschi in #3617
- Send free-form Ollama calls to the API that honours num_ctx by @nicoloboschi in #3620
- chore(deps): close every open medium/high Dependabot alert by @nicoloboschi in #3624
- feat(mental-models): record what a refresh did on the operation itself by @nicoloboschi in #3609
- fix(retain): drop silent getattr config defaults so a wrong config fails loudly by @nicoloboschi in #3610
- fix(mental-models): unsay facts a page cites that no longer exist (#3475) by @nicoloboschi in #3618
- chore(clients): regenerate the Go client lockfile for testify 1.12.1 by @nicoloboschi in #3631
- fix(coding-agents): inherit opt-in across worktrees (#3471) by @nicoloboschi in #3627
- chore(clients): re-sync the Go client's go.mod/go.sum by @nicoloboschi in #3632
- fix(observability): trace the worker process and join the caller's trace by @nicoloboschi in #3625
- Add GitHub Copilot subscription LLM provider by @dudujuju828 in #3597
- chore(clients): re-export the two mental-model types the TS barrel is missing by @nicoloboschi in #3635
- fix(openclaw): inject [doc:<document_id>] provenance into auto-recall memories by @xiaoxiaoHe-E in #3583
- fix(coding-agents): answer tools/list when disabled (#3537) by @nicoloboschi in #3626
- feat(mental-models): a minimum interval between automatic refreshes (#3480) by @nicoloboschi in #3621
- fix(memory-defense): fail the retain on a malformed policy instead of skipping screening by @nicoloboschi in #3636
- docs(api): correct recall fact type descriptions by @Sanderhoff-alt in #3547
- fix(scripts): preserve go client go.mod/go.sum across regeneration by @Sanderhoff-alt in #3540
- feat(control-plane): show per-model staleness, and say it the same way everywhere by @nicoloboschi in #3643
- fix(llm): forward consolidation temperature by @lusoris in #3511
- engine: serve the addressed document/chunk/entity reads from the store too by @nicoloboschi in #3560
- blog: Give Every Hermes Bot Its Own Memory by @benfrank241 in #3648
- retain: run delta for a store-owned bank, fenced by the store's own compare-and-set by @nicoloboschi in #3650
- fix(openclaw): strip operator-configured display-name prefix from recall and retain by @chethanuk in #3120
- fix(db): make min_rows=0 mean "off", and stop counting rows on every write by @nicoloboschi in #3638
- fix(openclaw): make queued retains idempotent by @r266-tech in #3143
- fix(config): validate and persist bank config as one serialized unit (#3037) by @nicoloboschi in #3639
- fix(ci): give the Windows process probe a real deadline, and close the trace-recorder leak by @nicoloboschi in #3661
- fix(retain): honour the retain strict-schema flag in the batch path by @kamilfurtak in #3656
- feat(llm): route batch retain through a batch-capable multi-LLM member by @handnewb in #3649
- fix(coding-agents): let knowledge pages see the observations they ask for, and stop tagging initiative markers with a page id by @nicoloboschi in #3664
- fix(cli): exit non-zero when configure receives invalid API URL by @Alan5168 in #3356
- fix(mcp): pass the retain strategy to the worker by @fhiltscher in #3296
- Memory backend: store-owned delta retain, bank-list times, and generic comments by @nicoloboschi in #3660
- fix(mental-models): store delta documents as verbatim markdown blocks (#3361, #3273) by @nicoloboschi in #3622
- fix(kb): serialize knowledge tree writes by @Sanderhoff-alt in #3358
- fix(query-analyzer): reject lone four-digit integers as years (#3250) by @nicoloboschi in #3665
- fix(tests): unbreak main — post-#3649 batch stubs and a leaked tracing global by @nicoloboschi in #3668
- fix(retain): delete the removed chunks when a re-retain only removes content by @nicoloboschi in #3676
- comments updated by @coder-with-ai in #3679
- blog: Introducing Hindsight Academy — learn agent memory by doing by @benfrank241 in #3682
- fix(tests): run the maintenance-routine e2e against the current routine body by @nicoloboschi in #3680
- fix(control-plane): keep the memories search open when the query is cleared by @nicoloboschi in #3697
- feat(recall): let callers supply the temporal window instead of parsing it by @nicoloboschi in #3678
- fix(retain): treat provider content-policy refusals as permanent (#3690) by @nicoloboschi in #3698
- fix(llm): bind batch recovery to the account that submitted the batch by @nicoloboschi in #3699
- blog: Give Your elizaOS Agent a Long-Term Memory by @benfrank241 in #3705
- docs: use the elizaOS brand mark for the integration icon by @benfrank241 in #3707
- fix(embed): use UTF-8 for profile env files by @koriyoshi2041 in #3748
- docs(coding-agents): generate the companion skill from the README (#3735) by @nicoloboschi in #3753
- fix(openclaw): probe append capability in local-daemon mode (#3686) by @nicoloboschi in #3706
- docs(coding-agents): add Devin CLI to harness list in README intro (#3721) by @Sanderhoff-alt in #3738
- fix(coding-agents): hide Windows child processes by @koriyoshi2041 in #3736
- fix(windows): hide daemon subprocess windows by @Sanderhoff-alt in #3743
- fix(llamacpp): report a missing llama.cpp instead of endless connection errors by @nicoloboschi in #3758
- fix(recall): skip over-budget facts instead of stopping, and never answer a match with nothing (#3688) by @nicoloboschi in #3704
- fix(coding-agents): tolerate hidden page triggers by @Sanderhoff-alt in #3742
- fix(integrations): resolve bare-hub project names by @Sanderhoff-alt in #3741
- fix(reflect): fail when a run produces no answer instead of storing a placeholder (#2959) by @nicoloboschi in #3761
- fix(retain): retry and fail loudly on schema-drifted fact extraction (#3708) by @nicoloboschi in #3760
- fix(coding-agents): find Claude sessions for underscore paths by @pstanton237 in #3732
- fix(entities): don't merge a name onto an existing entity on history alone, + a resolution eval by @nicoloboschi in #3752
- fix(knowledge-pages): move a page's scope onto its mental model, and stop trigger patches resetting it (#3687) by @nicoloboschi in #3755
- fix(coding-agents): check knowledge pages before reflecting by @altaywtf in #3702
- fix(db): log the exception class when a DB error has no message by @nicoloboschi in #3762
- fix(worker): serialise consolidation claims per bank within a batch (#3700) by @nicoloboschi in #3764
- fix(retain): bound retain's memory by a budget instead of by the document (#3756) by @nicoloboschi in #3763
- test(retain): cover the retain.completed outbox across a split batch by @nicoloboschi in #3767
- perf(retain): stream the sub-batch split instead of collecting it (#3756) by @nicoloboschi in #3770
- blog: Knowledge Graphs vs. Vector Search for Agent Memory by @benfrank241 in #3766
- fix(consolidation): classify batch LLM failures instead of retrying everything (#3684) by @nicoloboschi in #3783
New Contributors
- @ferrastas made their first contribution in #3568
- @NovaLux12 made their first contribution in #3531
- @yossiovadia made their first contribution in #3598
- @dudujuju828 made their first contribution in #3597
- @xiaoxiaoHe-E made their first contribution in #3583
- @lusoris made their first contribution in #3511
- @kamilfurtak made their first contribution in #3656
- @fhiltscher made their first contribution in #3296
- @coder-with-ai made their first contribution in #3679
- @pstanton237 made their first contribution in #3732
- @altaywtf made their first contribution in #3702
Full Changelog: v0.9.1...v0.9.2