IPC、错误与日志
前端一律使用 @/core/ipc 的封装,禁止裸 invoke:
import { ipc } from '@/core/ipc';
const rows = await ipc<Row[]>('db_query_values', { sql, params });命令名由 scripts/gen-commands.mjs 生成到 src/core/ipc/commands.gen.ts:它读取
src-tauri/framework-commands.json 并扫描插件的 #[tauri::command],生成框架 + 插件的
联合类型。调用未注册的命令会在类型检查期报错。
Rust 侧所有命令返回 AppError{code, message},其 code 与前端 @/core/errors
的 ErrorCode 对齐。错误会自动走统一管道:转换 → 日志 → 未捕获时 toast。
Err(crate::error::AppError::custom("TIME_ERROR", "clock went backwards"))用 @/core/logger 的 logger,或插件 setup.ts 里的 ctx.logger;Rust 侧用 log。
禁止裸 println!。
双端日志统一写入应用日志目录(macOS 为 ~/Library/Logs/<应用 identifier>/),
console 已被接管,级别运行时可调(设置页)。