feat(compact): add context file extraction for /compact resume#1151
Conversation
Implements Issue #1148: When using '/compact resume', the LLM now identifies key files (specs, plans, source files) that should be preserved in the fresh context after compaction. Changes: - Add _parse_context_files() to extract file paths from LLM-generated resume - Add _load_context_files() to load and optionally truncate file contents - Update _compact_resume() to include context files in new conversation - Add 7 new tests for file parsing and loading functionality The LLM is prompted to list files in a parseable format within the 'Context Files' section. These files are then loaded and injected as system messages before the resume summary, giving the model access to the relevant file contents when continuing work. Co-authored-by: Bob <[email protected]>
Greptile OverviewGreptile SummaryThis PR implements automatic context file extraction when using The implementation adds two new helper functions:
The The PR includes comprehensive test coverage (7 new tests) for parsing, loading, filtering, and truncation behavior. Confidence Score: 4/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant User
participant CLI as /compact resume
participant CompactResume as _compact_resume()
participant LLM
participant Parser as _parse_context_files()
participant Loader as _load_context_files()
participant FS as File System
participant LogManager
User->>CLI: /compact resume
CLI->>CompactResume: msgs (conversation history)
CompactResume->>CompactResume: prepare_messages(msgs)
CompactResume->>User: Status: Generating resume...
CompactResume->>LLM: Send conversation + prompt for resume
Note over LLM: Generate resume with<br/>Context Files section
LLM-->>CompactResume: resume_content (markdown)
CompactResume->>FS: Save to RESUME.md
CompactResume->>Parser: _parse_context_files(resume_content)
Note over Parser: Extract file paths from<br/>Context Files section
Parser-->>CompactResume: suggested_files[]
CompactResume->>Loader: _load_context_files(suggested_files)
loop For each file path
Loader->>FS: Read file content
FS-->>Loader: file content (or error)
Loader->>Loader: Truncate if > max_tokens
end
Loader-->>CompactResume: loaded_files[(path, content)]
CompactResume->>CompactResume: Extract original system messages
CompactResume->>CompactResume: Create file_context_msgs from loaded_files
CompactResume->>CompactResume: Build new log: system + files + resume
CompactResume->>LogManager: Replace log with compacted version
LogManager->>FS: Write new conversation.jsonl
CompactResume->>User: Success: resume created, N files loaded
|
len_tokens is already imported at module level from ..message
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
Summary
Implements Issue #1148: When using
/compact resume, the LLM now identifies key files (specs, plans, source files) that should be preserved in the fresh context after compaction.Changes
_parse_context_files()- Parses file paths from the LLM-generated resume_load_context_files()- Loads file contents with optional truncation_compact_resume()- Now includes context files in new conversationTesting
Added 7 new tests. All 39 tests pass.
Closes #1148