refactor(presenter): 两处纯搬移腾出 400 行余量(events 用例 / AI 栏事件投递)
events.rs 399 行、state.rs 400 行(AGENTS §3.1 与 §3.9 的零余量贴线文件)。M223 要往 AppCommand/CoreEvent 各加一条「导入已有版本」的变体、往 AppState 加一份事件态,都得先腾地方。 纯搬移、一行未改: - events.rs 尾部 #[cfg(test)] mod tests(80 行)→ dto/events/tests.rs(399 → 321); - state.rs 的 apply_agent + agent_rail_visible(28 行)→ state/agent.rs(400 → 376)。 方法路径不变(impl 写在子模块、pub use 无需新增),断言一条未动,搬移 diff 可逐行对。
This commit is contained in:
1 parent
13a317d35c
commit
9ab909d01c
4 files changed
+129
-105
No files matched your search
@@ -8,7 +8,6 @@ use crate::dialogs::DialogQueue;
|
||||
use crate::dto::{
|
||||
// 主线(M105 的 `LoaderKind` / M113 的 `PackState`)与 M114 的 `AuthlibLoginView` 并集。
|
||||
AccountView,
|
||||
AgentEvent,
|
||||
AppEvent,
|
||||
AuthlibLoginView,
|
||||
CoreEvent,
|
||||
@@ -42,6 +41,8 @@ use crate::wizard::WizardState;
|
||||
// 所以这里没有 `mod ai;` / `pub use ai::AiSession;`——M114 r1 曾把旧结构搬到 `state/ai.rs`,
|
||||
// 该文件已随 rebase 删除,**以 main 的 agent 契约为准**。
|
||||
mod accounts;
|
||||
// M223:AI 栏的事件投递与可见性(纯搬移,守 400 行硬线)
|
||||
mod agent;
|
||||
mod live;
|
||||
mod tiles;
|
||||
|
||||
@@ -304,31 +305,6 @@ impl AppState {
|
||||
}
|
||||
}
|
||||
|
||||
/// agent 事件 → AI 栏视图模型(投影规则见 [`crate::agent::rail`])。
|
||||
///
|
||||
/// 未读规则:栏不可见时,助手侧新内容(助手/工具消息、错误、待确认请求)逐条累加 `unread`;
|
||||
/// 用户自己说的话与纯增量不算。栏可见时到达的内容直接算已读(红点不该在眼前亮着)。
|
||||
pub fn apply_agent(&mut self, event: AgentEvent) {
|
||||
let visible = self.agent_rail_visible();
|
||||
let fresh = self.ai.ingest(&event);
|
||||
if fresh {
|
||||
if visible {
|
||||
self.ai.mark_read();
|
||||
} else {
|
||||
self.ai.unread = self.ai.unread.saturating_add(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// AI 栏此刻是否「在用户眼前」。
|
||||
///
|
||||
/// 独立页形态(栈顶是 `Route::Agent`)必然可见;停靠形态下只有收成 icon 轨才算离开——
|
||||
/// 右侧常驻栏在任何一级页面都挂着,用户扫一眼就能看到。
|
||||
#[must_use]
|
||||
pub fn agent_rail_visible(&self) -> bool {
|
||||
self.ai_mode() == AiPanelMode::Page || !self.prefs.ai_collapsed
|
||||
}
|
||||
|
||||
/// 按搜索词过滤后的磁贴网格(顺序稳定 = 实例列表顺序)。
|
||||
pub fn tiles(&self) -> Vec<TileCell<'_>> {
|
||||
let query = self.instance_query.trim().to_lowercase();
|
||||
|
||||
Reference in new issue
Block a user