Files
dudu/CLAUDE.md
T
wangjia 4ec294be40
ci / server (push) Failing after 10s
ci / design-system (push) Failing after 11s
docs+chore: 补 CLAUDE.md(联调启动 + 真相源约定)与 desktop/run-dev.sh
(此前误报已完成实为未提交,现真实补上。)
- desktop/run-dev.sh:桌面端启动脚本,对齐 server/run-dev.sh,含麦克风权限提示
- CLAUDE.md:两条联调启动命令 + 麦克风/邮箱登录踩坑 + 真相源与闸约定 +
  透明窗口范式 + TODO 约定

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 21:02:53 +08:00

2.8 KiB
Raw Blame History

dudu — Claude 项目约定

五端语音输入法:Go 后端 + 桌面(Tauri 2)/Android/iOS/官网。按住快捷键说话 → 流式识别 → 上屏;时长计费,微信/邮箱登录。

本地联调启动(两个终端)

前置:cd server && docker compose up -d(起 pg/redis);rbw unlock(取 DashScope key)。

# 终端 A — 后端 API(有 DashScope key 走真实 gummy,无则 mockmock 邮件固定验证码 888888
cd server && ./run-dev.sh

# 终端 B — 桌面端(必须从你自己的终端前台跑,麦克风权限才归属该终端)
cd desktop && ./run-dev.sh
  • dudu 是托盘应用无主窗口:菜单栏找蓝底声纹图标,设置/登录从托盘菜单点出。
  • 麦克风dev 跑裸二进制 target/debug/dudu-desktop,权限归属父终端。首次没声音 → 系统设置 → 隐私与安全性 → 麦克风 勾选你的终端 → 完全退出 dudu 重启(TCC 变更需重启进程)。打包版由 src-tauri/Info.plistNSMicrophoneUsageDescription 触发系统授权框。
  • 邮箱登录:登录窗切「邮箱登录」→ 任意邮箱 → 发送验证码 → 填 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。
  • 令牌 codegendesign/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.jsxtransparent + titleBarStyle:Overlay + hiddenTitle + trafficLightPosition {18,18} + macOS 原生阴影;页面自绘圆角边框。识别浮层/托盘/设置/登录均为此范式。必须开 macOSPrivateApi:true,否则透明窗口画白底。

TODO

经全局 /todo skill 管理(看板 todo/todo.html),状态 open→doing→done→(用户)accepted。禁用内置 TodoWrite。