From fc75b181cfaaeee021ebc7cecbe6c2024aa14d07 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Wed, 8 Apr 2026 17:48:10 -0400 Subject: [PATCH] Fix: compact() was clearing tool definitions from system section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit compact() cleared and rebuilt the system section but only pushed the system prompt — tool definitions were lost. Since new() sets up the system section correctly (prompt + tools), compact() now only reloads identity and journal, leaving system untouched. Co-Authored-By: Proof of Concept --- src/agent/context.rs | 7 +++++++ src/agent/mod.rs | 5 ++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/agent/context.rs b/src/agent/context.rs index ce5ff02..0223183 100644 --- a/src/agent/context.rs +++ b/src/agent/context.rs @@ -491,6 +491,13 @@ impl ResponseParser { let handle = tokio::spawn(async move { let mut parser = self; let agent_name = agent.state.lock().await.provenance.clone(); + // One-shot debug: dump rendered prompt to file + { + let ctx = agent.context.lock().await; + let rendered = ctx.render(); + let dump_path = format!("/tmp/poc-{}-prompt.txt", agent_name); + let _ = std::fs::write(&dump_path, &rendered); + } let log_path = format!("/tmp/poc-{}.log", agent_name); let mut log_file = std::fs::OpenOptions::new() .create(true).append(true).open(&log_path).ok(); diff --git a/src/agent/mod.rs b/src/agent/mod.rs index 7ffdc87..8390ec4 100644 --- a/src/agent/mod.rs +++ b/src/agent/mod.rs @@ -540,10 +540,9 @@ impl Agent { pub async fn compact(&self) { match crate::config::reload_for_model(&self.app_config, &self.prompt_file) { - Ok((system_prompt, personality)) => { + Ok((_system_prompt, personality)) => { let mut ctx = self.context.lock().await; - ctx.clear(Section::System); - ctx.push(Section::System, AstNode::system_msg(&system_prompt)); + // System section (prompt + tools) set by new(), don't touch it ctx.clear(Section::Identity); for (name, content) in &personality { ctx.push(Section::Identity, AstNode::memory(name, content));