wangjia
|
4ec294be40
|
docs+chore: 补 CLAUDE.md(联调启动 + 真相源约定)与 desktop/run-dev.sh
ci / server (push) Failing after 10s
ci / design-system (push) Failing after 11s
(此前误报已完成实为未提交,现真实补上。)
- 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 |
|
wangjia
|
3e292ec1e0
|
feat(web): 官网扩充改版——特性 6 项 + 场景/隐私/FAQ 三大板块
ci / server (push) Failing after 11s
ci / design-system (push) Failing after 11s
在既有克制视觉语言(单一蓝 · 无渐变 · 1px 边线分隔 · Outfit 数字/西文)
内做精并补足信息量,所有色值走 tokens,check-code 闸通过:
- Hero 加资质 eyebrow(五端一套账号·时长永不过期)
- 指标带 3→4 项(首字延迟 / 5 端 / 3 分钟每天 / 时长不过期)
- 特性 3→6(新增 上滑取消 / 浮层不抢焦点 / 中英混说)
- 新增「使用场景」4 卡(写作·消息·代码·会议,各带你说→上屏示例 + 3× 提速角标)
- 新增「隐私与信任」深色带 4 点(只按住时录音 / 音频用完即弃 / 只往光标写 / 透明计费)
- 平台区改信息卡片(桌面/手机/平板,各附一句能力说明)
- 定价卡加权益清单 + 热门档强调
- 新增「常见问题」8 条 details 手风琴(联网/隐私/准确率/跨端时长/兼容/额度/对比/方言)
- 页脚扩为四栏(产品·购买·支持 + 品牌介绍 + 运营主体)
- 双主题 + 移动窄屏截图验收通过;reduced-motion / focus-visible 已覆盖
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 21:01:58 +08:00 |
|
wangjia
|
cef58e658b
|
fix(desktop): 补 NSMicrophoneUsageDescription(macOS 打包版麦克风授权)
ci / server (push) Failing after 10s
ci / design-system (push) Failing after 11s
缺该键时 macOS 不弹授权框、直接返回静音——真机按住说话有会话但识别不出内容(audio_seconds 有值而 provider_ms=0)。Tauri 2 打包自动合并本 Info.plist。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 20:48:41 +08:00 |
|
wangjia
|
8266c575aa
|
fix(auth): 固定验证码改为显式 AUTH_EMAIL_DEV_CODE 环境开关(安全评审反馈)
ci / server (push) Failing after 10s
ci / design-system (push) Failing after 10s
不再从 mailer 运行时类型推导认证材料:固定码仅当显式设置
AUTH_EMAIL_DEV_CODE 时生效(run-dev.sh 设 888888,生产部署不经
该脚本即为随机码),设置时启动打印醒目告警。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 20:42:11 +08:00 |
|
wangjia
|
7dccd694e0
|
feat(auth): mock 邮件模式验证码固定 888888(开发期便利,上线阻断项已标注)
ci / server (push) Failing after 10s
ci / design-system (push) Failing after 12s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 20:40:19 +08:00 |
|
wangjia
|
ab6351ebb3
|
fix(desktop): vite dev fs 白名单放行 ../design(Outfit 字体 404 降级问题)
ci / server (push) Failing after 11s
ci / design-system (push) Failing after 12s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 20:32:47 +08:00 |
|
wangjia
|
19281d9c42
|
feat(auth+desktop): 邮箱验证码登录 + 登录窗改版(微信/邮箱双方式,无边框)
ci / server (push) Failing after 10s
ci / design-system (push) Failing after 10s
后端(协议 → 存储 → 接口,E2E 测试全绿):
- protocol:AuthEmailCodeRequest / AuthEmailRequest DTO
- store:EmailIdentity 表(邮箱唯一索引)+ authmail:* Redis key
- auth/email.go:POST /v1/auth/email/code 发 6 位码(crypto/rand,
60s 冷却 SetNX,10 分钟 TTL);POST /v1/auth/email 常量时间比对、
码一次性、邮箱建号(昵称取前缀)→ JWT(与微信登录同响应形态)
- Mailer 接口 + MockMailer(验证码打日志供联调;SMTP 未配置自动降级,
装配结果入启动日志,上线前须换真实实现)
- TestEmailLogin E2E:发码/冷却 429/错码拒绝/登录/token 可用/码防复用
桌面(Rust 命令 + UI 改版):
- api.rs:login_email_code / login_email(成功保存 token + ws 重连,
与扫码登录同路径)
- 登录窗改版(原型 LoginPurchase 先行,dark 截图验收):logo + 分段
切换(微信扫码 / 邮箱登录,与设置页同控件语言)+ 邮箱表单
(60s 倒计时、错误文案、未注册自动建号提示)
- 二维码真渲染:qrcode 库画 canvas(前景/背景取主题 token),
替换原 URL 文本占位;过期态半透明化
- 登录窗无边框化:transparent + Overlay 标题栏 + 原生贴形阴影;
抽公共 WindowFrame 组件(设置窗同步重构复用)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 09:40:16 +08:00 |
|
wangjia
|
0ca1caa460
|
feat(design+desktop): 设置屏改版——卡片分组布局(12A 实测反馈,原型先行)
ci / server (push) Failing after 10s
ci / design-system (push) Failing after 12s
原布局「灰字组标题 + 通栏细线」平铺无体块感、行距不均、控件对齐参差。
改版(原型 SettingsTray 与实现 SettingsApp 同步):
- 分组卡片化:组标题在卡外(12px text-3 加字距),每组一张 radius-lg
卡片(复用 Card 组件),卡内行以内嵌分隔线相隔,页面 bg-app 底上
卡片体块清晰
- 行规格统一:SettingRow 复用,右侧控件统一右缘对齐
- 时长余额改大数字排版(text-xl bold + 单位小字基线对齐)
- 载入动效:四组 40ms 级差上浮淡入(对齐浮层动效语言,快入慢出)
- 顶条标题绝对居中(mac 原生习惯),与红绿灯永不重叠;原型 MacWindow
同步改居中
- 原型补齐「帮助」组与实现对位
双主题截图验收通过;三道闸全绿;vite 构建通过。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 09:09:12 +08:00 |
|
wangjia
|
7d155fa2de
|
fix(desktop): trafficLightPosition y 按按钮中心语义调为 18,与顶条标题垂直对齐
ci / server (push) Failing after 10s
ci / design-system (push) Failing after 12s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 08:53:07 +08:00 |
|
wangjia
|
559e224301
|
fix(desktop): 设置窗口尺寸回归内容实际大小 + 原生贴形阴影 + 红绿灯对齐 + 显式拖拽权限(12A 实测反馈)
ci / server (push) Failing after 10s
ci / design-system (push) Failing after 11s
- 去掉 16px CSS 阴影边距方案(窗口比观感大、外圈灰影、点击区域错位):
transparent 窗口开 macOS 原生阴影,阴影贴合内容圆角,窗口 440x560
即卡片本体
- trafficLightPosition {16,12}:红绿灯垂直居中于 36px 自绘顶条,与
「dudu 设置」标题对齐
- capabilities 显式加 core:window:allow-start-dragging,保证
data-tauri-drag-region 拖拽可用
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 07:52:23 +08:00 |
|
wangjia
|
b914aebb00
|
fix(desktop): 设置窗口透明化 + 自绘 MacWindow 框,去掉原生白边(12A 实测反馈)
ci / server (push) Failing after 11s
ci / design-system (push) Failing after 12s
Overlay 标题栏模式下原生 NSWindow 底色在深色内容四周露出白边。改为
与托盘菜单一致的模式:窗口 transparent + shadow:false,由页面自绘
窗框(对齐原型 MacWindow 规格:radius-md + border-1 + shadow-window,
16px 阴影边距,窗口尺寸相应 472x592),红绿灯 trafficLightPosition
对齐自绘顶条,内容区独立滚动。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 07:47:19 +08:00 |
|
wangjia
|
adfa1ef1e4
|
fix(desktop): 开启 macOSPrivateApi,透明窗口不再画白底(12A 实测反馈)
ci / server (push) Failing after 11s
ci / design-system (push) Failing after 12s
识别浮层/托盘菜单窗口虽已 transparent:true 且页面背景透明,但 macOS
上 WKWebView 需要 macOSPrivateApi 才能真透明,否则渲染白底。Cargo
侧 macos-private-api feature 已就位,仅补 conf 开关。不走 App Store
分发,私有 API 可用。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 07:40:40 +08:00 |
|
wangjia
|
911ceca079
|
feat(design+desktop): Select 真相源组件 + 设置窗口无边框(12A 实测反馈)
ci / server (push) Failing after 11s
ci / design-system (push) Failing after 12s
Select 组件(用户拍板:下拉框全端共用一个真相源):
- design/components/forms/Select.jsx:自绘下拉——触发器同 Input
(control-sm/radius-sm/border-1 + chevronDown),弹层同菜单
(radius-md/shadow-menu、选中项前置对勾、hover surface-2),
外点/Esc 收起;登记簿加卡;icons.js 新增 chevronDown 并登记 icon-map
- 原型 SettingsTray 与桌面 SettingsApp 同步换用(替换原生 select——
其系统弹层样式/位置不可控,即 12A 截图问题)
原型组件运行时可再生(修复单源缺口):
- design-pipeline/bundle-components.mjs:用 desktop 现成 esbuild 重建
_ds_bundle.js(此前为 Claude 导出产物、仓库内无法再生,组件一改即
过期);import 'react' 经全局 shim,命名空间不变;已实测原型页正常
- _ds_bundle.js 重建(15 个组件,含 Select/Icon)
设置窗口无边框:
- tauri.conf settings 窗口 titleBarStyle=Overlay + hiddenTitle,
系统红绿灯悬浮左上;SettingsApp 自绘顶条(surface-2 + 下边框 +
data-tauri-drag-region 可拖拽),对齐原型 MacWindow 规格
合并 feat/design-truth-source(真相源与闸体系)进本分支
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 01:00:29 +08:00 |
|
wangjia
|
ddedef9605
|
Merge branch 'feat/design-truth-source' into worktree-latency-probe-12b
|
2026-07-11 00:55:05 +08:00 |
|
wangjia
|
c9823ce454
|
fix(desktop): 托盘菜单左缘对齐图标、去掉垂直间隙(12A 实测反馈)
ci / server (push) Failing after 9s
ci / design-tokens (push) Failing after 11s
此前菜单水平居中于托盘图标(观感偏左)且下方留 4px 间隙。改为
macOS 系统菜单习惯:左缘对齐图标左缘、紧贴菜单栏;菜单超出屏幕
右缘时整体左收 8px 边距。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 00:41:41 +08:00 |
|
wangjia
|
1a8089a96d
|
docs(design): 前端全景文档 + SKILL 闸章节 + 文档索引登记
ci / server (push) Failing after 10s
ci / design-system (push) Failing after 11s
- doc/frontend-overview.html:一次 UI 改动的标准路径 / 真相源结构 /
五端消费对照 / 各道闸全景 / L1-L2-L3 分治 / 已知滞后(jiu
frontend-overview 思想的 dudu 版)
- design/SKILL.md 增补「单源与闸」章节(agent 改 UI 前必读)
- doc/index.html 登记全景文档
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 00:11:50 +08:00 |
|
wangjia
|
208d0cda12
|
feat(design): design/ 真相源 + 防漂移静态闸(#25)
真相源整固:
- design/index.html 登记簿:token 色板(var() 实时渲染)/ 组件登记卡 /
图标与跨端映射 / guidelines / ui_kits 单一入口,check-ds 强制登记
- design/icons.js 图标单源(Lucide 线条)+ icon-map.json 跨端映射表
(web/iOS/Android 三列,iOS 12 个 SF Symbol 全部收编登记)
- components/core/Icon.jsx 单源图标渲染器;MicBar/RecognitionOverlay 接入
- tokens 新增 --brand-wechat(-press)(微信官方绿)与 --overlay-wave
- fonts.css 弃 Google Fonts CDN,Outfit 可变字体自托管
(assets/outfit-latin.woff2,40KB;中国网络下 CDN 不可用会卡字体)
- design/serve.mjs 零依赖预览服务器(登记簿与原型评审入口)
codegen 强化(export-tokens.mjs):
- 产物直写消费位置:ios/dudu/Shared/DuduTheme.swift、
android/.../design/DuduTheme.kt——删除 design-pipeline/generated/
中间拷贝层(此前 app 内是手工拷贝,--check 守不到真实消费文件已漂移)
- 新增 web/tokens.css 产物(custom props 透传 + Outfit data URI 内嵌)
- tokens 文件遍历排序,产物确定性
存量收编:
- desktop:三个窗口内联 SVG → Icon 组件;tray 裸 rgba → token+opacity
- Android:LoginScreen 微信绿常量 → DuduPalette.brandWechat(Press),
Color.White → textOnAccent
- 官网 web/index.html:接入 tokens.css,34 处硬编码 hex 全部 var() 化;
深色板块(metrics/cta/footer)改挂 data-theme="dark" 复用 dark 令牌;
移除 Google Fonts CDN
- design 包内 8 处裸色:微信绿 token 化、装饰色 ds-ignore 白名单、
同值色改 var() 引用
防漂移闸(零依赖 Node):
- design-pipeline/check-ds.mjs:真相源自检 7 道(dark⊆light / var 链 /
裸色∈tokens 值集 / 组件登记 / icons 唯一 / icon-map 双向同集 / 禁 emoji)
- design-pipeline/check-code.mjs:代码侧单源(desktop 禁字面色+内联 path /
iOS 禁字面色+SF Symbol 同集 / Android 禁 Color(0x / web 禁字面色),
ds-ignore 行级豁免制
- .githooks/pre-commit(启用:git config core.hooksPath .githooks)
- CI design job 扩展为三道闸全绿
- 反向验证通过:注入裸色/孤儿 token/未登记组件/未登记 symbol 均被拦截
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-11 00:05:22 +08:00 |
|
wangjia
|
4aec0ef6e9
|
fix(desktop): 应用图标接入品牌设计(design/assets/app-icon.svg)
ci / server (push) Failing after 9s
ci / design-tokens (push) Failing after 10s
dock/任务栏此前显示纯蓝占位方块——icons/icon.png 只有底色没有 glyph。
从设计资产 app-icon.svg(蓝底圆角 + 白色圆圈声纹标)渲染 1024px 源图
(内容 824px 居中留边,符合 macOS 图标规范),tauri icon 生成全尺寸
图标集(icns/ico/png),bundle.icon 补全标准列表。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-10 20:25:18 +08:00 |
|
wangjia
|
2979bdd2a3
|
docs(12B): 延迟验收暂定结论 + 建立项目文档索引
ci / server (push) Failing after 10s
ci / design-tokens (push) Failing after 10s
- doc/latency-acceptance-12b.html:延迟分解、#23/#24 修复记录、暂定新目标
(first_partial P95<1.2s;release_to_commit ≤3s 会话<300ms / 长会话<600ms)、
paraformer 切换待 eval 对比决策、复测方法
- doc/index.html:项目文档单一入口(按规范补建,登记现有 4 份文档)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-10 20:02:16 +08:00 |
|
wangjia
|
d22e02fa2e
|
fix(#23)+feat(#24): stop 后不再下发周期 usage 帧;gummy 预连接 spare 会话
ci / server (push) Failing after 9s
ci / design-tokens (push) Failing after 10s
#23 修复(服务端根治,五端客户端提交信号自动变安全):
- finish 先冻结会话并停 usageLoop,再 flush provider——此前 usageLoop 在
waitResults(最长 3s)期间继续 tick,周期 usage 帧会抢在尾部 final 之前
下发,客户端以 partial 文本提前上屏、丢失 final 修正(12B 实测 8s 会话
4/4 复现;修复后 6/6 归零)
- 桌面端收尾兜底超时 350ms → 800ms(实测 8s 会话 final flush 需 350~540ms,
350ms 会截丢尾 final)
#24 预连接(12B 调优):
- GummyProvider 常备一条已完成 run-task 握手的 spare 会话,start 直取,
后台异步补位 + 40s 定期换新(DashScope 空闲 60s 断连,实测 60s 存活/
120s Idle timeout,留余量 45s)
- 实测网关 start 处理 120~670ms → 3~4ms;消除 dial 抖动(实测 60ms~3.7s)
对 first_partial 尾部的放大
gummycheck 增加 -model / -pace / -idle 参数,支持模型对比与闲置存活实验
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-10 19:44:25 +08:00 |
|
wangjia
|
7b693b0f63
|
feat(12B): latencyprobe 延迟验收工具 + 会话建立耗时观测 + 滑动窗口只查不记修复
ci / server (push) Failing after 11s
ci / design-tokens (push) Failing after 11s
- cmd/latencyprobe:复刻桌面端行为(单连接串行、100ms/帧实时推流)实测
网关全链路 first_partial / release_to_commit P50/P95,口径对齐 dictation.rs
- gummy/gateway 增加会话建立耗时日志(dial / task-started / start 总耗时),
作为 first_partial 延迟分解的常驻观测点
- 修复 slideScript:val=0 的只查请求(AudioWindowExhausted)不再落 0 值成员,
与注释「只查不记」一致,避免污染窗口 ZSET 并空耗 seq
12B 实测结论(gummy 真实 provider,本机网关):
- first_partial P50≈940ms:其中 DashScope 需收到 ~0.8s 音频内容才出首个
partial(直连同样),网关暖路径开销仅 ~130ms、冷启 dial ~600ms
- release_to_commit:短会话 ~170ms 达标;8s 会话 350~540ms 超标(final
flush 随内容量增长);偶发 DashScope 抖动可到秒级
- stop 后周期 usage 帧常先于尾部 final 到达,桌面端会以 partial 文本提前
注入丢失 final 修正(iOS 已在 21A 修过同类问题,桌面端待修)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-10 19:03:27 +08:00 |
|
wangjia
|
b5ab92a57e
|
fix: 应用 xhigh 代码评审的跨端修复
ci / server (push) Failing after 13s
ci / design-tokens (push) Failing after 11s
来自 xhigh code review 的正确性/健壮性修复,覆盖全部五端:
- server:鉴权 fail-closed、计量交叉校验与配额扣穿处理、WS 网关并发与关闭顺序、
billing 行锁、redis Lua 过期与设备槽刷新、config 解析
- desktop:会话 epoch 防串话、WS 重连与 401 处理、api 客户端复用、统一 usePoll 轮询
- android:握手时序、请求头封装、账户状态派生、按需重组
- ios:finalize 宽限、串行采集、错误文案服务端优先、删除死代码 CommitController
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-13 11:50:08 +08:00 |
|
wangjia
|
50b49f3cbe
|
fix(eval): 单条样本失败不再拖垮整轮评估
ci / server (push) Failing after 14s
ci / design-tokens (push) Failing after 12s
- cli:逐样本 transcribe 包 try/except,失败记为该样本 error 并继续;
失败样本 counts 置空,不计入准确率,仅在 errors 列计数
- custom 数据集:manifest 引用的音频不存在时 warn 跳过,不再让 soundfile
抛错崩掉整轮(修复默认 config 的 custom 示例集指向不存在音频导致的崩溃)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-13 11:33:24 +08:00 |
|
wangjia
|
25acf9db6e
|
feat(eval): ASR 模型评估框架
横向对比云端 gummy 与本地开源模型(faster-whisper/SenseVoice/Paraformer),
重点覆盖中英混说,产出准确率(CER/WER/MER)/速度(延迟/RTF)/资源(cpu/mem/模型大小)
对比报告。公共集(ASCEND/AISHELL/LibriSpeech)统一走 HF 适配器 + 自定义 JSONL manifest。
gummy 引擎对照 server/internal/asr/gummy.go 协议移植。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-13 11:25:04 +08:00 |
|
wangjia
|
40760aa884
|
dudu MVP:五端语音输入法初始提交
ci / server (push) Failing after 14s
ci / design-tokens (push) Failing after 11s
- server:Go 网关(WS 流式识别中继/计费配额/微信登录支付 mock/反馈/埋点),gummy provider 已真实联调
- desktop:Tauri 2(全局快捷键 push-to-talk/浮层/托盘/设置/登录购买/反馈/首启引导)
- android:Compose 主 App + IME(键盘内录音直传)
- ios:App + 键盘扩展(1A spike 实证键盘内不可录音,走 deep link 听写)
- design/design-pipeline:设计系统 + token 导出 iOS/Android 主题
- doc:前后端设计文档(HTML);web:官网宣传页;todo:任务看板
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-06-12 00:38:37 +08:00 |
|