Commit Graph

15 Commits

Author SHA1 Message Date
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