feat: Implement hierarchical storage for turn and session summaries (#106)#108
Merged
feat: Implement hierarchical storage for turn and session summaries (#106)#108
Conversation
…aries Add hierarchical summarization layer for chat sessions: Schema & Models: - Add migration 018 for turn_summaries and session_summaries tables - Create TurnSummary model with message boundaries and LLM-generated content - Create SessionSummary model for session-level aggregation - Add FTS5 virtual tables for semantic search Repositories: - TurnSummaryRepository with CRUD + FTS search - SessionSummaryRepository with CRUD + FTS search Services: - TurnDetector: Detects turn boundaries (User message starts a turn) - TurnSummarizer: LLM-based summarization of individual turns - SessionSummarizer: Aggregates turn summaries into session summaries CLI: - Add `summarize turns` command for turn-level summarization - Add `summarize sessions` command for session-level summarization - Add `summarize status` command to check summarization progress Closes #106 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. Fix Unicode truncation panic in truncate_content: - Use char_indices() for safe multi-byte UTF-8 character handling - Add tests for emoji, CJK, and mixed Unicode content 2. Fix type inconsistency (String vs Uuid for session_id): - Change repository methods to accept &Uuid instead of &str - Update all callers to use Uuid directly - Update tests to use proper UUIDs 3. Fix silent error suppression in parsing: - Add tracing::warn() logs when turn_type/outcome parsing fails - Use and_then() instead of map().flatten() per clippy 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements a hierarchical summarization layer with turn summaries and session summaries, enabling better organization and semantic search across chat sessions.
Changes
Schema & Models
turn_summariesandsession_summariestablesTurnSummarymodel with message boundaries and LLM-generated contentSessionSummarymodel for session-level aggregationRepositories
TurnSummaryRepositorywith CRUD + FTS searchSessionSummaryRepositorywith CRUD + FTS searchServices
TurnDetector: Detects turn boundaries (User message starts a turn)TurnSummarizer: LLM-based summarization of individual turnsSessionSummarizer: Aggregates turn summaries into session summariesCLI
summarize turns [--session <ID>] [--all]commandsummarize sessions [--session <ID>] [--all]commandsummarize statuscommand to check summarization progressArchitecture
Turn Detection Rules:
Test plan
-D warningsRelated Issues
Closes #106
🤖 Generated with Claude Code