From 83a2cd1ac24ca0feda34ae877aaf31f41b58b86c Mon Sep 17 00:00:00 2001 From: aichat-agent Date: Thu, 1 Oct 2026 14:58:06 +0000 Subject: feat: add built-in subquery tool with hierarchical query ids * Add config options subquery and subquery_max_depth. * Register an internal subquery function that spawns a fresh LLM query with the current model configuration but without the full context. The model selects context numerically (message_indexes) or by text excerpt (excerpts). * Subqueries can use tools, including further nested subqueries up to subquery_max_depth. * Queries and subqueries get hierarchical ids ([0], [0/1], [0/1/2]) that prefix tool-call prints and spinner messages. --- src/render/stream.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/render/stream.rs') diff --git a/src/render/stream.rs b/src/render/stream.rs index d6cadde..af69176 100644 --- a/src/render/stream.rs +++ b/src/render/stream.rs @@ -36,7 +36,10 @@ pub async fn raw_stream( mut rx: UnboundedReceiver, abort_signal: &AbortSignal, ) -> Result<()> { - let mut spinner = Some(spawn_spinner("Generating")); + let mut spinner = Some(spawn_spinner(&match crate::utils::current_query_scope() { + Some(scope) => format!("{scope} Generating"), + None => "Generating".to_string(), + })); loop { if abort_signal.aborted() { @@ -75,7 +78,10 @@ async fn markdown_stream_inner( let columns = terminal::size()?.0; - let mut spinner = Some(spawn_spinner("Generating")); + let mut spinner = Some(spawn_spinner(&match crate::utils::current_query_scope() { + Some(scope) => format!("{scope} Generating"), + None => "Generating".to_string(), + })); 'outer: loop { if abort_signal.aborted() { -- cgit v1.2.3