mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-17 18:35:19 +02:00
Until now an "Always Allow" reply only updated the in-memory runtime ruleset, evaporating after the session ended. Persist it to the existing connector.config['trusted_tools'] list so the next session's fetch_user_allowlist_rulesets picks it up and the user is never asked again for the same (connector, tool) pair. - TrustedToolSaver + make_trusted_tool_saver(user_id) in user_tool_allowlist: opens its own session via async_session_maker per call, logs and swallows failures (in-memory promotion is the canonical "always" path, durable persistence is opportunistic). - PermissionMiddleware._process is now pure: returns (state_update, list[_AlwaysPromotion]). aafter_model awaits the saver for each promotion; after_model discards them. Promotions are only emitted for tools whose metadata exposes mcp_connector_id, so native tools and KB FS ops are correctly skipped. - main_agent factory builds the saver once per turn and stashes it in dependencies["trusted_tool_saver"]; pack_subagent and the KB middleware stack forward it through build_permission_mw. - Renamed pm._process(state, None) call sites in two existing tests to pm.after_model(state, None) so they exercise the public hook contract instead of the now-tuple-returning private method. |
||
|---|---|---|
| .. | ||
| adapters | ||
| agents | ||
| connector_indexers | ||
| connectors | ||
| db | ||
| e2e_fakes | ||
| etl_pipeline | ||
| google_unification | ||
| indexing_pipeline | ||
| middleware | ||
| observability | ||
| routes | ||
| services | ||
| tasks | ||
| utils | ||
| __init__.py | ||
| test_error_contract.py | ||
| test_obsidian_plugin_indexer.py | ||
| test_stream_new_chat_contract.py | ||