v0.7.1: Multi-tenant Context isolation (security fix)
Requires `tessera-mesh>=0.7.1`.
Fixed
- Multi-tenant Context isolation. v0.7.0 and earlier shared one `Context` across all sessions. Combined with the taint-tracking invariant (`min_trust` over every segment drives the verdict), this meant a web-tainted segment from session A would deny tool calls from session B running on the same proxy. v0.7.1 keeps each session's Context, `DependencyAccumulator`, risk forecaster, and canary tracker isolated. Cross-session interference cannot happen.
Added
- `MeshProxy.session_context_ttl_seconds` (default 3600s) and `MeshProxy.session_context_max` (default 10000) config fields.
- `GET /v1/sessions` returns active session ids, eviction count, and the configured limits.
- `MeshProxy.reset_all_sessions()` for operator-driven full reset.
Changed
- `MeshProxy.add_user_prompt`, `build_provenance_manifest`, `split_context`, `check_output_provenance`, and `check_canary_leakage` now take `session_id: str = "default"`.
- The endpoints `/v1/context`, `/v1/context/split`, `/v1/provenance`, `/v1/check-output`, and `/v1/reset` accept `session_id` as a query parameter; `/v1/evaluate` and `/v1/label` accept it in the request body. Omitting `session_id` defaults to the literal session named `default` for backward compat.
- `MeshClient` propagates its `session_id` field through every endpoint call.
- `MeshProxy` no longer holds standalone `_accumulator`, `_risk_forecaster`, or `_canary_tracker` attributes. Tests that checked these need to read `proxy._get_session_state(session_id)` instead.
Verified
- 240 passing tests; same 2 pre-existing async-fixture failures as v0.7.0.
- 16 new tests in `test_session_isolation.py` pin the headline property (alice's taint does not deny bob), per-session accumulator / forecaster / canary isolation, eviction callback cleanup, every endpoint that accepts `session_id`, and backward compatibility for callers that omit `session_id`.
Install
```
pip install agentmesh-mesh==0.7.1
```