Skip to main content

j_agent/agent/
config.rs

1use crate::context::compact::{CompactConfig, InvokedSkillsMap};
2use crate::infra::hook::HookManager;
3use crate::storage::{ChatMessage, ModelProvider};
4use crate::tools::background::BackgroundManager;
5use crate::tools::definition::ToolRegistry;
6use crate::tools::derived_shared::SubAgentMetrics;
7use crate::tools::todo::TodoManager;
8use std::sync::{Arc, Mutex};
9use tokio_util::sync::CancellationToken;
10
11/// Agent loop 的静态配置(不含每次请求独有的消息/通道)
12#[derive(Debug)]
13pub struct AgentLoopConfig {
14    /// 模型提供商配置
15    pub provider: ModelProvider,
16    /// 最大 LLM 调用轮次
17    pub max_llm_rounds: usize,
18    /// Context compact 配置
19    pub compact_config: CompactConfig,
20    /// Hook 管理器
21    pub hook_manager: HookManager,
22    /// 被禁用的 hook 标识列表
23    pub disabled_hooks: Vec<String>,
24    /// 取消令牌
25    pub cancel_token: CancellationToken,
26}
27
28/// Agent loop 的共享状态(Arc 引用,跨线程共享)
29#[derive(Debug)]
30pub struct AgentLoopSharedState {
31    /// 流式内容缓冲区(agent 写入,UI 读取)
32    pub streaming_content: Arc<Mutex<String>>,
33    /// 流式思考内容缓冲区(reasoning_content,agent 写入,UI 读取)
34    pub streaming_reasoning_content: Arc<Mutex<String>>,
35    /// 用户在 agent loop 期间追加的消息队列
36    pub pending_user_messages: Arc<Mutex<Vec<ChatMessage>>>,
37    /// 后台任务管理器(由内置 PreLlmRequest hook 通过 Arc 引用使用)
38    #[allow(dead_code)]
39    pub background_manager: Arc<BackgroundManager>,
40    /// 待办管理器
41    pub todo_manager: Arc<TodoManager>,
42    /// Agent/Teammate → UI 显示通道(仅用于 UI 渲染,不作为 LLM context 数据源)
43    pub display_messages: Arc<Mutex<Vec<ChatMessage>>>,
44    /// Agent/Teammate → LLM context 同步通道(persist_new_messages 直接从此持久化)
45    pub context_messages: Arc<Mutex<Vec<ChatMessage>>>,
46    /// Agent 实际使用的上下文 token 估算值(agent 每轮更新,UI 读取显示)
47    pub estimated_context_tokens: Arc<Mutex<usize>>,
48    /// 会话内已调用技能追踪(LoadSkill 执行时记录,auto_compact 后恢复)
49    pub invoked_skills: InvokedSkillsMap,
50    /// 当前会话 ID(用于 auto_compact 写入 session 级 .transcripts/)
51    pub session_id: String,
52    /// 子 Agent 共用 system_prompt(每轮构建后更新,供 AgentTool / TeammateTool 读取)
53    pub derived_system_prompt: Arc<Mutex<Option<String>>>,
54    /// 工具注册表(用于每轮动态获取可用工具)
55    pub tool_registry: Arc<ToolRegistry>,
56    /// 用户禁用的工具列表
57    pub disabled_tools: Vec<String>,
58    /// 延迟加载的工具列表(LoadTool 加载后才可用)
59    pub deferred_tools: Arc<Mutex<Vec<String>>>,
60    /// 本会话 LoadTool 已加载的 deferred 工具
61    #[allow(dead_code)]
62    pub session_loaded_deferred: Arc<Mutex<Vec<String>>>,
63    /// 工具是否启用
64    pub tools_enabled: bool,
65    /// 子 Agent metrics 累加器(SubAgent/Teammate 的 LLM/tool 统计)
66    /// Main agent loop 结束时读取并合并到 `SessionMetrics`
67    pub sub_agent_metrics: Arc<Mutex<SubAgentMetrics>>,
68}