From 4ec294be407f41363a424cc9a7ca4481672a0c3f Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Sat, 11 Jul 2026 21:02:53 +0800 Subject: [PATCH] =?UTF-8?q?docs+chore:=20=E8=A1=A5=20CLAUDE.md=EF=BC=88?= =?UTF-8?q?=E8=81=94=E8=B0=83=E5=90=AF=E5=8A=A8=20+=20=E7=9C=9F=E7=9B=B8?= =?UTF-8?q?=E6=BA=90=E7=BA=A6=E5=AE=9A=EF=BC=89=E4=B8=8E=20desktop/run-dev?= =?UTF-8?q?.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (此前误报已完成实为未提交,现真实补上。) - desktop/run-dev.sh:桌面端启动脚本,对齐 server/run-dev.sh,含麦克风权限提示 - CLAUDE.md:两条联调启动命令 + 麦克风/邮箱登录踩坑 + 真相源与闸约定 + 透明窗口范式 + TODO 约定 Co-Authored-By: Claude Fable 5 --- CLAUDE.md | 37 +++++++++++++++++++++++++++++++++++++ desktop/run-dev.sh | 16 ++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 CLAUDE.md create mode 100755 desktop/run-dev.sh diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..414b0c4 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,37 @@ +# dudu — Claude 项目约定 + +五端语音输入法:Go 后端 + 桌面(Tauri 2)/Android/iOS/官网。按住快捷键说话 → 流式识别 → 上屏;时长计费,微信/邮箱登录。 + +## 本地联调启动(两个终端) + +前置:`cd server && docker compose up -d`(起 pg/redis);`rbw unlock`(取 DashScope key)。 + +```bash +# 终端 A — 后端 API(有 DashScope key 走真实 gummy,无则 mock;mock 邮件固定验证码 888888) +cd server && ./run-dev.sh + +# 终端 B — 桌面端(必须从你自己的终端前台跑,麦克风权限才归属该终端) +cd desktop && ./run-dev.sh +``` + +- dudu 是**托盘应用无主窗口**:菜单栏找蓝底声纹图标,设置/登录从托盘菜单点出。 +- **麦克风**:dev 跑裸二进制 `target/debug/dudu-desktop`,权限归属父终端。首次没声音 → 系统设置 → 隐私与安全性 → 麦克风 勾选你的终端 → 完全退出 dudu 重启(TCC 变更需重启进程)。打包版由 `src-tauri/Info.plist` 的 `NSMicrophoneUsageDescription` 触发系统授权框。 +- **邮箱登录**:登录窗切「邮箱登录」→ 任意邮箱 → 发送验证码 → 填 **888888**(仅 `AUTH_EMAIL_DEV_CODE` 设置时固定,`run-dev.sh` 已设;生产随机)。 + +## 真相源(改前必读) + +- **协议**:只改 `server/pkg/protocol`,五端对照实现。 +- **界面**:`design/` 是唯一真相源,改 UI 前读登记簿 `design/index.html`。新颜色/组件/图标先登记 `design/tokens` | `components`+`index.html` | `icons.js`+`icon-map.json`,再写端代码。业务代码禁字面色(用 `var(--*)`/`DuduTheme`)、禁内联 ``(走 `Icon`)、禁 emoji。 +- **令牌 codegen**:`design/tokens` 变更后 `node design-pipeline/export-tokens.mjs`(直写 ios/android/web 消费位置)并提交产物。 +- **组件源码变更后**:`node design-pipeline/bundle-components.mjs` 重建原型运行时 `design/_ds_bundle.js` 并提交。 +- **防漂移闸**(pre-commit + CI,启用:`git config core.hooksPath .githooks`): + `node design-pipeline/check-ds.mjs`(真相源自检)· `check-code.mjs`(代码侧单源)· `export-tokens.mjs --check`(产物零 diff)。 +- 全景说明:`doc/frontend-overview.html`;改窗口先看 `design/ui_kits/desktop/`(原型先行)。 + +## 窗口范式(桌面) + +透明无边框窗口共用 `desktop/src/shared/WindowFrame.jsx`:`transparent` + `titleBarStyle:Overlay` + `hiddenTitle` + `trafficLightPosition {18,18}` + macOS 原生阴影;页面自绘圆角边框。识别浮层/托盘/设置/登录均为此范式。**必须开 `macOSPrivateApi:true`**,否则透明窗口画白底。 + +## TODO + +经全局 `/todo` skill 管理(看板 `todo/todo.html`),状态 open→doing→done→(用户)accepted。**禁用内置 TodoWrite。** diff --git a/desktop/run-dev.sh b/desktop/run-dev.sh new file mode 100755 index 0000000..5a94d6d --- /dev/null +++ b/desktop/run-dev.sh @@ -0,0 +1,16 @@ +#!/bin/sh +# 本地起桌面端(在 desktop/ 目录下运行):Tauri dev(Rust 系统层 + Vite 前端热更新)。 +# 前置:后端已起(../server/run-dev.sh);首次运行自动 npm install。 +# +# ⚠️ 必须从你自己的终端前台运行:dev 跑的是裸二进制 target/debug/dudu-desktop, +# 它是本终端的子进程,macOS 把麦克风权限算在终端头上。首次按住说话若没声音, +# 去 系统设置 → 隐私与安全性 → 麦克风 勾选本终端(iTerm/Terminal), +# 再完全退出 dudu 重启(TCC 权限变更需重启进程生效)。 +set -e + +if [ ! -d node_modules ]; then + echo "[run-dev] 首次运行,安装依赖…" + npm install +fi + +exec npm run tauri dev