Commit Graph
1613 Commits
Author SHA1 Message Date
RainbowBird 0642ede8d1 feat(analytics): expand PostHog coverage and forward server business facts (#2038)
## What

Closes the three structural gaps in AIRI's product analytics: the signup
surface had zero instrumentation, the payment funnel had no terminator
in PostHog, and SPA route changes emitted no pageviews. Also adds
semantic events for character cards, desktop-only features, and
data-maintenance actions.

## User paths

- User signs up / logs in / verifies email / resets password / links
OAuth / deletes account → each step now emits a PostHog event from
`apps/ui-server-auth` (previously fully uninstrumented), with
`identify()` wired on session load so anonymous funnel events merge into
the user person.
- User pays via Stripe → webhook writes `product_events` as before, and
the product-events service now forwards `payment_completed` (plus signup
and subscription lifecycle facts) to PostHog via posthog-node
`captureImmediate`, keyed by the Better Auth user id → the
`checkout_started → payment_completed` funnel closes end-to-end.
Per-request LLM/TTS volume is explicitly not forwarded.
- User navigates between routes in any surface (web / desktop / pocket /
docs) → `$pageview` + `$pageleave` fire per route change via the
posthog-js `defaults: '2025-05-24'` preset in the shared
`posthog.config.ts`.
- User creates / imports / duplicates / edits a ccv3 card, switches
stage background, runs destructive data actions (export / import / clear
chats, reset providers, wipe app data), or uses desktop differentiators
(Spotlight send, widget windows, in-app updater, MCP server management,
pairing QR) → dedicated low-cardinality events.

## Notable decisions

- Server forwarding defaults on: `POSTHOG_PROJECT_KEY` defaults to the
shared browser-safe phc_* project key; set it to an empty string to
disable. Postgres `product_events` remains the source of truth.
- Cross-surface events (`oauth_callback_failed`, account lifecycle)
share one stage vocabulary exported from stage-ui so the two emitters
cannot drift silently.
- Events captured right before full-page navigation use `sendBeacon` so
they survive the redirect (checkout, OAuth consent handoff, login
redirect).
- Removed dead wrappers (`trackSignup`, `trackFirstModelSelected`,
`trackModelChanged`) that duplicated live event streams under second
names.

## How tested

- `pnpm -F @proj-airi/server exec vitest run
src/services/domain/product-events.test.ts` — 6 passed, covering the
forwarding allowlist, the `user_signed_up → signup_completed` mapping,
non-forwarded per-request actions, and a throwing sink not failing the
webhook path nor losing the DB row.
- stage-ui suites (`use-analytics`, `use-linked-accounts`, exports
contract) — 22 passed, including new account/card/data/desktop event
assertions.
- Real transport smoke: posthog-node `captureImmediate` against
`us.i.posthog.com` with the production key resolved in 1380ms (one
`server_forwarding_smoke_test` event left in the project; filter by
event name).
- Browser-tested pageviews: `VITE_ENABLE_POSTHOG=true` dev build, two
`history.pushState` route changes each produced a `$pageview` with
`$pathname`, `navigation_type: pushState`, previous-page dwell time, and
the `surface` super property; batched POST to `us.i.posthog.com/e/`
returned 200. Note: posthog-js drops events from automated browsers
(`navigator.webdriver`) by default — the verification session bypassed
the bot filter locally; production config is untouched.
- Typecheck and lint pass for server, stage-ui, stage-pages, stage-web,
stage-tamagotchi, ui-server-auth.

Full verification record:
`apps/server/docs/ai-context/verifications/posthog-forwarding-and-pageview.md`

## Follow-ups (not in this PR)

- Bot channel usage stats (Discord / Telegram) once they route through
server-runtime counters.
- Main-process desktop events (tray menu, global shortcut fire) need
renderer relay plumbing.
- Confirm `payment_completed` arrives in PostHog after the first real
Stripe payment post-deploy.

https://claude.ai/code/session_01Q1yGavkQ1P41YhTWE4XKex
2026-07-08 15:33:39 +08:00
Neko Ayaka 3779eb6103 release: v0.11.0 2026-07-08 01:20:12 +08:00
Lilia_Chen 7c45aa86bc feat(stage-godot): rim light (#2032)
## Description

Adds the Godot Stage rim light pipeline and development observation
tooling.

- Replaces the old avatar glow-only compositor path with a staged
post-process compositor.
- Adds avatar-scoped edge light, glow, material overlay, and final
colour mapping stages.
- Implements a dev observation adapter for exporting
viewport/render-stage artefacts.
- Adds visual verification tooling and baseline docs for Godot Stage
rendering work.
- Documents the technical art workflow and rendering effect behaviour.
2026-07-07 05:21:15 +08:00
RainbowBird 63532367a9 chore: remove admin dashboard 2026-07-02 02:22:16 +08:00
RainbowBird c7de38b121 refactor(server): split capability alias admin routes 2026-07-02 01:04:29 +08:00
RainbowBird 281614d396 fix(server): harden provider catalog gating 2026-07-01 23:08:14 +08:00
RainbowBird ed8c93c77b feat(server): apply official llm alias routing policy 2026-07-01 22:34:57 +08:00
RainbowBird 14fb183723 fix(server): gate streaming tts requests 2026-07-01 22:34:57 +08:00
RainbowBird 28f93c2c5d fix(server): expose official voice preview urls 2026-07-01 22:34:56 +08:00
RainbowBird b2d7442949 feat(server): enforce official asr aliases 2026-07-01 22:34:56 +08:00
RainbowBird feec4da1fa feat(server): generate official tts voice previews 2026-07-01 22:34:56 +08:00
RainbowBird 87baf622c9 feat(server): add official provider catalog management 2026-07-01 22:34:56 +08:00
Lovehsigure_520 2da9d37add feat(analytics): add official provider ops metrics
Build on existing pricing funnel events with official provider, TTS usage, second-turn activation, and Flux balance bucket metrics.
2026-07-01 21:19:42 +08:00
RainbowBird 3edbe4eb99 feat(tests): add createMockStripeCustomer function and update tests to use it 2026-07-01 20:28:18 +08:00
RainbowBird e1a2c51573 feat(speech): integrate Voice Pack model into speech catalog and update related tests 2026-07-01 20:18:13 +08:00
RainbowBird 0daac71435 feat(analytics): add p0 operations events 2026-07-01 20:16:06 +08:00
RainbowBird 27255001bd refactor: streamline speech module by removing voice pack dependencies
- Removed voice pack related imports and functionality from speech.vue and Stage.vue.
- Simplified speech input handling by eliminating voice pack parameters in speech store.
- Updated tests to reflect changes in voice pack handling and speech input resolution.
- Adjusted Airi card store to remove voice pack binding logic, focusing on speech configuration updates.
- Enhanced voice pack list item structure for clarity and maintainability.
2026-07-01 19:23:33 +08:00
RainbowBird c2aee68513 feat: add upstreamVoiceId to voice packs and related services
- Introduced upstreamVoiceId field in voice pack schema and database.
- Updated voice pack service to handle upstreamVoiceId in CRUD operations.
- Modified API routes and tests to accommodate upstreamVoiceId.
- Enhanced UI components to include upstreamVoiceId in forms and displays.
- Adjusted speech processing logic to utilize upstreamVoiceId where applicable.
- Updated related tests to ensure proper functionality with new field.
2026-07-01 16:07:33 +08:00
RainbowBird 4f80affcd3 feat(admin-dashboard): add support for Bedrock and OpenAI-compatible LLM slices in admin router config
- Implemented `buildBedrockSlice` function to handle multi-kilobyte Bedrock bearer tokens.
- Enhanced `createAdminRouterConfigService` to classify Bedrock and OpenAI-compatible LLM upstreams by baseURL.
- Added new interfaces for `AdminRouterBedrockSlice` and `AdminRouterOpenAICompatibleSlice`.
- Updated router config form to support Bedrock and OpenAI-compatible slices.
- Created tests for Bedrock and OpenAI-compatible slice compilation and behavior.
- Modified UI components to accommodate new slice types and improve user experience.
- Ensured proper normalization of API server URLs to HTTPS when necessary.
2026-07-01 02:14:12 +08:00
RainbowBird f9f20b88ff feat(api-environment): add API environment selection component and related functionality 2026-07-01 01:08:21 +08:00
Lovehsigure_520 3d7a8300d8 feat(analytics): add product instrumentation for activation and voice flows (#2023) 2026-06-30 23:36:08 +08:00
RainbowBird de9a2bac7f feat(stage-tamagotchi): add assistant label to ChatHistory component 2026-06-29 03:38:45 +08:00
RainbowBird 8036501fb0 feat(server): add default TTS model handling and update related tests 2026-06-28 16:55:09 +08:00
Neko 1065ed565b fix(stage-tamagotchi): anchor tray resize to dominant display (#2012)
---

Co-authored-by-agent: Codex
2026-06-27 01:54:39 +08:00
Neko 22d0711dc0 fix(stage-ui,stage-tamagotchi): simplify hearing controls (#2014)
---

Co-authored-by-agent: Codex
2026-06-27 01:33:43 +08:00
Neko Ayaka 6372491e3b feat(stage-*,plugin-*): retriable tool call 2026-06-26 14:52:20 +08:00
jensenhuangfan aa2ebf13d1 fix(stage-tamagotchi): updater path and exit (#1867) 2026-06-22 15:08:23 +08:00
Neko Ayaka 92178b9598 fix(stage-tamagotchi): incorrect unicode used 2026-06-20 00:43:41 +08:00
Neko 8930211d1b feat(stage-tamagotchi): widget with pin (#1993) 2026-06-19 02:03:31 +08:00
Nekoandautofix-ci[bot] 47bfe02a87 feat(better-ws): added new package (#1989)
---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by-agent: Codex
2026-06-18 15:11:35 +08:00
Lovehsigure_520 16d50433b9 fix(server): auth UI callback trust (#1976) 2026-06-14 17:34:43 +08:00
RainbowBird c3f2beba47 feat(admin-ui): enhance LLM router page to support Streaming TTS and ASR providers 2026-06-14 04:45:36 +08:00
RainbowBird 3215687e98 feat(server): add Aliyun NLS ASR gateway and official transcription provider (#1970) 2026-06-14 04:22:07 +08:00
Neko Ayaka 0f975a4f73 refactor(stage-tamagotchi,plugin-*): unified to extension id 2026-06-12 19:27:23 +08:00
Neko Ayaka eb98845b11 refactor(stage-tamagotchi): better formatting and naming 2026-06-12 19:09:30 +08:00
Neko AyakaandGarfield Lee 1ae161c273 chore(stage-tamagotchi): cleanup unused code
Co-authored-by: Garfield Lee <3471836+Garfield550@users.noreply.github.com>
Co-authored-by-agent: Codex
2026-06-12 19:08:48 +08:00
Neko Ayaka 2eb05425c5 refactor(stage-tamagotchi): reload tools when extension reloads 2026-06-12 16:11:59 +08:00
Doji 8b98a2c138 feat(stage-tamagotchi):add spotlight (#1959) 2026-06-12 02:53:35 +08:00
Nekoandautofix-ci[bot] 668440a732 refactor(extension-*,stage-tamagotchi,stage-ui,server-*): rename to extension, improve DX (#1892)
---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by-agent: Codex
2026-06-12 02:03:42 +08:00
RainbowBird 8518c65aa4 feat(auth): enhance trusted admin redirect handling and add local patterns 2026-06-11 22:26:39 +08:00
RainbowBird 2786393aa5 feat(admin-ui): enhance dark mode support across UI components
- Updated various components in the llm-router to include dark mode styles, ensuring better visibility and aesthetics in dark theme.
- Added tests for API URL helpers to validate sign-in URL construction and redirection logic.
- Improved the sign-in flow to handle trusted redirects for standalone admin origins.
- Enhanced CSS styles for dark mode, including adjustments to backgrounds, borders, and text colors for better contrast and readability.
- Refactored input components to maintain consistent styling in both light and dark modes.
2026-06-11 21:59:08 +08:00
RainbowBird 8e572ad93c feat(server): add stepfun tts provider
Signed-off-by: RainbowBird <git@luoling.moe>

Commit-Message-Assisted-by: Claude (via Claude Code)
2026-06-11 00:23:04 +08:00
RainbowBird 5bf6deab89 feat(admin-ui): load and edit router config from forms
Add a form-first LLM/TTS router config editor and a redacted admin config snapshot so operators can inspect configKV state before applying changes.

Preserve existing encrypted key entries when loaded slices are submitted without new plaintext keys.

Signed-off-by: RainbowBird <git@luoling.moe>
Commit-Message-Assisted-by: Claude (via Claude Code)
2026-06-11 00:14:34 +08:00
RainbowBird 16f9aaa4e3 feat(auth): enhance OAuth linking flow with account selection and error handling
- Added `prompt: 'select_account'` for Google and GitHub providers to force account selection during OAuth linking.
- Introduced localized error messages for account linking issues in multiple languages.
- Implemented a function to resolve OAuth error codes to specific i18n keys for better user feedback.
- Updated account settings page to display relevant error messages based on OAuth linking status.
2026-06-10 16:42:13 +08:00
RainbowBird a331d3a42a feat(auth): update AUTH_UI_URL to point to accounts.airi.build 2026-06-09 18:01:34 +08:00
RainbowBird 7fa7f8a072 feat(admin-ui): update admin UI URLs to remove trailing slashes and adjust redirects 2026-06-09 17:46:58 +08:00
RainbowBird 2ac4e90d56 feat(auth): add account linking support for different email providers 2026-06-09 17:46:51 +08:00
RainbowBird 11b820a77f feat(admin-ui): implement standalone admin UI with Cloudflare Pages deployment 2026-06-09 17:09:06 +08:00
RainbowBird 57ba232432 feat(auth): migrate auth ui to unique domain 2026-06-09 00:15:34 +08:00
Lulu ff7c18694a chore(server): remove unused CLIENT_URL from env template (#1884) 2026-06-08 13:52:19 +08:00