Skip to content

Commit 656162c

Browse files
fix(agents): memory digest export lifecycle (#266)
Return raw JSON envelopes from the fact_store and fact_feedback memory write handlers instead of markdown-rendered output. After the markdown default output change, these write-path handlers rendered their status JSON as markdown, which interfered with the memory digest export lifecycle. A new `tool_json` helper emits the truncated JSON envelope (with project handle) directly; `handle_memory_status` continues to use the rendered path. Recovered from a stranded worktree whose stale rebase base had reverted unrelated master work (PR #258/#260 agent-surface changes); only the genuine memory.rs fix is carried forward here, rebuilt cleanly on current origin/master. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent e78ddec commit 656162c

1 file changed

Lines changed: 9 additions & 8 deletions

File tree

src/mcp/tools/handlers/memory.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::memory::types::{
1717
};
1818
use crate::tracedecay::TraceDecay;
1919

20-
use super::super::render;
20+
use super::super::render::{self, truncated_json_envelope_with_handle};
2121
use super::super::ToolResult;
2222
use super::support::{
2323
profile_root_for_global_db, project_registry_context, project_selector_present,
@@ -39,6 +39,12 @@ fn text_tool_result(text: &str) -> ToolResult {
3939
)
4040
}
4141

42+
fn tool_json(project_root: Option<&Path>, value: &Value) -> ToolResult {
43+
let formatted = serde_json::to_string(value).unwrap_or_default();
44+
let text = truncated_json_envelope_with_handle(project_root, &formatted);
45+
text_tool_result(&text)
46+
}
47+
4248
fn rendered_tool_json(project_root: Option<&Path>, args: &Value, value: &Value) -> ToolResult {
4349
let text = render::finalize(project_root, args, value, || render::generic_md(value));
4450
text_tool_result(&text)
@@ -487,11 +493,7 @@ pub(super) async fn handle_fact_store(
487493
if refresh_digest {
488494
refresh_memory_digest_after_memory_change(conn, &target_memory.project_root).await;
489495
}
490-
Ok(rendered_tool_json(
491-
Some(&target_memory.project_root),
492-
&args,
493-
&out,
494-
))
496+
Ok(tool_json(Some(&target_memory.project_root), &out))
495497
}
496498

497499
pub(super) async fn handle_fact_feedback(cg: &TraceDecay, args: Value) -> Result<ToolResult> {
@@ -513,9 +515,8 @@ pub(super) async fn handle_fact_feedback(cg: &TraceDecay, args: Value) -> Result
513515
})
514516
.await?;
515517
refresh_memory_digest_after_memory_change(db.conn(), cg.project_root()).await;
516-
Ok(rendered_tool_json(
518+
Ok(tool_json(
517519
Some(cg.project_root()),
518-
&args,
519520
&json!({ "status": "recorded", "feedback": result }),
520521
))
521522
}

0 commit comments

Comments
 (0)