What's Changed
- docs: 0.4.20 release blog post and changelog by @nicoloboschi in #671
- feat: remove hardcoded default models from integrations by @nicoloboschi in #670
- feat: add Strands Agents SDK integration with Hindsight memory tools by @benfrank241 in #659
- Blog: Adding Long-Term Memory to LangGraph and LangChain Agents by @benfrank241 in #637
- security: exclude litellm 1.82.8 (supply chain compromise) by @nicoloboschi in #673
- fix: return metadata in recall responses by @nicoloboschi in #680
- fix(hermes): use async client methods to prevent event loop deadlock by @nicoloboschi in #681
- feat(mcp): add strategy parameter to retain tool by @philippop in #684
- fix: coerce JSON-string tags to list in MemoryItem and MCP tools by @philippop in #682
- feat: add LiteLLM LLM provider for Bedrock and 100+ providers by @nicoloboschi in #679
- feat(embed): add programmatic UI (control plane) management by @nicoloboschi in #683
- ci: skip unrelated jobs based on changed paths by @nicoloboschi in #687
- blog: Your AWS Strands Agent Forgets Everything Between Runs. Here's the Fix. by @benfrank241 in #685
- feat(hermes): file-based config + updated docs by @nicoloboschi in #686
- fix: add setup_hooks.py and hindsight:setup skill for hook registration by @benfrank241 in #690
- feat(reflect): make source facts in search_observations configurable by @nicoloboschi in #688
- feat: add 'none' LLM provider for chunk-only storage mode by @nicoloboschi in #691
- fix(claude-code): make fcntl import conditional for Windows compatibility by @benfrank241 in #694
- fix: control plane UI fixes for recall and data view by @nicoloboschi in #693
- feat: Windows native support — run Hindsight without Docker by @grimmjoww in #699
- fix: include Pydantic v2 fields in ValidationError OpenAPI schema by @mrkhachaturov in #697
- docs: add supported platforms and Windows installation guide by @nicoloboschi in #700
- feat(claude-code): full-session retain with document upsert and configurable tags by @nicoloboschi in #695
- feat(claude-code): retain tool calls as structured JSON by @nicoloboschi in #704
- fix: resolve all Dependabot security alerts by @nicoloboschi in #702
- fix: resolve remaining Dependabot security alerts by @nicoloboschi in #705
- feat(retain): delta retain — skip LLM for unchanged chunks on upsert by @nicoloboschi in #701
- docs(claude-code): tidy configuration reference and sync README by @nicoloboschi in #706
- fix(python-client): async=true silently ignored on retain by @nicoloboschi in #709
- feat(openclaw): add recallInjectionPosition config to preserve prompt cache by @nicoloboschi in #710
- docs(python-client): async-first pydoc + low-level API access + missing params by @nicoloboschi in #711
- feat: add support for volcano LLM providers by @beordie in #714
- fix(python-client): expose all configurable fields in update_bank_config() by @nicoloboschi in #712
- docs: add Volcano Engine as supported LLM provider by @nicoloboschi in #715
- Teaching the Llama to Remember by @benfrank241 in #707
- feat(integrations): Add hindsight-ag2 — persistent memory for AG2 agents by @faridun-ag2 in #720
- feat: add audit log for feature usage tracking by @nicoloboschi in #717
- fix(ag2): code cleanup and CI/release integration by @nicoloboschi in #721
- docs: add AG2 integration page by @nicoloboschi in #723
- fix(codex): resolve JSON serialization and logging exception propagation in codex_llm by @Rutimka in #724
- fix(migration): use IF EXISTS when dropping chunk FK constraint by @cdbartholomew in #725
- fix: silence noisy google_genai.models INFO logging by @nicoloboschi in #727
- fix(migrations): bypass PgBouncer for advisory locks via MIGRATION_DATABASE_URL by @cdbartholomew in #726
- fix(docker): add graceful shutdown handler to prevent pg0 data loss on restart by @kagura-agent in #698
- perf(stats): add bank_id to memory_links for direct filtering by @nicoloboschi in #718
- How We Built a 4-Way Hybrid Search System That Actually Runs in Parallel by @benfrank241 in #708
- refactor(embedded): replace UI methods with constructor flags by @nicoloboschi in #728
- fix(openclaw): add recallTimeoutMs config option for auto-recall by @Rutimka in #736
- feat: add max_observations_per_scope bank config by @nicoloboschi in #729
- fix(claude-code): implement tool_choice support for forced tool calls by @kagura-agent in #733
- Fix Codex named tool_choice serialization in reflect by @Sapientropic in #734
- fix: parse query params from base_url in OpenAI embeddings client by @akhater in #735
- feat(mcp): add filter_mcp_tools hook for per-user tool visibility by @mrkhachaturov in #737
- feat(openclaw): configurable logging with structured output by @akhater in #739
- fix(codex): don't crash on startup when quota is exhausted (429) by @Rutimka in #744
- feat: add LlamaIndex integration by @DK09876 in #672
- fix(hermes): sync lifecycle hooks for hermes-agent 0.5.0 by @nicoloboschi in #741
- feat: add Hindsight memory integration for OpenAI Codex CLI by @benfrank241 in #730
- fix(codex): cleanup dead code, add release lifecycle and docs by @nicoloboschi in #753
- fix(retain): inject retain_mission into verbose extraction mode by @nicoloboschi in #754
- fix: per-bank index creation respects HINDSIGHT_API_VECTOR_EXTENSION by @nicoloboschi in #755
- Convert codex tool_choice test to pytest style by @nicoloboschi in #752
- fix(mcp): handle Claude Code GET probe and make stateless_http configurable by @nicoloboschi in #757
- feat(api): add duration_ms to audit log entries by @nicoloboschi in #758
- refactor(llamaindex): merge into single hindsight-llamaindex package by @nicoloboschi in #760
New Contributors
- @philippop made their first contribution in #684
- @grimmjoww made their first contribution in #699
- @beordie made their first contribution in #714
- @faridun-ag2 made their first contribution in #720
- @Rutimka made their first contribution in #724
- @Sapientropic made their first contribution in #734
- @akhater made their first contribution in #735
Full Changelog: v0.4.20...v0.4.21