pub struct FileReinjector {
pub max_files: usize,
pub token_budget: usize,
pub per_file_budget: usize,
pub read_state: Arc<Mutex<ReadFileState>>,
}Expand description
Post-compaction re-injector for recently-read files.
Only emits [Role::System] messages — no [Role::Tool] messages, so
no orphan tool result can be created (invariant #8 safe).
Fields§
§max_files: usizeMaximum number of files to re-inject (default 5).
token_budget: usizeTotal token budget across all re-injected files (default 50_000). Tokens are estimated as chars / 4.
per_file_budget: usizePer-file content budget in tokens (default 5_000).
read_state: Arc<Mutex<ReadFileState>>Shared read-file state — the same Arc used by Read/Edit/Write.
Implementations§
Source§impl FileReinjector
impl FileReinjector
Sourcepub fn new(read_state: Arc<Mutex<ReadFileState>>) -> Self
pub fn new(read_state: Arc<Mutex<ReadFileState>>) -> Self
Create a new FileReinjector with the given shared read state and
default limits (max_files=5, token_budget=50_000, per_file_budget=5_000).
Sourcepub fn reinject(&self, preserved: &[Message]) -> Vec<Message>
pub fn reinject(&self, preserved: &[Message]) -> Vec<Message>
Build attachment Messages to insert after the compaction summary.
preserved is the recent-N slice kept verbatim — files whose path
already appears in a preserved [Role::Tool] message’s content are
skipped (heuristic dedup).
Returns one [Message::system(…)] per file. Returns an empty Vec
when no files qualify.