4ec294be40
(此前误报已完成实为未提交,现真实补上。) - desktop/run-dev.sh:桌面端启动脚本,对齐 server/run-dev.sh,含麦克风权限提示 - CLAUDE.md:两条联调启动命令 + 麦克风/邮箱登录踩坑 + 真相源与闸约定 + 透明窗口范式 + TODO 约定 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
dudu — Claude 项目约定
五端语音输入法:Go 后端 + 桌面(Tauri 2)/Android/iOS/官网。按住快捷键说话 → 流式识别 → 上屏;时长计费,微信/邮箱登录。
本地联调启动(两个终端)
前置:cd server && docker compose up -d(起 pg/redis);rbw unlock(取 DashScope key)。
# 终端 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)、禁内联<path>(走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。