- #368 (user,character) memory silo test DONE + PASSED live (WT b127): write-side conjunctive {end_user,agent_self} scoping + read-side cross- character isolation both proven end-to-end; betty (throwaway) deleted, Sindra intact. Full record in persistent-memory.d/2026-07-18-368-silo- test-passed.md. Retired the stale "silo test in progress" in-flight blocks. - Two-tier migration: split 152 over-threshold dated entries into persistent-memory.d/ detail files, leaving one-line pointers in the index (startup load ~196KB -> ~53KB; bodies now load on demand). - Tier-3 stores scrubbed clean (memory 0 / affect 0, provider restarted empty); persistent-memory + detail file updated to reflect the scrub.
1.3 KiB
[2026-07-01] GET /sessions/{id}/tools quick-win SHIPPED (v0.18.9) — owner-scoped tool inventory in the TUI Tools pane. get_session_tools wrapper (sessions.py, mirror get_me: 200→dict, non-200→SessionApiFailed) + _format_tool_inventory helper + _hydrate_session_tools best-effort worker (mirror _hydrate_persona) wired UNCONDITIONALLY in on_mount → writes the merged {agent_id, builtin_tools, bifrost_tools} inventory (what the LLM saw at turn-fire) to the Tools pane + audits session_tools_hydrated, never crashes on failure. Owner-scoped (ctx.user_id==session.user_id) → reachable with the CONSUMER key, NO admin scope — so this covers the design-brief §5 "Tools widget" via the reachable owner endpoint (the admin /admin/sessions/{id}/tools variant stays a gap only for cross-user operator debug). Contract #2 amended (FN, validated OK) + TDD (3 wrapper respx tests + 1 format-helper unit + 2 hydrate integration tests via _spy_writes+pilot). Suite 544 green; touched code ruff-clean (the tui.py ruff/mypy debt at other lines is pre-existing). Coverage: REST 10/40 ✅. Frontier now: BifrostState widget (GET /admin/sessions/{id}/bifrost, admin-key) + #11 AdminEvents (BLOCKED on admin.events.read) + Tier-2 (transient-characters routing, POST /sessions/{id}/persona_state).