fleet-memory/hindsight-control-plane
Nicolò Boschi ea662d062e
feat: fact_types and mental model exclusion filters for reflect (#615)
* feat: add fact_types and mental model exclusion filters to reflect and mental models

Adds three new filtering options to both the reflect endpoint and mental model creation/refresh:

- `fact_types`: restrict which fact types (world, experience, observation) are retrieved.
  Disables irrelevant agent tools entirely (no wasted tokens).
- `exclude_mental_models`: skip the search_mental_models tool altogether.
- `exclude_mental_model_ids`: exclude specific mental models by ID (merged with the
  existing self-exclusion logic during mental model refresh).

For mental models, options are persisted in the existing `trigger` JSONB column so they
are automatically applied on every refresh. The `UpdateMentalModelRequest` already
proxies `trigger`, so no extra endpoint changes are needed.

Also fixes the test fixture (`pg0_db_url` in conftest.py) to correctly resolve pg0://
URLs and run migrations before tests, which was causing all DB-dependent tests to fail
with "relation public.banks does not exist" when HINDSIGHT_API_DATABASE_URL=pg0://uuuu.

* fix: guard against disabled-tool hallucination and regenerate clients

- Add enabled_tools guard in reflect agent: if an LLM calls a tool that
  was excluded (e.g. recall when fact_types=["observation"]), return an
  error result instead of executing it
- Regenerate OpenAPI spec and all SDK clients (Go, Python, TypeScript)
  to include new fact_types / exclude_mental_models fields

* fix: add missing ReflectRequest fields in Rust CLI struct initializers

* fix: filter hallucinated tool calls before trace to prevent disabled tools appearing in results

* chore: merge main, fix lint formatting and update skills openapi.json

* feat: expose fact_types, exclude_mental_models, exclude_mental_model_ids in control plane UI

* fix: add missing trigger fields to MentalModel type in control plane api.ts

* fix: add missing trigger fields to local MentalModel interface in mental-models-view

* feat: tabbed mental model dialogs (Basic / Options tabs)

* refactor: shared FactTypeFilter component, tabbed mental model dialogs use General tab, clean up labels

* feat: pill-style toggle buttons for fact type filter (blue/emerald/amber per type)

* fix: add spacing between Fact Types label and pills, rename to Exclude all mental models
2026-03-19 17:03:41 +01:00
..
bin feat: simplify mcp installation + ui standalone (#41) 2025-12-18 10:24:56 +01:00
public brandind and misc fixes 2025-12-11 12:46:48 +01:00
src feat: fact_types and mental model exclusion filters for reflect (#615) 2026-03-19 17:03:41 +01:00
types Feature/graph viz (#85) 2026-01-02 16:27:29 +01:00
.dockerignore rename to hindsight (#2) 2025-11-25 19:28:26 +01:00
.eslintrc.json rename to hindsight (#2) 2025-11-25 19:28:26 +01:00
.gitignore feat: observation history tracking and diff UI (#513) 2026-03-06 16:16:05 +01:00
.prettierrc bump pg0 0.11.x and improve documentation (#33) 2025-12-16 13:33:01 +01:00
components.json rename to hindsight (#2) 2025-11-25 19:28:26 +01:00
eslint.config.mjs fix: doc build and lint files (#34) 2025-12-16 13:49:09 +01:00
next.config.ts feat: observation history tracking and diff UI (#513) 2026-03-06 16:16:05 +01:00
package.json fix(security): address all Dependabot vulnerability alerts (#617) 2026-03-19 14:27:52 +01:00
postcss.config.mjs rename to hindsight (#2) 2025-11-25 19:28:26 +01:00
tailwind.config.ts feat: introduce mental models (#132) 2026-01-16 11:16:41 +01:00
tsconfig.json feat: filter operations by type + fix stale auto-refresh closure (#522) (#527) 2026-03-09 13:17:00 +01:00