fanlusky
4ae5b842b7
fix(ui-html): WebView2 托盘菜单项圆角与外框同心对齐
2026-09-27 11:19:06 +08:00
fanlusky
cb75ac8383
feat(ui-html): WebView2 悬浮工具栏改用与 D2D 相同的图标字体
...
工具栏按钮由 SVG 改为 Segoe Fluent Icons / Segoe MDL2 Assets 码位,与
D2D 工具栏逐一对应;两者都缺某个字形时换成与 D2D 相同的回退文字
(issue #232)。图标颜色因此跟随各皮肤的 .icon color,石墨皮肤的
图标色此前被 SVG 写死的描边覆盖,现在生效。设置页的工具栏与皮肤
预览同步改用图标字体和相同的回退。
2026-09-26 23:38:37 +08:00
fanlusky
7d66b2556c
feat(server,ui,ui-html): 候选翻译文本支持在皮肤中单独配色
...
外部皮肤 skin.toml 的 [candidate.dark] / [candidate.light] 新增 translation 键。
不写时沿用候选文字色叠 62% 不透明度;写了就按原值绘制(含选中行)。
D2D(CandidateList::Appearance::translationColor)、WebView2 注入 CSS
和设置页外部皮肤预览三处一致;预览顺带补上此前漏掉的 number 配色。
2026-09-26 23:38:37 +08:00
fanlusky
c539d0cf2a
feat(server,ui-html): 设置窗口驻留时长可配置,驻留期间降低内存占用
...
- 关闭设置窗口后隐藏驻留时,把 WebView2 内存目标设为 LOW 并 TrySuspend 冻结页面;
重新打开时恢复 NORMAL、Resume 后再显示。本机驻留 60 秒后整棵进程树的工作集
由约 408 MB 降到约 62 MB,重开仍是瞬间恢复。
- 新增配置项 appearance.settings_window_linger,可选 off / 1m / 5m / 10m / 30m /
60m / forever,默认 10m。off 表示关闭即退出,forever 表示一直驻留。
- 同步出厂模板、开发配置、ime_config 读写校验和两个设置宿主的快照字段与写入分发;
设置页“外观 → 界面渲染”新增“设置窗口后台驻留”下拉框。
- 新增测试覆盖模板默认值、缺键、非法值、setter 拒绝和逐值往返。
2026-09-26 22:57:18 +08:00
fanlusky
14815e2f43
perf(server,ui-html): 设置窗口冷启动从约 2.6 秒缩短到约 0.7 秒
...
- 设置页虚拟主机名改为 imesettings.example / candidate-skins.example:
不带点的单标签主机名会先走一轮网络名称解析,导航后要空等约 2 秒才开始加载。
- 写 WebView2 用户数据目录和配置目录的 ACL 前先检查:已有 Users 完全控制(可继承)
和 Medium 标签时跳过 SetNamedSecurityInfoW,避免每次启动都把 ACE 传播到整棵缓存树
(本机约 120 ms 降到 1.5 ms)。
- 先显示窗口和 splash,再准备 WebView2。
- 显示前最多等 150 ms 取得配置里的主题,浅色主题不再先闪一下深色。
- 新增 METASEQUOIA_IME_SETTINGS_TRACE=1 冷启动打点,写入
%TEMP%\metasequoia-settings-startup.log。
2026-09-26 22:57:18 +08:00
fanlusky
8278c065c9
feat(server,ui-html): 新增内置皮肤秋桂,杨柳青 D2D 高亮对齐 WebView2
...
秋桂 Autumn osmanthus(autumn_osmanthus):暗色底 #7D929F、高亮 #F97D0A,
亮色底 #D6ECF0、高亮 #FFE399。高亮内缩于外框,首项顶部两角与尾项底部两角
和外框同为 10px;预编辑行隐藏时首项才贴顶。WebView2 候选窗与工具栏、D2D
候选窗、设置页卡片与预览一并提供。
ApplyCandidateFrame 只隐藏多余的候选行,:last-child 找不到最后一个可见行,
因此为其加上 .last-visible,杨柳青的 CSS 同步改用它,候选不满一页时尾项的
补边与贴边高亮才会生效。
杨柳青在 D2D 下改为直角、左右贴边的整行高亮,只在外框四角处用 9px 贴合,
行距、行内边距与预编辑行边距按 CSS 对齐。
2026-09-26 21:49:04 +08:00
Lu Fan(SonnyCalcr)
4375d80414
feat: 支持导入自定义辅助码,内置“加加”更名为“拼音加加” ( #477 )
...
* feat(engine): 支持 helpcodes/custom 下的自定义辅助码
custom 目录里的每个 .txt 都是一套方案,方案名为 custom/<文件名>。
文件开头的 "# name:" / "# name_en:" 注释给出中英文显示名,缺省用文件名;
兼容 BOM、CRLF 和全角冒号。方案名不能跳出 custom 目录。
* feat(engine): WebView 契约新增 openHelpcodeDirectory
设置页请求打开自定义辅助码目录,仅允许 settings 页发送。同步 ui-html/webview2/shared。
* feat(server): 设置页列出自定义辅助码并可打开其目录
配置快照带上 helpcode.custom_schemas 与 helpcode.custom_directory,每次都会重新扫描;
方案文件被删除或改名后回退到 lantian。两个设置宿主都会处理 openHelpcodeDirectory。
* feat(ui-html): 辅助码设置显示拼音加加与自定义方案
内置方案“加加”改名为“拼音加加”。自定义方案追加在内置方案之后;新增说明区,
提供“打开目录”和“刷新方案”两个按钮,刷新完成后弹出提示。
* feat(installer): 升级与迁移数据目录时保留自定义辅助码
升级清理时只清掉 helpcodes 里的内置表,保留 custom 子目录;更换数据目录时一并迁移;
安装时建出 helpcodes\custom。
2026-09-26 20:21:55 +08:00
fanlusky
625310a314
feat(ui-html): 光标状态提示卡片改为分组标题
...
“光标状态提示”改为整个卡片的分组标题,不再自带开关;原来的开关改名为
“切换输入法状态时提示”,与“切换输入框时提示”“提示位置”并列在标题
之下,标题下用分隔线区分层级。开关 id 与配置项不变。
各行沿用 section-title 的字号与颜色,字重介于常规与分组标题之间。中文
回退到的微软雅黑只有 Light / Regular / Bold 三档,400–500 都落在
Regular、550 以上都落在 Bold,因此在 Regular 上加 0.25px 描边模拟中等
字重(设置页只运行在 WebView2 上)。
2026-09-26 17:37:13 +08:00
fanlusky
b3b3b3303c
feat(windows): 焦点切换到另一个输入框时提示当前中英文状态
...
新增开关 general.caret_state_indicator_on_focus(默认关闭,需同时开启光标
状态提示)。
- DLL 把以下情况视为“换了输入框”:焦点窗口变化(Win32 编辑框、对话框、
其他应用各有自己的窗口);焦点经过一段没有可编辑文档的间隙后落到可
编辑文档上(Chromium、WPF 等单窗口宿主在字段之间就是先失焦再聚焦);
焦点会话真正结束后重新开始。Chromium 打字时在两个可编辑文档之间直接
替换文档管理器,不会触发。从 Win+. 面板返回不计入;线程焦点在真正的
应用切换后返回计入。一次切换的多次回调由定时器合并为一次提示;组字
过程中、以及没有光标的控件都保持静默。每次判断在 TSF 诊断日志里记录
判定标志,不含任何文本
- 协议复用 IMESwitch:wch 改为 FanyImeCaretStateTrigger(UserToggle /
CapsLockEdge / FocusEntered),CapsLockEdge 保持首发时的 VK_CAPITAL
取值,Server 对未知值按 UserToggle 处理
- Server 在开关打开时显示当前的有效模式(Caps Lock 开启时为“英”);
配置项同步写入两份模板和两个设置窗口宿主的读写映射
- 设置页在光标状态提示卡片中增加“切换输入框时提示”开关
2026-09-26 17:09:34 +08:00
fanlusky
d99aaa0d7d
feat(server): 光标状态提示补全左下方、正下方、右下方
...
提示位置原先只有左上方、正上方、右上方和“下方”四种,且“下方”在设置页
预览里居中显示,Server 却把它放在光标左侧。
- 新增 bottom-left(左下方)与 bottom-right(右下方)
- bottom 保留原配置值、改名为“正下方”,并改为与 top 对称地居中,
使运行时位置与预览一致;已选“下方”的用户升级后不会被重置
- 合法位置与“是否在光标下方”的判断集中到 caret_state_indicator_policy.h,
配置读取、写入与定位共用一份定义
- 同步两份配置模板的注释、设置页下拉项、aria 文案与预览样式,并补充测试
2026-09-26 16:00:59 +08:00
fanlusky
8b6bdb4acd
fix(ui-html): 配置同步测试等待懒加载模块完成再恢复全局
...
configSnapshot 处理器通过 fire-and-forget 的动态 import 把各段配置交给
skin、appearance 等模块。测试同步结束后 afterEach 立即撤销 document
桩,CI 上较慢的 import 随后回调,抛出 document is not defined 的未处理
拒绝。现在为这些模块提供无副作用的桩,并在恢复全局前等待动态 import
全部完成。
2026-09-26 14:07:52 +08:00
fanlusky
59973a9c14
fix(ui-html): 修正下拉菜单键盘焦点与确认键目标
...
从按钮进入菜单时向下键聚焦第一项、向上键聚焦最后一项;
Enter/空格只作用于菜单内的可用项。
2026-09-26 13:58:22 +08:00
fanlusky
dc7cfa0354
Merge branch 'develop' into feat/issue-229-ime-status-indicator
2026-09-26 13:58:03 +08:00
Lu Fan(SonnyCalcr)
2755c77192
Merge pull request #466 from fanlusky/feat/neural-sentence-association
...
feat: 神经网络整句联想与多来源整句开关
2026-09-24 14:53:55 +08:00
Jia Sui
eac9fa72b5
feat(server): 固定排位候选词显示可配置的徽标
...
固定排位徽标此前硬编码为 📌 ,嫌吵的用户既关不掉也换不了。
新增两个配置项:candidate_fixed_badge 总开关与 candidate_fixed_badge_style 样式枚举(paperclip/pushpin/dot),设置页外观分组提供开关与下拉,改动后立即刷新候选页。
配置存枚举名而非字面 emoji,TOML 与日志里不出现图形字符;展示层白名单与配置层同宽,手改 TOML 写错只会退成无徽标。默认样式改为 📎 ,比实心红钉安静。
2026-09-24 14:32:10 +08:00
fanlusky
16877cb2d0
feat(server): 整句联想来源开关接入配置与设置页
...
新增 [association] 段的五个开关(词格、Google、神经 desktop / keyboard、去重补位),
同步写入出厂模板、工作配置和两个设置窗口宿主的读写映射,设置页输入分区加对应选项。
2026-09-24 14:03:43 +08:00
Jia Sui
8f91ecc41c
fix(ui-html): 设置页区块标题不再被长说明挤压换行
2026-09-23 17:41:52 +08:00
AaGMix
adfdab04ab
feat(ui-html): 配置并预览光标状态提示
2026-09-22 23:52:28 +08:00
Jia Sui
5d1a9a6cc2
feat(server): 五笔四码唯一自动上屏
...
五笔敲满四码且码表只答一个候选时不再需要空格:第四个字母落下即上屏,下一个
字母直接开新组合。行为无条件生效,不设配置开关:业界默认开启(微软五笔、
搜狗五笔、极点、Rime 主流五笔方案),唯一候选没有第二选择,确认空格是纯冗余;
而一条开关要牵动配置五处同步,换不来可形成预期的行为差异,不值。
- engine 只报告事实(wubi_unique_four_code:完整四码、码表作答、候选恰好一个),
是否上屏由 Server 决定;判定收在 input_key_policy.h 的纯函数里,随 portable
目标进 ASan/UBSan;组词(creating_word)激活时组合保持打开,唯一四码不会把
正在拼的词截断上屏
- 提交复用 ProcessSelectionKey,与空格上屏同一套记账;但只能走 worker 管道推送
CommitCandidate:字母键在默认 raw 预编辑样式下不读请求-回复管道,回一帧 Normal
既不会上屏,还会在 TSF 侧留下永不释放的回复帧,而 Server 已按 Normal 清掉组合
- 上屏前按当前组合同步重建候选页:候选页异步发布,提交路径读的 ui.items /
page_words 否则可能还停在第三码那一拍
- 非唯一四码不做顶字上屏:一个按键只能回一条管道消息,真顶字需要扩 IPC 协议
2026-09-22 09:23:24 +08:00
fanlusky
2b2a546bcf
fix(settings): 切换子页面时将共享滚动容器归零
...
设置界面各子页面同处于唯一的滚动容器 #content-container 内,切页仅切换
display 而未重置 scrollTop,导致在某页滚动后切到其他页时新页面会停留在
上一页的滚动偏移处。切页显示新模块后将 #content-container.scrollTop 归零。
2026-09-21 15:16:48 +08:00
Lu Fan(SonnyCalcr)
b1ec320267
Merge pull request #447 from metasequoiaime/feat/jiajia-helpcode
...
feat(engine): 新增加加辅助码(拼音加加),第六套辅助码方案
2026-09-20 22:35:58 +08:00
Jia Sui
566ff8b832
feat(engine): 新增加加辅助码(拼音加加),第六套辅助码方案
...
按笔顺拆前两个部件、各取读音首字母(妈 = 女 n + 马 m = nm),部件用加加俗称读音(亻=d、
扌=t、纟=j、忄=s、攵=f、夂=z、刂=l、彳=s);138 个独体/部首字取「本字声母 + 起笔」。码表
7968 条,覆盖《通用规范汉字表》7846 字,比小鹤少 422 个扩展区生僻字——缺码会让含这些字的
词组拿不到辅助码,是已知取舍。
编码对齐拼音加加 5.x 安装包内的 fzm.bin(双拼键位已换算为声母):6487 字取到两码,6349 字
逐字一致,138 字保留本表规则,覆盖外的 800 字按同一规则重建。来源与非官方性质写在 NOTICE.md
与随包的 THIRD_PARTY_NOTICES.txt。
- engine/contracts/assets 注册 helpcode_jiajia,assets.h 重新生成(5 → 6)
- 设置页两个下拉显示名「加加」,两份配置模板注释同步
- 两侧测试补支持列表;README / README.en.md / server/AGENTS.md 改「六套」
默认值不变(双拼 lantian、全拼 ziranma)。
2026-09-20 22:00:34 +08:00
fanlusky
f743cc8f2e
fix(stats): 统计页在窗口重新获得焦点与可见时自动刷新
...
统计是拉取模型,之前只有「侧栏切回统计页」和「设置窗口隐藏后重新显示」
两条触发路径。用户把窗口一直开着、切到别的程序打字再点回来时,这两条都
不会触发,页面就一直停在旧数据上。
- 新增 window focus 触发与统计页可见时的 5s 轮询兜底;
- 所有触发源汇到 refreshOverview,做 1s 节流、在途去重(15s 视为丢失),
首次显示不再需要 firstShow 标志;
- 可见性判断统一用 #stats 的 offsetParent,不再只看 style.display;
- renderOverview 在数据未变化时跳过重绘,变化时保留热力图横向滚动位置,
避免轮询把 hover/滚动状态抹掉。
2026-09-20 21:16:29 +08:00
Jia Sui
ffcd1aee28
feat: 输入统计(DLL 采集、Server 聚合存储与设置页展示)
...
- windows: 三上屏出口 + OnTestKeyDown 直通字符采集,修复半角数字恒零
- engine: 统计 Web 消息契约(statsRequest/statsResponse)
- server: 统计管道接收、聚合、SQLite 存储、保留策略与每日自动清理
- ui-html: 设置页「统计」模块(卡片、热图、明细、开关、清理)
- docs: PRIVACY / README 改为内置可选统计
2026-09-20 19:08:16 +08:00
Lu Fan(SonnyCalcr)
790c9d0bda
Merge pull request #444 from fanlusky/fix/dict-overlay-and-paging
...
fix(ui-html): 修正词库浮层定位与翻页交互
2026-09-20 15:31:03 +08:00
fanlusky
fcf594e244
fix(ui-html): 修正词库浮层定位与翻页交互
...
#content-container 上有 contain: layout paint,它因此是 position: fixed 的
包含块。写在页面片段里的提示条和弹窗留在容器内部,fixed 就退化成相对该容器的
绝对定位,跟着内容一起滚:往下滚多少,浮层离窗口底边就多出多少;原先 showToast
每次还用 getBoundingClientRect() 的视口坐标去覆写 left,等于把容器偏移又加了
一遍,提示条因此偏向右侧,且只在弹出那一刻算一次,改窗口尺寸后就是旧值。
hoistOverlay() 在两个页面 setup 时把提示条和弹窗挂到 body 下,fixed 才真正
相对窗口解析,两处 JS 写 left 的代码删掉。提示条改由 CSS 定位:水平
calc(50% + var(--sidebar-width) / 2),即侧边栏右缘到窗口右缘的中点;垂直离
窗口底边两行正文高度。侧边栏宽度提成 --sidebar-width,sidebar.css 一并引用。
弹窗遮罩让开标题栏并左留侧边栏宽度的内边距,对话框居中于右侧内容区,弹窗期间
窗口按钮仍可点。浮层不再随模块容器隐藏,切页时由 dismissHoistedOverlays() 收起。
删除确认不再用 window.confirm:系统对话框不随设置页主题,在 WebView2 里是宿主
模态窗口,弹出期间页面自己的键盘和焦点处理全被挂起。confirmDialog() 复用
.dict-modal 样式自绘,支持 Enter 确认、Esc 取消、点遮罩取消和焦点还原。
顺带两处表格交互:翻页按钮改为靠右并排(状态文本移到左侧),与 .dict-table
单元格同样的 18px 内边距,不再贴着卡片边框;翻页时先把表格滚动条置顶,新一页
不再停在上一页的滚动位置。
2026-09-20 15:29:46 +08:00
Lu Fan(SonnyCalcr)
20d3d8ac9f
Merge pull request #443 from fanlusky/fix/japanese-scheme-romaji-label
...
fix(ui-html): 日语方案标签改为「罗马音」
2026-09-20 14:50:08 +08:00
fanlusky
eb51288577
fix(ui-html): 日语方案标签改为「罗马音」
...
设置页「日语方案」里唯一的方案项和下方说明原本写作「罗马字」。改为
「罗马音」,与用户的习惯叫法一致。仅改显示文案,单选项的 value 仍是
romaji,配置取值与引擎侧方案名不受影响。
2026-09-20 14:44:48 +08:00
fanlusky
38da1e77b3
refactor(ui-html): 固定标点改为单选组
...
punctuation_lock 后端一直是 follow/chinese/english 的单值配置,设置页
却用两个独立开关表达,需要在 JS 里手工互斥回填才不至于出现两个同时亮起
的假象;而且 follow 在界面上等于「两个都关」,和「还没选」看不出区别。
改成一个 radiogroup,标题「固定标点」,三项分别对应三个取值:跟随中英文
状态 / 始终使用中文标点 / 始终使用英文标点。互斥由单选语义本身保证,
change 回调直接写入取值,回填按值勾选,互斥回填和两处 applyToggleState
一并删掉。样式复用「以词定字快捷键」那组 radio,原先只服务于开关行的
.punctuation-lock-section 规则随之移除。
2026-09-20 14:15:57 +08:00
fanlusky
4f0747791c
fix(settings): 恢复误删的「始终使用中文标点」开关
...
6ff1cff4(issue-52 快捷键改动)在重排输入页时顺手删掉了标点锁定
区块里的中文开关,只留下英文一侧。后端从未变过:punctuation_lock
仍然是 follow/chinese/english 三值,chinese 在 ime_config、
FormatPunctuationLockWorkerPayload、托盘与悬浮工具栏这几条路径上
都还是通的,只是设置界面没有入口,配置一旦是 chinese 也回填不出来。
按原样恢复:中文在上、英文在下,两个开关互斥——打开一个就把另一个
回填成关闭,避免单值配置在界面上出现两个同时亮起的假象。
2026-09-20 11:43:20 +08:00
Jia Sui
d4a0796400
feat(windows): 重构智能标点
...
原「智能标点」是小狼毫 digit_separators 的语义:字母或数字后的 , . : 直出英文,
2 秒内再按同一标点转回中文——后半段靠 SendInput 往应用里补一个 Backspace 再打
字符,落点全靠光标当时在哪。这次换掉主路径:输入中文标点后按空格,用 TSF 编辑
会话就地把它改写成对应英文(。,!?;:、 → . , ! ? ; : /),2 秒内再按同一标点
键撤回中文;原来的直出降为子开关,整个家族默认全关、改为显式开启。
- 按键与会话:转换/撤回是本地文档改写,不进 IPC、不进延迟队列;判据落在
_IsKeyEaten,OnTestKeyDown 的预判与 _DispatchKeyDown 的第二遍预判共用同一份,
声称吃掉的键不交还宿主。改写走编辑会话,请求不上时另起一个最小会话把键本身
的字符写回去,避免已吃掉的键静默丢失。
- 状态:原来散落的九个成员收成一个 SmartPunctuationAction(None / ChineseCommitted
/ AsciiConverted),带焦点令牌、前台窗口和 beforeChar 指纹;清理以分类结果为准,
丢焦点与上下文栈变化一并清掉。
- 转换范围:。,!?;:、 与单独出现的 “”‘’【】《》() 都是映射表里的单字符
条目,路径完全一致;成对补全产生的一对(autoClosedPair)不 arm,按空格只落空格,
不会留下 <》 这类孤儿。
- 开关:总开关 + 中文标点后按空格转换 + 同键转回中文 + 数字后直出 + 字母后直出,
五键全部默认关;直出拆成数字/字母两个独立子开关(IPC 24 收窄为数字、25 追加为
字母),TSF 按前字符类型分别查键。
- 命名:子开关「独立符号」改名「中文标点后按空格转换」,配置键
smart_punctuation_standalone → smart_punctuation_space_convert,IPC 22 只改常量名
(SmartPunctuationSpaceConvertChanged),编号与语义不变、新旧测试包互通;设置页
文案同步重写,五处配置链路与死宿主一并跟改。
- 兼容:旧键未出厂、不迁移(升级合并按模板缺键丢弃、取默认 false);编号 23 随
「按空格整体转换一对」的设计退役并留空不复用。
- 验证:TSF x86/x64 与 Server Release 编译、Server 335 单测、windows_ipc_contract
x64/x86、设置页 build + 27 测试、clang-format 18.1.8 全绿。真机未跑。
Signed-off-by: Jia Sui <jsfaint@gmail.com >
2026-09-17 09:29:57 +08:00
fanlusky
529060a359
feat(settings): API Key 配置项增加连通性测试按钮
...
设置页中所有需要用户自填 API Key 的配置项(AI 助手、候选词翻译、
语音识别、语音润色)旁增加「测试配置」按钮,点击后用当前填写的凭据
向服务发一个最小请求,即时反馈配置是否有效。
- server: 新增 ApiCredentialTest::Run 统一分发(chat 发 1-token 请求、
ASR 传静音 WAV、翻译发单词校验、豆包走 DoubaoAsrClient::TestCredentials),
settings 可执行文件补上 curl/zlib/bcrypt/winhttp 及 cloud/voice 源。
- engine/contracts: 新增 apiCredentialTest / apiCredentialTestResult 消息,
已 generate.py 重新生成并 sync-contracts 同步至 ui-html/shared。
- ui-html: credential-test 模块负责发消息与渲染结果;测试按钮改小两号;
外观页补充字体下拉框加宽至 1.5 倍、加号按钮宽度减半。
- docs(agents): 补充格式化会卡 CI 的注意事项——clang-format 须为 18.1.8,
且 format.sh 在 Windows 上因 venv 布局失效,需直接调 clang-format 自查。
2026-09-13 22:11:09 +08:00
fanlusky
e350a94509
feat(translation): 候选词翻译支持小牛翻译(NiuTrans)
...
在线翻译服务由「腾讯云 / 自定义 DeepLX」扩展为三选一,新增小牛翻译。
- 新增 NiuTrans provider(/v2/text/translate):按官方规则对参数加 apikey
排序拼接后取 MD5 作为 authStr(BCrypt 实现,无新增依赖),表单编码逐条
翻译,解析 tgtText,errorCode/errorMsg 视为失败
- cloud_translation 调度改为 Provider 枚举,优先级 niutrans > custom > tencent,
缓存 key 带 provider 区分
- 配置层新增 [niutrans](enabled/app_id/apikey)及读取与读写接口
- 设置界面新增「小牛翻译」下拉项与 APP ID / API Key 输入框,切换时保持
provider 互斥
- 新增 test_niutrans_translation(凭据校验、鉴权 MD5、响应解析)
2026-09-13 20:54:45 +08:00
fanlusky
8097aa7df2
feat(voice): 豆包语音识别支持新版控制台单 API Key 鉴权
...
新版豆包控制台只签发一个 API Key,以 X-Api-Key 发送,不再需要 App ID。
原先这条路径是靠「asr_app_key 是否为空」隐式推断的,而随包配置里
asr_app_key 带有占位符(<YOUR_OWN_DOUBAO_APP_ID>)且非空,全新安装会被
判定为旧版控制台,带着占位符发送 X-Api-App-Key 导致鉴权失败。
改为显式配置项 voice_input.doubao_auth_mode(api_key | legacy):
- voice_providers 新增 NormalizeDoubaoAuthMode()/UsesDoubaoLegacyAuth(),
集中处理模式解析。该项缺失时按 asr_app_key 是否为「可用值」推断,占位符
不计入,因此既有配置升级后行为不变。
- DoubaoAsrClient 构造函数改收显式 legacy_auth,新版模式下忽略配置中残留
的 App ID;连接失败提示按模式区分文案。旧版 App ID + Access Token 路径
完整保留。
- 设置界面新增「豆包鉴权方式」下拉框,新版模式下隐藏 App ID 输入框并把
Token 标签改为「API Key」。
同时把官方推荐用于输入法场景的 bigmodel_nostream 整句流式接口做成设置里的
可选项,与原有「接口地址」文本框双向同步。默认端点仍为 bigmodel_async,避免
改变既有用户的实时上屏行为。
新版文档将 payload_msg.result 描述为列表,而原 ParseResponse 只按对象读取,
接上该端点会安静地返回空转写。新增 ExtractTranscript() 同时接受对象与数组两
种结构,一套解析覆盖两个端点。
2026-09-13 18:58:39 +08:00
Jia Sui
9dbb020ac3
feat(ui-html): 模糊音分区改为可折叠风格并接总开关
...
分区头改为主题模式同款折叠结构:折叠标题按钮(标题 + chevron,
aria-expanded/aria-controls,默认收起)加右侧总开关 toggle;展开后是
既有 11 个规则复选。总开关关闭时规则复选置灰禁用并提示开启总开关后
生效。折叠样式在 input.css 用 fuzzy 专名类复制 theme-surface 规则,
不跨模块借用类名;复选禁用联动抽到 shared.ts 供点击与快照回填两侧
共用。
2026-09-13 09:12:52 +08:00
Jia Sui
575b236231
feat(ui-html): 设置页输入分区新增模糊音开关
...
- 「输入纠错」后新增「模糊音」分区,声母 6 + 韵母 5 共 11 个复选,
复用翻页方式的流式复选布局,文案形如 z ⇄ zh
- 复选变更即发 configUpdate(input.fuzzy_*),configSnapshot 按
boolean 守卫逐键回填,重开设置页状态保持
2026-09-13 08:35:25 +08:00
fanlusky
7c9856c767
fix(settings): 界面渲染下拉框的弹出菜单与按钮同宽
...
弹出菜单此前靠内容撑宽,和按钮宽度对不齐;改成 left/right 都贴住
.dropdown(与 .font-dropdown-menu 同样的做法),并把按钮文字右侧留白
收一半,同时给按钮固定最小宽度,避免切换渲染方式时按钮忽宽忽窄。
2026-09-13 03:59:33 +08:00
fanlusky
426bb9d544
feat(server): WebView2 候选窗口支持滚轮翻页,并加上开关
...
PR #351 只给 D2D 候选窗口加了滚轮翻页,WebView2 后端还没有。
网页端只上报一个以 WHEEL_DELTA 为单位的原始 delta,notch 累加仍然
交给 CandidateWheel::ConsumeWheelDelta,两个宿主最终都汇聚到
WM_PAGE_CANDIDATE,翻页逻辑一份不重复。Chromium 的 wheelDeltaY 本身
就是 ±120/格,正是原生累加器期望的单位,deltaY 作标准回退。
同时把滚轮翻页做成可配置的 general.paging_mouse_wheel,默认关闭:
候选宿主是 NOACTIVATE 且从不获得焦点,滚轮只有在 Windows「当我悬停
在非活动窗口上方时滚动它们」开启时才会送达,无法无条件承诺,所以设为
opt-in,设置页里也写明了这个前提。开关只在 WM_PAGE_CANDIDATE 一处
判断;D2D 那边在 WM_MOUSEWHEEL 顶部提前返回 false,关闭时消息照旧
交给 DefWindowProc,与功能加入前一致。
2026-09-13 01:02:02 +08:00
fanlusky
e860eaab43
fix(server): 避免 WebView2 候选窗阴影被裁切
2026-09-12 23:50:31 +08:00
fanlusky
559dd588a6
fix(ui-html): 设置页关闭按钮的红色高亮不再在下次打开时闪一下
...
关闭按钮是页面自己的元素,红色背景来自 CSS :hover。点下去时它先渲染成红色,
然后窗口才隐藏,于是 WebView2 保留的那一帧就是红的。窗口以前会被销毁,这一帧
再也不会回来;现在进程留着,下次打开会先把它显示出来,等页面按真实指针位置
(在托盘上,不在按钮上)重算 :hover 才消失,就成了开头的一次闪红。
最小化按钮早就解决过同一个问题:点击时加 window-controls-click-reset,再延迟
100ms 才发消息,让页面带着这个类重绘一次之后窗口才消失。关闭按钮照着做即可,
那个类会把标题栏按钮的背景压成透明,与指针位置无关,保留的帧因此是干净的。
下次指针移进标题栏时既有的 mouseenter 监听会把类摘掉,悬停照常。
2026-09-12 22:48:44 +08:00
fanlusky
a2a23be1db
fix(settings): 补充字体下拉框的箭头不再显示文本编辑光标
...
候选窗主字体的箭头包在 .arrow 容器里,补充字体的箭头则是直接挂在
按钮上的 img,原规则选不中它,.font-combobox 的 cursor: text 就继承
到了箭头上。补一个 .font-combobox > img 选择器,让两处表现一致。
2026-09-12 19:18:36 +08:00
fanlusky
a8c10a63a6
feat(settings): add a restart-server button under the UI backend setting
...
界面渲染 only takes effect at Server startup, so the setting already told the
user to restart the IME process but offered no way to do it outside the
Ctrl+Shift+Alt+R developer shortcut. Add a 重启 button in the same section.
Settings runs in its own process, so the request travels the Aux pipe — the
supported cross-integrity control path the config notifications already use —
and the Server exits with the Watchdog restart code. The shortcut and the
button now share RestartServerProcess().
2026-09-12 16:41:13 +08:00
dependabot[bot]
4cec8f060f
chore(deps): bump the npm group
...
Bumps the npm group in /ui-html/webview2/settings/ime-settings with 2 updates: [@types/chrome](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chrome ) and [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node ).
Updates `@types/chrome` from 0.2.8 to 0.2.9
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/chrome )
Updates `@types/node` from 26.4.1 to 26.5.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node )
---
updated-dependencies:
- dependency-name: "@types/chrome"
dependency-version: 0.2.9
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm
- dependency-name: "@types/node"
dependency-version: 26.5.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-09-11 19:59:30 +00:00
fanlusky
a7779d2b05
refactor(engine): 将 engine 从 submodule 内嵌为仓内一等组件
...
`vendor/MetasequoiaImeEngine` submodule 改为 `engine/` 目录,导入的是
product-lock.json 原本钉住的提交 c810d201,逐文件核对过 blob,因此这是一次
搬迁而不是引擎升级。引擎自己的嵌套 submodule(googlepinyinime-rev、utfcpp、
miniaudio)按各自 gitlink 一并展开,来源与提交见 engine/UPSTREAM.md。
Windows 专门化裁掉了不属于本产品的部分:whisper.cpp 与本地推理 provider、
macOS 示例宿主、整个 dictionary/ 建库流水线、上游 CI 与 release-please 配置。
词库仍按 product-lock.json 在构建时取发布产物。
引擎不再进 product-lock.json:没有 gitlink 就没有可比对的东西,锁里写一个上游
commit 等于宣称这棵树仍等于上游,而第一个 Windows 专门化改动落地时这句话就假了。
verify-contracts / verify-checkout 随之移除,verify-published 保留。
CI 与工具链:引擎源码并入根 scripts/format.sh(删掉引擎自己的那份,避免两套排除
列表分叉);引擎 voice.yml 里的 silero_vad.onnx 摘要校验移到本仓 lock job;
engine-bump-triage 工作流与其测试删除;gitsubmodule 的 dependabot 频率由 daily
改为 monthly。
README、README.en、AGENTS.md、CONTRIBUTING、docs/product-release.md 及各子目录
文档同步说明新的位置与边界。
2026-09-12 03:40:48 +08:00
Neptrue_Lin
3eb82c7878
Merge branch 'develop' into feat/issue-234-rime-dict-import
2026-09-11 20:06:16 +08:00
Lu Fan(SonnyCalcr)
0eaa35eed1
Merge pull request #274 from linyanm/fix/issue-155-settings-lag
...
fix(server,ui-html): 降低设置窗口拖动与工具栏首屏卡顿
2026-09-10 21:33:31 +08:00
Jia Sui
f9e8b73fce
feat(ui-html): 设置页新增输入纠错双开关
...
input.html「输入纠错」区块复用现有 toggle 形态;input.ts 走
setupToggleButton + updateConfig 写 quanpin.autocorrect_transposition/
neighbor;config-sync 从 configSnapshot 回读选中态;文案注明默认关闭
2026-09-10 17:32:16 +08:00
Aegon8719
dea9292814
issue-55 候选窗支持可配置的有序回落字体
2026-09-09 18:03:56 +08:00
linym
c07aa8e878
fix(server,ui-html): 降低设置窗口激活卡顿 ( #155 )
...
激活时不再重推整份配置;HTML 按 UTF-8 二进制读取;契约脚本移到标记之后;最大化按钮矩形用 rAF 合并。
2026-09-08 22:47:26 +08:00
linyanm and linym
6e03f57747
fix(server): 全拼导入按汉字数选择切分并识别文件编码 ( #270 )
...
无分隔拼音按汉字数另选完整切分,避免西安/xian 误报音节数不一致。设置页按 BOM 识别 UTF-8/UTF-16,无效 UTF-8 再回退 GBK。带撇号的水杉导出三列 TSV 本身已合法,回归测试钉住该格式。
Co-authored-by: linym <lin.yanming@foxmail.com >
2026-09-08 22:52:45 +09:00