use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use starweaver_core::Metadata;
use crate::{
AgentStreamQueueRegistry, ContextLifecycleState, ToolCapabilityGrant, ToolIdWrapper,
WrapperMetadata,
};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct RuntimeEphemeralState {
#[serde(default)]
pub force_inject_context: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub injected_context_tags: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub context_manage_tool_names: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub tool_tags: Vec<String>,
#[serde(default, skip_serializing_if = "ToolIdWrapper::is_empty")]
pub tool_id_wrapper: ToolIdWrapper,
#[serde(default, skip_serializing_if = "AgentStreamQueueRegistry::is_empty")]
pub agent_stream_queues: AgentStreamQueueRegistry,
#[serde(default, skip_serializing_if = "Metadata::is_empty")]
pub wrapper_metadata: WrapperMetadata,
#[serde(default, skip_serializing_if = "ContextLifecycleState::is_default")]
pub lifecycle: ContextLifecycleState,
#[serde(skip, default = "default_run_toolsets_closed")]
pub run_toolsets_closed: bool,
#[serde(skip)]
pub current_run_step: usize,
#[serde(skip)]
pub tool_capability_grants: BTreeMap<String, ToolCapabilityGrant>,
}
impl Default for RuntimeEphemeralState {
fn default() -> Self {
Self {
force_inject_context: false,
injected_context_tags: default_injected_context_tags(),
context_manage_tool_names: Vec::new(),
tool_tags: Vec::new(),
tool_id_wrapper: ToolIdWrapper::default(),
agent_stream_queues: AgentStreamQueueRegistry::default(),
wrapper_metadata: Metadata::default(),
lifecycle: ContextLifecycleState::default(),
run_toolsets_closed: true,
current_run_step: 0,
tool_capability_grants: BTreeMap::new(),
}
}
}
const fn default_run_toolsets_closed() -> bool {
true
}
fn default_injected_context_tags() -> Vec<String> {
vec![
"runtime-context".to_string(),
"environment-context".to_string(),
]
}