关键约定
网络:所有 HTTP 请求统一走 Rust
Section titled “网络:所有 HTTP 请求统一走 Rust”- 通用请求:
lib/services/http_ffi.dart(HttpFfiService),适用于小 / 中响应 - 大文件下载:
lib/services/downloader.dart(Downloader.downloadFile),流式写盘 - 禁止在新增 API 服务中使用
package:http(仅测试用例保留) - 本地回环 HTTP 服务端(OAuth 回调、MCP 服务端)例外,使用
dart:io HttpServer
数据库:所有远程数据库操作统一走 Rust
Section titled “数据库:所有远程数据库操作统一走 Rust”- 通过
lib/services/db_client_ffi.dart(DbClientFfi)调用xmc_db_client的db_request入口 - 覆盖 MySQL / MariaDB / PostgreSQL / Redis 的连接测试、浏览、查询、管理
- 禁止在 Dart 侧新增数据库客户端依赖
remote_db_service.dart是唯一业务入口
- 统一走
lib/state/(Provider),不在 widget 内直接持有全局状态
- 统一用 SQLite(
instance_store.dart、node_store.dart、trash_store.dart、ai_settings.dart等),设置存settings表 - 无 SharedPreferences
- 新增页面放
lib/screens/,新增 API 服务放lib/services/ - 命名遵循现有
*_api_service.dart/*_provider.dart模式 - 全局暗色主题,UI 组件参考
lib/utils/apple_widgets.dart
Rust 修改后必须重编译
Section titled “Rust 修改后必须重编译”修改 Rust 代码后,必须先重新编译并复制动态库到平台目录(Windows windows/runner/、Linux linux/、macOS macos/),否则运行的是旧动态库。
新增 crate 需同步更新 7 处
Section titled “新增 crate 需同步更新 7 处”rust/Cargo.toml的membersbuild_rust.bat/build_rust.shlinux/CMakeLists.txtwindows/runner/CMakeLists.txtmacos/Runner.xcodeproj/project.pbxproj(dylib 复制 + 签名脚本).github/workflows/build-and-test.yml.github/workflows/package.yml(⚠️ 极易漏改)
FFI 集成测试
Section titled “FFI 集成测试”test/*_ffi_test.dart 需要动态库已编译并复制到 windows/runner/ 或项目根目录(build_rust.bat 会复制到两处);本地回环 HTTP 测试(http_ffi 等)用 dart:io HttpServer 自起服务,无需外部依赖。
- 勿编辑
rust/target/、build/、dist/等生成目录 - 勿在 Dart 侧引入新的 HTTP 客户端 / 数据库客户端依赖
