#![allow(non_snake_case)] use crate::session_manager; #[tauri::command] pub async fn list_sessions() -> Result, String> { let sessions = tauri::async_runtime::spawn_blocking(session_manager::scan_sessions) .await .map_err(|e| format!("Failed to scan sessions: {e}"))?; Ok(sessions) } #[tauri::command] pub async fn get_session_messages( providerId: String, sourcePath: String, ) -> Result, String> { let provider_id = providerId.clone(); let source_path = sourcePath.clone(); tauri::async_runtime::spawn_blocking(move || { session_manager::load_messages(&provider_id, &source_path) }) .await .map_err(|e| format!("Failed to load session messages: {e}"))? } /// 在用户选定的终端里恢复一个会话。 /// /// # 安全边界:`command` 是刻意不加校验的 /// /// 本命令接受 renderer 传来的任意字符串并最终交给 shell。多份外部审计把这一点 /// 报成"IPC 任意命令执行",这里明确记录为**已知并接受的风险**,而不是待修缺陷。 /// /// 依据是本应用把 renderer 当作可信边界。支撑这一判断的是以下事实,全部逐条 /// 核实过(2026-07): /// /// 1. 全库仅一处 `dangerouslySetInnerHTML`(`ProviderIcon.tsx`),其入参是图标 /// **名字**,经 `hasIcon()` 把关后从手工维护的构建期注册表取 SVG——用户与 /// 深链接都只能给名字,给不了标记内容 /// 2. 前端无 `eval` / `new Function` /// 3. `tauri.conf.json` 的 `frontendDist` 指向打包产物,webview 不加载任何远程 /// 源;界面里也没有 `