use std::collections::{BTreeMap, BTreeSet};
use serde::{Deserialize, Serialize};
use starweaver_core::Metadata;
use crate::TaskManager;
#[derive(Clone, Default, Deserialize, Serialize)]
pub struct AgentToolState {
#[serde(default, rename = "shell_env", skip_serializing)]
pub shell_environment: BTreeMap<String, String>,
#[serde(
default,
rename = "deferred_tool_metadata",
skip_serializing_if = "BTreeMap::is_empty"
)]
pub deferred_call_metadata: BTreeMap<String, Metadata>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub auto_load_files: Vec<String>,
#[serde(
default,
rename = "task_manager",
skip_serializing_if = "TaskManager::is_empty"
)]
pub tasks: TaskManager,
#[serde(
default,
rename = "tool_search_loaded_tools",
skip_serializing_if = "Vec::is_empty"
)]
pub loaded_tool_names: Vec<String>,
#[serde(
default,
rename = "tool_search_loaded_namespaces",
skip_serializing_if = "Vec::is_empty"
)]
pub loaded_tool_namespaces: Vec<String>,
#[serde(
default,
rename = "background_context_delta_ids",
skip_serializing_if = "BTreeSet::is_empty"
)]
pub background_context_delta_ids: BTreeSet<String>,
}
impl std::fmt::Debug for AgentToolState {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
formatter
.debug_struct("AgentToolState")
.field(
"shell_environment_keys",
&self.shell_environment.keys().collect::<Vec<_>>(),
)
.field("deferred_call_metadata", &self.deferred_call_metadata)
.field("auto_load_files", &self.auto_load_files)
.field("tasks", &self.tasks)
.field("loaded_tool_names", &self.loaded_tool_names)
.field("loaded_tool_namespaces", &self.loaded_tool_namespaces)
.field(
"background_context_delta_ids",
&self.background_context_delta_ids,
)
.finish()
}
}