- Layer 2 semantic search now queries both curated and raw types,
closing the blind spot for turns past the 50-turn window pre-curation
- Layer 3 skips turns already returned by Layer 2 to avoid duplicate
context and wasted token budget
- get_recent_turns uses Qdrant OrderBy for server-side timestamp sort
with payload index; fallback to client-side sort if unavailable
- Bump version to 2.0.4
- Fix bare except clauses in curator.py and main.py
- Change embedding model to snowflake-arctic-embed2
- Increase semantic_score_threshold to 0.6
- Add memory context explanation to systemprompt.md
- Add pytest dependencies to requirements.txt
- Remove unused context_handler.py and .env.example
- Add project documentation (CLAUDE.md) and test files
Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Added parse_curated_turn() function to correctly parse stored memories
- Fixed build_augmented_messages() to use proper message roles
- Layer 2 (semantic) and Layer 3 (context) now correctly parse
User: X / Assistant: Y format into separate messages
- Resolves context corruption where turns were dumped as single user message
v2.0.2