# VCPMobile **Repository Path**: sunqianyi/VCPMobile ## Basic Information - **Project Name**: VCPMobile - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-06-26 - **Last Updated**: 2026-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
VCP Mobile Logo

VCP Mobile Project Avatar

From Desktop Client to Cyber-Physical Avatar.

version platform framework backend UI license

--- ## Table of Contents 1. [What is VCP Mobile](#1-what-is-vcp-mobile) 2. [Key Features](#2-key-features) 3. [Architecture](#3-architecture) 4. [Project Structure](#4-project-structure) 5. [Tech Stack](#5-tech-stack) 6. [Documentation](#6-documentation) 7. [Quick Start](#7-quick-start) 8. [Development & Testing](#8-development-and-testing) 9. [Contributing & Governance](#9-contributing-and-governance) 10. [FAQ & Troubleshooting](#10-faq-and-troubleshooting) 11. [License & Credits](#11-license-and-credits) --- ## 1. What is VCP Mobile **VCP Mobile**(代号 Project Avatar)是 [VCPChat](https://github.com/MRiecy/VCPChat) 的移动端进化版,一个基于 **Tauri v2 + Vue 3 + Rust** 构建的 Android 原生应用。核心目标是将 AI Agent 的交互能力以低延迟、高内存安全性的方式带入物理移动端。 与桌面端 VCPChat 不同,Project Avatar 并非简单的界面适配,而是一次架构层面的彻底重构。我们采用了 **Double-Track 3-Tier 架构** —— Rust 核心层、Tauri IPC 桥接层、Vue 3 渲染层物理隔离,使每一个层级都可以独立演进而不产生耦合债务。 与市面上其他移动端 AI 应用相比,VCP Mobile 的独特之处在于: - **Backend-Driven Streaming**:消息生命周期完全由后端 SSE 事件驱动,前端不做任何预创建或状态猜测 - **自定义增量同步协议**:不依赖第三方云服务,移动端与桌面端通过 WebSocket + HTTP 双通道直接同步 - **14+ 设备能力工具**:将手机本身变成一个分布式计算节点,AI 可直接调用位置、传感器、CPU/GPU 信息等原生能力 ### 演进历程 | 版本 | 关键里程碑 | |------|------------| | v0.9.0 | 首个 Preview 版本,Tauri v2 + Vue 3 + Rust 基础架构确立 | | v0.9.6 | 修复消息历史回退遗留,指纹命令注册,APK 签名验证 | | v0.9.8 | 消息路由体系完善,SSE 生命周期管理,UI 架构重构 | | v0.9.10 ~ v0.9.12 | 同步 V2 协议实现,群组对话,附件分类与预览体系 | | v0.9.13 ~ v0.9.14 | 分布式节点模块,设备能力工具集,Model 管理器,WebGL 特效 | | v1.0.0 | Avatar 正式发布:Backend-Driven Streaming、Tarven 上下文注入、Semantic Z-Index、SlidePage 虚拟导航 | 项目从首个 commit 起即采用 Tauri v2 + Vue 3 + Rust 栈,不存在 Node.js / Electron 或 Tauri v1 的历史阶段。Rust 的所有权模型和零成本抽象为移动端提供了编译期内存安全保障,Tokio 异步运行时确保网络 IO 不阻塞主线程,这对流式聊天体验至关重要。 --- ## 2. Key Features ### ⚡ Backend-Driven Streaming 流式聊天的消息生命周期已全面转为后端 SSE 事件驱动,前端不再承担消息生命周期管理。 - 后端通过 `StreamEvent`(`thinking` / `content` / `blocks` / `end` / `error`)逐事件下发 - 前端 `chatStreamStore` 仅做状态映射,不做任何消息预创建或内容猜测 - 显著简化 `chatHistoryStore`,消除前后端状态不一致的隐患 - 支持 `LinesCodec` 流式解析,降低移动端内存峰值 ``` ┌─────────────┐ SSE Stream ┌─────────────────┐ │ Backend │ ──StreamEvent─────► │ chatStreamStore│ │ (Rust) │ thinking/content │ (Vue/Pinia) │ └─────────────┘ /blocks/end └─────────────────┘ ``` ### 🧠 Tarven 上下文注入规则 结构化提示词注入规则引擎,支持在对话流的任意节点精确插入外部上下文。 - **`system_suffix`**:在系统提示词前/后追加内容 - **`user_suffix`**:在用户消息前/后追加内容 - **`context_inject`**:在对话历史指定深度注入自定义角色消息 - 规则支持 `scope`(`global` / `agent` / `group`)分级生效 - `sort_order` 排序机制确保多规则冲突时可预期 - WYSIWYG 实时预览,所见即所得 ### 🔄 分布式增量同步(Delta Sync V2) 移动端与桌面端通过自定义三阶段协议保持实时同步,无需第三方云服务。 | 阶段 | 动作 | 传输通道 | |------|------|----------| | 1. Metadata 指纹交换 | 对比 SHA-256 Hash 列表 | WebSocket | | 2. Content Diff | Hash 不匹配时执行 PULL / PUSH | HTTP | | 3. Message Stream | 增量拉取缺失消息 | WebSocket | - 基于 SHA-256 Hash 的差异检测,避免全量传输 - WebSocket + HTTP 双通道设计:控制面走 WebSocket,数据面走 HTTP - 冲突解决采用逻辑时钟与 `updated_at` 策略,保证最终一致性 - WAL(Write-Ahead Logging)模式 SQLite,降低移动端并发写入锁竞争 ### 📎 多模态附件引擎 2.0 插件化附件系统,支持从图像到文档的全类型处理。 - **`AttachmentRegistry`** 注册表 + **`AttachmentFactory`** 工厂 + **`AttachmentClassifier`** 分类器 - 支持 8 种类型:`Image` / `Video` / `Audio` / `Document` / `Code` / `Text` / `Other` - 双轨上传策略: - Android 原生 File Picker(常规文件) - 高速 TCP 通道(大文件分块上传) - `AttachmentViewer` 全屏查看器,挂载于语义化 `z-viewer` 层级 - 文件上传:无大小限制,系统级 `rename` + SHA-256 流式哈希计算 - 文本提取:50 MB 文件硬上限防 OOM,提取结果按 1000 万字符截断 - 视频帧提取:Base64 累计 18 MB 动态截断,确保请求体在 20 MB 以内 - 音频提取:3500 秒(约 58 分钟)时长硬截断 ### 🎯 Model 管理与选择器 - `modelStore` 集中管理模型列表、收藏状态、热门排行 - 10 分钟 TTL 缓存 + 锁频防护,避免重复请求 - `ModelSelector` BottomSheet 弹层:收藏 > 热门 > 字母序三级排序 - 与 `AgentSettingsView` 深度联动,切换模型即时生效 ### 🏗️ Semantic Z-Index / SlidePage 虚拟导航 11 级语义化层级系统,彻底消灭 `z-[999]` 魔法数字。 | 语义名 | 数值 | 用途 | |--------|------|------| | `content` | 0 | 页面内容默认层 | | `local` | 10 | 局部悬浮(置底按钮、角标)| | `drawer` | 20 | 左右抽屉 + 遮罩 | | `overlay` | 30 | 全局覆盖容器 | | `page` | 40+ | SlidePage 虚拟页面栈 | | `sheet` | 50 | BottomSheet、ModelSelector | | `dialog` | 60 | Prompt、ContextMenu | | `viewer` | 70 | AttachmentViewer、AvatarCropper | | `editor` | 80 | 全屏 HTML 编辑器 | | `toast` | 90 | Toast 通知 | | `boot` | 100 | 启动屏 | | `gate` | 110 | 权限引导页 | - 三层保障:CSS 变量 `--layer-*` + UnoCSS 快捷类 `z-*` + TypeScript 常量 `LAYER_*` - SlidePage 虚拟页面栈:非路由跳转,通过 `overlayStore` 管理,动态 Z-Index = `40 + stackIndex` - Operation Aegis 模态历史栈支持物理返回键 LIFO 消费 ### 🔧 14+ 设备能力工具(分布式节点)— TODO `distributed/` 模块将手机转化为 AI 可直接调用的分布式计算节点,提供 14+ 原生设备能力: - `device_info` / `device_status_summary` — 设备综合信息 - `location` — GPS 与网络定位 - `battery` — 电量与充电状态 - `clipboard` — 剪贴板读写 - `cpu_info` / `gpu_info` / `memory_info` / `storage_info` — 硬件监控 - `network_info` — 网络类型与连接状态 - `ambient_sensor` / `motion_sensor` — 环境传感器与运动传感器 - `notification` — 本地通知推送 - `frontend_bridge` — 前后端能力桥接 ### 🤖 Agent / Group 交互 - AgentList 支持拖拽排序(SortableJS)+ Swipe 手势(编辑/删除) - `AgentSettingsView` / `GroupSettingsView` 设置面板,与 `ModelSelector` 联动 - `vue-cropper` 头像裁剪 + Dominant Color 主色调提取 - 群组对话支持 `group_context_assembler` 与 `group_speaking_policy` 发言策略 ### 🌊 WebGL 流体动态背景 `WebGLFluidBackground.vue` 提供高性能流体模拟动态背景,仅用于**关于界面(About Section)**的视觉特效。 ### 🚀 OTA 热更新 - APK 本体 OTA 升级 + 前端资源热更新双通道 - `confirm_frontend_boot` 回滚保护机制:新资源加载失败时自动回退至上一稳定版本 - `frontend_update_manager` 管理下载、校验、应用全生命周期 --- ## 3. Architecture VCP Mobile 采用 **Double-Track 3-Tier(双轨三层)架构**,将 UI 渲染层、IPC 桥接层、Rust 核心层物理隔离,并向下延伸为 Android 原生插件层,实现端到端的类型安全与内存安全。 ### 3.1 分层概念 ``` ┌───────────────────────────────────────────────────────────────┐ │ Rendering Layer │ │ Vue 3.5 + Pinia 3 + UnoCSS │ │ src/ —— 组件、Store、Composable、Directive │ ├───────────────────────────────────────────────────────────────┤ │ IPC Bridge Layer │ │ Tauri v2 —— invoke / listen / Channel │ │ 前端调用 Rust command,后端通过 Channel 推送 SSE Stream │ ├───────────────────────────────────────────────────────────────┤ │ Core Layer │ │ Rust + Tokio │ │ src-tauri/src/vcp_modules/ —— 7 大领域: │ │ agent / chat / group / infra / persistence / sync / updater │ │ src-tauri/src/distributed/ —— 14+ 设备能力工具 │ ├───────────────────────────────────────────────────────────────┤ │ Native Layer │ │ Kotlin Android Plugin (tauri-plugin-vcp-mobile) │ │ 屏幕常亮、前台保活、键盘 Insets、生命周期桥接 │ └───────────────────────────────────────────────────────────────┘ ``` **Double-Track** 指两条独立的数据通道: - **Request-Response Track**:Vue `invoke` → Rust Command → 返回 `Result`,用于配置读写、CRUD 操作。 - **Streaming Track**:Rust `Channel` → 前端 `listen` / `EventSource`,用于 SSE Stream、WebSocket 消息、进度推送。 ### 3.2 典型数据流 **发送消息(Send Message)**: ``` Vue Input → chatSessionStore → invoke("send_chat_message", payload) → Rust chat service → VCP API ← SSE Stream → Channel.emit() → Vue chatStreamStore → chatHistoryStore 追加消息块 ``` **增量同步(Delta Sync)**: ``` Vue → invoke("start_sync") → Rust sync service → WebSocket 握手 → Delta Sync 协议 → SHA-256 Hash compare(本地 vs 远端) → 生成增量 patch → SQLite WAL 写入 → 前端 syncStore 更新进度与状态 ``` ### 3.3 状态管理 全局状态由 **18 个 Pinia Stores** 组成,全部使用 **Composition API 风格**(`defineStore('id', () => { ... })`),摒弃 Options API。 | Store | 职责 | |-------|------| | `chatSessionStore` | 当前会话状态、输入框内容、快捷操作 | | `chatHistoryStore` | 消息列表、分页加载、消息 CRUD | | `chatStreamStore` | SSE Stream 实时状态、thinking 块、block 解析 | | `attachmentStore` | 附件选择、上传队列、MIME 识别、进度追踪 | | `overlayStore` | SlidePage 栈、BottomSheet、Dialog 队列、Z-Index 管理 | | `agentStore` | Agent / Group 列表、排序、缓存、卡片级手势状态 | | `themeStore` | 主题切换、CSS 变量注入、跟随系统深色模式 | ### 3.4 Android 原生插件通信分层 `tauri-plugin-vcp-mobile` 统一管理全部 Android 原生能力,不同功能采用不同的通信方式: | 功能 | Rust 模块 | Kotlin 模块 | 通信方式 | |------|-----------|-------------|----------| | 屏幕常亮 | `src/screen.rs` | — | Raw JNI(`jni` crate 直接调用 Activity)| | 流式前台保活 | `src/stream.rs` | `StreamKeepaliveService.kt` | `PluginHandle.run_mobile_plugin` | | 键盘 Insets | — | `KeyboardInsetsManager.kt` | `evaluateJavascript` 注入 CustomEvent | | 生命周期事件 | — | `LifecycleBridge.kt` | `evaluateJavascript` 注入 CustomEvent | | 权限与系统控制 | `src/system.rs` | `VcpMobilePlugin.kt` | `PluginHandle.run_mobile_plugin` | 关键设计决策: - `KeyboardInsetsManager` 和 `LifecycleBridge` 不使用 Tauri 标准事件通道,而是通过 `evaluateJavascript` 直接注入 `window.CustomEvent` - `StreamKeepaliveService` 使用 `START_STICKY` + `IMPORTANCE_HIGH` + Android 14+ `FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING` - 屏幕常亮使用 Raw JNI 而非 PluginHandle,避免跨语言序列化开销 --- ## 4. Project Structure ``` VCPMobile/ ├── src/ # Vue 3 前端源码 │ ├── main.ts # 应用入口 │ ├── App.vue # 根布局(引导流程 + 侧边栏手势) │ ├── core/ │ │ ├── stores/ # 18 Pinia Stores(Composition API) │ │ ├── composables/ # 15 个全局组合式函数 │ │ ├── router/ # Hash 模式路由 │ │ ├── directives/ # v-intersection-observer, v-longpress │ │ ├── types/ # 全局 TypeScript 类型 │ │ ├── constants/ # 层级常量、主题 Token │ │ └── utils/ # 同步服务、通用工具 │ ├── features/ # 领域功能模块(Feature Co-location) │ │ ├── chat/ # 对话引擎、消息渲染、输入增强 │ │ ├── agent/ # Agent/Group CRUD、设置面板、拖拽排序 │ │ ├── topic/ # 主题管理 │ │ ├── settings/ # 全局设置、主题选择 │ │ ├── notification/ # 通知中心与 Toast │ │ ├── sync/ # 同步状态 UI │ │ └── distributed/ # 设备工具调用 UI │ ├── components/ │ │ ├── layout/ # AgentSidebar, BootScreen, RightSidebar │ │ ├── ui/ # BottomSheet, ToastManager 等原语 │ │ └── settings/ # 设置页原子组件 │ └── assets/ # 主题 CSS、Logo 预览 ├── src-tauri/ # Tauri v2 + Rust 后端 │ ├── src/ │ │ ├── lib.rs # Tauri Command 注册、managed state │ │ ├── vcp_modules/ # 业务逻辑(7 大领域) │ │ │ ├── agent/ │ │ │ ├── chat/ │ │ │ ├── group/ │ │ │ ├── infra/ │ │ │ ├── persistence/ │ │ │ ├── sync/ │ │ │ └── updater/ │ │ └── distributed/ # 设备能力工具(14+ tools) │ ├── plugins/vcp-mobile/ # Android 原生插件 │ │ ├── src/ # Rust 侧(screen / stream / system) │ │ ├── android/ # Kotlin 侧(Service / Bridge / Manager) │ │ ├── guest-js/ # 前端 TS 调用封装 │ │ └── permissions/ # Tauri v2 权限声明 │ └── Cargo.toml # Rust 依赖与 Release 优化配置 ├── docs/ # 四层技术文档体系 │ ├── vue_docs/ # 前端文档(24 份) │ ├── modules/ # Rust 模块文档(17 份) │ ├── sync/ # 同步协议文档(20 份) │ ├── plugins/ # 原生插件文档(9 份) │ └── *.md # 顶层规范(架构、UI 层级、依赖管理) ├── plans/ # 知识治理体系(5 层目录) ├── scripts/ # 开发辅助脚本 ├── .github/workflows/ # CI/CD(类型检查 + Release APK) ├── package.json # pnpm 依赖与脚本 ├── vite.config.ts # Vite 配置(端口 1420/1421) ├── uno.config.ts # UnoCSS 预设与主题色 └── tsconfig.json # TS 严格模式配置 ``` ### 关键文件速查 | 文件 | 说明 | |------|------| | `src/main.ts` | Vue/Pinia/Router 实例创建,全局指令注册,初始化监听 | | `src/App.vue` | 根布局:BootScreen 引导、侧边栏手势、全局事件监听 | | `src/core/constants/layers.ts` | 语义化 Z-Index 体系(content → gate,共 11 层) | | `src/core/stores/chatStreamStore.ts` | SSE Stream 状态驱动,Backend-Driven Streaming 核心 | | `src-tauri/src/lib.rs` | Tauri 命令路由、managed state 注入、启动钩子 | | `src-tauri/src/vcp_modules/chat/chat_manager.rs` | 对话生命周期管理、消息发送编排 | | `src-tauri/src/vcp_modules/infra/vcp_client.rs` | HTTP 客户端(reqwest + rustls-tls)、SSE 解析 | | `src-tauri/src/vcp_modules/sync/sync_service.rs` | 三阶段增量同步主控(WebSocket + HTTP) | | `src-tauri/src/distributed/tools/device_info.rs` | 设备信息工具(14+ 设备能力之一) | | `src-tauri/plugins/vcp-mobile/android/.../StreamKeepaliveService.kt` | Android 14+ 前台保活服务 | | `docs/SYNC_ARCHITECTURE.md` | 增量同步协议完整规范 | | `docs/UI_LAYER_ARCHITECTURE.md` | 全局 UI 层级与 Z-Index 语义化规范 | | `scripts/tauri_android_dev.cjs` | WiFi/USB 双模式真机调试启动器 | | `uno.config.ts` | UnoCSS 主题色、快捷类、断点配置 | | `vite.config.ts` | Vite 插件链、Tauri 感知开发服务器 | ### CI/CD 工作流 | 工作流 | 文件 | 触发条件 | 执行内容 | |--------|------|----------|----------| | CI | `.github/workflows/ci.yml` | push / PR 到 main | `vue-tsc --noEmit` + `cargo fmt --check` + `cargo clippy -- -D warnings` | | Release | `.github/workflows/release.yml` | GitHub Release published | 构建 `aarch64` Release APK 并上传 | Release 工作流环境:Node 22, pnpm 10, Java 17 (temurin), Android NDK `29.0.13846066`。APK 自动重命名为 `VCPMobile_v{VERSION}_arm64-v8a.apk`。 --- ## 5. Tech Stack | Layer | Tech | Version | Purpose | |-------|------|---------|---------| | Frontend Framework | Vue | 3.5.33 | Reactive UI | | Frontend Framework | Vue Router | 5.0.6 | Hash routing | | Frontend State | Pinia | 3.0.4 | State management | | Frontend State | pinia-plugin-persistedstate | 4.7.1 | State persistence | | Frontend Style | UnoCSS | 66.6.8 | Atomic CSS | | Frontend Build | Vite | 6.4.2 | Build tool | | Frontend Type | TypeScript | ~5.6.3 | Type system | | Backend Framework | Tauri | 2.11.1 | Cross-platform framework | | Backend Runtime | Tokio | 1.x | Async runtime | | Backend Storage | sqlx + rusqlite | 0.8.6 / 0.32.1 | SQLite async driver | | Backend Network | reqwest + tokio-tungstenite | 0.12 / 0.26 | HTTP + WebSocket | | Backend Parsing | syntect + pulldown-cmark | — | Syntax highlight + Markdown | | Backend Security | rustls-tls | — | TLS encryption | | Build Tool | pnpm | 10.x | Package manager | | CI/CD | GitHub Actions | — | Automated build and release | ### 安全设计 - **路径遍历防护**:`file_manager.rs` 中的 `ensure_safe_path()` 限制所有文件访问在 `app_config_dir` 下 - **内存限制**:文件上传 ≤ 20 MB,`read_local_file_base64` ≤ 50 MB,防止 OOM - **密钥管理**:`build_android_release.ps1` 含本地密钥库密码,已被 `.gitignore` 排除 - **数据库**:SQLite 启用 WAL(Write-Ahead Logging)模式,降低并发写入锁竞争 - **网络**:HTTP 客户端使用 `rustls-tls`,禁用原生 TLS;支持 gzip 压缩 --- ## 6. Documentation ### 6.1 四层知识库 | Knowledge Base | Path | Docs Count | Scope | Audience | |----------------|------|:----------:|-------|----------| | Frontend Docs | `docs/vue_docs/` | 24 | 全部 Vue/TS 源码 | 前端开发者 | | Rust Modules | `docs/modules/` | 17 | `vcp_modules/` + `distributed/` | 后端开发者 | | Sync Protocol | `docs/sync/` | 20 | Delta Sync V2 全链路 | 同步功能开发者 | | Plugin Docs | `docs/plugins/` | 9 | `tauri-plugin-vcp-mobile` | 原生插件开发者 | ### 6.2 快速决策树 遇到以下问题时,直接查阅对应文档: - **"Message rendering pipeline 如何工作?"** → `docs/vue_docs/features/chat/09_...` - **"Tarven injection rules 的判定逻辑是什么?"** → `docs/modules/16_...` - **"Sync hash detection 如何检测冲突?"** → `docs/sync/03_...` - **"Frontend store 的架构约定是什么?"** → `docs/vue_docs/core/stores/...` - **"Android lifecycle bridge 的事件流向?"** → `docs/plugins/...` - **"Attachment upload protocol 的分块策略?"** → `docs/modules/07_...` - **"UI Z-Index 层级语义化规范?"** → `docs/UI_LAYER_ARCHITECTURE.md` - **"Android 权限管理与前台服务规范?"** → `docs/ANDROID_PLUGIN_MANAGEMENT.md` - **"Backend-Driven Streaming 的消息生命周期?"** → `docs/vue_docs/features/chat/...` - **"Release 构建优化配置详解?"** → `docs/modules/...` ### 6.3 前后端交叉引用 文档体系并非单向分层,而是存在显式的**前后端交叉引用**: | 前端文档 | ↔ | 后端文档 | |---------|---|---------| | Frontend Tarven rule system | ↔ | Backend Tarven injection engine (`vcp_modules/chat/`) | | Frontend StreamStore 状态机 | ↔ | Backend SSE Stream parser + Channel emitter | | Frontend sync progress UI | ↔ | Backend sync executor + sync pipeline | | Frontend attachment preview | ↔ | Backend file_manager + media_processor | | Frontend agent settings panel | ↔ | Backend agent_service + avatar_service | 这种映射关系确保任何跨层变更都能快速定位到对端实现。 --- ## 7. Quick Start ### 7.1 用户安装(普通用户) 1. 前往 [Releases](https://github.com/MRiecy/VCPMobile/releases) 下载最新 `VCPMobile_v1.0.3_arm64-v8a.apk` 2. 安装到 Android 设备(minSdk 26,推荐 Android 10+) 3. 启动应用,完成权限引导(通知、存储、电池优化白名单) 4. 配置 VCP 服务器地址与 API Key 5. 开始对话 ### 7.2 开发者环境 **Prerequisites:** - Rust (Latest Stable, Edition 2021) - Node.js (v22+) & pnpm (10.x) - Android Studio & Android NDK (`29.0.13846066`) - Java 17 (temurin) - 支持 Windows / macOS / Linux 的开发环境 **完整命令流:** ```bash # 1. Clone git clone https://github.com/MRiecy/VCPMobile.git cd VCPMobile # 2. Install dependencies pnpm install # 3. Initialize Android (first time only) pnpm tauri android init # 4. Development server pnpm tauri android dev # 5. Static check (TypeScript) vue-tsc --noEmit # 6. Static check (Rust) cd src-tauri && cargo check # 7. Build Release APK pnpm tauri android build --apk --target aarch64 ``` --- ## 8. Development & Testing ### 8.1 pnpm 脚本速查表 | 脚本 | 命令 | 说明 | |------|------|------| | `pnpm dev` | `vite` | 前端开发服务器(端口 1420)| | `pnpm build` | `vue-tsc && vite build` | 前端生产构建 | | `pnpm tauri android dev` | — | Android 开发调试 | | `pnpm tauri android build --apk --target aarch64` | — | Release APK 构建 | 项目同时提供了 `scripts/` 目录下的辅助脚本(如 WiFi/USB 双模式调试启动器),适用于内部开发流程。 ### 8.2 Rust Release 优化 ```toml [profile.release] opt-level = 3 lto = true codegen-units = 1 panic = "abort" strip = true ``` ### 8.3 测试策略 - **前端**:无自动化测试。验证依赖 `vue-tsc --noEmit`(静态类型)+ 真机手动测试。 - **Rust 单元测试**: - `vcp_modules/sync/sync_retry.rs`(5 个测试) - `vcp_modules/chat/context_sanitizer.rs`(3 个测试) - `vcp_modules/sync/sync_logger.rs` - **核心模块**(`vcp_client`, `sync_service`, `db_manager` 等)无自动化测试。 --- ## 9. Contributing & Governance ### 9.1 Magi 三贤者协议 任何重大架构调整、复杂 Bug 修复或核心功能实现前,需强制进行三方思辨: - **Melchior (逻辑与系统)**:审查内存安全、Rust 生命周期、IPC 开销、类型完整性、OOM 防御 - **Balthasar (直觉与美学)**:审查移动端原生直觉、Glassmorphism 规范、微动画、交互心理学 - **Casper (务实与交付)**:审查工程复杂度、维护成本、实现周期,拒绝过度设计 ### 9.2 plans/ 知识治理 | 目录 | 用途 | 写入时机 | |------|------|----------| | `01_Architecture/` | 核心架构、工程标准 | 重大架构变更 | | `02_Refactoring/` | 重构计划与优化报告 | 重构战役期间 | | `03_Features/` | 具体功能实现细节 | 新功能开发 | | `04_Logs/` | Bug 解剖、Magi 辩证记录 | 重大节点或调试后 | | `05_Sublimations/` | 固化真理、精炼标准 | 确立新架构模式时 | - 任何对 `plans/` 的修改建议同步更新索引文件 ### 9.3 编码规范(精简版) - **前端**:`