Files
MemRelay/projects/4f53c06a-c6c3-40ec-b2fc-5f019ea45fc0/curated/project-cpe 当前状态概览.md
T

175 lines
7.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: project-cpe 当前状态概览
type: curated
permalink: main/projects/4f53c06a-c6c3-40ec-b2fc-5f019ea45fc0/curated/project-cpe-当前状态概览
stable_id: fe7caa54-0379-47d0-a16d-b85423ebef99
scope: project
project_id: 4f53c06a-c6c3-40ec-b2fc-5f019ea45fc0
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: current_state
revision: 2
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: de28dc8246094e2bc17cab7c764fb4d4a2da71e0
source_git_commits:
- de28dc8246094e2bc17cab7c764fb4d4a2da71e0
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 188
source_revisions:
memory:2ab0a44e-c56a-4cbc-a82f-c8b8456d5019: '1'
memory:c8101753-2674-42d9-8849-8e98d325d497: '1'
memory:866234ea-0d81-4fd9-912a-6cb68441e1cc: '1'
memory:d0a91595-3be4-4366-a615-58833dd0dff8: '1'
memory:51b5b48b-ac1f-4477-ab2f-dfc46198eb01: '1'
memory:fd164c80-b38b-4984-8008-48b57ba46e61: '1'
memory:fa66c797-a786-4966-8cb1-2eff40e3dc4e: '1'
memory:f0d365e8-4d2c-4d91-bdc0-df4d3d6fa6b3: '1'
memory:a732a5c7-f413-440e-ad41-2c018a68e15f: '1'
memory:ce9c98cd-85c8-4595-9cae-aa019b487893: '1'
memory:e92dbe0b-bb27-4b0e-b5bb-2330a0472fd2: '1'
memory:8c6276e6-d7db-409d-a3cd-5570c2d8fdc5: '1'
source_dispositions:
processed: 188
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- git:backend/src/config.rs
- git:backend/src/db.rs
- git:backend/src/dbus.rs
- git:backend/src/handlers.rs
- git:backend/src/ota.rs
- git:backend/src/state.rs
- git:backend/src/usb_switch.rs
- git:backend/src/utils.rs
- git:frontend/src/contexts/RefreshContext.tsx
- git:frontend/src/contexts/ThemeContext.tsx
- git:frontend/src/hooks/useAdaptivePolling.ts
- git:frontend/src/pages/Dashboard/index.tsx
- git:frontend/src/pages/ATConsole.tsx
- git:frontend/src/pages/Configuration.tsx
- git:frontend/src/pages/DeviceInfo.tsx
- git:frontend/src/pages/Frp.tsx
- git:frontend/src/pages/InitScript.tsx
- git:frontend/src/pages/Network.tsx
- git:frontend/src/pages/OtaUpdate.tsx
- git:frontend/src/pages/Phone.tsx
- git:frontend/src/pages/SMS.tsx
- git:frontend/src/pages/Terminal.tsx
- git:frontend/vite.config.ts
- git:scripts/build.sh
- git:scripts/deploy.sh
- git:scripts/pack-ota.sh
- git:scripts/pack-userdata.sh
- memory:2ab0a44e-c56a-4cbc-a82f-c8b8456d5019
- memory:c8101753-2674-42d9-8849-8e98d325d497
- memory:866234ea-0d81-4fd9-912a-6cb68441e1cc
- memory:d0a91595-3be4-4366-a615-58833dd0dff8
- memory:51b5b48b-ac1f-4477-ab2f-dfc46198eb01
- memory:fd164c80-b38b-4984-8008-48b57ba46e61
- memory:fa66c797-a786-4966-8cb1-2eff40e3dc4e
- memory:f0d365e8-4d2c-4d91-bdc0-df4d3d6fa6b3
- memory:a732a5c7-f413-440e-ad41-2c018a68e15f
- memory:ce9c98cd-85c8-4595-9cae-aa019b487893
- memory:e92dbe0b-bb27-4b0e-b5bb-2330a0472fd2
- memory:8c6276e6-d7db-409d-a3cd-5570c2d8fdc5
job_cited_source_ids:
- git:backend/src/config.rs
- git:backend/src/db.rs
- git:backend/src/dbus.rs
- git:backend/src/handlers.rs
- git:backend/src/ota.rs
- git:backend/src/state.rs
- git:backend/src/usb_switch.rs
- git:backend/src/utils.rs
- git:frontend/src/contexts/RefreshContext.tsx
- git:frontend/src/contexts/ThemeContext.tsx
- git:frontend/src/hooks/useAdaptivePolling.ts
- git:frontend/src/pages/Dashboard/index.tsx
- git:frontend/src/pages/ATConsole.tsx
- git:frontend/src/pages/Configuration.tsx
- git:frontend/src/pages/DeviceInfo.tsx
- git:frontend/src/pages/Frp.tsx
- git:frontend/src/pages/InitScript.tsx
- git:frontend/src/pages/Network.tsx
- git:frontend/src/pages/OtaUpdate.tsx
- git:frontend/src/pages/Phone.tsx
- git:frontend/src/pages/SMS.tsx
- git:frontend/src/pages/Terminal.tsx
- git:frontend/vite.config.ts
- git:scripts/build.sh
- git:scripts/deploy.sh
- git:scripts/pack-ota.sh
- git:scripts/pack-userdata.sh
conflicts: []
supersedes:
- summary: Later checkpoint supersedes earlier repository URL
current_source_ids:
- memory:2ab0a44e-c56a-4cbc-a82f-c8b8456d5019
superseded_source_ids:
- memory:c8101753-2674-42d9-8849-8e98d325d497
preferences: []
source_cursor: 87
source_hash: 96f0e4026558c8a03161f53b392fcec7359d4d701c4f33576b44e2f308b0ec5a
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: a9f69899-ee39-4900-b39a-a54d737f9614
created_at: '2026-08-19T03:55:22.375228+00:00'
updated_at: '2026-08-19T18:49:23.488327+00:00'
tags:
- project-cpe
- development
- current_state
---
# 当前开发状态
## 后端
- **代码结构**: `backend/src` 目录下实现了配置 (`config.rs`)、数据库 (`db.rs`)、ofono D‑Bus 交互 (`dbus.rs`)、HTTP 处理 (`handlers.rs`)、OTA 逻辑 (`ota.rs`)、FRPC 管理 (`state.rs`)、USB Gadget 切换 (`usb_switch.rs`)、工具函数 (`utils.rs`)、Webhook 与短信推送 (`webhook.rs`, `sms_push.rs`) 等模块。
- **关键实现**:
- 全局串行锁 `with_serial` 防止 ofono `InProgress` 错误。
- `iptables_watchdog` 每 5 s 刷新防火墙规则。
- OTA 包的原子替换与校验(MD5、SHA‑256、架构检查)。
- 配置系统采用 JSON 热加载,部分字段(如 FRPC token、APN password)已脱敏占位。
- **依赖锁定**: 所有依赖记录在 `Cargo.lock` 中,使用的主要 crates 已列于证据表 3.1。
- **构建脚本**: `build.rs` 注入 `APP_VERSION`、`GIT_BRANCH`、`GIT_COMMIT`。
- **未完成项**: 安全存储敏感字段、完整的错误码映射、单元测试覆盖。
## 前端
- **技术栈**: React 19 + TypeScript 5.9,UI 框架 MUI v7,数据获取 TanStack Query 5,构建工具 Vite 7。
- **全局上下文**: `ThemeContext`(亮/暗模式持久化),`RefreshContext`(轮询间隔可配置),自定义 Hook `useAdaptivePolling`、`useApi` 实现可见性感知的轮询。
- **路由与页面**: 通过 `react-router` 懒加载,实现了 Dashboard、ATConsole、Configuration、DeviceInfo、FRP、InitScript、Network、OTA Update、Phone、SMS、Terminal 等十余页面;每个页面对应后端 API 完整封装。
- **布局**: `MainLayout` + `Sidebar` + `TopBar`,固定页头和按钮栏,内部内容可滚动。
- **构建产出**: `vite build` 生成 `dist/`,在 CI 中打包进 OTA 包。
- **未完成项**: 单元/集成测试、错误边界 (`ErrorBoundary`)、i18n 多语言支持、列表虚拟化、全局错误状态码处理。
## CI / 部署
- **GitHub Actions**: `.github/workflows/build-ota.yml` 自动构建后端 Rust 二进制、前端 `dist`,可选 UPX 压缩,生成 `meta.json` 并校验校验和,最终产出 `udx710-ota-3.5.5.tar.gz`。
- **脚本集合** (`scripts/`):
- `build.sh` 完成交叉编译、前端打包、OTA 元数据生成。
- `deploy.sh` 通过 ADB 将产物推送至设备并重启服务。
- `pack-ota.sh` 与 `pack-userdata.sh` 负责 OTA 打包及 UBIFS 制作。
- `monitor.sh` 提供 ofono DBus 实时监控交互界面。
- **Docker**: `docker/gnu-builder.Dockerfile` 基于 Ubuntu 18.04,安装 `gcc-aarch64-linux-gnu` 与 Rust 交叉目标。
## 关键开放事项
| 类别 | 描述 |
|------|------|
| 安全 | AT 网关缺失鉴权、所有 HTTP 错误返回 200、CORS `*`、敏感字段未加密存储 |
| OTA | 未签名、无回滚机制 |
| FRPC | 日志轮转阈值固定、令牌未安全保存 |
| USB | 配置文件无文件锁、热切换标记为实验性 |
| 测试 | 缺乏单元/集成测试、前端缺少错误边界 |
| 性能 | 大表未虚拟化、轮询可见性切换未防抖 |
| 国际化 | 仅中文硬编码 |
以上状态基于截至 2026‑08‑19 的所有证据,任何后续改动应更新相应章节并在文档中记录。