Skip to content

Commit bd85dc4

Browse files
committed
chore(rust): 删组/碎片/精修/诊断四命令及 VAD 读端
1 parent 786f48f commit bd85dc4

7 files changed

Lines changed: 10 additions & 127 deletions

File tree

‎app/src-tauri/src/app_commands.rs‎

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,13 @@ pub fn handle() -> impl Fn(tauri::ipc::Invoke<tauri::Wry>) -> bool + Send + Sync
6868
crate::commands::update_note_pin,
6969
// v0.14 B:视觉系统——笔记级颜色(properties.color)
7070
crate::commands::update_note_color,
71-
// v0.11.0(REQ-195~198):笔记组——列表/详情/组内笔记/自建主题组/
71+
// v0.11.0(REQ-195~198):笔记组——列表/组内笔记/自建主题组/
7272
// 重命名/路由改判(修改即记忆)/移动笔记
7373
crate::commands_groups::list_note_groups,
7474
// REQ-287(v0.19.7):笔记手动排序(scope=g{id}/none)
7575
crate::commands_note_orders::note_order_list,
7676
crate::commands_note_orders::note_order_save,
7777
crate::commands_note_orders::note_order_clear,
78-
crate::commands_groups::get_note_group,
7978
crate::commands_groups::list_group_notes,
8079
crate::commands_groups::create_topic_group,
8180
crate::commands_groups::rename_note_group,
@@ -95,7 +94,6 @@ pub fn handle() -> impl Fn(tauri::ipc::Invoke<tauri::Wry>) -> bool + Send + Sync
9594
crate::commands_fragments::set_feature_flag,
9695
crate::commands_fragments::capture_fragment,
9796
crate::commands_fragments::list_fragments,
98-
crate::commands_fragments::list_group_fragments,
9997
// v0.11.4(REQ-201):feed 消费闭环——删除/移组/图片 resolve
10098
crate::commands_fragments::delete_fragment,
10199
crate::commands_fragments::update_fragment_group,
@@ -318,8 +316,6 @@ pub fn handle() -> impl Fn(tauri::ipc::Invoke<tauri::Wry>) -> bool + Send + Sync
318316
// 健康巡检与诊断(REQ-042,M7:F2/F3/G2)
319317
crate::commands_diag::health_status,
320318
crate::commands_diag::diag_snapshot,
321-
// REQ-115(v0.7.0 M2):VAD 阈值诊断(口径对照可查)
322-
crate::commands_diag::vad_threshold_diag,
323319
// 模型磁盘占用/版本(REQ-131,v0.7.0 M3)
324320
crate::commands_diag::model_disk_overview,
325321
// 会话图片配套(REQ-051,v0.5.0 M6:图集/走廊/删除)
@@ -423,7 +419,6 @@ pub fn handle() -> impl Fn(tauri::ipc::Invoke<tauri::Wry>) -> bool + Send + Sync
423419
// 结构模型与课后精修(REQ-047/049/050 模型版:下载/状态/精修)
424420
crate::commands_refine::structure_model_download,
425421
crate::commands_refine::structure_model_status,
426-
crate::commands_refine::structure_models_dir_cmd,
427422
crate::commands_refine::structure_formula_tier,
428423
crate::commands_refine::refine_session,
429424
// v0.11.5(spec 5️⃣):课后精修懒自动化(详情进入原料视图自动触发;

‎app/src-tauri/src/commands_diag.rs‎

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -111,28 +111,6 @@ pub fn diag_snapshot(state: State<'_, AppState>) -> DiagSnapshot {
111111
}
112112
}
113113

114-
/// VAD 阈值诊断(REQ-115 PRE-O4 / v0.7.0 M2):当前自适应阈值 + 基础阈值对照。
115-
///
116-
/// @ai-context: 降级提示(固定阈值判定)与切段判定(自适应阈值)口径对照——
117-
/// 诊断可查阈值(验收点);无活动会话时 current=上次会话残留值。
118-
/// @ai-context: 审查 MEDIUM-8 修复:source_session/is_live 标注新鲜度——
119-
/// 诊断面板可区分"实时值"与"残留值"(避免误读旧会话口径)。
120-
#[tauri::command]
121-
pub fn vad_threshold_diag(state: State<'_, AppState>) -> crate::vad_threshold_slot::VadThresholdView {
122-
let current = state.vad_slot.read();
123-
let source = state.vad_slot.source_session_id();
124-
// 活动会话判定(Windows 实时链路;非 Windows 无活动会话概念)
125-
#[cfg(target_os = "windows")]
126-
let is_live = state.live_session.active_session_id() == Some(source);
127-
#[cfg(not(target_os = "windows"))]
128-
let is_live = false;
129-
crate::vad_threshold_slot::VadThresholdView {
130-
current,
131-
base: crate::streaming_asr::SILENCE_RMS_THRESHOLD,
132-
source_session: source,
133-
is_live,
134-
}
135-
}
136114

137115
/// 模型磁盘占用总览(REQ-131 P13 / v0.7.0 M3):models 目录各子目录占用 + 版本。
138116
///

‎app/src-tauri/src/commands_fragments.rs‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,6 @@ pub fn list_fragments(
130130
state.db.list_fragments(status, limit).map_err(|e| e.to_string())
131131
}
132132

133-
/// 组内碎片列表(feed 组详情消费)。
134-
#[tauri::command]
135-
pub fn list_group_fragments(state: State<'_, AppState>, group_id: i64) -> Result<Vec<Fragment>, String> {
136-
if group_id <= 0 {
137-
return Err("无效的组 id".to_string());
138-
}
139-
state.db.list_fragments_by_group(group_id).map_err(|e| e.to_string())
140-
}
141133

142134
/// 移动碎片到组(None=移出组;用户纠错/重新归组——REQ-201 消费闭环)。
143135
///

‎app/src-tauri/src/commands_groups.rs‎

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,6 @@ pub fn list_note_groups(
4848
state.db.list_groups(terrain).map_err(|e| e.to_string())
4949
}
5050

51-
/// 单个组详情(不存在 → 错误;前端按 id 刷新用)。
52-
#[tauri::command]
53-
pub fn get_note_group(state: State<'_, AppState>, id: i64) -> Result<NoteGroup, String> {
54-
if id <= 0 {
55-
return Err("无效的组 id".to_string());
56-
}
57-
state
58-
.db
59-
.get_group(id)
60-
.map_err(|e| e.to_string())?
61-
.ok_or_else(|| format!("笔记组不存在: {}", id))
62-
}
6351

6452
/// 组内笔记列表(组详情面板数据源)。
6553
#[tauri::command]

‎app/src-tauri/src/commands_refine.rs‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,6 @@ pub fn structure_model_status(state: State<'_, AppState>) -> Vec<crate::structur
9595
list
9696
}
9797

98-
/// 查询结构模型装配目录(前端展示用;不暴露内部模型路径细节)。
99-
#[tauri::command]
100-
pub fn structure_models_dir_cmd(state: State<'_, AppState>) -> String {
101-
structure_models_dir(&state).to_string_lossy().into_owned()
102-
}
10398

10499
/// 课后精修会话(方案 A 增强版:懒加载模型 → 表格/公式模型版识别 → 回填产物)。
105100
///
Lines changed: 7 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
//! VAD 阈值共享槽(REQ-115 PRE-O4 / v0.7.0 M2)。
22
//!
3-
//! @ai-context: 健康判定口径统一的可观测性通道——会话线程内 AdaptiveVad 的
4-
//! 当前阈值(f32)经共享 AtomicU32(位模式)暴露给诊断面板:
5-
//! 降级提示与切段判定口径可对照核查("诊断可查阈值"验收点)。
6-
//! @ai-context: 共享槽语义 = 最近一次会话的最后阈值(无活动会话时保留旧值——
7-
//! 诊断面板可看上次会话的阈值走向;初始化 0.0 = 无数据)。
8-
//! @ai-context: 审查 MEDIUM-8 修复:槽记录发布来源会话 id——诊断面板可区分
9-
//! "实时值"(发布会话=活动会话)与"残留值"(上次会话遗留),
10-
//! 避免把旧会话阈值当成当前口径误读。
3+
//! @ai-context: 健康判定口径统一的可观测性通道(**当前仅剩写端**):会话线程内
4+
//! AdaptiveVad 的当前阈值(f32,AtomicU32 位模式)与发布来源会话 id
5+
//! 持续写入本共享槽;诊断读端已随「不留半成品」的删除处置移除——
6+
//! 未来若需要,届时按诊断需求重新引入(写端数值不受影响)。
7+
//! @ai-context: 共享槽语义 = 最近一次会话的最后阈值(无活动会话时保留旧值);
8+
//! 初始化 0.0 = 无数据。审查 MEDIUM-8 留下的来源会话 id 仍在写入
9+
//! (供未来读端区分"实时值"与"残留值"),当前无读取方。
1110
1211
use std::sync::atomic::{AtomicI64, AtomicU32, Ordering};
1312

@@ -25,68 +24,4 @@ impl VadThresholdSlot {
2524
self.bits.store(threshold.to_bits(), Ordering::Relaxed);
2625
self.source_session.store(session_id, Ordering::Relaxed);
2726
}
28-
29-
/// 读取当前阈值(无数据时 0.0)。
30-
pub fn read(&self) -> f32 {
31-
f32::from_bits(self.bits.load(Ordering::Relaxed))
32-
}
33-
34-
/// 发布来源会话 id(0 = 无数据;诊断新鲜度判定用)。
35-
pub fn source_session_id(&self) -> i64 {
36-
self.source_session.load(Ordering::Relaxed)
37-
}
38-
}
39-
40-
/// 暴露接口(诊断面板):当前阈值 + 基础阈值对照 + 新鲜度。
41-
#[derive(Debug, Clone, serde::Serialize)]
42-
#[serde(rename_all = "camelCase")]
43-
pub struct VadThresholdView {
44-
/// 当前自适应阈值(0.0 = 无数据)
45-
pub current: f32,
46-
/// 固定基础阈值(SILENCE_RMS_THRESHOLD——对照口径)
47-
pub base: f32,
48-
/// 发布来源会话 id(0 = 无数据)
49-
pub source_session: i64,
50-
/// 是否为活动会话的实时值(诊断面板区分实时/残留)
51-
pub is_live: bool,
52-
}
53-
54-
#[cfg(test)]
55-
mod tests {
56-
use super::*;
57-
58-
#[test]
59-
fn slot_roundtrip_preserves_bits() {
60-
// f32 → 位模式 → f32 往返一致(含特殊值)
61-
let slot = VadThresholdSlot::default();
62-
slot.publish(42, 0.0042);
63-
assert!((slot.read() - 0.0042).abs() < 1e-7);
64-
assert_eq!(slot.source_session_id(), 42);
65-
}
66-
67-
#[test]
68-
fn slot_defaults_to_zero() {
69-
// 无数据 → 0.0 + 来源 0(诊断面板"无数据"判定)
70-
let slot = VadThresholdSlot::default();
71-
assert_eq!(slot.read(), 0.0);
72-
assert_eq!(slot.source_session_id(), 0);
73-
}
74-
75-
#[test]
76-
fn slot_handles_nan_safely() {
77-
// NaN 位模式往返不崩溃(防御:会话线程异常值)
78-
let slot = VadThresholdSlot::default();
79-
slot.publish(42, f32::NAN);
80-
assert!(slot.read().is_nan());
81-
}
82-
83-
#[test]
84-
fn slot_overwrites_latest() {
85-
// 后写覆盖先写(最近阈值 + 最近来源语义)
86-
let slot = VadThresholdSlot::default();
87-
slot.publish(1, 0.01);
88-
slot.publish(2, 0.02);
89-
assert!((slot.read() - 0.02).abs() < 1e-7);
90-
assert_eq!(slot.source_session_id(), 2);
91-
}
9227
}

‎docs/standards/line-limit-exemptions.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838
| app/src-tauri/src/ai_client.rs | 505 | v0.11.6 M1(AiClient::from_provider / from_settings_with_store / is_fallbackable / fallback_provider_ids)+ 2026-09-11 DeepSeek V4.1 适配(chat_plain 探活路径 / build_plain_payload / json 前置条件兜底接线 / thinking 策略落点 / 4xx 错误体透出——纯策略与提取逻辑已拆至 ai_request_policy.rs)——Provider 解析与错误分类内聚于 AiClient 域,构造入口与降级链纯函数同文件便于单测。**旧登记 322 为过期快照,本次按实测纠偏** | 若再增长:fallback_provider_ids 拆至 ai_fallback.rs;payload 构造族拆至 ai_payload.rs |
3939
| app/src/components/GroupSidebar.test.tsx | 497 | 覆盖串组场景——切换 ⓘ 弹层目标组时表单态必须重置(key=group.id修复):组 A 改了判类(未确认)→ 点组 B ⓘ → 弹层显示 B 且判类下拉回到 B.kind(防把 A 的选择误用到 B——路径: 改判误操作)。(自动摘取,待细化) | 若再增长:按职责拆分 |
4040
| app/src-tauri/src/db_sop.rs | 490 | v0.20.3(REQ-296/297)SOP 三表数据域(模板/run/步骤/保鲜/聚合)+ 审查加固(保链更新/幂等守卫/步数计数)内聚 | 若再增长:run 执行族拆至 db_sop_run.rs |
41-
| app/src-tauri/src/app_commands.rs | 488 | 宏约束下的**唯一**注册点:334 条 `generate_handler!` 条目是**数据不是逻辑** —— `Invoke` 按值语义使分域组合不可行(见文件头),拆成多份只会在域间新增「命令名 → 域」路由漂移面;一致性由 `scripts/check-command-registry.mjs` 机器门禁守 | 不拆(数据文件);新增命令时同步条目,由门禁强制 |
4241
| app/src-tauri/src/live_session_persist.rs | 488 | 定稿落库域(persist_final/digest_merged/handle_final_event)+ P2 flush_tail_and_persist(停止/暂停共用尾句落库)内聚 | 若再增长:flush_tail_and_persist 与 digest_merged 拆至 live_session_persist_tail.rs |
42+
| app/src-tauri/src/app_commands.rs | 483 | 宏约束下的**唯一**注册点:334 条 `generate_handler!` 条目是**数据不是逻辑** —— `Invoke` 按值语义使分域组合不可行(见文件头),拆成多份只会在域间新增「命令名 → 域」路由漂移面;一致性由 `scripts/check-command-registry.mjs` 机器门禁守 | 不拆(数据文件);新增命令时同步条目,由门禁强制 |
4343
| app/src-tauri/src/db_sessions.rs | 482 | 会话仓储;批 4 delete_sessions_batch + 审查修复轮 3(transaction() 改造)——2026-09-09 实测纠偏(登记值 394 过期) | 若再增长:recent_ocr_texts 等建议查询拆至 db_sessions_queries.rs |
4444
| app/src-tauri/src/commands_ai_enrich.rs | 479 | v0.8.0 M3(REQ-142)+ F1/F2/F3:知识补充命令域(九子项校验/预估/异步任务/采纳/撤销 + 配额去重门控 + 成本硬拦截 + 任务落库)——与精修共用任务注册表上下文,命令域内聚;2026-09 修复(章节目录注入/逐块审查回执)微增 | 若再增长:门控/拦截拆至 commands_ai_enrich_gate.rs |
4545
| app/src-tauri/src/region_tracker.rs | 478 | v0.4.0 M2(REQ-037)起:ROI 跟踪状态机(播放区域检测/锁定聚簇/重扫/前台切换冻结)+ 纯函数单测内联;与 RoiTracker 状态强耦合 | 若再增长:lock_roi/prior_roi 纯函数拆至 region_lock.rs |
@@ -82,13 +82,13 @@
8282
| app/src/components/GoalDetail.tsx | 379 | 一致性契约——进度信号每次现算(get_goal_progress),动作后局部刷新;毕业仪式/回顾流属 M2(按钮留壳禁用不误导)。(自动摘取,待细化) | 若再增长:按职责拆分 |
8383
| app/src-tauri/src/live_session_lifecycle.rs | 376 | 会话启动/预热生命周期 + v0.19.2/3(REQ-273 + 审查即修:锁外等待+枚举化+辅助函数抽取,+78)——start/prepare/release 与等待/回退策略强耦合于 impl 生命周期域 | 若再增长:wait_prepared_ready 与回退策略拆至 live_session_start.rs |
8484
| app/src/components/RouteInfoPopover.tsx | 375 | v0.20.12 批 7(REQ-316)移入/移出选中笔记清理留痕透传(360→375) | 若再增长:简报拉取与渲染拆至 SystemBriefSection.tsx |
85-
| app/src-tauri/src/commands_fragments.rs | 374 | 碎片命令域 + REQ-316(批 7)结果契约与组域条件广播(登记值缺失为漏登——HEAD 基线已 347,本次补) | 若再增长:碎片组操作命令族拆至 commands_fragments_group.rs |
8685
| app/src-tauri/src/analysis_tests.rs | 371 | 分析编排测试域(档案门控矩阵 + REQ-108 事件消费 + M2 三字段)单模块 #[path] 挂载 | 若再增长:事件消费组拆至 analysis_events_tests.rs |
8786
| app/src-tauri/src/commands_web_inbox.rs | 371 | v0.20.4(REQ-304)扩展收件命令域(起停/状态/HTTP 小循环/投递收口/图落盘)内聚;2026-09-06 实测登记(TD-2026-09-06-G) | 若再增长:HTTP 连接处理拆至 web_inbox_http.rs |
8887
| app/src-tauri/src/live_keyframes.rs | 370 | ① handle_full_frame:全帧画面要点落库 + 关键帧样本收集与归档存图(三层图结构参考图集数据源);② 停止时关键帧投票(session:keyframes 事件);③ rewrite_with_fusion:融合重写(原属 live_session_frame,REQ-031 无字幕短路)。(自动摘取,待细化) | 若再增长:按职责拆分 |
8988
| app/src-tauri/src/windows.rs | 370 | 窗口枚举/评分域 + v0.19.2(REQ-271/272):CaptureWindow.zOrder/systemWindow 字段 + 抖音/快手/B站客户端评分表(+28)——枚举系统副作用与评分纯函数同域便于单测(既有模式) | 若再增长:z 序/系统标记纯函数拆至 windows_meta.rs |
9089
| app/src-tauri/src/commands_window.rs | 369 | 浮窗窗口命令域(v0.12.3 架构升级计划:全部窗口操作集中单文件)+ v0.12.6(ADR-025)显隐链路与全局快捷键三态切换核心(open/close/locked/topmost/toggle 核心 fn + 命令薄包装 + 状态机/序列化单测内联);拆分需跨 fn 传递 AppHandle/State,内聚性优先 | 若再增长:浮窗核心逻辑拆至 float_core.rs(命令薄包装保留本文件) |
9190
| app/src/components/KnowledgeCanvasView.test.tsx | 368 | @xyflow/react 全 mock(ReactFlow 记录 props 供交互断言;节点组件渲染不测——规格 §六「React Flow 渲染用 e2e 或跳过」)。覆盖:① 首次打开全量未布局 → batch_initialize 全量初始化(辐射位置);② 已存位置 → 跳过初始化且位置来自存储;③ 拖拽防抖保存;④ 节点点击选中联动;⑤ 视口恢复/首次 fitView;⑥ 自动排列覆盖;⑦ 核心问题虚拟节点;⑧ 返回按钮。(自动摘取,待细化) | 若再增长:按职责拆分 |
91+
| app/src-tauri/src/commands_fragments.rs | 366 | 碎片命令域 + REQ-316(批 7)结果契约与组域条件广播(登记值缺失为漏登——HEAD 基线已 347,本次补) | 若再增长:碎片组操作命令族拆至 commands_fragments_group.rs |
9292
| app/src-tauri/src/db_notes.rs | 366 | REQ-316(批 7):delete_note/update_note_group 改显式事务 + 同事务空组自动清理接线(结果契约扩展 + 旧组读出,净增 ~60 行;此前 305 未登记属漏登,本次补) | 若再增长:移组/删除事务族拆至 db_notes_group_ops.rs |
9393
| app/src-tauri/src/ocr_cache.rs | 358 | OCR 结果缓存域(内容指纹键/容量淘汰/命中率统计)内聚;缓存策略与指纹算法共享上下文 | 若再增长:指纹算法拆至 ocr_fingerprint.rs |
9494
| app/src-tauri/src/db_sessions_tests.rs | 354 | 由 db_sessions.rs 以 #[cfg(test)] #[path] 引入,保持实现文件 ≤300 行(AGENTS.md §3 模块化)。(自动摘取,待细化) | 若再增长:按职责拆分 |

0 commit comments

Comments
 (0)