From e106b90a7168c41432ad2993a06da05da4cd0511 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Wed, 8 Apr 2026 20:43:24 -0400 Subject: [PATCH] Fix collect_results: read outputs from self.state, not auto.outputs The output tool closure writes directly to Subconscious.state, so auto.outputs is always empty. collect_results now reads surface, reflection, and thalamus keys from self.state. Co-Authored-By: Proof of Concept --- src/mind/dmn.rs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/mind/dmn.rs b/src/mind/dmn.rs index da25906..599a379 100644 --- a/src/mind/dmn.rs +++ b/src/mind/dmn.rs @@ -476,18 +476,13 @@ impl Subconscious { match result { Ok(_) => { let name = self.agents[idx].name.clone(); - let outputs = std::mem::take(&mut self.agents[idx].auto.outputs); - // Merge into shared persistent state - for (k, v) in &outputs { - self.state.insert(k.clone(), v.clone()); - } - // Inject all outputs into the conscious agent under one lock - let has_outputs = outputs.contains_key("surface") - || outputs.contains_key("reflection") - || outputs.contains_key("thalamus"); + // Check state for outputs (written by the output tool closure) + let has_outputs = self.state.contains_key("surface") + || self.state.contains_key("reflection") + || self.state.contains_key("thalamus"); if has_outputs { - if let Some(surface_str) = outputs.get("surface") { + if let Some(surface_str) = self.state.get("surface").cloned() { let store = crate::store::Store::cached().await.ok(); let store_guard = match &store { Some(s) => Some(s.lock().await), @@ -505,7 +500,7 @@ impl Subconscious { } } - if let Some(reflection) = outputs.get("reflection") { + if let Some(reflection) = self.state.get("reflection").cloned() { if !reflection.trim().is_empty() { agent.push_node(AstNode::dmn(format!( "--- subconscious reflection ---\n{}", @@ -514,7 +509,7 @@ impl Subconscious { } } - if let Some(nudge) = outputs.get("thalamus") { + if let Some(nudge) = self.state.get("thalamus").cloned() { let nudge = nudge.trim(); if !nudge.is_empty() && nudge != "ok" { agent.push_node(AstNode::dmn(format!(