feat: long-running session improvements

- Hang fix: 120s timeout on compression LLM call + raw_stream
  channel-close handling (None => break instead of spinning)
- Supervisor effective active count: stop counting finished
  JoinHandles as occupying capacity slots
- Universal tool result size cap: truncate_if_needed() on
  ToolResult, applied in eval_tool_calls() after escalation block;
  configurable via max_tool_result_chars in AppConfig/AgentConfig
- Windowed compression: compression_keep_last config param keeps
  the N most recent messages visible after compression
- Fix pre-existing flaky test: add #[serial] to
  handle_list_available_unrestricted_when_no_whitelist so it does
  not race with TestConfigDirGuard-based tests that temporarily
  populate the agents data dir
This commit is contained in:
2026-07-23 12:25:54 -06:00
parent d51bdd3086
commit 54c5079cb7
9 changed files with 118 additions and 19 deletions
+6
View File
@@ -62,8 +62,10 @@ pub struct AppConfig {
pub save_session: Option<bool>,
pub compression_threshold: usize,
pub compression_keep_last: usize,
pub summarization_prompt: Option<String>,
pub summary_context_prompt: Option<String>,
pub max_tool_result_chars: Option<usize>,
pub memory: Option<bool>,
pub memory_cap_with_tools: Option<usize>,
@@ -143,8 +145,10 @@ impl Default for AppConfig {
save_session: None,
compression_threshold: 4000,
compression_keep_last: 0,
summarization_prompt: None,
summary_context_prompt: None,
max_tool_result_chars: None,
memory: None,
memory_cap_with_tools: None,
@@ -225,8 +229,10 @@ impl AppConfig {
save_session: config.save_session,
compression_threshold: config.compression_threshold,
compression_keep_last: config.compression_keep_last,
summarization_prompt: config.summarization_prompt,
summary_context_prompt: config.summary_context_prompt,
max_tool_result_chars: config.max_tool_result_chars,
memory: config.memory,
memory_cap_with_tools: config.memory_cap_with_tools,