v0.9.0

mlabonne/llm-coursev0.9.0Apr 10, 2026by nekomeowww

AI Summary

This release focuses on UI enhancements for the Tamagotchi stage, improvements to 3D model rendering (VRM), and general stability fixes across integrations like Discord and Minecraft. It also introduces basic MCP (Model Context Protocol) implementation.

Key Highlights

  • Basic MCP implementation for stages
  • Tamagotchi stage improvements including popup controls, tooltips, and a 'Pin on top' toggle
  • VRM 3D model enhancements with anti-aliasing and emotion mapping fixes
  • Discord VoiceManager memory leak fix
  • Minecraft integration updates including runtime migration and debug server defaults

New Features

  • Basic MCP implementation
  • Ollama thinking mode configuration
  • Nvidia NIM provider support
  • Manual model input fallback
  • Tamagotchi controls island improvements

Full Release Notes

<img width="250" height="250" alt="image" src="https://github.com/user-attachments/assets/05a5aae6-ac15-443e-ab53-b7fb3d769ae3" />


## New Contributors
* @YoungUsing made their first contribution in https://github.com/moeru-ai/airi/pull/1109
* @Gujiassh made their first contribution in https://github.com/moeru-ai/airi/pull/1162
* @04cb made their first contribution in https://github.com/moeru-ai/airi/pull/1182
* @dongguacute made their first contribution in https://github.com/moeru-ai/airi/pull/1169
* @SakataRyuichi made their first contribution in https://github.com/moeru-ai/airi/pull/1187
* @JasonOA888 made their first contribution in https://github.com/moeru-ai/airi/pull/1203
* @Ver-zhzh made their first contribution in https://github.com/moeru-ai/airi/pull/1196
* @Minnzen made their first contribution in https://github.com/moeru-ai/airi/pull/1214
* @kbhujbal made their first contribution in https://github.com/moeru-ai/airi/pull/1213
* @pratyush618 made their first contribution in https://github.com/moeru-ai/airi/pull/1156
* @freezinlove made their first contribution in https://github.com/moeru-ai/airi/pull/1243
* @fordelkon made their first contribution in https://github.com/moeru-ai/airi/pull/1231
* @hobostay made their first contribution in https://github.com/moeru-ai/airi/pull/1261
* @stablegenius49 made their first contribution in https://github.com/moeru-ai/airi/pull/1316
* @Oldcircle made their first contribution in https://github.com/moeru-ai/airi/pull/1333
* @Reisenbug made their first contribution in https://github.com/moeru-ai/airi/pull/1341
* @mvanhorn made their first contribution in https://github.com/moeru-ai/airi/pull/1392
* @jim139129 made their first contribution in https://github.com/moeru-ai/airi/pull/1412
* @monolithic827 made their first contribution in https://github.com/moeru-ai/airi/pull/1302
* @PurCHES5 made their first contribution in https://github.com/moeru-ai/airi/pull/1457
* @spidershield-contrib made their first contribution in https://github.com/moeru-ai/airi/pull/1445
* @howtomakeaname made their first contribution in https://github.com/moeru-ai/airi/pull/1437
* @breezy89757 made their first contribution in https://github.com/moeru-ai/airi/pull/1057
* @areong made their first contribution in https://github.com/moeru-ai/airi/pull/1483
* @xuan0x0 made their first contribution in https://github.com/moeru-ai/airi/pull/1494
* @jensenhuangfan made their first contribution in https://github.com/moeru-ai/airi/pull/1506
* @cheesemori made their first contribution in https://github.com/moeru-ai/airi/pull/851
* @you06 made their first contribution in https://github.com/moeru-ai/airi/pull/1513
* @youetube made their first contribution in https://github.com/moeru-ai/airi/pull/1033
* @JhIcefair made their first contribution in https://github.com/moeru-ai/airi/pull/1559
* @PhoenixForrestLin made their first contribution in https://github.com/moeru-ai/airi/pull/1563
* @dasilva333 made their first contribution in https://github.com/moeru-ai/airi/pull/1582

## What's Changed
* fix(docs): typo in instructions for Chat window by @YoungUsing in https://github.com/moeru-ai/airi/pull/1109
* feat(stage-*): basic mcp implementation by @BeanDz in https://github.com/moeru-ai/airi/pull/1115
* feat(stage-tamagotchi): popup controls island and better tray with window opts by @lietblue in https://github.com/moeru-ai/airi/pull/1106
* fix(stage-tamagotchi): improve controls island tooltip placement by @lietblue in https://github.com/moeru-ai/airi/pull/1119
* chore(docs): updated supported LLM API providers by @Neko-233 in https://github.com/moeru-ai/airi/pull/1114
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1120
* feat(stage-ui): add missing icon for gaming-factorio module by @lietblue in https://github.com/moeru-ai/airi/pull/1130
* feat: add Ollama thinking mode config and provider-side think mapping by @Garfield550 in https://github.com/moeru-ai/airi/pull/1140
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1157
* refactor(satori-bot): migrate persistence to adapter by @NashChennc in https://github.com/moeru-ai/airi/pull/1155
* feat: add anti-aliasing support for 3D models by @NJX-njx in https://github.com/moeru-ai/airi/pull/1150
* fix: improve VRM expression rendering and add missing emotion mappings by @NJX-njx in https://github.com/moeru-ai/airi/pull/1147
* fix(stage-ui): guard against undefined voices in ElevenLabs listVoices by @NJX-njx in https://github.com/moeru-ai/airi/pull/1142
* fix(ui): raise ComboboxContent z-index above Dialog overlay by @NJX-njx in https://github.com/moeru-ai/airi/pull/1143
* fix(stage-ui): auto-mark provider as added after successful validation on settings page by @NJX-njx in https://github.com/moeru-ai/airi/pull/1144
* feat(stage-pages): add manual model input fallback when model list fails to load by @NJX-njx in https://github.com/moeru-ai/airi/pull/1145
* chore(stage-pages): add Minecraft integration unavailability notice with WIP bot setup instructions by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1161
* fix(telegram-bot): guard structured message fallback by @Gujiassh in https://github.com/moeru-ai/airi/pull/1162
* refactor(minecraft): migrate reflex runtime to alien-signals, harden zod validation, and unify skill utilities by @s3d-i in https://github.com/moeru-ai/airi/pull/1092
* fix(stage-pages,stage-ui): surface provider transcription errors by @liuxiaopai-ai in https://github.com/moeru-ai/airi/pull/1070
* fix(stage-ui): add model list for index-tts-vllm by @liuxiaopai-ai in https://github.com/moeru-ai/airi/pull/1066
* fix(ci): with outputHashAlgo to output non-empty output by @04cb in https://github.com/moeru-ai/airi/pull/1182
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1177
* fix(stage-layouts): replace Tooltip with Popover for microphone controls by @dongguacute in https://github.com/moeru-ai/airi/pull/1169
* fix(stage-*): can’t get mcp servers when use remote api by @BeanDz in https://github.com/moeru-ai/airi/pull/1181
* fix(minecraft): downgrade to mitigate upstream issue and mcp cleanup by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1192
* fix(server-runtime): use superjson.parse for incoming WebSocket messages by @SakataRyuichi in https://github.com/moeru-ai/airi/pull/1187
* feat(minecraft): disable debug servers by default by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1193
* fix(stage-ui): LM studio validation problem and add CORS note by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1175
* fix(discord): prevent VoiceManager memory leaks on join/leave cycles by @JasonOA888 in https://github.com/moeru-ai/airi/pull/1203
* chore(docs): reorganize content by @NashChennc in https://github.com/moeru-ai/airi/pull/1170
* fix(telegram-bot): guard malformed structured messages by @Gujiassh in https://github.com/moeru-ai/airi/pull/1179
* Revert "fix(stage-*): can’t get mcp servers when use remote api" by @nekomeowww in https://github.com/moeru-ai/airi/pull/1204
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1209
* feat(stage-ui): add nvidia nim provider by @Ver-zhzh in https://github.com/moeru-ai/airi/pull/1196
* feat(stage-pages): add model selection navigation after provider validation by @Minnzen in https://github.com/moeru-ai/airi/pull/1214
* fix(stage-ui): user-sent message lost by @typed-sigterm in https://github.com/moeru-ai/airi/pull/1215
* fix(minecraft): add stop method to Ticker to prevent resource leak by @kbhujbal in https://github.com/moeru-ai/airi/pull/1213
* feat(tamagotchi): add "Pin on top" toggle to controls island by @lietblue in https://github.com/moeru-ai/airi/pull/1183
* fix(stage-tamagotchi): bring back onboarding dialog by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1104
* fix(stage-ui): reset always-on-top via manual reset by @Garfield550 in https://github.com/moeru-ai/airi/pull/1218
* fix(stage-pocket): use system mkcert to work around feaxios download crash by @Minnzen in https://github.com/moeru-ai/airi/pull/1220
* fix(stage-ui-live2d): require `.model.json` or `.model3.json` for Live2D files by @pratyush618 in https://github.com/moeru-ai/airi/pull/1156
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1226
* fix(server-runtime,server-sdk): accept plain JSON from external WebSocket clients by @pratyush618 in https://github.com/moeru-ai/airi/pull/1234
* refactor(stage-ui): steps of onboarding dialog by @LemonNekoGH in https://github.com/moeru-ai/airi/pull/1224
* fix(stage-tamagotchi): disable hoverable content of control button by @LemonNekoGH in https://github.com/moeru-ai/airi/pull/1240
* fix(stage-ui-live2d,stage-tamagotchi): use temp file to prevent config loss and handle more Live2D model load failures by @pratyush618 in https://github.com/moeru-ai/airi/pull/1233
* fix(stage-tamagotchi): double close caused crash, simplified onboarding, added `safeClose` by @freezinlove in https://github.com/moeru-ai/airi/pull/1243
* feat(stage-tamagotchi): add top drag area to move window by @fordelkon in https://github.com/moeru-ai/airi/pull/1231
* feat(nix): add FHS devShell for running Electron on NixOS by @lietblue in https://github.com/moeru-ai/airi/pull/1245
* fix(stage-ui): use lightweight fetch for connectivity check by @Minnzen in https://github.com/moeru-ai/airi/pull/1238
* feat(stage-tamagotchi): add electron main process file logger hook by @Garfield550 in https://github.com/moeru-ai/airi/pull/1247
* fix(stage-tamagotchi): crash on onboarding save by bump electron to v40.8.0, bring back auto-popup by @sumimakito in https://github.com/moeru-ai/airi/pull/1246
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1251
* chore: update pnpm version to 10.32.1 by @Garfield550 in https://github.com/moeru-ai/airi/pull/1252
* fix(services): resolve lint issues by @hobostay in https://github.com/moeru-ai/airi/pull/1261
* fix(stage-tamagotchi): dependency missing for h3 by @nekomeowww in https://github.com/moeru-ai/airi/pull/1265
* fix(stage-ui): remove SSML support for Volcengine speech provider by @pratyush618 in https://github.com/moeru-ai/airi/pull/1232
* fix(stage-ui): deduplicate provider models by id by @lietblue in https://github.com/moeru-ai/airi/pull/1282
* fix(stage-tamagotchi): provide the missing core components to createCoreContext by @sumimakito in https://github.com/moeru-ai/airi/pull/1288
* fix(stage-tamagotchi): move @intlify/core from devDeps to deps by @sumimakito in https://github.com/moeru-ai/airi/pull/1291
* feat(stage-ui): optimize card many select component layout styles by @horizonzzzz in https://github.com/moeru-ai/airi/pull/1096
* refactor: vrm performance tracing and better lifecycle management by @Lilia-Chen in https://github.com/moeru-ai/airi/pull/1194
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1301
* fix(stage-ui): skip optimistic updates before apply by @Gujiassh in https://github.com/moeru-ai/airi/pull/1304
* feat(stage-pocket): request permissions onboarding by @LemonNekoGH in https://github.com/moeru-ai/airi/pull/1292
* fix(plugin-sdk): trim negotiated compatibility versions by @Gujiassh in https://github.com/moeru-ai/airi/pull/1305
* fix(stage-tamagotchi): handle app exit correctly by @sumimakito in https://github.com/moeru-ai/airi/pull/1319
* fix: let tray menu close caption overlay by @stablegenius49 in https://github.com/moeru-ai/airi/pull/1316
* feat(stage-tamagotchi): show connection status by @LemonNekoGH in https://github.com/moeru-ai/airi/pull/1311
* fix(stage-ui): flip canvas pixel reads on Y axis by @Gujiassh in https://github.com/moeru-ai/airi/pull/1309
* fix(stage-tamagotchi): make handleAppExit more robust by @sumimakito in https://github.com/moeru-ai/airi/pull/1321
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1325
* fix(stage-ui): use stable chat history keys in the stage UI by @stablegenius49 in https://github.com/moeru-ai/airi/pull/1312
* fix(telegram-bot): fix velin rendering, action loop, and LLM compatibility by @Oldcircle in https://github.com/moeru-ai/airi/pull/1333
* docs: update CLAUDE.md to use @AGENTS.md directive by @lietblue in https://github.com/moeru-ai/airi/pull/1335
* feat(stage-tamagotchi): add profile switcher to controls island and web header by @lietblue in https://github.com/moeru-ai/airi/pull/1328
* fix(speech): prevent speech provider config reset on startup by removing premature immediate watcher by @lietblue in https://github.com/moeru-ai/airi/pull/1340
* fix(minecraft): xss mitigation for minecraft debug dashboard by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1344
* fix(stage-ui): fix hash scroll on SPA navigation to providers page by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1347
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1349
* fix(stage-tamagotchi): fix model flickering and jumping on window resize by @Reisenbug in https://github.com/moeru-ai/airi/pull/1341
* fix(server-runtime): shutdown server on interruption properly by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1356
* fix(stage-tamagotchi): quit app on Live2D close button to cleanup background processes by @Reisenbug in https://github.com/moeru-ai/airi/pull/1361
* fix(stage-ui): keep nested reasoning out of speech by @Gujiassh in https://github.com/moeru-ai/airi/pull/1322
* fix(plugin-sdk): preserve absolute plugin entrypoints by @Gujiassh in https://github.com/moeru-ai/airi/pull/1323
* fix(server-runtime): preserve explicit empty route destinations by @Gujiassh in https://github.com/moeru-ai/airi/pull/1324
* Revert "fix(stage-tamagotchi): fix model flickering and jumping on window resize" by @nekomeowww in https://github.com/moeru-ai/airi/pull/1364
* chore(ci): added Scoop bucket manifest by @stablegenius49 in https://github.com/moeru-ai/airi/pull/1262
* feat(stage-pages,stage-ui,i18n): disable auto trigger for chatcompletion check and use explict button by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1336
* chore: disable PostHog telemetry in development mode by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1365
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1369
* fix(stage-ui): use nullish coalescing for errorMessageFrom fallback by @Garfield550 in https://github.com/moeru-ai/airi/pull/1370
* docs(AGENTS.md): use `errorMesageFrom` by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1372
* feat(stage-pocket): add Android target by @lietblue in https://github.com/moeru-ai/airi/pull/1326
* chore: add project-level skills by @Garfield550 in https://github.com/moeru-ai/airi/pull/1373
* chore(docs): new DevLog for VRM & three.js refactor by @Lilia-Chen in https://github.com/moeru-ai/airi/pull/1368
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1388
* fix(llm): flatten content array for OpenAI-compatible providers by @Reisenbug in https://github.com/moeru-ai/airi/pull/1222
* fix(docs): fix typo in landing page by @qyl27 in https://github.com/moeru-ai/airi/pull/1399
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1403
* fix(stage-tamagotchi): harden caption overlay follow+mouse handling by @Iro96 in https://github.com/moeru-ai/airi/pull/1402
* fix(bucket): fix scoop manifest decompress error for NSIS installer by @mvanhorn in https://github.com/moeru-ai/airi/pull/1392
* fix(stage-pages): use placeholderLocalized from provider config for API key input by @mvanhorn in https://github.com/moeru-ai/airi/pull/1391
* fix(stage-ui-live2d): animate model position and scale on resize with animejs by @Reisenbug in https://github.com/moeru-ai/airi/pull/1395
* refactor(docs): home layout component by @qyl27 in https://github.com/moeru-ai/airi/pull/1404
* fix(stage-tamagotchi): do not pause Live2D on visibility change by @Iro96 in https://github.com/moeru-ai/airi/pull/1410
* fix(docs): incorrect button link by @qyl27 in https://github.com/moeru-ai/airi/pull/1411
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1415
* docs: update contributing docs by @jim139129 in https://github.com/moeru-ai/airi/pull/1412
* feat: upgrade MiniMax default model to M2.7 by @octo-patch in https://github.com/moeru-ai/airi/pull/1417
* feat(stage-pages,stage-ui,i18n): add OpenRouter as a speech (TTS) provider by @monolithic827 in https://github.com/moeru-ai/airi/pull/1302
* feat(docs): add a simple web version guide by @jim139129 in https://github.com/moeru-ai/airi/pull/1420
* fix(stage-pages): prevent airi card dialogs from closing on outside click by @Reisenbug in https://github.com/moeru-ai/airi/pull/1419
* fix(stage-ui): settings fallback route, and guard navigate back to home in tamagotchi by @leaft in https://github.com/moeru-ai/airi/pull/1413
* chore(readme): sync QR download buttons and migrate supporters section to SponsorKit by @Neko-233 in https://github.com/moeru-ai/airi/pull/1407
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1424
* feat(plugin-sdk): much better refactor, and new permission model by @nekomeowww in https://github.com/moeru-ai/airi/pull/1423
* feat(stage-tamagotchi): vision by @nekomeowww in https://github.com/moeru-ai/airi/pull/917
* feat(stage-pages): reorder sections and add danger zone red background by @Garfield550 in https://github.com/moeru-ai/airi/pull/1435
* feat(stage-ui): Include OpenRouter attribution headers by @monolithic827 in https://github.com/moeru-ai/airi/pull/1436
* fix(bucket): update Scoop manifest to v0.9.0-alpha.18 by @mvanhorn in https://github.com/moeru-ai/airi/pull/1430
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1443
* chore: switch zh-CN desktop download links to GitHub releases by @Neko-233 in https://github.com/moeru-ai/airi/pull/1442
* feat: refactor settings data page and add app data folder action by @Garfield550 in https://github.com/moeru-ai/airi/pull/1447
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1448
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1454
* chore: replace CLAUDE.md symlink with @AGENTS.md reference by @lietblue in https://github.com/moeru-ai/airi/pull/1455
* feat(docs): added new DevLog 2026-03-23 by @PurCHES5 in https://github.com/moeru-ai/airi/pull/1457
* fix(nix/common): ignore editor config by @kwaa in https://github.com/moeru-ai/airi/pull/1459
* feat(cap-vite): use platform-specific device id by @LemonNekoGH in https://github.com/moeru-ai/airi/pull/1458
* refactor(tamagotchi/stage-*): remove duplicated scene in the setting page for tamagotchi by @Lilia-Chen in https://github.com/moeru-ai/airi/pull/1460
* feat(stage-tamagotchi): hide header in desktop by @lietblue in https://github.com/moeru-ai/airi/pull/1462
* fix(docs): fix Try Live button opening 404 in VitePress SPA router by @Garfield550 in https://github.com/moeru-ai/airi/pull/1461
* chore(docs): added comment for target field by @qyl27 in https://github.com/moeru-ai/airi/pull/1465
* refactor(stage-*): analytics and telemetry, including consent by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1414
* fix(server-runtime): use constant-time comparison for auth token by @spidershield-contrib in https://github.com/moeru-ai/airi/pull/1445
* fix(stage-ui): improve profile switcher popover UI by @lietblue in https://github.com/moeru-ai/airi/pull/1425
* fix(stage-layouts): align web chat tools discovery with Tamagotchi (immediate watch)) by @lulu0119 in https://github.com/moeru-ai/airi/pull/1466
* fix(stage-ui): tools not available when using remote API by @BeanDz in https://github.com/moeru-ai/airi/pull/1468
* fix(stage-ui-three): cutout bug fix by @Lilia-Chen in https://github.com/moeru-ai/airi/pull/1471
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1473
* fix(stage-ui): bind cursor floating css vars by @Gujiassh in https://github.com/moeru-ai/airi/pull/1472
* fix(stage-ui): use normalized audio spectrum values by @Gujiassh in https://github.com/moeru-ai/airi/pull/1474
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1478
* chore(docs): added Visual Studio 2026 suggestion by @jim139129 in https://github.com/moeru-ai/airi/pull/1476
* fix(stage-ui): allow custom model input when model list is empty by @howtomakeaname in https://github.com/moeru-ai/airi/pull/1437
* feat(providers): add Z.ai provider by @AdairLi2504 in https://github.com/moeru-ai/airi/pull/1409
* feat(providers): add Azure OpenAI support by @breezy89757 in https://github.com/moeru-ai/airi/pull/1057
* chore(deps): move drizzle-orm to catalog by @luoling8192 in https://github.com/moeru-ai/airi/pull/1480
* fix(docs): links to other doc pages by @areong in https://github.com/moeru-ai/airi/pull/1483
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1484
* fix: rollback electron version by @Misaka-0x447f in https://github.com/moeru-ai/airi/pull/1490
* Server v1 by @Neko-233 in https://github.com/moeru-ai/airi/pull/1376
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1493
* chore(ci): bump GitHub Actions actions by @salmanmkc in https://github.com/moeru-ai/airi/pull/1048
* fix(ui): forward default slot in InputFile to BasicInputFile by @xuan0x0 in https://github.com/moeru-ai/airi/pull/1494
* fix(stage-ui): return empty string instead of empty array in mcp_list_tools error fallback by @lietblue in https://github.com/moeru-ai/airi/pull/1497
* feat(auth): Bearer token handling and OAuth token extraction by @luoling8192 in https://github.com/moeru-ai/airi/pull/1501
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1508
* refactor: replace status check string literal with enum; add chat pin… by @Misaka-0x447f in https://github.com/moeru-ai/airi/pull/1486
* fix(stage-tamagotchi): autoUpdater should have channel selected by @jensenhuangfan in https://github.com/moeru-ai/airi/pull/1506
* feat(stage-tamagotchi): add option for chat area send key by @cheesemori in https://github.com/moeru-ai/airi/pull/851
* typo(i18n): correct xsai-transformers URL typo in Japanese locale by @you06 in https://github.com/moeru-ai/airi/pull/1513
* fix(stage-layouts): clear voice auto-send input before ingest resolves by @lulu0119 in https://github.com/moeru-ai/airi/pull/1510
* feat(ui,stage-ui,stage-pages,i18n): transcription confidence filter by @Reisenbug in https://github.com/moeru-ai/airi/pull/1148
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1520
* fix(stage-*): remove unused json format and platform checking by @LemonNekoGH in https://github.com/moeru-ai/airi/pull/1523
* fix(server-runtime): preserve explicit empty route destinations by @Gujiassh in https://github.com/moeru-ai/airi/pull/1521
* fix(pwa): show update toast when new version is available by @JasonOA888 in https://github.com/moeru-ai/airi/pull/1517
* fix(stage-ui,stage-tamagotchi): bring back i18n, improved settings data ui by @nekomeowww in https://github.com/moeru-ai/airi/pull/1525
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1528
* feat(stage-ui-live2d): exp3 expression system + auto-blink rework by @youetube in https://github.com/moeru-ai/airi/pull/1033
* fix(stage-ui): keep onboarding save button visible by @Ver-zhzh in https://github.com/moeru-ai/airi/pull/1280
* chore(tauri-*,crates): now maintaining tauri and rust packages in another repo by @nekomeowww in https://github.com/moeru-ai/airi/pull/1533
* refactor(stage-ui-three): improved outline logic by @Lilia-Chen in https://github.com/moeru-ai/airi/pull/1536
* fix(stage-pages): XSS vulnerability in provider definition by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1492
* feat(minecraft,stage-*): airi integration, isolated-vm plus misc updates by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1371
* fix(stage-ui-three/stage-web): model offset and camera position setting is now persistent by @Lilia-Chen in https://github.com/moeru-ai/airi/pull/1543
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1544
* feat(devtool-capture-stage-tamagotchi): tool for interacting the electron apps by @nekomeowww in https://github.com/moeru-ai/airi/pull/1549
* fix(stage-ui): channel-server should handle onReady as well by @nekomeowww in https://github.com/moeru-ai/airi/pull/1550
* feat: lang select now moved to top-right corner - AIRI-209 by @Misaka-0x447f in https://github.com/moeru-ai/airi/pull/1555
* feat: full rollout chat completion check by @Misaka-0x447f in https://github.com/moeru-ai/airi/pull/1557
* feat(stage-ui): add hologram promo banner by @Neko-233 in https://github.com/moeru-ai/airi/pull/1514
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1562
* feat(docs): setup and use manual by @JhIcefair in https://github.com/moeru-ai/airi/pull/1559
* fix(server-*,stage-ui): WebSocket cannot reconnect correctly, improved log by @PhoenixForrestLin in https://github.com/moeru-ai/airi/pull/1563
* feat(stage-ui): scale settings by @lulu0119 in https://github.com/moeru-ai/airi/pull/1554
* chore(ci): add label sync and PR triage workflows by @shinohara-rin in https://github.com/moeru-ai/airi/pull/1575
* feat(docs): add tamagotchi manual screenshots by @Neko-233 in https://github.com/moeru-ai/airi/pull/1574
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1576
* fix(stage-tamagotchi): harden cross-platform auto-updater flow, diagnostics, logs, and cache cleanup by @jensenhuangfan in https://github.com/moeru-ai/airi/pull/1566
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1581
* fix(stage-tamagotchi): add drag region to onboarding layout by @lulu0119 in https://github.com/moeru-ai/airi/pull/1584
* fix(stage-*): onboarding model selection footer overlap and list height by @lulu0119 in https://github.com/moeru-ai/airi/pull/1583
* feat(stage-pocket): WebSocket status indicator + shared i18n by @LemonNekoGH in https://github.com/moeru-ai/airi/pull/1586
* feat(stage-tamagotchi,stage-ui,server-sdk,server-runtime): zero-trust websocket authentication by @dasilva333 in https://github.com/moeru-ai/airi/pull/1582
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1587
* feat(stage-tamagotchi): added weather API + tool for widget calling by @NJX-njx in https://github.com/moeru-ai/airi/pull/1588
* feat(stage-ui): let AIRI see tool failures in LLM context (captureToolErrors + xsai patches) by @lulu0119 in https://github.com/moeru-ai/airi/pull/1602
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1603
* perf(vishot): compress and downscale AVIF screenshots by @Neko-233 in https://github.com/moeru-ai/airi/pull/1598
* fix(stage-ui): improve LLM KV-cache compatibility for datetime context injection by @luoling8192 in https://github.com/moeru-ai/airi/pull/1593
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1608
* fix(stage-tamagotchi): no longer being able to build electron due to nested pack by @nekomeowww in https://github.com/moeru-ai/airi/pull/1609
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1613
* chore(i18n): update translations by @github-actions[bot] in https://github.com/moeru-ai/airi/pull/1616

**Full Changelog**: https://github.com/moeru-ai/airi/compare/v0.8.5-beta.4...v0.9.0