将 Nix 包运行时固定到 Electron 42,避免默认 Electron 43 的 KDE StatusNotifierItem 兼容问题。 AI-assisted-by: Codex AI-model: gpt-5.6-sol AI-reasoning-effort: medium Co-authored-by: Codex <codex@openai.com>
TamaASR
TamaASR 是面向 Linux/Fcitx5 的桌面语音输入工具。
和常规ASR软件不同,本软件不运行本地模型或要求用户提供ASR api进行调用,而是通过将语音输入转发到支持语音识别的AI网页对话助手,再将识别到的文字抓取并发送到fcitx5完成输入。
您需要在本软件的内置浏览器里登录对应的AI助手平台,然后在外部按住快捷键即可进行输入。
从官方渠道(Github Releases,星火商店等)获取到的本软件,不会获取您的任何个人信息、AI平台账户信息、对话记录或语音输入记录
如果您是从其它渠道获取,且无法确认来源可信,请立即卸载并更换为官方来源的版本以防止个人信息泄露
本项目遵循MPL-2.0许可证开源
当前支持的可作为输入源的后端:
- 千问
- 元宝
出于个人原因(多次尝试后效果不符合预期,个人设备不兼容等),本项目暂不考虑迁移到Tauri或QtWebEngine。
架构
网页后端适配器
→ Electron 后端窗口与登录会话
→ 会话状态机
→ $XDG_RUNTIME_DIR/tama-asr/fcitx5.sock
→ Fcitx5 常驻 addon
→ 当前应用的 preedit / commit
src/main/index.ts 只负责应用启动与依赖组合。主要模块位于:
src/backends/:后端定义、DOM 适配器和注册表;src/main/backend-manager.ts:后端窗口、登录状态和就绪状态;src/main/session-controller.ts:语音会话状态机;src/main/fcitx-bridge.ts:本地 JSONL 协议;src/main/settings-store.ts:设置持久化;src/main/tray-controller.ts:托盘生命周期和就绪颜色;src/main/overlay-controller.ts:悬浮球显示与位置;src/renderer/、src/preload/:设置页、悬浮球和安全 IPC。
本地开发
依赖:Node.js 22+、CMake 3.16+、支持 C++20 的编译器、Fcitx5 Core/Utils 开发包、nlohmann-json。
pnpm install --frozen-lockfile
pnpm test
pnpm run build:fcitx5
./linux/fcitx5/install-user.sh
fcitx5 -r
pnpm start
应用默认由托盘常驻,设置页与后端调试窗口默认隐藏。首次打开某个后端的调试窗口时,应用会提示登录;登录状态保存在该后端自己的 persistent partition 中。
默认按住 Ctrl+Shift+Space 开始录音,松开后停止。快捷键可在设置页修改,并通过本地协议同步给 Fcitx5 addon。悬浮球常驻时,点击可开始或停止录音。
后端扩展
新增后端时需要:
- 添加
BackendDefinition; - 实现
BackendWebAdapter; - 在注册表中注册定义和网页适配器;
- 添加注册、URL 归属和 DOM 探测测试。
网页编辑器中的当前完整文本是唯一可信结果。不要自行拼接服务端 partial/final,也不要在 Fcitx5 层加入厂商判断。
Linux 分发
pnpm run build:linux:dir
pnpm run package:deb
pnpm run package:rpm
Arch/pacman 配置位于 packaging/arch/,Nix 入口为 flake.nix。详细依赖、验证状态和发布前替换项见 packaging/README.md。
Nix Cachix缓存源
缓存源:https://meloasr.cachix.org
公钥:meloasr.cachix.org-1:oMmpfj7D1pQTtJx6cHYupvPDJPFlkBB0JIpJYvkR5hc=
验证
pnpm test
pnpm run build
pnpm run build:fcitx5
ctest --test-dir linux/fcitx5/build --output-on-failure