What's Changed
- docs drop 0.9 by @nicoloboschi in #6284
- docs: reading progress bar under the navbar by @nicoloboschi in #6285
- fix(admin): hindsight-admin cloud is listed in --help by @nicoloboschi in #6286
- fix(api): one id rule for banks, aliases and mental models; bound page max_tokens by @nicoloboschi in #6282
- fix(coding-agents): survey starts from every host again; keep terminal-manager env and color codes out by @nicoloboschi in #6287
- docs(changelog): describe the coding-agents 0.8.5 fixes accurately by @nicoloboschi in #6288
- fix(hermes): accept 1.x hindsight-client and hindsight-embed by @nicoloboschi in #6290
- fix(hermes): don't rewrite a session's memories on every append by @nicoloboschi in #6291
- fix(hermes): report the provider unavailable when hindsight_client can't import by @nicoloboschi in #6292
- fix(hermes): find the server version behind a control-plane proxy by @nicoloboschi in #6296
- fix(memories): a fact's entities come back sorted by name in both the list and the single read by @nicoloboschi in #6294
- fix(hermes): retry a recall on a stale keep-alive connection by @nicoloboschi in #6297
- fix(hermes): tell the launched daemon where the user's database is by @nicoloboschi in #6299
- docs: changelog and blog post for v1.2.0 by @nicoloboschi in #6281
- fix(retain): a store-owned bank with store_document_text off keeps no chunk text by @nicoloboschi in #6301
- fix(banks): clone, transfer import and rename-bank can no longer take over an alias (#6280) by @nicoloboschi in #6318
- ci: run CI's LLM on Gemma 4 (Hindsight Inference Dev), with prompt fixes so it passes by @nicoloboschi in #6289
- perf(db): run every pool connection with JIT off, so recall stops compiling its observation lookup (#6306) by @nicoloboschi in #6317
- fix(worker): stop a deleted bank's running jobs from recreating it (#6344) by @nicoloboschi in #6346
- fix(retain): an append chunks its body the way the next append re-chunks it (#6293) by @nicoloboschi in #6354
- docs(models): explain OpenRouter host routing by @nicoloboschi in #6363
- docs: how to run Hindsight on Intel Macs by @nicoloboschi in #6364
- fix(local-models): return freed heap pages to the OS on Windows too (#5478) by @nicoloboschi in #6365
- fix(migrations): migrate the base schema at startup when a tenant extension does not list it by @nicoloboschi in #6366
- docs: reflect_default_options does not reach mental-model refreshes by @nicoloboschi in #6367
- fix(knowledge-base): cut search snippets in Python so SQL_ASCII databases don't 500 by @nicoloboschi in #6368
- chore(engine): remove unreachable merge_bank_mission by @nicoloboschi in #6369
- fix(recall): build the VectorChord BM25 query once per search, not once per row by @nicoloboschi in #6373
- fix(consolidation): re-ask once with the errors when a reply misses the schema by @nicoloboschi in #6374
- fix(coding-agents): run the codebase survey only under the host's own CLI by @nicoloboschi in #6378
- docs(changelog): describe the coding-agents 0.8.6 fix accurately by @nicoloboschi in #6383
- fix(mental-models): temporary failures and LLM-slot waits no longer pause automatic refresh (#6140) by @nicoloboschi in #6385
- fix(retain): skip the LLM pass when the embeddings backend is known down by @nicoloboschi in #6370
- feat(db): HINDSIGHT_API_DATABASE_CONNECT_HOOK so pools pick up rotated credentials by @nicoloboschi in #6376
- fix(scripts): set a relative core.hooksPath so worktrees don't share one by @nicoloboschi in #6381
- feat(extensions): let an operation validator refuse a refreshed mental-model page by @nicoloboschi in #6386
- feat(stats): count mental models whose automatic refresh is paused (#6077) by @nicoloboschi in #6375
- fix: flaky tests and CI flakes (9 issues) by @nicoloboschi in #6371
- feat(cli): ship a native Windows x64 binary with each release by @nicoloboschi in #6382
- fix(worker): SIGTERM stops claiming at once and the drain fits the grace period (#6021) by @nicoloboschi in #6377
- feat(llm): custom LLM providers by class path, with a typed batch contract by @nicoloboschi in #6384
- fix(mcp): send each multi-bank tool result once, not twice by @nicoloboschi in #6392
- feat(admin): re-embed a schema with a new embedding model while servers keep running by @nicoloboschi in #6372
- feat(recall): opt-in fallback to the reranker when the decision model fails by @nicoloboschi in #6389
- perf(knowledge): delete a folder without re-scanning the bank per node by @nicoloboschi in #6398
- fix(banks): a recreated bank no longer shows the deleted bank's cached stats by @nicoloboschi in #6333
- fix(llm): write an optional tool argument as anyOf, not a type list (#6321, #6305) by @nicoloboschi in #6401
- perf(retain): read existing documents' tags in one go for a scoped retain by @nicoloboschi in #6402
- perf(observations): count identical tag lists before sorting scopes (#6328) by @nicoloboschi in #6404
- perf(consolidation): check for pending work without counting the bank by @nicoloboschi in #6403
- feat(embeddings): separate query and passage embedders by @nicoloboschi in #6380
- feat(extensions): review extracted memories and consolidation writes before they are stored by @nicoloboschi in #6400
- perf(consolidation): look up recalled observations by id by @nicoloboschi in #6406
- fix(consolidation): keep only the newest 3 earlier-state notes on an observation by @nicoloboschi in #6399
- perf(staleness): ask pages that share a filter once, not once per page (#6325) by @nicoloboschi in #6407
- chore(deps): bump pyasn1 to 0.6.5 in system-evals by @cdbartholomew in #6311
- chore(deps): bump pypdf to 6.21.4 in superagent by @cdbartholomew in #6310
- chore(deps): bump joserfc to 1.7.7 and pyasn1 to 0.6.5 in google-adk by @cdbartholomew in #6309
- chore(deps): bump pyasn1 to 0.6.5 by @cdbartholomew in #6308
- chore(deps): bump follow-redirects to 1.16.2 and joi to 17.13.9 by @cdbartholomew in #6307
- perf(entities): a scoped name search or detail reads only the entities it asks for (#6330) by @nicoloboschi in #6410
- fix(transfer): a restore racing another into the same fresh bank refuses instead of merging by @nicoloboschi in #6408
- fix(transfer): keep whole-bank export and import archives under the bank's storage prefix by @nicoloboschi in #6409
- perf(recall): count each source fact's tokens once per recall (#6329) by @nicoloboschi in #6405
- fix(retain): two concurrent retains of the same content store each fact once (#6337) by @nicoloboschi in #6433
- feat(api): add_tags / remove_tags on the document PATCH (#6339) by @nicoloboschi in #6411
- feat(http): identify aiohttp-based requests as hindsight/ by @nicoloboschi in #6414
- feat(control-plane): bank toggles for recall prune and dedup by @cdbartholomew in #6312
- fix(mental-models): report read and refresh sizes as token counts by @cdbartholomew in #6304
- fix(llm): read only the final-answer message from Responses replies (#6347) by @nicoloboschi in #6459
- fix(recall): support dateparser 1.5.0 temporal search (#6359) by @nicoloboschi in #6464
- refactor(recall): typed SearchRequest and typed hydration in the search pipeline by @nicoloboschi in #6463
- fix(retain): keep label-derived tags after their label group leaves the config (#6336) by @nicoloboschi in #6465
- fix: flaky tests, and the production bugs behind four of them (11 issues) by @nicoloboschi in #6460
- fix(oracle): a link to a memory deleted mid-retain no longer fails the batch (#6440) by @nicoloboschi in #6467
- fix(retain): reject duplicate and unexpected custom_ids in batch extraction by @nicoloboschi in #6462
- fix(consolidation): count pending memories through the unconsolidated index by @nicoloboschi in #6466
- fix(stats): total_links counts every unit's entity links, not one per entity (#6430) by @nicoloboschi in #6470
- fix(mental-models): let the delta step return no edits for off-topic facts by @nicoloboschi in #6473
- chore(deps): bump oauthlib to 4.0.1 in crewai integration lockfile by @cdbartholomew in #6479
- fix(graph-maintenance): stop queue-row locks from convoying same-bank writers (#6417) by @nicoloboschi in #6472
- fix(llm): check a tool call's reply against its function, correct it once (#6420, #6302) by @nicoloboschi in #6469
- fix(llm): reflect tool turns and vision retain never send two user turns in a row (#6349) by @nicoloboschi in #6468
- fix(retain): save a large update in batches so an interrupted one keeps its progress (#6394) by @nicoloboschi in #6484
- refactor!: rename Knowledge Pages to Pages (old names deprecated until 2.x) by @nicoloboschi in #6477
- fix(coding-agents): strip host-injected tags from the prompt before recall/reflect by @nicoloboschi in #6491
- fix(attachments): a daily sweep deletes the attachments of retains that failed (#6350) by @nicoloboschi in #6474
- fix(decision-model): don't split requests client-side for the hindsight provider by @nicoloboschi in #6490
- docs(integrations): list hindsight-php, LiveKit and Hindsight Desktop; give community integrations their own section by @nicoloboschi in #6493
- docs: keep old knowledge-pages links working through the 1.2.1 docs bump by @nicoloboschi in #6495
Full Changelog: v1.2.0...v1.2.1