feat: cross-session agent memory via MemPalace (#1124)
Integrates MemPalace for persistent agent memory across sessions.
Agents recall context at session start, store important decisions,
and write diary entries at session end.
## What's added
agent/memory.py — AgentMemory class:
- recall_context(): Load L0/L1 context (diaries, facts, relevant memories)
- remember(): Store decisions and facts by room
- write_diary(): Auto-generate session summary from transcript
- start_session/end_session(): Session lifecycle management
- Graceful degradation when MemPalace unavailable
agent/memory_hooks.py — Drop-in session lifecycle hooks:
- on_session_start(): Load context, return prompt block
- on_user_turn/on_agent_turn/on_tool_call(): Record transcript
- on_important_decision(): Store key decisions for long-term memory
- on_session_end(): Write diary, clean up
bin/memory_mine.py — Mine session transcripts into MemPalace:
- Parse JSONL session files
- Generate compact summaries
- Batch mining with --days filter
- Dry run mode
tests/test_agent_memory.py — 31 tests covering:
- SessionTranscript (create, turns, truncation, summary)
- MemoryContext (empty, loaded, prompt formatting)
- AgentMemory (create, factory, graceful degradation, lifecycle)
- MemoryHooks (full lifecycle, before/after session guards)
- Session mining (parse, summarize, find files, dry run)
- Full lifecycle integration test
## Usage