v0.9.0

neondatabase/neonv0.9.0Apr 10, 2026by nekomeowww

AI Summary

A major update featuring MCP implementation, 3D rendering improvements, and community contributions.

Key Highlights

  • Basic implementation of Model Context Protocol (MCP).
  • Anti-aliasing support added for 3D models.
  • Improved VRM expression rendering and emotion mappings.
  • Discord VoiceManager memory leak fixes.

New Features

  • MCP implementation
  • Anti-aliasing for 3D models
  • Ollama thinking mode config
  • VRM expression improvements
  • Discord VoiceManager fixes

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