Commit graph

593 commits

Author SHA1 Message Date
RainbowBird
3984677b01
feat(analytics): integrate PostHog for server-side event tracking
Some checks failed
CI / Lint (push) Waiting to run
CI / Build Test (stage-tamagotchi) (push) Waiting to run
CI / Build Test (stage-tamagotchi-godot) (push) Waiting to run
CI / Build Test (stage-web) (push) Waiting to run
CI / Build Test (ui-loading-screens) (push) Waiting to run
CI / Build Test (ui-transitions) (push) Waiting to run
CI / Type Check (push) Waiting to run
CI / Check Provenance (push) Waiting to run
Cloudflare Workers / Deploy - stage-web (push) Waiting to run
Cloudflare Workers (server-dev) / Deploy - stage-web (server-dev) (push) Waiting to run
Update Nix pnpmDeps Hash / update (push) Has been cancelled
- Added a new PostHog client for capturing server-side business events such as Stripe webhooks and subscription state changes.
- Implemented various tracking functions for pricing funnel steps, character creation, and chat session starts.
- Enhanced the flux meter tests to handle partial charges and report unbilled flux correctly.
- Updated the CharacterDialog and Flux settings pages to track user interactions with analytics events.
- Introduced a mechanism to identify users on PostHog based on authentication state to ensure accurate funnel tracking.
- Added necessary dependencies for PostHog integration in the project.
2026-05-15 16:20:47 +08:00
Doji
2c432fc1c8
refactor(stage-web,stage-ui): replace warpdrive plugin with unplugin-basemove (#1818) 2026-05-13 12:03:30 +08:00
Neko Ayaka
37433b98a2
refactor(stage-ui): new structure for models, services, stores 2026-05-08 17:03:46 +08:00
DrHuangMHT
85627d34ad
feat(stage-*): allow setting character offset in landscape (#1696) 2026-05-06 17:04:18 +08:00
RainbowBird
172e4ce59c
feat(auth): email login & profile (#1745)
Co-authored-by: Liet Blue <127093491+lietblue@users.noreply.github.com>
2026-04-28 00:07:38 +08:00
Neko
06fd6d9223
chore(stage-web): added Web Haptics devtools (#1736)
Some checks are pending
CI / Lint (push) Waiting to run
CI / Build Test (stage-tamagotchi) (push) Waiting to run
CI / Build Test (stage-tamagotchi-godot) (push) Waiting to run
CI / Build Test (stage-web) (push) Waiting to run
CI / Build Test (ui-loading-screens) (push) Waiting to run
CI / Build Test (ui-transitions) (push) Waiting to run
CI / Type Check (push) Waiting to run
CI / Check Provenance (push) Waiting to run
Cloudflare Workers / Deploy - stage-web (push) Waiting to run
Update Nix pnpmDeps Hash / update (push) Waiting to run
2026-04-27 01:57:08 +08:00
RainbowBird
f292ab9b99
feat(ui): add ErrorBoundary component for error handling in Vue 2026-04-25 17:23:43 +08:00
DrHuangMHT
fbd779563d
fix(stage-web): remove duplicate page for route /devtools (#1677)
## Description

<!-- Please insert your description here and especially provide info
about the "what" this PR is solving -->

`vue-router` is producing a warning about duplicate route `/devtools` on
`stage-web`. Removing `stage-web/src/pages/devtools/index.vue` resolves
the warning.
There is a duplicate route introduced in
`stage-pages/src/pages/devtools/index.vue`. The file in `stage-web` is
removed in favor of the one in `stage-pages`.
related commit
[`44ec5e4`](44ec5e416c)

## Linked Issues

<!-- Optional, if you have any -->

## Additional Context

<!-- e.g. is there anything you'd like reviewers to focus on? -->

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Neko <neko@ayaka.moe>
2026-04-23 22:22:31 +08:00
DrHuangMHT
7e4486c068
chore(ci): fix typecheck on navigator.gpu (#1700)
Some checks failed
CI / Lint (push) Waiting to run
CI / Build Test (stage-tamagotchi) (push) Waiting to run
CI / Build Test (stage-web) (push) Waiting to run
CI / Build Test (ui-loading-screens) (push) Waiting to run
CI / Build Test (ui-transitions) (push) Waiting to run
CI / Type Check (push) Waiting to run
CI / Check Provenance (push) Waiting to run
Cloudflare Workers / Deploy - stage-web (push) Waiting to run
Release Docker / OCI for Assets / Release Assets (ui-server-auth) (push) Waiting to run
Update Nix pnpmDeps Hash / update (push) Waiting to run
Update Nix assets Hash / update (push) Has been cancelled
2026-04-21 20:27:17 +08:00
Neko Ayaka
2ab21879dd
chore(deps): bump dependencies 2026-04-18 19:18:17 +08:00
DrHuangMHT
9d5c9e9332
chore(deps): remove deprecated unplugin-vue-router (#1664) 2026-04-15 15:02:10 +08:00
Neko Ayaka
f286464e03
chore(deps): bump dependencies 2026-04-15 14:44:59 +08:00
Neko Ayaka
6d68cfbd92
refactor(stage-web,ui-server-auth): better ui of auth 2026-04-15 04:32:19 +08:00
NJX
147d077aa7
feat(inference): unify and optimize WebGPU inference pipeline (#1622)
## Problem

The WebGPU inference pipeline had several structural issues:

1. **No unified protocol** — Kokoro TTS, Whisper ASR, and Background
Removal workers each used their own ad-hoc message formats. Adding a new
model meant reinventing worker communication from scratch.
2. **Infrastructure existed but was disconnected** —
`GPUResourceCoordinator`, `LoadQueue`, `InferenceWorkerManager`, and
`protocol.ts` were all implemented but had zero consumers. The adapters
duplicated the same lifecycle/timeout/mutex patterns independently.
3. **Performance gaps** — Kokoro only offered fp32 on WebGPU (no fp16),
Whisper warm-up compiled shaders for 187.5s of dummy audio, audio
transfer went through unnecessary WAV blob encode/decode, and
`listVoices` reloaded the model every time.
4. **Silent failures** — Whisper worker's `generate()` had no try-catch;
errors were swallowed and the main thread waited until timeout.
5. **No graceful degradation** — Whisper and Background Removal workers
hardcoded `device: 'webgpu'` with no WASM fallback.
6. **No observability** — Only Kokoro had performance tracing. No
adapter reported status to `useInferenceStatus`. No cache management UI
existed.
7. **Dead code accumulation** — Old `KokoroWorkerManager` (232 lines),
legacy Whisper message types, and scattered duplicate constants.

## Changes

### Phase 0 — Critical Performance & Bugs
- Add `fp16-webgpu` dtype for Kokoro TTS (~2x inference speed on
supported GPUs)
- Fix Whisper warm-up tensor from `[1, 128, 3000]` → `[1, 128, 1]`
(minimal shader compilation)
- Fix Whisper worker silent error bug (add try-catch to `generate()` and
`load()`)

### Phase 1 — Data Transfer & Caching
- Switch Kokoro audio to Float32Array transferable (skip WAV blob encode
in worker, lightweight WAV encode on main thread)
- Cache `listVoices` results (skip redundant model reload when adapter
state is `ready`)
- Normalize progress reporting to 0-100 across all adapters,
differentiate `warmup` phase

### Phase 2 — Protocol Unification & Infrastructure
- Migrate all 3 workers + 3 adapters to unified `protocol.ts` message
types (`load-model`, `run-inference`, `model-ready`, `inference-result`,
`progress`, `error`)
- Wire `GPUResourceCoordinator` into all adapters (VRAM allocation
tracking, LRU ordering, memory pressure events)
- Wire `LoadQueue` into all adapters (priority-based sequential model
loading: TTS=10 > ASR=5 > BG_REMOVAL=1)
- Add `coordinator.ts` global singleton for GPU coordinator + load queue
- Add WebGPU detection + WASM fallback in Whisper and Background Removal
workers

### Phase 3 — Error Recovery & Observability
- Add restart logic with exponential backoff to Whisper adapter
(matching Kokoro's existing pattern)
- Integrate `classifyError()` (OOM / DEVICE_LOST / TIMEOUT
classification) in Whisper adapter
- Extend `defaultPerfTracer` to Whisper `transcribe()` and Background
Removal `processImage()`
- Wire `useInferenceStatus` into all 3 adapters (downloading → ready →
terminated lifecycle)

### Phase 4 — Tests
- Add unit tests for `AsyncMutex` (4 tests), `LoadQueue` (4 tests),
`GPUResourceCoordinator` (7 tests) — all 15 passing

### Phase 5 — Cleanup & Features
- Delete old `KokoroWorkerManager` (232 lines, zero consumers)
- Delete orphaned `libs/workers/types.ts` (old Whisper message types)
- Clean up `workers/kokoro/types.ts` (remove legacy message types, keep
domain types)
- Create centralized `constants.ts` (MODEL_IDS, MODEL_NAMES, TIMEOUTS,
MAX_RESTARTS)
- Remove hardcoded WebGPU check from background-removal devtools pages
(worker auto-detects)
- Add `useModelPreload` composable for generic idle-time preloading
- Add `useInferencePreload` composable that reads provider config and
preloads configured local models
- Wire preloading into both `stage-web` and `stage-tamagotchi` App.vue
(Kokoro TTS preloads 3s after init)
- Add `ModelCacheManager.vue` settings component (cache size display,
per-model status, clear cache)
- Document GPU Device isolation architecture in protocol.ts

## After This PR

- All inference workers speak the same protocol → adding a new model
adapter is straightforward
- GPU memory is tracked across all models with automatic pressure
warnings at 80%/95% of VRAM budget
- Models load sequentially via priority queue → no bandwidth/VRAM
contention
- Workers auto-detect WebGPU and fall back to WASM → works on browsers
without WebGPU
- Kokoro TTS preloads during idle time → "instant" first use for
configured users
- All adapters auto-restart on worker crashes (max 3 attempts,
exponential backoff)
- 15 unit tests cover core infrastructure (mutex, queue, coordinator)
- Zero dead code remains in the inference pipeline

## Test Plan

- [x] `pnpm exec vitest run packages/stage-ui/src/libs/inference/` — 15
tests pass
- [x] `pnpm -F @proj-airi/stage-ui exec tsc --noEmit` — no TypeScript
errors
- [x] `pnpm lint:fix` — no lint errors in changed files
- [ ] Manual: verify Kokoro TTS works with fp16-webgpu on a supported
browser
- [ ] Manual: verify Whisper ASR loads and transcribes correctly
- [ ] Manual: verify Background Removal works in devtools page
- [ ] Manual: verify preloading triggers in console (`[Preload] Loading
kokoro-...`)

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-13 23:19:27 +08:00
Neko Ayaka
95eac8e41c
chore(deps): bump dependencies 2026-04-11 04:00:49 +08:00
Neko Ayaka
abc0cb0bc7
refactor(ui-server-auth,server): use better design of signin page 2026-04-10 16:25:11 +08:00
Neko Ayaka
90294ce15c
refactor(stage-*): use new InputFileCard 2026-04-10 03:40:10 +08:00
Lulu
286cc33d0e
feat(stage-ui): let AIRI see tool failures in LLM context (captureToolErrors + xsai patches) (#1602)
---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor
Co-authored-by-agent: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-08 01:29:17 +08:00
Neko Ayaka
ffb7c2e05d
refactor(stage-web,ui-server-auth): rollback sign in design 2026-04-07 18:18:55 +08:00
Neko Ayaka
fe139f31cd
chore(stage-*): configured https, now dev:web:https or pnpm -F @proj-airi/stage-web dev:https works 2026-04-07 01:39:49 +08:00
LemonNeko
883ec945d2
feat(stage-pocket): WebSocket status indicator + shared i18n (#1586) 2026-04-06 19:54:21 +08:00
Neko Ayaka
9baa81ec30
fix(stage-*): missing install of embla-carousel-vue 2026-04-03 15:49:37 +08:00
Neko Ayaka
248e28412a
wip(ui-server-auth): basic ui, not yet finalized 2026-04-03 15:43:28 +08:00
Lovehsigure_520
f9ebe6522b
feat(stage-ui): add hologram promo banner (#1514)
---------

Co-authored-by: Neko Ayaka <neko@ayaka.moe>
2026-04-03 07:22:34 +08:00
Neko Ayaka
3b76bab2fc
feat(stage-*,workspace): added Nunito for default English font, ChillRoundM for CJK font
Close #1317, #1393
2026-04-02 18:31:53 +08:00
RainbowBird
f1fe161bc0
feat(auth): OIDC (#1531) 2026-04-02 04:24:04 +08:00
Rin
fdeb9561bc
feat(minecraft,stage-*): airi integration, isolated-vm plus misc updates (#1371)
* feat(minecraft): contextflow integration

Add AiriBridge to cognitive engine to enable communication with Airi system. Expose `notifyAiri` and `updateAiriContext` functions in JS planner runtime globals for sending notifications and context updates from agent code.

* refactor(minecraft): remove redundant destinations field from airi-bridge

Remove hardcoded `destinations: ['minecraft']` from spark:command, spark:notify, and context:update events as the destination is already implied by the bridge context.

* feat(minecraft): complete AIRI context flow integration

Wire up bidirectional AIRI ↔ Minecraft communication via dedicated
signal channels instead of reusing signal:chat_message.

- Add airi_command and airi_context to PerceptionSignalType
- Route spark:command intents: action/plan/proposal/reroute emit
  signal:airi_command; context intent emits signal:airi_context
- Add inbound context:update listener so AIRI can push context to
  the Minecraft agent
- airi_context signals are injected into conversation history directly
  without triggering a full cognitive cycle
- airi_command events reset the no-action budget (like player chat)
- enterContext/exitContext auto-emit context:update back to AIRI for
  task lifecycle visibility
- Add sendEmit() helper for queued/working/done progress reporting

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(minecraft): report bot startup state to AIRI

Send initial context update to AIRI when brain comes online, including
bot username, server address, position, health, game mode, and list of
other online players. Tagged with 'startup' and bot username for
filtering.

* feat(minecraft): manage bot config through airi

* feat(stage-ui): add minecraft service shell

* fix(stage-ui): use applied minecraft config for chat context

* fix(minecraft): fall back on invalid env port

* fix(minecraft): support quoted env values

* fix(minecraft): ignore empty env overrides

* fix(stage-ui): keep minecraft draft during apply

* fix(stage-ui): simplify minecraft heartbeat label

* feat(stage-ui): simplify minecraft settings shell

* fix(minecraft): use registry heartbeat for stage liveness

* chore(minecraft): remove annoying detector decision logging

* fix(minecraft): limit context flow to bot pushes

* fix(minecraft): use workspace server sdk

* fix(stage-ui): replay registry snapshots for late listeners

* chore(minecraft): add todo for explicit stage deregistration

* feat: improve context flow observability

* fix(stage-ui): remove redundant header and callout from settings and context flow pages

* feat(stage-ui): enhance context flow prompt projection UI with readiness indicator

* docs(stage-ui): clarify context flow prompt projection terminology

* fix(stage-ui): add test for clone-safe context snapshots with nested fields

* todo

* fix(minecraft): avoid blocking startup on airi connection

* Remove LLM timeouts from the Minecraft brain

* Remove context boundary system from Minecraft brain

* feat(minecraft): use isolated-vm for JS planner sandbox

* refactor(minecraft): harden planner sandbox defaults

* Remove LLM attempt timeout guard

* [autofix.ci] apply automated fixes

* Fix server runtime shutdown signal handling

* Remove misleading Minecraft integration toggle

* contextflow destination to stage-*

* chore(deps): updated

* Add settings layout route for web devtools

* chore: default to expand context panels

* fix(server-*): should export more types, and for module:announced should ignore self

* refactor(minecraft): better context orchestration, handle module announce, context sync, and more

* feat(stage-ui): not spark command ready

* [autofix.ci] apply automated fixes

* clean up

* refactor: use :class arrays per AGENTS.md styling guidelines

* cleanup bloated tests

* rm more tests

* use errorMessageFrom

* hardcode to reduce bloat

* update setup instructions

* timeout for brain

* remove more bloat

* fix

---------

Co-authored-by-agent: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by-agent: Codex
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Neko Ayaka <neko@ayaka.moe>
2026-04-01 23:33:59 +08:00
Lilia_Chen
d9ba2ab40e
refactor(stage-ui-three): improved outline logic (#1536)
* refactor(stage-ui-three): improved outline logic

* [autofix.ci] apply automated fixes

* fix(stage-ui-three): restored runtime hooks being exposed

* some type fix

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-01 07:48:00 +08:00
Lilia-Chen
718e91a833 refactor(stage-ui-three): add hooks in VRM loading workflow 2026-03-31 00:24:13 +01:00
Neko Ayaka
b6c5882366
chore(stage-ui): pwa toaster prompt 2026-03-30 23:18:29 +08:00
Jason
7164318002
fix(pwa): show update toast when new version is available (#1517)
---------

Co-authored-by: JasonOA888 <JasonOA888@users.noreply.github.com>
Assume-co-authored-by-agent: Unknown <unknown@example.com>
2026-03-30 22:54:54 +08:00
Neko Ayaka
5f07b68876
fix(stage-*): should not wait until context bridge 2026-03-30 20:18:55 +08:00
LemonNeko
38f0306100
fix(stage-*): remove unused json format and platform checking (#1523)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-03-30 17:03:00 +08:00
Neko Ayaka
306f8e66f0
fix(stage-ui): text change, i18n change 2026-03-29 02:38:26 +08:00
RainbowBird
1b3ade3f41 chore(stage-*): login component icon alignment 2026-03-28 02:25:44 +08:00
RainbowBird
a63bfa0da0 refactor(stage-*): useBreakpoints 2026-03-28 02:25:44 +08:00
RainbowBird
dcfa00ca64 docs(stage-web): update term of services 2026-03-28 02:25:44 +08:00
RainbowBird
b0576d3b89
chore(deps): move eventa to catalog 2026-03-26 21:45:01 +08:00
RainbowBird
40bd86f668
chore(deps): move drizzle-orm to catalog (#1480) 2026-03-26 20:52:40 +08:00
Neko Ayaka
46147b0f8b
fix(stage-*): incorrect use of useAudioDevices hook 2026-03-26 19:05:54 +08:00
Neko Ayaka
25b5de179d
Revert "chore(deps): replace with unplugin-vue"
This reverts commit 3339daa746.

As unplugin-vue-i18n:

```
[unplugin-vue-i18n]  `@vitejs/plugin-vue` plugin is not found or invalid version. Please install `@vitejs/plugin-vue` v4.3.4 or later version.
```

3da4987500/packages/unplugin-vue-i18n/src/core/resource.ts (L167-L168)

it seems they are depending on vite:vue while https://github.com/unplugin/unplugin-vue is different on plugin resolving, yet unplugin-vue seems
lost the track of new version.
2026-03-26 18:10:30 +08:00
Neko Ayaka
3339daa746
chore(deps): replace with unplugin-vue 2026-03-26 17:22:49 +08:00
Rin
f85a809d7c
refactor(stage-*): analytics and telemetry, including consent (#1414)
---------

Co-authored-by-agent: Codex <267193182+codex@users.noreply.github.com>
Co-authored-by-agent: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: RainbowBird <rbxin2003@outlook.com>
Co-authored-by: Neko <neko@ayaka.moe>
2026-03-24 13:01:39 +08:00
Neko Ayaka
7313d567d6
chore(deps): bump more dependencies 2026-03-24 09:20:19 +08:00
Neko Ayaka
e3f5671f4d
chore(deps): bump vite dependencies to solve the build issue 2026-03-24 09:16:25 +08:00
Neko Ayaka
1bd3472246
fix: many type errors 2026-03-23 14:17:06 +08:00
Neko Ayaka
ce60323d8a
style: lint 2026-03-23 02:16:10 +08:00
Neko Ayaka
ac1de680d0
chore(deps): bump dependencies 2026-03-23 02:15:40 +08:00
Neko Ayaka
7fe410b969 chore(stage-tamagotchi,stage-pages,stage-layouts): vision devtools improved 2026-03-20 02:27:21 +08:00
Neko Ayaka
2dd2a149b8 feat(stage-tamagotchi): added fundamental vision 2026-03-20 02:27:21 +08:00