Releases: A-cat-with-carrots/TypeAnything
v0.8.1 — issues #10 #11 #13 #14 一并修
4 个 issue 一次性修。
#11 症状 2 — chip 选风格无需 key 也能保存
之前每次保存都过 LLM classify。装完未配 key 必失败 → lang.txt 残留无前缀裸值。
- 每个 chip 加
data-category="A|B|C|D":lang→A,clique/medium/persona→B,cross chip 单独 C 或 D - 点 chip → input 暂存 category。save 直接写
X:name,完全跳过 LLM - 自由输入仍走 classify。失败保持 lang.txt 旧值,不假默认
#10 — 小屏仍超 84px
v0.8.0 用了 SM_CXFULLSCREEN/SM_CYFULLSCREEN + 钳客户区,漏算非客户区(外框比客户区大 14×39px)+ 用错工作区源。
- 改用
SystemParametersInfo(SPI_GETWORKAREA)取真实工作区 - frameless 设置完后再
GetWindowRect拿外框实际尺寸,比工作区大就缩 - 位置溢出 → 滑回 workarea 边界
#13 — Win+Space 装完看不到 TypeAnything
原因:installer 提权运行,写的 HKCU 是管理员账户的 hive,不是当前交互用户。HKLM CTF\TIP 注册了系统级但用户输入法列表没加。
- ta-settings 加
--register-ime一次性 CLI flag:LoadLibrary("input.dll")+InstallLayoutOrTip("0804:{TIP-CLSID}{LANG-PROFILE-GUID}", 0) - installer 末尾用
CreateProcessWithTokenW(shell-user-token)调起来,写入正确的 HKCU - Win+Space 应立即看到 TypeAnything
#14 — 候选窗塌成一个点
weasel.yaml(候选窗样式母本)没部署。WeaselDeployer 缺母本编不出 build\weasel.yaml,高 DPI fallback 把窗算 0px 不可见。
- 新增
IDR_DATA_WEASEL_YAML资源(18 KB) - 部署到
<install_dir>\data\weasel.yaml与其他 base data 一起 - WeaselDeployer 现在能正常 merge →
build\weasel.yaml生成 → 候选窗可见
其它
DisplayVersion 0.8.0 → 0.8.1。
下载
ta-installer.exe(16.01 MB)覆盖装。升级覆盖装会触发 pending-on-reboot(v0.7.x 起每次都这样),按提示重启即可。
v0.8.0 — 稳定性专项(issues #10 #11 #12 + 错误文案人话化)
3 个 issue 一次性修,外加 UX 政策调整。
1. issue #11 — 未配 API key 时 Enter 翻译静默失败
症状:装完默认 keyring.json 空 + schema.yaml api_key=""。用户打中文按 Enter,什么都不发生。后台 log 显示 http_status=0/err 但 UI 零反馈。
修:processor.cc 检测到 api_key 空时,直接 ShellExecute ta-settings.exe --page model 弹出「模型配置」面板(从注册表 HKLM\Software\WeaselRoot 读路径)。
同时,翻译路径返回 401 / 403 时,同样弹该面板(key 失效场景)。
2. issue #10 — 设置面板在小屏 (1536×864 / 125%) 看不全 + 无法 resize
修:
- 默认尺寸不再固定 700×786,按屏幕尺寸钳制:
min(700, screen_w - 80) × min(786, screen_h - 80),下限 480×520 - min size 560×600 → 480×520(小屏也能缩到适配)
- frameless resize 边框 6px → 8px(高 DPI 屏幕边缘更易抓)
3. issue #12 — 覆盖装 DLL 被锁 → pending-on-reboot 但 UI 报 success
修:
- installer C++ 端:检测到
reboot_needed=true时,emitneeds_reboot:trueJSON 到 UI(不走 PushStatus) - 新增
nativeRebootNowbinding:AdjustTokenPrivileges拿SE_SHUTDOWN_NAME→ExitWindowsEx(EWX_REBOOT | EWX_RESTARTAPPS),重启后自动恢复打开的应用 - UI 新增
#page-done-reboot页:「装好了 — 但需要重启电脑生效」+ 两个按钮(稍后重启 / 立即重启) - 清装路径不变,仍走原 done 页
4. UX 政策 — 删除「查看日志」按钮 + 错误文案改人话
为什么:log 是开发者制品。把按钮塞给用户 = 让用户当 debugger。
改:
humanizeClassifyError()翻译表:API key/未配置→ 「请先在『模型配置』填 API key」401/403→ 「API key 无效或没有权限,请检查」429→ 「调用过于频繁,请稍后再试」5xx→ 「AI 服务端故障,请稍后再试」无法解析/parse→ 「模型回复格式不兼容,建议换 DeepSeek / OpenAI」网络/network→ 「网络异常,请检查代理 / VPN 后重试」- fallback → 「保存失败:<原文>」
- 错误 toast 不再带「查看日志」链接
后台 4 路日志(classify / translate / update / install)继续写,作为诊断材料 + 给 issue 附件用,但 UI 不再主动暴露。
其它
DisplayVersion 0.7.11 → 0.8.0。
下载
ta-installer.exe(15.99 MB)覆盖装。注意:本次升级覆盖装可能触发 pending-on-reboot 流程(v0.8.0 才有的功能),完成页会提示是否立即重启。
v0.7.11 — 尺寸再压一行 + 透明滚动槽
- installer 宽 600 → 576(-24px)
- ta-settings 高 810 → 786(-24px)
- 灰色滚动条:scrollbar-width thin + track 透明,宽 10 → 8px。Win11 默认灰底槽不再出现
DisplayVersion 0.7.10 → 0.7.11。
下载
ta-installer.exe(15.98 MB)
v0.7.10 — 按钮再多一行底距 + 安装窗体收窄
- 两 app main padding-bottom 44 → 68(+24px ≈ 一行),按钮离底边再远一行
- 安装窗口宽 640 → 600(-40px),更紧凑
DisplayVersion 0.7.9 → 0.7.10。
下载
ta-installer.exe(15.98 MB)
v0.7.9 — 按钮贴底统一
两 app 按钮统一贴底 + 比之前多一行底距。
.pageflex column + min-height 100% → actions 永远贴底.actions { margin-top: auto; padding-top: 20px }- main bottom-padding 44px(installer 原 20 / ta-settings 原 28 → 统一 44)
DisplayVersion 0.7.8 → 0.7.9。
下载
ta-installer.exe(15.98 MB)
v0.7.8 — 安装窗口高度压缩
改了什么
- 安装窗口 640×420 → 640×380(少一行)
- 「取消 / 开始安装」按钮固定贴底(
margin-top: auto),不再卡在中间留大片空白
DisplayVersion 0.7.7 → 0.7.8。
下载
ta-installer.exe(15.98 MB)
v0.7.7 — 修复 frameless 窗口拖拽 + 布局
修了 v0.7.6 引入的 bug
标题栏拖不动
v0.7.6 frameless 化之后窗口拖不动了。原因:WebView2 host 在父窗口里放了一个 child HWND,所有鼠标事件先经过 child,OS 的 WM_NCHITTEST 根本到不了我们 subclass 的 HTCAPTION 分支。
修:
- C++ 新加
nativeStartDragbinding:ReleaseCapture+SendMessage(WM_NCLBUTTONDOWN, HTCAPTION)直接踢 OS 进入原生 drag loop - JS 在
.titlebarmousedown 时(跳过.window-controls/input/button)调用该 binding
两个 app 都修。
布局微调
- installer titlebar 删掉「完成」/「安装中」徽章——和正文 H1 重复
- window-controls 紧贴窗口右边缘(与 Win11 原生一致)
- pure-toggle / brand 用 margin-right 单独控制留白
DisplayVersion 0.7.6 → 0.7.7。
下载
ta-installer.exe(15.98 MB)覆盖装即可。
v0.7.6 — frameless 窗口(现代风)
改了什么
标题栏 ↔ 现代 frameless 设计
仿 Claude / Spotify / VSCode:去掉 OS 自带的黑/灰标题条,HTML 自绘 titlebar 占满顶部。
改动:
- 剥
WS_CAPTION+WS_SYSMENU(无 OS 标题条 + 无系统菜单) - 保留
WS_THICKFRAME(DWM 阴影 + 圆角 + Aero Snap 全在) WM_NCCALCSIZE返 0:client 占满整个窗WM_NCHITTESTsubclass:顶部 42px 是HTCAPTION(拖拽),右上 100px 是HTCLIENT(让 HTML 按钮收点击),边缘 6px 是HTLEFT/HTTOP/...(resize)- HTML 右上角加 2 个按钮:min(细横线)+ close(细 X),hover 用 GitHub 红
两个应用都改:
ta-installer.exe(安装向导)ta-settings.exe(托盘菜单的「切换风格」/「模型配置」面板)
配套
DisplayVersion 0.7.5 → 0.7.6。
下载
ta-installer.exe(15.98 MB)
升级方式:双击 ta-installer.exe 覆盖装。
v0.7.5 — 标题栏配色修正
改了什么
标题栏不再是黑色 + 左上角图标隐藏
v0.7.3 把 body 切到蓝白配色,但 ApplyMica 还在强开 DWMWA_USE_IMMERSIVE_DARK_MODE=TRUE,导致 白色窗体上面盖一条黑色 title bar,视觉断裂。
修:强制 dark=FALSE,让 Win11 caption 跟 body 一致变浅色。
顺手把 title bar 左上角的小鱼图标也隐了(WS_EX_DLGMODALFRAME + WM_SETICON NULL)—— 已经有 HTML titlebar 显示「神仙鱼 TypeAnything」品牌,OS 那个小图标是重复噪音。任务栏图标不受影响,仍是鱼。
同步改了:
- ta-installer(安装向导)
- ta-settings(托盘菜单的「切换风格」/「模型配置」面板)
顺带修了 v0.7.0 起的暗 bug
DisplayVersion 之前锁在 0.6.5 进注册表,v0.7.0 ~ v0.7.4 装完检查更新时都误报「有新版本」(v0.7.4 已修,此版改为 0.7.5)。
下载
ta-installer.exe(15.97 MB)
升级方式:双击 ta-installer.exe 覆盖装。
v0.7.4 — 可观测性 + 托盘光标 + 安装器蓝白
改了什么
1. 可观测性(4 个日志文件)
issue #2 的 (type) 报错让我们意识到:报错信息谜语 = 我们也修不动。这版加了 4 路日志,所有日志只记 host/path/model(绝不记 API key),1 MB 自动 rotate。
| 日志 | 路径 | 触发时机 |
|---|---|---|
| 分类 | %APPDATA%\Rime\typeanything_classify.log |
切换风格保存 |
| 翻译 | %APPDATA%\Rime\typeanything_translate.log |
Enter 落地 |
| 更新检查 | %APPDATA%\Rime\typeanything_update.log |
托盘点检查更新 |
| 安装 | <install_dir>\typeanything_install.log |
ta-installer.exe 全程 |
统一格式:
[2026-06-03 21:23:45] CLASSIFY target="English"
host=api.deepseek.com path=/v1/chat/completions model=deepseek-chat
http_status=200
response[0..500]={"id":"...","choices":[{"message":{"content":"A"}}]...}
parsed="A"
result=A
---
UX 同步升级:
- 分类失败 toast 加 「查看日志」 链接 → notepad 打开
- 检查更新失败 dialog 变 MB_YESNO → 「查看日志」 打开
- 安装失败 dialog 直接贴 最后 30 行日志 + 日志绝对路径,方便附到 issue
2. issue #2 鲁棒性升级(分类失败修复)
- Anthropic 响应 shape 兼容:
"content":[{"type":"text","text":"A"}]也能正确提取(之前误抓"type"字段名 →(type)报错) max_tokens4 → 16:4 token 太严,verbose 模型输出Type: A/{"type":"A"}中途被截断- classify parser 反向扫:从末尾找 A/B/C/D,避免被
Answer/Category/Because首字母误匹配 - CLASSIFY 提示词加严:明确禁止 JSON / 引号 /
Type:/Category:前缀
3. 托盘菜单光标 ↔ 双向箭头(v0.7.3 没修干净的)
v0.7.3 修了 TRAYICON_CLASS 的 hCursor,但 TrackPopupMenu 真正的 owner 是 WEASEL_IPC_WINDOW(ServerImpl)。WS_DISABLED + WS_EX_TRANSPARENT 风格 + 边界 hit-test 仍会产生 resize 光标。
修:ServerImpl 加 WM_SETCURSOR handler 强制 IDC_ARROW,无视 hit-test 结果。
4. 安装包 UI 跟随主程序换蓝白
ta-installer 自己的 WebView2 安装向导从 Claude 暖灰咖换成 ta-settings 一致的 GitHub 蓝白:#FAFBFC 底 / #0969DA accent / #1F2328 主文字。
5. 安装管线 33 步全程验证
冷装失败之前是黑盒——installer 显示 ✓ 但用户实际看不到候选框。这版每步带验证:
- WeaselRoot registry 写后读回比对
- 每个二进制 + UI + base data + opencc 文件
file_size > 0校验 default.custom.yaml写后 grepschema: typeanything确认 schema_list 钉对- TIP CLSID + LanguageProfile 子键 probe
- WeaselDeployer 用 PID + exit code 跑(之前 fire-and-forget)
typeanything.prism.bin存在 + freshness 检查- WeaselServer 启动 3 秒后
FindWindowW(L"WeaselServerWnd")liveness 探测
任一步失败 → 弹窗显示最后 30 行日志 + 日志路径。
6. 修了 v0.7.0 起的暗 bug
DisplayVersion 锁在 0.6.5。v0.7.0 / 0.7.1 / 0.7.2 / 0.7.3 装完都写 0.6.5 进注册表,导致检查更新比对时 0.6.5 < 0.7.x → 总报"有新版本"。这版改为 0.7.4。
下载
ta-installer.exe(15.97 MB)
升级方式:双击新 ta-installer.exe,覆盖装即可。