AIRI v0.7 开发日志深度解析:Windows 全平台支持、Fade on hover 交互、本地 ASR/STT 与构建工程化升级

发布时间:2026/9/11 20:32:31
AIRI v0.7 开发日志深度解析:Windows 全平台支持、Fade on hover 交互、本地 ASR/STT 与构建工程化升级 AIRI v0.7 开发日志深度解析Windows 全平台支持、Fade on hover 交互、本地 ASR/STT 与构建工程化升级【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airiAIRITamagotchi 桌面陪伴应用、Web/Mobile Web 版本所在的 monorepo在 v0.7 中完成了从实验性原型到可日常陪伴的全平台桌面应用的关键跨越补齐 Windows 兼容性、引入 Fade on hover 窗口交互范式、落地本地 ASR/STT 引擎并在工程侧用 buildless tsdown rolldown-vite turborepo 把构建时间从 4 分钟压到 25 秒。本文以官方 DevLogdocs/content/en/blog/DevLog-2025.08.05/index.md为骨架结合仓库源码与测试逐项拆解这些能力的动机、实现原理与使用方式。v0.7 发布概况一次迟到的、影响深远的大版本v0.7 原定于 2025 年 7 月初发布但由于在 Windows 上发现了多个关键 bug、以及本次改动范围远超预期最终推迟到 8 月初才正式放出。从版本对比看这次迭代的体量相当可观391 commits对比 v0.6.1 → v0.7.01017 files changed74,548 lines added13,930 lines removed作者也坦诚这些数字对软件行业从业者而言并不代表什么只是说明这一版本影响面很大。与 v0.7 同期达成的里程碑包括GitHub 1850 stars、40 contributors、300 Discord 成员并在 2025 年 7 月 17 日登上 GitHub Trending 榜首以上数字为 DevLog 发布时作者自述非仓库代码可验证数据。DesktopTamagotchi从实验品到常驻桌面伴侣Tamagotchi 是 AIRI 桌面版的代号——一个独立运行的、常驻桌面的 AI 陪伴窗口。v0.6 及更早版本中桌面端 UI/UX 尚不精致本地 ASR/STT 不可用音频输入设备设置缺失。v0.7 对这些问题做了系统性补齐其中最核心的是围绕透明置顶窗口如何与普通应用共存的一整套交互设计。Fade on hover™解决常驻伴侣与阻挡鼠标的根本矛盾如果你把 AIRI 当作 VTuber 应用来用类似 VTuber Studio、Warudo 对接 OBS 串流模型窗口永远在底层、由采集驱动捕获窗口层级由 OBS 的场景编排决定自然没有遮挡问题。但一旦你想让模型作为虚拟伴侣常驻在桌面上就会立刻撞上两个痛点窗口置顶会阻挡下方应用的鼠标事件手动切换窗口可见性在专注工作时非常打断心流。Fade on hover 的思路很直接当鼠标悬停在 AIRI 窗口上时整个角色淡出并把鼠标点击事件透传给下层应用。这样角色可以随时陪在你身边却不干扰你操作任何应用。默认快捷键ShiftAltI作者戏称该功能为 Fade on hover™但项目以 MIT 协议开源并未注册任何商标。源码级原理采样透明 指针穿透的协同核心交互决策实现在 apps/stage-tamagotchi/src/renderer/utils/fade-on-hover.ts 的resolveFadeOnHoverInteraction中它接收四个输入cursorInsideWindow鼠标是否在窗口内enabledFade on hover 是否开启transparentForFade淡出检测所用的采样区域是否已透明transparentForPointer原生指针命中测试所在像素是否透明。const fadeStage params.enabled params.cursorInsideWindow !params.transparentForFade return { fadeStage, ignoreMouseEvents: params.enabled (fadeStage || params.transparentForPointer), }源码注释揭示了两个关键设计决策淡出检测使用采样区域而非精确像素——避免角色边缘抖动导致频繁闪烁而原生指针命中测试用精确像素保证可见的模型像素仍可交互一旦整个舞台淡出命中测试报告的不透明像素可能仍是已不可见的模型因此淡出判定必须同时启用点击穿透click-through守住不可见的舞台内容不能阻挡下方应用的契约。配套的单元测试 fade-on-hover.test.ts 覆盖了三条核心场景可见模型淡出时指针透传、未淡出的透明舞台保持点击穿透、关闭 Auto Hide 后舞台完全可交互。何时采样透明度仅限 VRM 且已挂载透明度采样并不是无时无刻都在进行的。apps/stage-tamagotchi/src/renderer/utils/stage-three-transparency.ts 中的shouldSampleStageTransparency要求四个条件同时满足才采样Fade on hover 已开启、舞台未暂停stagePaused false、组件状态为mounted、且渲染器为vrm。对应测试见 stage-window-lifecycle.test.ts它验证了loading状态、live2d渲染器、暂停状态都不会触发采样从实现层面解释了采样是精确且节制的。状态持久化与引导通知用户偏好通过 Pinia store 持久化到 localStoragecontrols-island.ts 中fadeOnHoverEnabled使用useLocalStorage(controls-island/fade-on-hover-enabled, false)默认关闭另有dontShowItAgainNoticeFadeOnHover记录不再显示引导提示。首次开启时桌面端会弹出独立的引导窗口 notice/fade-on-hover.vue内置深浅两套教程视频并提供不再显示复选框与 Confirm 按钮。在 Controls Island桌面端悬浮控制面板中controls-island/index.vue 通过ControlsIslandFadeOnHover /提供了一个一键开关按钮与设置页、全局快捷键三处入口互通。Move移动模式Fade on hover 让鼠标事件透传后你仍需要把模型窗口摆到合适的位置右下角、底部居中……。v0.7 优化了拖拽区域的外观——圆角设计以匹配整体主题。默认快捷键ShiftAltN进入移动模式后会出现可拖拽区域除鼠标拖拽外还可以用系统托盘菜单中的Position Center / Bottom Left / Bottom Right快速定位窗口。Resize缩放模式不同角色的模型尺寸各异窗口缩放能力同样关键。与 Move 模式一致缩放边框指示器应用了圆角角色边缘也被裁剪出圆角效果。默认快捷键ShiftAltR桌面端这些快捷键背后是全局快捷键服务。从实现看主进程通过 global-shortcut-uiohook.test.ts 所测试的 uiohook 驱动监听 OS 级键盘事件并会抑制系统自动重复auto-repeat、精确匹配修饰键组合快捷键 accelerator 结构如cmd-or-ctrl/alt/shift修饰符 key定义在 global.ts 的shortcutAcceleratorSchema中设置页对应入口见 window-shortcuts.vue。Resource Island下载进度的可视化加载 ASR/STT 与 VAD 模型需要下载大量文件等待过程必须可视化。借鉴 iOS Dynamic Island 的交互v0.7 设计了一套名为Resource Island的悬浮组件浮动、可悬停的 widget展示各模块及所需文件的下载/安装进度下载完成后自动消失每个模块项内嵌链接点击可跳转到对应模块的设置页了解该模型/文件为什么是必需的。本地 ASR/STT从 candle 到 ONNX Runtime 的务实迁移桌面端此前本地语音转文字不可用v0.7 借助社区实验仓库 candle-examples 的经验实现了在 Windows、macOS、Linux 三平台均可工作的本地 ASR/STT 引擎。技术选型上经历了重要调整最初尝试直接使用 huggingface/candle 推理引擎但无法为 Windows 与 Linux 构建找到干净利落地嵌入 candle 运行时含/不含 CUDA的方案于是切换到ortONNX Runtime for Rust——在保持相近性能与精度的同时兼容性更好、接入更简单。在设置页的 Hearing听觉配置中你可以选择音频输入设备并自由切换 ASR/STT 提供方既可使用 OpenAI 的云端语音服务也可切换到本地 provider 实现完全离线的语音识别DevLog 中的演示视频默认使用 OpenAI 服务但切换本地 provider 是可行的。Web引导页与更精准的 VRM 渲染Onboarding 引导页AIRI 的配置项较多相比需要理解代码结构才能配置的纯 Python 方案仍然简单为了让新用户第一次上手更顺畅v0.7 为 Web 版本加入了完整的 onboarding 引导页。VRM更精确的相机与渲染感谢社区贡献者 Lilia-Chen 的持续工作v0.7 中 VRM 模型以更精确的相机实现与渲染机制呈现从仓库结构看VRM 能力由 packages/stage-ui-threethree.js 渲染、packages/stage-ui-live2dLive2D以及桌面端透明度采样逻辑共同支撑DevLog 中明确提到透明度采样目前仅对 VRM 渲染器启用正是为了保证渲染精确与命中精确能同时成立。Mobile WebOnboarding 与主场景重构Onboarding移动端同样获得了 onboarding 引导首次使用体验与 Web 版对齐。Scene主场景重设计与 Live2D 偏移微调移动端主场景被完全重写。得益于 LemonNekoGH 的贡献现在可以更直观地调整场景中 Live2D 模型的偏移Offset。设计灵感来自 iOS 侧边音量控制期望让用户更快上手提供 X、Y、Scale 的调节按钮双击 X、Y 或 Scale 按钮即可重置为默认值。双端共享一批新的 UI 组件v0.7 为 Web 与桌面双端补充了大量可复用组件更好的文本动画聊天气泡的文本动画全面改进由 sumimakito 实现并在 DevLog 2025.08.01 中详细解释了其特殊实现动机与 i18n 兼容性考量Level meter用于展示音频输入检测电平或实时系统负载的可视化组件Time series chart与 Level meter 类似面向变化值但更适合历史数据可视化其他新增组件Progress /、FieldSelect /、Alert /、ErrorContainer /、新的侧边栏导航设计、Toaster 通知、以及检测到新版本时提示用户更新。Community新文档站点与 i18n 翻译工作流新的文档站点AIRI 拥有了全新的文档站点它基于 Reka UI 的设计体系重写并叠加了大量自有功能博客文章列表、多语言切换以及适配 VitePress 的大量样式。博客页也配上了由 lynzrand 设计的新封面。该文档站的内容源正是本仓库的 docs/content 目录en/ja/ko/zh-Hans 等多语言版本并存。翻译工作流变更i18n 独立成包v0.7 把原本散落的i18n/locales 文件拆分到 monorepo 内的独立包中。贡献新语言、新增翻译或修正既有翻译时请先导航到 packages/i18n/src/locales当前仓库中已包含 en、es、fr、ja、ko、ru、vi、zh-Hans、zh-Hant 等多个语言目录。以英文为例目录结构如下└── en ├── docs ├── tamagotchi ├── base.yaml ├── settings.yaml ├── stage.yaml └── index.ts各部分的职责docs/文档站点 UI 字符串非文章正文编辑其中的theme.yaml即可tamagotchi/仅桌面版Tamagotchi使用的特殊翻译其余桌面字符串都在根目录各 yaml 中base.yaml语言基础字符串、按钮基础状态settings.yaml设置页字符串stage.yaml舞台模型展示 UI字符串。完整结构示意en 与 zh-Hans 为例packages/i18n/src ├── index.ts └── locales ├── en │ ├── base.yaml │ ├── docs │ │ ├── index.ts │ │ └── theme.yaml │ ├── index.ts │ ├── settings.yaml │ ├── stage.yaml │ └── tamagotchi │ ├── index.ts │ ├── settings.yaml │ └── stage.yaml └── zh-Hans ├── base.yaml ├── docs │ ├── index.ts │ └── theme.yaml ├── index.ts ├── settings.yaml ├── stage.yaml └── tamagotchi ├── index.ts ├── settings.yaml └── stage.yaml新增语言的方法复制一个现有语言目录重命名为新语言代码例如把en复制为fr然后编辑base.yaml、settings.yaml、stage.yaml与index.ts添加翻译。部分翻译也是可接受的可以在 Pull Request 评审过程中逐步补齐。语言代码请参照 IETF 语言标签规范BCP 47可用 Language subtag lookup 或 IANA 的语言子标签注册表查询确认。DevLog 同时发出 Help wanted希望有经验的人帮助将 i18n 包接入 Crowdin 或 Weblate 等翻译自动化工具此为社区协作邀请非已实现功能。Engineering把构建从 4 分钟压到 25 秒v0.7 在工程侧做了一整套工具链升级作者将其概括为大量包转向buildless架构移除unbuild的stub从vite切换到rolldown-vite工作流提速约 2 倍用tsdown替代unbuild带来约 4.2 倍提速每个子包构建时间降至 250ms 以内并额外获得未使用依赖检查、CSS 打包、Vue SFC 打包能力集成turborepo做带依赖感知的构建缓存平均构建时间从 4 分钟降至 25 秒。仓库证据根目录存在 turbo.json 与 package.json 的 workspace 配置packages 下各子包普遍存在tsdown.config.ts如 stage-shared、core-agent 等与 DevLog 描述一致。buildless为什么能跳过最大包的构建此前采用 monorepo 架构时依赖postinstall脚本通过 stubjitiexports 与.d.ts模块引导依赖安装避免贡献者必须理解 monorepo 才能参与开发。但每次pnpm install都触发 re-build/re-stub 显然不明智。buildless 改造后此前耗时最长的stage-ui包可以被直接跳过且不会引入类型检查或依赖解析问题同时移除 unbuild 的 stub 也消除了The requested module ./dist/index.mjs does not provide an export named foo这类恼人错误。Nix 支持一条命令跑起来v0.7 加入了 Nix flake 构建支持在 macOS 上同样可用。仓库根目录的 flake.nix、default.nix 以及 nix 目录含 pnpm-deps-hash、assets-hash 等哈希锁定印证了这一点。可以这样尝试nix run --extra-experimental-features nix-command flakes github:moeru-ai/airi统一构建管道每晚验证发布路径此前测试、预发布、正式发布的构建管道各不相同导致每次发版前都无法确定管道能否成功。v0.7 将三者统一为同一条管道并引入定时构建canary/nightly——每天以与正式发布完全相同的脚本和工作流步骤运行一遍。这意味着如果你在最新正式版上遇到问题可以随时尝试 main 分支的最新构建验证问题是否已修复。新包与周边项目v0.7 期间诞生了一批新包与周边项目[proj-airi/chromatic] 与proj-airi/unocss-preset-chromaticsumimakito 贡献配色体系及 UnoCSS presetmoeru-ai/jemLemonNekoGH 贡献——统一模型目录model catalogclustrsumimakito 贡献即前文更好的文本动画的实现基础proj-airi/drizzle-orm-browser作者本人贡献HuggingFace Inspector、更多 candle/whisper/VAD 实验示例candle-examples、以及 Inventory 模型目录提交moeru-ai/inventory。若想追踪本次未能在 DevLog 中一一展开的全部改动可以查阅 v0.7 的 Roadmap issueDevLog 末尾附有链接。小结v0.7 意味着什么从用户体验看v0.7 让 AIRI 桌面版第一次具备常驻陪伴的完整形态——Fade on hover Move Resize 构成一套自洽的透明窗口交互体系Resource Island 与本地 ASR/STT 消除了能不能用的疑虑从工程治理看buildless tsdown rolldown-vite turborepo 与统一 nightly 构建管道把 monorepo 的迭代成本压到了可接受的范围从社区协作看i18n 独立成包与全新文档站为多语言贡献者铺平了道路。想要继续深入推荐按以下路径阅读源码交互核心 fade-on-hover.ts 与配套测试 fade-on-hover.test.ts、状态持久化 controls-island.ts、全局快捷键 schema global.ts以及完整的开发日志原文 DevLog-2025.08.05/index.md。【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考