- **对话和回复**：使用简体中文
- **代码注释**：使用中文，便于理解
- **文档说明**：使用简体中文
- **代码标识符**：变量名、函数名等使用英文（遵循编程规范）
- **设计规范**：禁止AI风格的设计，禁止使用emoji图标

## 构建与发布规范

- **版本号同步**：升级版本需同时改三处 —— `package.json`、`src-tauri/Cargo.toml`、`src-tauri/tauri.conf.json`。
- **桌面编译**：本机满并行编译会触发 360 杀掉运行中的 CCGUI，桌面构建统一用 `CARGO_BUILD_JOBS=2 npm run tauri build`（`cargo check` 也加 `-j2`）。
- **移动端 H5**：源文件是 `mobile-src.html`（引用 CDN，可编辑）；改完运行 `build-mobile-html.ps1`，把 `vendor/` 下的 xterm 及插件内联，生成自包含的 `mobile-test.html`。**不要直接编辑 `mobile-test.html`**（它被后端 `include_str!` 内嵌、被中继与安卓 App 托管，是生成物）。
- **PowerShell 脚本编码（踩过坑）**：本机 `powershell` 是 PS 5.1，对**无 BOM 的 UTF-8 脚本按 GBK 解析**，中文注释会破坏代码（曾致 `$PSScriptRoot` 失效、生成物中文全乱码）。仓库内 `.ps1` 一律保存为 **UTF-8 with BOM**；脚本里 `Get-Content` 读 UTF-8 文件必须显式 `-Encoding UTF8`。
- **安卓 App**：WebView 壳工程在 `android/`；改完 H5 后运行 `build-android.ps1` 一键出签名 APK（版本号自动跟随 `package.json`：`versionName` 取版本串、`versionCode` = major×10000+minor×100+patch，经 `-P` 注入 Gradle，无需手改 `android/app/build.gradle.kts`）。工具链在 `F:\Android`（Android SDK + Gradle），签名库 `android/ccgui.jks`。
- **公网中继**：VPS 域名 `ccgui.o455.com`（服务器 IP/密码等敏感信息不写入仓库）。中继在 VPS 的 `/opt/ccgui-relay/`（`server.js` + `mobile.html` + systemd 服务 `ccgui-relay`），前置 Caddy 自动 HTTPS。改了移动页就 `scp` 覆盖 `/opt/ccgui-relay/mobile.html`（无需重启，按请求读取）。
- **落地页与下载**：落地页 `https://ccgui.o455.com/ccgui.html`（源在 `relay/public/ccgui.html`）。下载文件名固定，落地页链接不变：桌面包覆盖到 `/opt/ccgui-relay/public/downloads/CCGUI-desktop-setup.exe`、APK 覆盖到 `/opt/ccgui-relay/public/downloads/CCGUI-android.apk`。Caddy 路由：`/ccgui.html` 与 `/downloads/*` 走 `file_server`，其余反代给 Node 中继（含 WebSocket）。落地页/对外文档同样遵循「无 emoji、不 AI 味」的克制风格。
- **发版三处同步（务必）**：每次对外发布新版本，必须同时更新中继上的三处，缺一不可（易漏，已多次踩坑）——① 在线网页 `scp mobile-test.html → /opt/ccgui-relay/mobile.html`；② 下载包 `scp` 覆盖 `downloads/CCGUI-android.apk` 与 `downloads/CCGUI-desktop-setup.exe`；③ 落地页版本文字 `relay/public/ccgui.html` 里的 `vX.Y.Z` 改好后 `scp` 覆盖 `/opt/ccgui-relay/public/ccgui.html`。只传 ① 会导致「网页版是新的、下载的却是旧包」。传完用 `curl` 实测核对（落地页文字、APK 内部 versionName、桌面包大小）。