github vectorize-io/hindsight v0.10.0

3 hours ago

What's Changed

  • docs: changelog and blog post for v0.9.2 by @nicoloboschi in #3765
  • fix(retain): batch a document's chunk embeddings instead of one request per chunk by @nicoloboschi in #3785
  • perf(tokenizer): replace tiktoken with quicktok and default to o200k_base by @nicoloboschi in #3788
  • fix(benchmarks): repair retain_memory's imports of removed engine symbols by @nicoloboschi in #3789
  • retain: rebuild an oversized item's sub-batch from its original span by @nicoloboschi in #3806
  • fix(search): score pg_textsearch results per row by @mameikagou in #3802
  • retain: accumulate a document's body instead of rebuilding it per sub-batch by @nicoloboschi in #3809
  • fix(coding-agents): don't let one stray file abort the Claude import, and give Prime Agent the companion skill (#3771, #3772) by @nicoloboschi in #3812
  • fix(control-plane): scope the Knowledge view's page and mental model ids to the current bank by @nicoloboschi in #3813
  • blog: Your Agent Can Now Manage Its Own Knowledge Base Over MCP by @benfrank241 in #3822
  • feat(recall): add a per-bank enable_text_search toggle for pure vector recall by @nicoloboschi in #3819
  • feat(templates): add Business Executive bank template by @benfrank241 in #3834
  • blog: How We Made Retain's Peak Memory Flat, from 4 MB to 90 MB Documents by @benfrank241 in #3839
  • fix(transfer): remap mental model evidence ids by @nicoloboschi in #3833
  • feat(alembic): let a deployment own a maintenance routine by @cdbartholomew in #3842
  • docs: update retain extraction mode documentation by @nicoloboschi in #3838
  • feat: export knowledge base in document transfers by @nicoloboschi in #3855
  • fix(llm): honor OpenAI's x-ratelimit-reset-* headers on 429s by @romanbsd in #3508
  • blog: Cross-Encoder Reranking — The Last Stage of Agent Memory Recall by @benfrank241 in #3868
  • fix(retain): bound the within-batch link passes so a delta cannot OOM the worker (#3848) by @nicoloboschi in #3856
  • Fix TEI stale socket retries by @oldnicke in #3375
  • feat(control-plane): add i18n for knowledge base and refine mental models by @Sanderhoff-alt in #3677
  • fix(embeddings): bounded retry/backoff + timeout for litellm/litellm-sdk providers by @icculp in #3090
  • fix(worker): detect stuck tasks by stage progress by @BrianHotopp in #3720
  • test: restore the global metrics collector instead of leaking it (#3780) by @nicoloboschi in #3816
  • fix(providers): native ollama path honours the configured LLM timeout by @MasterST1337 in #3797
  • feat(helm): add extraContainers and extraInitContainers to api, worker and control plane by @Adrastopoulos in #3801
  • fix(reflect): accept a top-level array of delta operations by @ebarkhordar in #3829
  • feat(helm): add Prometheus operator ServiceMonitor support by @aWN4Y25pa2EK in #3847
  • perf(local): skip full GC for CPU reranker providers by @Sanderhoff-alt in #3858
  • feat(pg_search): allow extension function schema to be configured by @Sanderhoff-alt in #3759
  • fix(worker): bound wedged consolidation tasks by @Sanderhoff-alt in #3746
  • [CLI] Add a --trigger-mode full|delta flag to mental-models update by @mdbenito in #3513
  • fix(sdk): send only the trigger settings the caller named by @nicoloboschi in #3913
  • fix(retain, reflect): drop the source-language rule when an output language is set by @feniix in #3777
  • fix(retain): sanitize model-derived fact text by @BrianMcBrayer in #3730
  • fix(kb): apply a knowledge-node patch in one transaction by @nicoloboschi in #3914
  • fix(admin): sync identity sequences after restore by @r266-tech in #3844
  • fix(api): preserve webhook validation status codes by @r266-tech in #3832
  • fix(openclaw): add non-interactive flags to plugin install in smoke test by @Sanderhoff-alt in #3917
  • feat(mental-models): meter model content by what is delivered, not by which endpoint served it by @cdbartholomew in #3869
  • fix(embed): read CLI profile config as UTF-8 by @koriyoshi2041 in #3850
  • fix(tests): name the ANN index the plan must use (#3619) by @nicoloboschi in #3911
  • fix: propagate configured temperature through reflect calls by @koriyoshi2041 in #3828
  • fix(db): memoise InvalidNameError GUC rejections like UndefinedObjectError by @Andreymi in #3826
  • fix(api): round-trip the whole retain item so reprocess replays it faithfully by @shauneccles in #3874
  • fix(security): run operation validator in get_mental_model_history (#… by @Sword-Saint69 in #3835
  • fix(cli): preserve base64 '=' padding when parsing config-file api_key by @2anoubis in #3909
  • fix(search): delegate pgroonga query tokenization to pgroonga_tokenize by @Sanderhoff-alt in #3907
  • fix(retain): constrain occurred_start/occurred_end so grammar-constrained models can't emit prose by @nickanderson in #3845
  • refactor(bank): eliminate redundant existence queries in _ensure_bank_exists by @Sanderhoff-alt in #3672
  • perf(retain): optimize embedding_to_pgvector serialization via zero-copy orjson by @Sanderhoff-alt in #3815
  • fix(llm): raise OutputTooLongError when a non-streaming completion is truncated by @ebarkhordar in #3827
  • fix: recover Codex OAuth refresh after shared auth rotation by @dwayn in #3804
  • fix(tests): stop generating webhook parametrize uuids at collection time by @nicoloboschi in #3922
  • fix(consolidation): apply one LLM response's writes in one transaction by @nicoloboschi in #3923
  • fix(coding-agents): stop unsafe gitlog cleanup by @r266-tech in #3879
  • fix(embed): decode control center log tail as UTF-8 by @koriyoshi2041 in #3918
  • fix(llm): derive visible output tokens from total on OpenAI-compatible providers (#3851) by @nicoloboschi in #3920
  • fix(coding-agents): stop opencode's install from replacing a JSONC config by @etnperlong in #3843
  • feat: expose core mental model trigger settings over MCP by @Sanderhoff-alt in #3739
  • docs(docker): add guide and recipe for building CUDA standalone image by @Sanderhoff-alt in #3749
  • fix(reflect): accept id-bearing blocks in delta add_section ops (#3901) by @nicoloboschi in #3919
  • docs: stop recommending --user for Docker bind mounts (#3863) by @nicoloboschi in #3934
  • fix(search): embed the whole mental-model document on every write by @nicoloboschi in #3928
  • fix(daemon): drop the idle timeout that could kill an in-flight request by @nicoloboschi in #3930
  • fix(anthropic): group consecutive tool results into one user message by @zlguo1996 in #3910
  • fix(llm): repair malformed JSON in the openai-compatible provider (#3683) by @nicoloboschi in #3935
  • fix(documents): skip the retag cascade when a tags PATCH changes nothing (#3912) by @nicoloboschi in #3931
  • fix(embeddings): add retry logic and dimensions config for LiteLLM provider (#3695) by @Sanderhoff-alt in #3744
  • fix(recall): score coarse dates from their period, not its first day (#3893) by @nicoloboschi in #3933
  • fix(docker): ship images free of fixed HIGH CVEs and scan them daily by @nicoloboschi in #3936
  • memories: unify store-owned writes, delta-retain CAS, and PG-free tracking by @nicoloboschi in #3696
  • docs(hermes): disable Hermes's built-in memory via config flags by @nicoloboschi in #3940
  • fix(recall): honour min_scores.keyword on every text-search backend (#3882) by @nicoloboschi in #3938
  • fix(llm): give every provider a real per-request deadline (#3898) by @nicoloboschi in #3946
  • Fuse observation graph expansion into one database fetch by @jervaise in #3859
  • fix(embeddings): bound ONNX forward passes and import embed calls (#3891) by @nicoloboschi in #3948
  • fix(search): drop search-trace fields that are structurally always empty by @nicoloboschi in #3947
  • feat(reflect): send the operation schema on mental model delta refresh by @nicoloboschi in #3937
  • fix(retain): make reprocess re-extract instead of silently no-opping (#3899) by @nicoloboschi in #3949
  • config: read a bank's own config fresh, not through the per-process cache by @nicoloboschi in #3952
  • fix(tests): isolate the worker claim tests in their own schema (#3963) by @nicoloboschi in #3970
  • feat(coding-agents): add native DeepAgents Dcode integration by @nicoloboschi in #3967
  • fix(docker): drop npm from the runtime stages and scan every runtime base by @rschlek in #3960
  • config: keep the hot path cached; freshness belongs to the caller that needs it by @nicoloboschi in #3975
  • coding-agents: keep the installed runtime current by itself by @nicoloboschi in #3965
  • fix(monitoring): make Grafana dashboards importable on older Grafana by @oldnicke in #3972
  • memories: an edit writes its own vector, in the same write as the fields by @nicoloboschi in #3964
  • fix(knowledge): switch native knowledge BM25 from websearch AND to disjunctive OR by @Sanderhoff-alt in #3945
  • fix(coding-agents): only ever ADD to a bank's config, never overwrite it by @nicoloboschi in #3966
  • fix(engine): authorize and provision banks before legacy mutations by @Sanderhoff-alt in #3969
  • feat(coding-agents): add qwen-code as a hook harness by @nicoloboschi in #3979
  • metrics: time the operation-validator hooks, which run outside the operation's timer by @nicoloboschi in #3976
  • fix(coding-agents): stop a failed git probe from forking a worktree into its own bank by @nicoloboschi in #3981
  • fix(consolidation): resolve observation_scopes before tag-set batching by @ferrastas in #3954
  • fix(structured-output): strip $ref sibling keywords from strict schemas by @nicoloboschi in #3944
  • fix(bank-template): resolve stale snapshot race during template import by @Sanderhoff-alt in #3971
  • fix(retain): stop deriving the extraction narrator from the bank's display name (#3962) by @nicoloboschi in #3978
  • fix(mental-models): skip the reflect loop when the scope holds nothing to read by @nicoloboschi in #3943
  • fix(coding-agents): survey prompt says Glob, not Read, for the directory layout by @MasterST1337 in #3796
  • docs(docker): reserve shared memory for embedded PostgreSQL by @aunitt in #3896
  • fix(coding-agents): identify safe MCP knowledge reads by @altaywtf in #3818
  • fix(worker): rotate slots across banks so bulk ingest stops starving them (#3861) by @nicoloboschi in #3980
  • feat(llm): per-provider Codex credentials directory (#3793) by @nicoloboschi in #3983
  • feat(webhooks): emit X-Hub-Signature-256 and a timestamped signature by @nicoloboschi in #3986
  • fix(ci): stop one stalled Gemini call from outliving the caller, and isolate the third claim-test file by @nicoloboschi in #3982
  • fix(reflect): name the sections array the document schema requires by @nicoloboschi in #3984
  • coding-agents: support opencode 2, whose plugin API shares nothing with v1's by @nicoloboschi in #3985
  • fix(recall): boost the prioritised arm in rank space, not score space (#3956) by @nicoloboschi in #3987
  • feat(coding-agents): add per_source observation scoping by @shauneccles in #3872
  • chore(coding-agents): sync generated files after per_source (#3872) by @nicoloboschi in #3994
  • feat(extensions): add hindsight-extensions registry and unbundle Supabase by @nicoloboschi in #3988
  • feat(coding-agents): first-class pi support, sharing one extension adapter and installer with Prime Agent by @nicoloboschi in #3993
  • feat(changelog): enumerate each release's migrations, with tables and volume by @nicoloboschi in #3996
  • fix(coding-agents): the runtime auto-update never fired — registry 406 on the /latest media type by @nicoloboschi in #3997
  • blog: What's New in Hindsight Cloud — June-August Updates by @benfrank241 in #3951
  • blog: date the Cloud roundup 2026-09-01 by @benfrank241 in #4000
  • metrics: time the recall phases, so the request's largest share stops being a residual by @nicoloboschi in #3999
  • fix(reflect): fail the run when a retrieval tool fails, and record refused refreshes by @nicoloboschi in #4003
  • fix(llm): name the phase a stalled LLM request died in (#3881) by @nicoloboschi in #3992
  • fix(tracing): name API traces after the operation and link queued retain to its worker by @nicoloboschi in #4006
  • metrics: record a store-answered recall's phases on ordinary traffic, not only under a trace by @nicoloboschi in #4007
  • fix(retain): invalidate observations when a re-retain changes a document's scoping by @nicoloboschi in #4019
  • docs: make every integration changelog reachable, and compact the Integrations Hub by @nicoloboschi in #4005
  • fix(local-models): copy misaligned weights out of mapped storage, and fail fast by @nicoloboschi in #4020
  • fix(loop-watchdog): don't report the stall that stop() itself causes by @nicoloboschi in #4021
  • feat(entity-labels): add an open-vocabulary multi-valued label type (multi-text) by @nicoloboschi in #4027
  • perf(tokenizer): move token counting from quicktok to toktok-rs by @nicoloboschi in #4022
  • fix(api): warm dateparser locale dictionaries once, under a lock by @nicoloboschi in #4032
  • perf(api): stop importing LiteLLM and markitdown on every startup by @nicoloboschi in #4031
  • fix(mental-models): return 409 on a duplicate mental-model id by @kubaodias in #4024
  • fix(clients): close the bank-config drift between the wrapper SDKs and the server by @nicoloboschi in #4030
  • feat(api): run migrations in a subprocess, controlled by a flag by @nicoloboschi in #4033
  • fix: two test regressions from #4022 and #4031 (tokenizer cache leak, markitdown OCR fail-fast) by @nicoloboschi in #4036
  • feat(recall): fuzzy tag matching on tag_groups leaves (#4026) by @nicoloboschi in #4028
  • fix(cursor): register hooks on init, ship rules_file.py, flush on sessionEnd by @nicoloboschi in #4041
  • fix(recall): score fuzzy tag similarity on the value, not the namespaced tag by @nicoloboschi in #4045
  • refactor(retain): format pgvector literals without orjson, and drop orjson entirely by @nicoloboschi in #4040
  • blog: Four More Coding Agents That Remember Your Project by @benfrank241 in #4042
  • feat: run Hindsight on free-threaded CPython 3.14 (-py3.14t image) by @nicoloboschi in #4037
  • feat(api): serve from several event loops in one process by @nicoloboschi in #4067
  • memories: drop count_chunks from the extension seam by @nicoloboschi in #4080
  • perf(embeddings): issue a remote provider's batches concurrently (#4039) by @nicoloboschi in #4043
  • refactor(api-slim): write each duplicated policy once by @nicoloboschi in #4083
  • chore(deps): bump esbuild to 0.28.x and body-parser to 1.20.6 by @cdbartholomew in #4050
  • chore(deps): bump nltk to 3.10.3 in the llamaindex and pipecat locks by @cdbartholomew in #4051
  • chore(deps): bump fast-uri to 3.1.7 and browserslist to 4.28.8 by @cdbartholomew in #4088
  • ci: run the core suite when the workspace lockfile or root manifest changes by @cdbartholomew in #4089
  • chore(deps): bump torch to 2.13.0 and tornado to 6.5.8 by @cdbartholomew in #4052
  • chore(deps): bump agno to 3.0.5 by @cdbartholomew in #4096
  • blog: Enterprise Features in Hindsight Cloud by @benfrank241 in #4004
  • chore(deps): override json-repair past crewai's pin by @cdbartholomew in #4098
  • security: pin the llama.cpp prompt cache to RAM by @cdbartholomew in #4102
  • fix(tracing): attach bank ID to retain spans by @koriyoshi2041 in #4109
  • fix(temporal): stop dateparser segfaulting the API under free-threading by @nicoloboschi in #4110
  • fix(api): paginate GET /observations/scopes and GET /webhooks by @nicoloboschi in #4075
  • chore(deps): remove unused tornado dependency by @nicoloboschi in #4111
  • fix(cli): print the server's response body on API errors (#4049) by @nicoloboschi in #4113
  • fix(api): run tenant provisioning migrations through the isolation boundary by @nicoloboschi in #4117
  • fix(embed): forward every HINDSIGHT_* var to the daemon instead of a whitelist by @nicoloboschi in #4119
  • feat(llm): add Meta Model API as a first-class provider by @nicoloboschi in #4081
  • feat(retain): inline images and files as first-class content by @nicoloboschi in #4077
  • fix(api): install every PostgreSQL extension in the public schema (#4118) by @nicoloboschi in #4121
  • fix(retain): keep per-memory entity-label tags when a re-retain rewrites document tags (#4068) by @nicoloboschi in #4120
  • fix(api): give each event loop its own extension context by @nicoloboschi in #4123
  • fix(embeddings): let litellm-sdk invoke a Bedrock inference profile ARN by @nicoloboschi in #4114
  • refactor(api-slim): return a named result from LLMInterface.call by @nicoloboschi in #4122
  • fix(reflect): run split synthesis's map calls at temperature 0 by @nicoloboschi in #4115
  • fix(embeddings): route Gemini through the shared embedding retry policy by @nicoloboschi in #4124
  • fix(opencode-go): send x-opencode-session, one id per operation (#4071) by @benfrank241 in #4084
  • feat(control-plane): banks overview page with bulk delete by @nicoloboschi in #4125
  • chore(deps): bump banks to 2.5.0 in the llamaindex integration lock by @cdbartholomew in #4132
  • test: make two deselection markers actually apply by @nicoloboschi in #4126
  • fix(embeddings): route Cohere and ZeroEntropy through the shared retry policy by @nicoloboschi in #4129
  • feat(api)!: retire the bank profile and background endpoints by @nicoloboschi in #4127
  • fix(embeddings): one TEI http client per thread, not one per provider by @nicoloboschi in #4138
  • fix(codex): defer work until quota reset by @0xble in #4161
  • fix(reranker): give every remote reranker bounded retry by @nicoloboschi in #4139
  • chore: update the tagline to "Agent Memory That Learns" by @cdbartholomew in #4093
  • fix(cli): restore default SIGPIPE handling to prevent abort on broken pipe by @2anoubis in #3925
  • fix(openclaw): restore compatibility with OpenClaw 2026.8.1+ by @nicoloboschi in #4178
  • fix(temporal): "last weekend" asked on a weekend means the previous one by @NgoQuocViet2001 in #4076
  • fix(retain): scrub the whole retain item at the engine ingress, not field by field by @nicoloboschi in #3921
  • fix(llm): identify OpenAI-compatible requests by @SharkyRawr in #4078
  • fix(cache): preserve force refresh across event loops by @koriyoshi2041 in #4072
  • fix(openclaw): resolve Dashboard agent identity from four-part session keys by @r266-tech in #4149
  • fix(coding-agents): scope knowledge pages to the bank, not the session's cwd (#4146) by @nicoloboschi in #4184
  • fix(operations): allow cancelling in-flight operations (#4131) by @nicoloboschi in #4177
  • feat(openclaw): add recall score floors by @koriyoshi2041 in #4145
  • fix(server): load .env before importing MemoryEngine to honor concurrency limits by @Sanderhoff-alt in #3939
  • fix(docker): drop unused libxml2 from runtime images by @rschlek in #4055
  • perf(docker): replace RUN chown with COPY --chown to speed up image building by @SharkyRawr in #4141
  • fix(api-slim): read the opencode-go retry assertion off LLMCallResult.content by @nicoloboschi in #4181
  • fix(ci): unbreak test-api — the call envelope and the temporal golden corpus by @nicoloboschi in #4185
  • fix(api-slim): never import an observation citing a missing source unit by @nicoloboschi in #4179
  • fix(docker): drop unused libxml2 from the freethreaded runtime image by @nicoloboschi in #4187
  • feat(llm): route retain items to a chain member by their metadata by @nicoloboschi in #4188
  • fix(reflect): enforce max_tokens on the forced synthesis path too (#4156) by @nicoloboschi in #4180
  • fix(concurrency): serve CrossLoopSemaphore waiters in arrival order by @ebarkhordar in #4157
  • fix(consolidation): teach the prompt to name delete targets, and count discarded batch responses by @nicoloboschi in #4183
  • test(temporal): re-snapshot the golden corpus for the "last weekend" fix by @nicoloboschi in #4192
  • fix(embeddings): bound embedding input by the model's context, prefix included by @nicoloboschi in #4182
  • chore(docker): move the image Node runtime from EOL 20 to Active LTS 24 by @nicoloboschi in #4193
  • fix(openclaw): fail the smoke test on any hindsight doctor diagnostic by @nicoloboschi in #4190
  • fix(api): 404 bank-scoped reads for a bank that does not exist (#4175) by @nicoloboschi in #4186
  • fix(coding-agents): read DSH transcript via snapshotEvents by @leilei3167 in #4148
  • test(api-slim): regenerate the temporal golden corpus for the weekend fix by @nicoloboschi in #4191
  • ci: build the control plane on Node 24, matching the image by @nicoloboschi in #4194
  • fix(embeddings): send each Gemini input as its own Content by @Sanderhoff-alt in #4001
  • fix(docker): stop installing curl into the cp-only image by @nicoloboschi in #4199
  • fix(docker): drop the NodeSource bootstrap from the standalone image by @nicoloboschi in #4200
  • fix(search): clamp future dates before the exponential recency power by @ebarkhordar in #4105
  • feat(coding-agents): add Factory Droid harness by @mrwogu in #4011
  • fix(local-ml): floor torch at 2.11.0 so arm64 images run on ARMv8.0 CPUs by @nicoloboschi in #4201
  • perf(api-slim): stop the mental-model staleness check walking the bank (#4169) by @nicoloboschi in #4195
  • feat(api,control-plane): a prompt tester for retain, and prompt preview for every operation by @nicoloboschi in #4140
  • fix(embeddings): one request per text for the Vertex single-content models by @nicoloboschi in #4204
  • perf(entity-resolver): optimize in-batch dedup via prefix filtering by @Sanderhoff-alt in #3991
  • feat(coding-agents): spread page refreshes with hashed cron fields (H) by @nicoloboschi in #4208
  • fix(docker): drop curl from the API runtime images by @nicoloboschi in #4202
  • perf(config): stop deep-copying the global config on every resolution (#4209) by @nicoloboschi in #4211
  • perf(retain): accelerate within-batch semantic link calculation by @Sanderhoff-alt in #3977
  • fix(coding-agents): replay a failed retain append instead of replacing the transcript (#3989) by @nicoloboschi in #4210
  • test(system): blackbox system-test suite driven only through the public API by @nicoloboschi in #4212
  • chore(deps): bump qs to 6.16.0 in the coding-agents lock by @cdbartholomew in #4220
  • chore(deps): bump qs, @humanfs/node and postcss-selector-parser in the root lock by @cdbartholomew in #4219
  • feat(profiling): env-configured CPU profile, reported to the logs by @nicoloboschi in #4215
  • fix(recall): report the caller's query_timestamp in the search trace by @nicoloboschi in #4227
  • fix(retain): give a split append the whole document as its body, not just the tail (#3989) by @nicoloboschi in #4229
  • docs: point the Slack community links at a redirect by @cdbartholomew in #4223
  • fix: defer retain completion outbox until store commit by @kyletser in #4203
  • fix(python-client): add the missing async twins to the convenience wrapper (#4221) by @nicoloboschi in #4228
  • perf(recall): stop building trace payloads when no trace was asked for by @nicoloboschi in #4231
  • feat(mental-models): default list to metadata; MCP list returns metadata only by @cdbartholomew in #4225
  • fix(api): type the list and graph rows instead of returning bare dicts (#4218) by @nicoloboschi in #4233
  • fix(retain): a store-owned retain must not fail on its own log line by @nicoloboschi in #4236
  • perf(api): replace both BaseHTTPMiddleware with pure ASGI (3.2x on cheap routes) by @nicoloboschi in #4235
  • feat(extensions): add StaticKeysTenantExtension — env-configured per-user API keys with per-schema isolation by @rafaelkallis in #3675
  • revert: drop free-threaded CPython 3.14 support (#4037, #4067) by @nicoloboschi in #4234
  • fix(api): expose the bank template import request body by @nicoloboschi in #4247
  • fix(reflect): say when the structured-output extraction failed (#4230) by @nicoloboschi in #4248
  • feat(coding-agents): refresh knowledge pages hourly and staggered by default by @nicoloboschi in #4241
  • feat(coding-agents): add ZCode as a supported harness (#4240) by @nicoloboschi in #4258
  • fix(retain): stop chunk ids colliding across banks by @nicoloboschi in #4257
  • chore(deps): update httpx2 and httpcore2 in the pydantic-ai integration by @cdbartholomew in #4262
  • chore(deps): update sharp and vitest in the cloudflare-oauth-proxy integration by @cdbartholomew in #4263
  • chore(deps): update js-yaml in the zapier integration by @cdbartholomew in #4264
  • chore(deps): update npm dependencies in the root lockfile by @cdbartholomew in #4261
  • chore(deps): update hono and vitest in the coding-agents integration by @cdbartholomew in #4266
  • chore(deps): update vitest in the ai-sdk integration by @cdbartholomew in #4267
  • chore(deps): update vitest in the chat integration by @cdbartholomew in #4268
  • chore(deps): update vitest in the eliza integration by @cdbartholomew in #4269
  • chore(deps): update vitest in the opencode integration by @cdbartholomew in #4271
  • chore(deps): update vitest in the eve integration by @cdbartholomew in #4270
  • chore(deps): update vitest in the flowise integration by @cdbartholomew in #4273
  • chore(deps): update vitest in the obsidian integration by @cdbartholomew in #4275
  • chore(deps): update vitest in the n8n integration by @cdbartholomew in #4274
  • docs(documents): say the tags PATCH replaces the array, and test clearing it by @nicoloboschi in #4272
  • feat(api,control-plane): recall results carry the attachments behind each fact by @nicoloboschi in #4277
  • refactor(config): make HindsightConfig the only parser of HINDSIGHT_API_* env vars by @nicoloboschi in #4260
  • feat(control-plane): add a pause button for constellation ambient motion by @nicoloboschi in #4289
  • test(system): blackbox system-test coverage across the epic by @nicoloboschi in #4216
  • fix(reflect): uniquify tool_call ids so strict APIs accept the turn by @gwthm-in in #4250
  • fix(curation): clear the legacy event_date when occurred_start is cleared by @nicoloboschi in #4278
  • feat(control-plane): pin the current bank to the top of the bank selector by @nicoloboschi in #4298
  • fix(entities): give mention_count back when the mentions go (#4291) by @nicoloboschi in #4296
  • fix(coding-agents): repair Grok config.toml left with an unmarked Hindsight block by @nicoloboschi in #4302
  • test(retain): make the post-commit convergence test causal, not a wall-clock race by @nicoloboschi in #4294
  • perf(db): skip asyncpg's release-time reset by @nicoloboschi in #4259
  • perf(recall): account for a recall's time per phase, and fix the three things that showed up by @nicoloboschi in #4299
  • fix(recall): a store-owned bank's attachment lookup does not read memory_units by @nicoloboschi in #4306
  • perf(recall): three CPU cuts on the recall path (audit serialization, phase sampling, on-loop query embedding) by @nicoloboschi in #4314
  • fix(coding-agents): record why an automatic reflect failed by @nicoloboschi in #4316
  • fix(api): declare binary download bodies so generated clients return bytes by @nicoloboschi in #4315
  • refactor: replace httpx and sync HTTP with aiohttp across production code by @nicoloboschi in #4318
  • test(system): the remaining epic stories, and two bugs they found by @nicoloboschi in #4293
  • fix(coding-agents): admit one codebase survey per bank, held by a heartbeat lease by @nicoloboschi in #4303
  • fix(reflect): grounding defects in reflect and knowledge-page delta refresh, plus system-evals by @nicoloboschi in #4304
  • feat(coding-agents): warn when the old Claude Code plugin is still installed by @nicoloboschi in #4320
  • feat(api): attachments on recall and read surfaces for store-owned banks by @nicoloboschi in #4321
  • feat(coding-agents): fall back to page search, then observation recall, when session reflect fails by @nicoloboschi in #4324
  • feat(coding-agents): record Hindsight tool usage and move logs to ~/.hindsight/coding-agents-logs by @nicoloboschi in #4325
  • chore(deps): update vitest and esbuild in the paperclip integration by @cdbartholomew in #4300
  • chore(deps): update vitest in the openclaw integration by @cdbartholomew in #4301
  • chore(deps): update adm-zip in the zapier integration by @cdbartholomew in #4322
  • chore(deps): update js-yaml and vitest in the nemoclaw integration by @cdbartholomew in #4265
  • feat(metrics): /metrics covers every worker (labelled api_worker), and event-loop lag as a histogram by @nicoloboschi in #4319
  • fix(coding-agents): keep the reflect fallback silent in the chat by @nicoloboschi in #4354
  • feat(api,clients): admission control with a bounded wait, and client retry by @nicoloboschi in #4253
  • feat(llm): per-member timeout and retry budget in a multi-LLM chain by @cdbartholomew in #4336
  • chore(embed): re-sync the bundled env.example with the repo-root template by @nicoloboschi in #4355
  • fix(migrations): don't maintain memory_units or mental_models indexes under a custom memories store by @nicoloboschi in #4326
  • fix(profiling): arm the profiler in the workers, not only the supervisor by @nicoloboschi in #4254
  • chore(db): drop the unused memory_units_bm25 materialized view by @nicoloboschi in #4357
  • docs: changelog and blog post for v0.10.0 by @nicoloboschi in #4245
  • fix(docs): link the models page to configuration relatively, not via /docs/ by @nicoloboschi in #4361

New Contributors

Full Changelog: v0.9.2...v0.10.0

Don't miss a new hindsight release

NewReleases is sending notifications on new releases.