36 Commits
Author SHA1 Message Date
yenharvey 697d93eea6 build(clipboard): 青简剪贴板 macOS 单独包与一起发版
单独包给不装输入法的人:build.sh 出签好名的 .app 压缩包,assemble.sh 与输入法打包共用,两边的 .app 一致。
单独运行时菜单栏多一项「开机启动」(SMAppService),随输入法拉起时不显示。
发版工作流改成 Windows 与 macOS 并行打包,两边都成功才转正 Release。
2026-11-04 10:53:35 +08:00
Joelee e1f3ba47c9 feat(core): 支持越南语 Telex 第三输入法 (#841)
Windows 与 macOS 加越南语 Simple Telex 第三输入法,双击 Shift 在中英与越南语之间切换,候选旁显示中文译词。

Closes #835
2026-11-04 10:32:54 +08:00
yenharvey 541d3b71bf feat(clipboard): 青简剪贴板 macOS 版
剪贴板在 mac 上也能用,随输入法安装包装成 Contents/Applications/QingjianClipboard.app,输入法按 [clipboard] enabled 用 open 拉起(辅助功能权限记在它自己名下)。
- 系统相关的代码分成 system/windows 与 system/macos,对外接口两边一致;界面、存储、同步共用
- mac:按 changeCount 轮询剪贴板(文字、HTML/RTF、图片、文件,认 nspasteboard.org 的敏感标记),Carbon 全局快捷键,模拟 ⌘V 粘贴回原程序,菜单栏图标与菜单,面板盖在全屏程序上
- 呼出快捷键缺省 mac 是 ⌘⇧V;配置模板里那行改成注释,不再把 ctrl+alt+v 写死进新用户的配置
- 霓虹灯的节奏与像素挪到共用的 system/neon,两个平台只管开窗口贴图;去掉顶边的 ✓ / ✕(太小看不到),失败改成转红后闪两下,红绿色弱也分得清
- 配对的设备显示 mac 的电脑名(「共享」里那个)
- 设置程序的剪贴板一节在 mac 上打开,「添加程序」选 .app,「清空历史」找得到 mac 的剪贴板
- 文档:局域网同步、设置、配置文件、平台差异表写上 macOS;说明内容会经过中间设备转到其他配对设备
2026-11-04 09:57:17 +08:00
yenharvey f4201259eb chore: 合并 main(47 个提交)进 fix/sentence-accuracy
- 整句词图:main 把搜索的不变输入收进 SearchInput、搜索规模改成可调的 SearchLimits(#599),本分支加了知意出字、多来路与拼接备选;按 main 的结构合,出字分成了 SearchInput::emission(缺省恒 0,九宫格等不用它的调用方不用改),格子名额与束宽一律读 limits,诊断也改吃 SearchInput,名额与真搜索一致
- 多来路(NBEST)按调用方要几条判断、比的是缺省束宽:比调过的束宽的话,--tune beam 扫小束宽会顺带开成多来路,main 的 beam_width_of_one 测试也正是这么挂的
- 双拼 scheme.rs 本分支拆进了 scheme/,main 对它的改动(#792 搜狗 lv 按声母简拼读)挪进 scheme/tests.rs;config/general 同理
- 安装包:main 让产品数据缺一样就编不过(好事,保留),但它把含章·通变重新加回了 Windows 安装包与 macOS bundle.sh(--without-model);本分支定了模型不随包、在实验功能里下载,所以 .iss、build.ps1 的必需清单与 bundle.sh 都去掉模型,数据包仍带通变给 Linux
- engine/tests:main 的 generated(UUID / 时间戳)与本分支的生成器排位测试同名相近,后者改名 p2c_placement
- 文档冲突按字符三方合并,两边新增都留;词库生成那段按 main 的「缺省全并、缺文件报错」改写 #807 的说明
2026-10-27 18:38:57 +08:00
yenharvey 46a45f73f1 feat!: 去掉含章·知微,通变改为在实验功能里下载
- 知微与知意同是看前文排序,知意强得多(开发集首选 75.0 对 58.0),留着只多一个难选的选项;分工改成知意排序、通变生成
- 实验功能只剩知意与含章·通变两张卡片,最多开一个,开关同时写 [model] name 与 enabled,两个都关就不用模型;下完自动启用,删除正在用的先关掉
- 通变的下载包是模型仓库已有的 hanzhang-tongbian-v1.0.0(43 MB,hanzhang/tongbian/hanzhang-tongbian-small.qjm),不用重新发
- 选的模型没下载就不用模型,不再退回随包通变(Windows、macOS、Linux 三处加载逻辑一起改);find_model 不再找知微的目录
- macOS 安装包不再带通变;Linux 还没接模型下载,继续随包
- 老配置里的 name = "zhiwei" 按 tongbian 读(serde alias),整个配置不会因此读失败
- 同步用户文档(中英)、设置设计、架构与 crate-notes、Linux 说明、模型说明、平台缺口清单
- macOS 壳本机只能目测:darwin 目标的类型检查卡在 onig_sys 要本机 C 编译器,靠 CI 的 macOS job 编译
2026-10-27 17:28:02 +08:00
yenharvey b759c62f97 build(macos): bundle.sh 产品数据缺省全带,缺了报错,--sample-data / --without-model 排除
以前缺数据就悄悄跳过或退回 148 条样例词库,打出来的包照样能装。必需清单与 data-bundle.sh 的数据包一致,发版流程不受影响;--pkg 不能带 --sample-data。
2026-10-26 19:41:55 +08:00
yenharvey 4a5d60952b build: 安装包与数据包不再带含章·知微
三个桌面平台都是有含章·通变就不加载知微,而通变一直随包,知微从来用不上,白占 53MB。
用户自己放进数据目录 models/hanzhang-zhiwei/ 的仍然认。data-fetch 兼容还带着知微的 data-v7。
2026-10-21 15:06:25 +08:00
yenharvey 0ca1b95419 feat: 并入青简词库,已清洗的进基础词库,其余作补充词库随包
- dict-convert lexicon --general / --cleaned:基础词库已有同读音的补声调、词频不动;读音不同的新读音按 1/8 收;
  其余按两边同读音词在对数坐标拟的直线换算词频。已清洗的 21.2 万条写 dict-cleaned.tsv,pack dict 与 dict.tsv
  合成 dict.qj(34.5 万条);其余 129 万条写 dicts/general.qj(GPL-3.0-or-later),缺省开着,设置「词库」页可关。
  都不进 bigram 分词,dict.tsv 除声调外不变,语言模型不用重跑
- 补充词库低主词库一档:不当前缀补全、精确命中不进排序第一档、兜底与词图格子预选多扣 2、不计入总词频;
  词图选中它的整词照样插到最前
- 「敲的拼音本身就是一个词就不走敲错路径」只认语言模型认识的主词库词,否则 zanen / jiusi 纠不回 咱们 / 就是
- 领域词多音字按语料猜读音打平时取 Unihan 靠前的读音,结果不再每次跑都不一样

冻结回放:词首选 8104 → 8167、整句 2845 → 2827(逐条核实词 25 好 2 坏、整句 14 好 12 坏,其中 2 条是当时选错的 输入狂);
整句评测集首选 37.6% → 38.9%、前三 43.4% → 46.0%。
2026-10-21 15:05:10 +08:00
bfxh 141c231b44 ci: 加 shellcheck 门禁,并给 shell 脚本钉死 LF (#737)
CI 此前只对 4 个 Linux 脚本做 bash -n;shellcheck 只报 warning 及以上。.gitattributes 让 *.sh 始终以 LF 检出,避免 CRLF 让 shebang 失效。
2026-10-21 09:29:48 +08:00
yenharvey d06b75ff30 feat: 辅码方案化(词码规则、同一时间只用一套)并接上 macOS
- schemes/<id>/scheme.toml 写 type = "aux" 即辅码方案,与形码、双拼共用目录、id 规则与元信息;codes/ 导入的 .qj 照旧可用
- [words] 词码规则沿用 Rime encoder 写法:码表只收单字时按词长从各字的码拼出词码,表里写了的词仍用自己的码;AuxCodeLookup 因此返回 Cow
- 同一时间只用一套([aux_code] scheme,设置里是下拉框):几套叠着筛,同一个字母在不同方案里意思不同,筛不干净;没选过或选的没了用第一套没被老 disabled 关掉的
- 两个壳按 AuxCodeSources 装码表,轮询 codes/ 与 schemes/ 的文件快照,导入或改方案不用等配置变
- macOS 接上辅码:按键分流与 Windows 一致、Esc 只清码段、候选上显示码,包里带上笔画表与 CNS 署名
- CLI 的 --aux-table 也收方案目录
2026-10-20 14:17:34 +08:00
yenharvey 84196a8e49 feat: 自定义形码方案,单用形码时顶字、满码唯一自动上屏、标点上屏与空码清除
形码侧从只有 86 五笔扩成方案:Core 的 CodeScheme 是码表加按键规则,平台层 code_schemes 负责找方案。
随包五笔挪成 assets/schemes/wubi86/(scheme.toml + table.tsv),与用户数据目录 schemes/<id>/ 下的方案同一种格式、同一套找法,代码里不再有内置特例。
配置收成 [general] code = "<id>"(off 为关),旧的 wubi = "wubi86" 读取时仍认。
按键规则只在单用形码时生效,混输下满码之后的字母可能是在接着打拼音。
满码长度取码表里最常见的编码长度:极点码表里有条写错的 5 码(TF卡 ttfhh),取最长会让顶字与满码上屏全部失效。
CodeSchemeSlot 在方案与码表文件都没变时不重读码表,配置热加载多半改的是别的设置。
CLI 的 --wubi 换成 --code(旧写法仍可用),收码表或方案目录,回放认任意形码方案键。
设置程序的「五笔」开关换成「形码」下拉;切回窗口与进「输入」页时重扫 schemes/。
bamboo-slip 的下拉框宽度改为最小宽度并可设最大宽度,值过长时截短补「…」,不再把箭头挤出框外。
2026-10-20 10:22:58 +08:00
yenharvey f8b1167434 chore: 合并 main 到 refactor/render-engine
- 菜单编号:macOS 设置 5、符号面板 6;Windows 符号面板 7、旧版设置 8
- Linux 打包带上设置程序与 hicolor 八档图标
- 用户文档里的设置指路改成新设置的页名,内容取 main 的
2026-10-15 15:20:10 +08:00
jacklaoz 584c8297fa fix(macos): 装完菜单里没有青简时先提示注销重登 (#626)
macOS 27 上 --register 与系统设置里的添加都只让输入模式半启用,注销重登后才正常,安装器、postinstall 与文档改成先提示重登。
bundle.sh 用完即删 target 与 pkg 暂存目录里的 .app 并从 LaunchServices 注销,免得同一 bundle id 登记两份。
2026-10-15 11:00:47 +08:00
Haoyu Xi b184119952 feat: 新增德语释义表,gloss-gen 支持德语并接入三平台打包 (#535)
glossary-de.tsv 由 gloss-gen(LLM)生成,名词带冠词,GPL-3.0-or-later;冠词经 Wiktionary 快照校验(一致率 98.4%)。macOS bundle.sh、Windows Inno 与 data-bundle.sh 打进 glossary-de。

Closes #509
2026-10-12 15:58:32 +08:00
yenharvey 7903ef5a84 refactor(settings): 按模块层级重组源码目录
- Settings 的 impl 按职责拆进 settings/ 的子模块(app、config、fields、phrases、library、search、shortcuts),结构体与构造留在 mod.rs
- message、search、library 里的多个类型一个类型一个文件;词库移除挪到 library
- 后台任务收进 jobs/,路径、字体、按钮动作、单实例收进 system/,离屏截图与写入键测试收进 offscreen/
- view/ 分成 pages/(各页)、parts/(几页共用的零件)、icons/,Page 单独成文件
- --png 脚本第二次 Esc 后补一帧,原先点侧栏导航时找不到元素
2026-10-12 11:20:40 +08:00
yenharvey 29ddd06839 feat(macos): 应用图标改用深绿底白竹简,按 macOS 图标网格摆
- 原图是透明底竹简,macOS 26 会给不照网格画的图标垫一块灰底
- 图形同 Windows 的 app.svg,输入法包与设置程序共用
2026-10-12 10:18:17 +08:00
yenharvey f325ddad78 feat(settings): 换掉旧设置程序,旧版留一个版本作回退
- macOS:设置程序作为独立 .app 装进 Qingjian.app/Contents/Applications,菜单「设置…」打开它,包里没有时退回旧版;原偏好设置改名「旧版设置…」
- Windows:qingjian-settings.exe 换成新程序(状态条齿轮、开始菜单「青简设置」),旧 WinUI 程序改名 qingjian-settings-legacy.exe,开始菜单「青简旧版设置」,互斥体与窗口标题分开以便同时开
- Linux:安装与预编译包带上 qingjian-settings 与应用菜单项
- 新程序:Windows 不弹控制台、嵌图标、只开一个;日志另写一份到输入法日志目录,按天留 7 天;随包数据按各平台安装布局找
- 测试 config_keys 离屏点遍每页控件,写了的键用输入法的 Config 读回核对;补上「英文模式也给候选」漏掉的 ⓘ
- ⓘ 点了打开官网文档对应的一段,测试核对锚点在 docs/user 里真有、行在那页上真有 ⓘ
- 用户文档按新的页重写设置一页,各处「偏好设置 → 通用」这类指路改成新页名;contributing「控件面原生」一条改为设置程序自绘
2026-10-12 10:07:26 +08:00
Joelee 2db9677a4c feat: 学习语言新增越南语 (#480)
Language 加 Vietnamese,三端设置与装配接线,云释义补越南语提示词;随包越南语释义表由 gloss-gen 生成(GPL-3.0-or-later)。

Closes #47
2026-10-10 10:42:44 +08:00
yenharvey 5128d5123a fix(macos): 本地安装先拷到旁边再换上去
- 原来先删旧包再拷新包,拷到一半被打断会留下缺 Info.plist 的残包,旧进程还挂在上面,客户端(Zed)跟着退出、切输入法回退到系统拼音
- 现在完整拷到 .Qingjian.app.new,结束旧进程后一步 mv 换上
2026-10-09 15:05:42 +08:00
yenharvey b240289df1 build(release): 将含章模型与词库合并为 data-v3 单包
统一两份模型的 small 型号文件名,并让三个平台读取单包数据。保留旧锁下载路径供历史版本使用。
2026-09-29 13:37:59 +08:00
yenharvey a41d1cf82a feat: 接入含章·通变与知微模型
接入含章·通变的拼音解码、整句重排与词图兜底生成,扩展 macOS、Windows 和 Linux 的模型加载路径。模型文件按正式标识归档,保留旧用户目录回退,并同步数据打包、评测记录和用户文档。
2026-09-29 12:02:00 +08:00
tonywoo 9cfeec4bad feat(core): 五笔 86 输入方案与拼音混输 (#125)
形码与拼音是两条平行管线:码表按编码前缀查,释义、生词、学习与输入日志照常。配置拆成 [general] scheme(拼音侧)与 wubi(形码侧)两条轴,两边都开就是混输;两端设置页、随包码表(极点 86,Apache-2.0)与 CLI --wubi 一并接上,macOS 顺带接了大千注音。
2026-09-18 01:06:42 +08:00
lei1024 95fdff1b52 feat(core): 支持小浪双拼方案 (#129)
双拼方案多一套小浪(e / i / v 为 zh / ch / sh,x 为 ü);键位表加每方案自己的翘舌声母映射。方案自带的同码(lk、nm、dk、un)只解第一个读音,已写进用户文档的已知限制。
2026-09-17 19:34:24 +08:00
yenharvey 5fe018cb08 chore(release): 安装包改名、渠道改成更新渠道、索引加 schema_version 与 cpu
为接入 Homebrew 自建源 / WinGet 与软件内检查更新做准备:安装包文件名固定为
qingjian-<版本>-<平台>-<cpu>[-setup].<扩展名>;CHANGELOG 与 releases.json 的 channel 表示更新渠道,
0.1.3 标 stable,带预发布后缀的版本由 release.yml 标成 GitHub 预发布。
2026-09-17 15:36:01 +08:00
yenharveyandWhiteCloud-OuO 7ff91ac3bb feat(macos): 菜单栏图标换成青简模板图,随菜单栏深浅色自动反色
输入法菜单图标改用 assets/icon/menu.svg 导出的矢量 menu.pdf,Info.plist 标 TISIconIsTemplate,
系统按深浅色反色,不再从 logo.png 拼 tiff。应用图标不变。

Co-authored-by: WhiteCloud-OuO <1227866042@qq.com>
2026-09-16 23:53:43 +08:00
yenharvey 59312c5cad build(release): 产品数据改成不可变的 data-vN Release,仓库锁文件钉版本
滚动覆盖的 data Release 让老提交自编译拿到新数据、CI 只按 Release 自己的 SHA256SUMS 自校验。
现在 data-bundle.sh 发新号并写 tools/release/data.lock,data-fetch.sh 按锁文件下载校验,CI 与自编译同一条路;
build-info.json 多记 data_tag。老 data Release 冻结不删。
2026-09-16 17:53:45 +08:00
yenharvey b423a4e46d build(installer): 西班牙语释义表随包
两端引擎本来就按学习语言找 glossary-<语言>.qj,设置页也已有西班牙语(#48),只差把 #49 的
表打进包:bundle.sh 与 dict-convert 的语言码加 es(es 表的许可与来源单独写:GPL-3.0-or-later、
Azure Translator 机器翻译),Windows 安装包与 data-bundle 清单加 glossary-es.qj。
2026-09-16 11:39:33 +08:00
yenharvey aa757f041d 打包:开发版号接 git 短哈希(0.1.3-dev-1a2b3c4,脏加 +)
Cargo.toml 里仍只写 -dev,打包时接上,发版提交去掉 -dev 就不接;测试反馈报版本串就能定位到提交。
- macOS:bundle.sh 接哈希,Info.plist 与 pkg 文件名带哈希,pkgbuild 仍用数字版本。
- Windows:installer/build.ps1 同样接哈希进安装包文件名;settings 的 build.rs 出 QINGJIAN_VERSION,关于页显示它。
2026-09-15 23:54:07 +08:00
9tong a6f477df9a macOS:打包脚本签名前清掉 .app 的扩展属性 (#87)
仓库放在 iCloud 同步目录时新建的 .app 带 Finder 扩展属性,codesign 报 detritus not allowed;签名前 xattr -cr 一次。
2026-09-15 23:25:08 +08:00
yenharvey 6d731f8ab5 模型单文件 .qjm:.qj 容器新种类 Model,加载器认单文件与三件套目录,pack model 打包
- qingjian-format 加 Kind::Model;.qjm 就是 .qj 容器装三节 CONF / VOCB / SAFT(config.json / vocab.json / model.safetensors 原文),
  META 带名称 / 许可 / 署名,entries 记参数量
- qingjian-neural:qjm 模块(find_model 先 .qjm 再三件套、pack),CharScorer::load 认文件或目录,metadata() 给 META;
  测试夹具改用 data/model(旧 lm-train/export 路径已不存在,之前一直静默跳过),新增打包往返测试
- dict-convert pack model;tools/release/pack-model.sh 是元数据唯一落点(权重许可与代码一致 GPL-3.0-or-later),三件套比 .qjm 新才重打
- mac paths::model_path、Windows dispatch::find_model 改用 find_model;bundle.sh 与 qingjian.iss 只带 model.qjm,Inno 顺手删旧装的三件套
2026-09-12 17:08:05 +08:00
yenharvey ed156c64fd CI:三平台 job、actions 钉 commit、--locked、最小权限、发版门禁(标签在 main 上、数据按 SHA256SUMS 校验)、Dependabot + cargo audit;钩子加禁装饰性分隔注释与 pre-push 测试
- ci.yml:core(Linux 全量)/ macos(IMK 壳)/ windows(Server、TSF DLL、Settings)三个 job,Windows 代码以前在 Linux 上只是被 cfg 跳过;
  Windows job 设 QINGJIAN_UIACCESS=0(没签名的测试二进制带 uiAccess manifest 起不来,os error 740)
- 第一次在 Windows 上跑测试就抓到一个:TSF 日志的 days_from_civil 把 719468 加成了减,1970-01-01 算成 1438936(只用来比大小,功能没受影响)
- release.yml:secrets 不放顶层 env、有没有配由第一步算成输出;merge-base 门禁;产品数据 SHA256SUMS 校验并记进 build-info.json 的 data_sha256;docs.yml 同样钉 commit、只读权限
- bundle.sh / build.ps1 的 cargo build 加 --locked
- .githooks/pre-commit 拒绝 // ==== 这类只做视觉分组的分隔注释(与 unuvojo-server 同一条规矩),.githooks/pre-push 跑全 workspace 测试
- 正式版前欠的(数据不可变 tag + 锁定、安装包内容验证、cargo deny、fuzz / Miri)记进 todo 与 release.md
2026-09-12 13:05:57 +08:00
yenharvey b1835f5231 版本号:发版之间带 -dev(mac 0.1.2-dev、win 0.1.0-alpha.2-dev),本地与 CI 中间构建一眼能与线上包区分
- 发版提交去掉 -dev 再打标签,标签后只改 Cargo.toml 到下一个 -dev;-dev 版本没有标签与 Release,release.yml 两个 job 拒绝带 -dev 的版本
- bundle.sh:Info.plist 与 pkg 文件名保留完整版本,pkgbuild 与 distribution.xml 只认数字点号、用去掉后缀的 PKG_VERSION(已实际打包核对)
- Windows 设置程序的构建标识在工作区有改动时加 +,与 mac 一致
- 规矩写进 CLAUDE.md 与 docs/notes/release.md
2026-09-12 12:18:53 +08:00
yenharvey 71e1c57743 训练部分迁出到并列的 train 仓库;偏好设置快捷键页与用户文档补充
- 训练脚本与数据管线迁到 ~/…/qingjian/train 独立仓库,随包模型缺省读 data/model/,文档路径同步
- 偏好设置「快捷键」页列出组句中固定的键
- 用户文档补云端词按敲的读音学、末尾落单字母的排序
2026-09-11 23:23:54 +08:00
yenharvey 4cb3125562 本地整句模型进壳:前文 KV 缓存、Core 异步重排、[model] 开关,模型随包
- 前文 KV 缓存 133 → 28 ms;Core 异步重排(后台线程 + 分数缓存);应用光标前文当前文
- 一段组句只在第一键读一次应用前文,等结果超时降为 debug
- Metal 上权重与中间量缺省 f16,进程内存 273 → 约 130 MB,打分不变
- 偏好设置:[model] 开关;云联想关着时其下项灰掉,没有模型文件时本地模型勾选灰掉
- 性能记录第八轮(本地整句模型,补内存与 CPU)
2026-09-11 23:23:54 +08:00
yenharvey b84bfd5c3f 各平台壳版本号独立:发布标签加平台前缀,脚本改读 app 包版本
apps/* 是各自独立发布的产品,版本号不该跟 workspace 或彼此同步(macOS 修的 bug
不该让 Windows 涨版本)。mac 到 0.1.1、win 还在 0.1.0,光靠 v<版本> 标签会撞车。

- apps/macos 用自己的 version(0.1.1),不再 version.workspace。
- 发布标签按平台加前缀 macos-v* / windows-v*;bundle.sh 与 release.yml 都改读
  apps/macos/Cargo.toml 的包版本、按去掉 macos-v 前缀后的标签比对。
- releases_json.py 的 TAG 正则接受可选平台前缀(macos- / windows- / linux-),
  向后兼容旧的 v* 标签。
- CLAUDE.md 与 docs/notes/release.md 记下该约定与新的打标签方式。
2026-09-11 19:35:01 +08:00
yenharvey 7a2ccc7691 v0.1.0:首个版本
青简(Qingjian):用 Rust 写的拼音输入法,候选词旁多一条正在学的那门语言的译词,一次只学一种。
核心引擎平台无关(crates/),macOS 输入法(apps/macos)已可用,CLI 测试工具(apps/cli),
产品数据生成工具(tools/),设计文档、计划与用户文档在 docs/,发版流程见 docs/notes/release.md。
2026-09-07 19:17:46 +08:00