m1/org/openalice-app
openalice-app
“> Central hub and SSO launcher for the OpenAlice ecosystem. One sign-in, every product.”
Features
78
Status
·unknown
Last activity
5h ago
Branch
mvp
app/account
37 features- app.account.agentsrc/app/account/agent/edit/page.tsx:227Hub page for unified agent config — per-product enable + system prompt, shared identity (avatar + VRM), shared voice (TTS + STT). Read by every OpenAlice product at runtime.page:/account/agentsince 0.5.0
- app.account.agent.redirectsrc/app/account/agent/page.tsx:17Legacy /account/agent path redirects to the new /account/agents list. The editor moved to /account/agent/edit.page:/account/agent → /account/agentssince 0.11.0
- app.account.agents.listsrc/app/account/agents/page.tsx:17Hub agents list — one row per agent under this tenant, link to per-agent settings.page:/account/agentssince 0.11.0
- app.account.agents.settingssrc/app/account/agents/[id]/settings/page.tsx:25Per-agent settings page — Identity, Soundboard toggle, Voice editor (voice_id + stability + similarity + speed + Test), Avatar editor (VRM picker + display_name + Use default). Voice + Avatar persist via persona-server's PATCH /v1/me/agents/:id/overrides.page:/account/agents/[id]/settingssince 0.11.1
- app.account.ai-moderationsrc/app/account/ai-moderation/page.tsx:43Hub page for the layer-2 (AI) moderation engine — master toggle, confidence-threshold + budget tuning, undo / training-feedback panels. Companion of /account/youtube (layer-1 static rules).page:/account/ai-moderationsince 0.13.0
- app.account.chat-sourcessrc/app/account/chat-sources/page.tsx:96Hub page for managing per-platform live chat connections (YouTube / Twitch / Kick / TikTok) the chat-bridge service consumes. CRUD + masked preview + reveal-after-password.page:/account/chat-sourcessince 0.5.0
- app.account.devicessrc/app/account/devices/page.tsx:26Hub page for managing paired openalice-stream-host installs. Generate pairing codes, list claimed devices, revoke. 90-day device JWTs scoped to live + persona only.page:/account/devicessince 0.6.0
- app.account.loungesrc/app/account/lounge/page.tsx:19Hub Lounge rooms list + per-room Mods entry. Lists rooms owned by the tenant, deep-links to persona-web for live experience, and to Mods tab for Phase 4 moderation primitives.page:/account/loungesince 0.11.0
- app.account.lounge.auditsrc/app/account/lounge/[id]/audit/page.tsx:19Per-room unified moderation audit log — bans/mutes/deletes/reports/mods/settings; mod-only.page:/account/lounge/[id]/auditsince 0.13.0
- app.account.lounge.modssrc/app/account/lounge/[id]/mods/page.tsx:20Per-room moderation panel — Phase 4 bans/mutes/mods/settings, owner-only grant picker.page:/account/lounge/[id]/modssince 0.11.0
- app.account.lounge.reportssrc/app/account/lounge/[id]/reports/page.tsx:24Per-room report queue — list open user reports, resolve via dismiss/delete/mute/ban actions; live WS subscription with REST fallback; mod-only.page:/account/lounge/[id]/reportssince 0.12.0
- app.account.radiosrc/app/account/radio/page.tsx:11Hub Radio page — lists shared + private radio channels, shows what's playing now, lets the streamer create a private channel and set any channel as the agent's BGM source.page:/account/radiosince 0.11.0
- app.account.redemption-triggerssrc/app/account/triggers/page.tsx:30Hub page for binding viewer redemptions (Twitch channel-points / YouTube SuperChat / Kick / TikTok) to live actions (play_sound / scene_change / gesture / tts_shout / expression). The Neuro-sama-tier audience-engagement loop.page:/account/triggerssince 0.11.0
- app.account.securitysrc/app/account/security/page.tsx:23TOTP setup + disable surface for the authenticated user. Renders an otpauth QR + 6-digit verify input + password-gated disable form.page:/account/securitysince 0.5.0
- app.account.sessionssrc/app/account/sessions/page.tsx:16Hub page listing the user's active refresh-token sessions with revoke buttons. Powered by /auth/sessions + /auth/sessions/:id.page:/account/sessionssince 0.5.0
- app.account.soundboardsrc/app/account/sounds/page.tsx:29Hub Soundboard page — upload, tag, bind, test-fire SFX clips for the agent's `play_sound` tool. Powers the Neuro-sama-style soundboard.page:/account/soundssince 0.10.0
- app.account.streamssrc/app/account/streams/page.tsx:79Hub page for managing per-platform stream destinations the broadcaster service pushes to. CRUD + masked-list + reveal-after-password.page:/account/streamssince 0.5.0
- app.account.streams-chat-modsrc/app/account/streams/[id]/chat-mod/page.tsx:32Mod-only live view of YouTube chat for one broadcast. Per-message delete + timeout (10m/1h/24h) + ban actions. Polls chat-bridge's ring buffer via persona. Show-only-mod-flagged filter + pin-message toggle. Empty state when the streamer isn't live.page:/account/streams/[id]/chat-modsince 0.12.0
- app.account.streams.chat-pagesrc/app/account/streams/chat/page.tsx:27Studio Chat Tab page mounting StudioChatTab. Polls /live/status to discover the active broadcast and renders a "go live first" idle state otherwise.page:/account/streams/chatsince 0.13.0
- app.account.streams.engagement-pickersrc/app/account/streams/_components/EngagementPresetPicker.tsx:40Hub Studio picker that surfaces the @openalicelabs/presets engagement catalogue (qa-host / battle-chat / cozy-hangout / coding-stream / lecture-moderator / talk-show-panel). Writes the chosen id into agent_config.products.live.preset_id; the next /live/start defaults to it.component:EngagementPresetPickersince 0.11.0
- app.account.streams.engagement-preset-fetchsrc/lib/api/broadcasts.ts:197Read the streamer's saved engagement-preset id (qa-host / battle-chat / cozy-hangout / coding-stream / lecture-moderator / talk-show-panel) from agent_config.products.live.preset_id. Persists across sessions; the next /live/start picks it up automatically.since 0.11.0
- app.account.streams.engagement-preset-savesrc/lib/api/broadcasts.ts:222Persist the streamer's preferred engagement preset (qa-host / etc) into agent_config.products.live.preset_id via the SDK's putAgentConfig. Forward-compat unknown-keys ride-through means the field rides on top of the typed ProductAgentConfig shape without a backend migration.since 0.11.0
- app.account.streams.engagement-presetssrc/lib/engagementPresets.ts:23Hub-side typed mirror of the @openalicelabs/presets engagement catalogue (qa-host / battle-chat / cozy-hangout / coding-stream / lecture-moderator / talk-show-panel). Drives the Studio preset picker; the streamer's selected id rides on agent_config.products.live.preset_id and is forwarded to live-control's /live/start request.component:EngagementPresetPickersince 0.11.0
- app.account.streams.host-healthsrc/app/account/streams/_components/HostHealthCard.tsx:32Per-broadcast Host Health card on /account/streams. Polls /api/streamhost/heartbeat every 15s and renders a RSS / disk / ffmpeg / RTMP / interruptions / last-frame summary plus a Reset host button.component:HostHealthCardsince 0.13.1
- app.account.streams.poll-managersrc/app/account/streams/_components/PollManager.tsx:31Hub poll management surface — Create modal, active poll panel with countdown + Close-early, history list. Mounts under /account/streams when a broadcast is live.component:PollManagersince 0.12.0
- app.account.streams.scene-previewsrc/app/account/streams/_components/ScenePreviewButtons.tsx:55Two buttons in the Hub's stream-destinations page that open the live renderer scene URL (with agents) and a no-agent demo room for previewing without going on-air.component:ScenePreviewButtonssince 0.6.0
- app.account.streams.theme-pickersrc/app/account/streams/_components/ThemePicker.tsx:69Studio-side picker for the per-stream visual theme. 7-preset gallery + custom-override editor (colors / fonts / texture / corners / shadow / motion) + live iframe preview. Persists to agent_config.products.live.branding.theme — the same JSONB the live page reads.component:ThemePickersince 0.6.0
- app.account.streams.theme-picker.contractsrc/lib/streamThemes.ts:21Hub-side mirror of openalice-live's StreamTheme contract — types + presets duplicated so the Studio theme picker can render the catalogue and persist `branding.theme` without pulling in the entire live-renderer package.since 0.6.0
- app.account.streams.theme-picker.sfxsrc/app/account/streams/_components/SfxPickerSection.tsx:25Hub-side picker section for the per-stream sound-effect engine. Master toggle + volume + 5-preset gallery (silent / subtle-warm / arcade / sci-fi / nature) + per-event URL & volume overrides. Persists into branding.theme.sfx — the same JSONB the live page's SfxPlayer reads.component:SfxPickerSectionsince 0.9.0
- app.account.streams.theme-quick-swapsrc/app/account/streams/_components/ThemeQuickSwap.tsx:72Mid-stream theme flip UI — compact preset chips that fire a transient `branding.theme` payload onto the live-control bus so the streamer can change the look mid-broadcast without editing the persistent agent_config. Shows a banner when the live theme differs from the saved one.component:ThemeQuickSwapsince 0.6.0
- app.account.streams.theme-savesrc/lib/api/broadcasts.ts:131Persist the per-stream theme into agent_config.products.live.branding.theme via the SDK's putAgentConfig — preserves every other live-product field on the same object.since 0.6.0
- app.account.youtubesrc/app/account/youtube/page.tsx:53Hub page for connecting a YouTube channel (OAuth youtube.readonly + youtube.force-ssl), inspecting granted scopes, and toggling per-tenant mod policies. Companion of /account/streams/[id]/chat-mod. Drives the YT Tier 1 wave Hub UI surface.page:/account/youtubesince 0.12.0
- app.account.youtube.audit-feedsrc/app/account/youtube/page.tsx:773Hub card surfacing the persona oauth_audit_log feed for the calling tenant on /account/youtube. Renders op + status + ts + truncated IP. Powered by GET /v1/me/youtube/audit.component:AuditFeedCardsince 0.13.0
- app.account.youtube.auto-modsrc/app/account/youtube/auto-mod/page.tsx:50Hub page for the static auto-moderation rule set + shared mod-action audit log. Companion of /account/youtube + /account/ai-moderation.page:/account/youtube/auto-modsince 0.13.0
- app.account.youtube.helperssrc/app/account/youtube/helpers.ts:8Time / IP formatters used by the YouTube settings page (expires-in countdown, "last refreshed" indicator, audit-feed IP truncator).function:formatExpiresInSecondsfunction:secondsUntilfunction:truncateIpsince 0.13.0
- app.studio.chat-tabsrc/app/account/streams/_components/StudioChatTab.tsx:98Studio Hub chat tab — subscribes to /auth/ws for cross-platform chat (Twitch/YouTube/Kick/TikTok) and writes back via live-control /live/chat-out so streamers monitor + reply without leaving the Hub.component:StudioChatTabpage:/account/streams/chatsince 0.13.0
- app.studio.chat.sendsrc/lib/api/chat.ts:167Hub-side wrapper around live-control `/live/chat-out`. POSTs a JWT-authed chat reply to the per-broadcast chat-bridge fan-out so the streamer can reply to Twitch/YouTube/Kick chat from inside the Studio Chat tab.since 0.13.0
app/api
7 features- app.api.internal.streamhost.heartbeatsrc/app/api/internal/streamhost/heartbeat/route.ts:15Internal-secret-gated POST receiver for the openalice-stream-host daemon's 30s heartbeat. Stashes the latest payload per (user_id, host_id) so /account/streams can render a Host Health card.route:POST /api/internal/streamhost/heartbeatroute:GET /api/internal/streamhost/heartbeatsince 0.13.1
- app.api.persona-bffsrc/app/api/persona/[...path]/route.ts:40Catch-all reverse proxy from openalice-app to internal persona-server. Forwards Authorization + streams multipart bodies; passthrough for status + headers. Same-origin to the Hub so CORS is moot.route:GET /api/persona/*route:POST /api/persona/*route:PATCH /api/persona/*route:DELETE /api/persona/*route:PUT /api/persona/*since 0.7.0
- app.api.radio-bffsrc/app/api/radio/[...path]/route.ts:10Catch-all reverse proxy from openalice-app to internal openalice-radio. Forwards Authorization + passes JSON bodies through. Same-origin to the Hub so CORS is moot.route:GET /api/radio/*route:POST /api/radio/*route:PATCH /api/radio/*route:DELETE /api/radio/*since 0.11.0
- app.api.streamhost.heartbeat-readsrc/app/api/streamhost/heartbeat/route.ts:36Browser-facing JWT-gated read for the stream-host heartbeat snapshot. Returns hosts for the calling user (sub claim) by reading the same in-memory store the internal POST receiver writes to.route:GET /api/streamhost/heartbeatsince 0.13.2
- app.api.youtube-oauth-callbacksrc/app/api/youtube/oauth/callback/route.ts:40Completes the YouTube OAuth round-trip server-side — state check, code exchange, channel snapshot, signed handoff cookie, redirect to /account/youtube?just_connected=1. Client-side /complete finishes the persona POST.route:GET /api/youtube/oauth/callbacksince 0.12.1
- app.api.youtube-oauth-completesrc/app/api/youtube/oauth/complete/route.ts:31Client-side completion of the YT OAuth round-trip — reads the handoff cookie set by /callback, verifies its signature, forwards to persona /v1/me/youtube/oauth-tokens with the user's Bearer JWT.route:POST /api/youtube/oauth/completesince 0.12.1
- app.api.youtube-oauth-startsrc/app/api/youtube/oauth/start/route.ts:41Builds Google OAuth URL with youtube.readonly + youtube.force-ssl + youtube scopes, stashes CSRF state cookie, redirects to Google. Companion of /api/youtube/oauth/callback. Drives /account/youtube Connect button + the stream-key auto-fetch flow.route:GET /api/youtube/oauth/startsince 0.12.0
app/auth
5 features- app.auth.forgot-passwordsrc/app/forgot-password/page.tsx:25Public form that requests a password-reset link by email.page:/forgot-passwordsince 0.1.0
- app.auth.loginsrc/app/login/page.tsx:28Public login + signup form with two-leg MFA prompt. Honorspage:/loginsince 0.1.0
- app.auth.reset-passwordsrc/app/reset-password/page.tsx:22Set a new password using a single-use reset token.page:/reset-passwordsince 0.1.0
- app.auth.safe-return-urlsrc/lib/safe-return-url.ts:2Validate `?return=<url>` query params for post-login redirects.lib:safe-return-urlsince 0.2.0
- app.auth.verify-emailsrc/app/verify/page.tsx:21Verify the email-verification token and bounce to /account.page:/verifysince 0.1.0
app/component
1 feature- app.component.font-pickersrc/app/account/streams/_components/FontPicker.tsx:163Custom-font gallery — list, upload (drag-drop + file picker), rename, delete with confirm, "Use as display/body/mono" hooks for the Theme picker.component:FontPickersince 0.6.0
app/components
1 feature- app.components.confirm-dialogsrc/components/ConfirmDialog.tsx:33Shared async confirm() dialog + useConfirm() hook. Replaces native window.confirm() across the Hub.component:ConfirmDialoghook:useConfirmcomponent:ConfirmProvidersince 0.14.0
app/hub
2 features- app.hub.launchersrc/app/page.tsx:82Top-level OpenAlice ecosystem launcher tiling Alice, Social, World, Persona, Live, wrapped in the shared EcosystemShell.page:/since 0.1.0
- app.hub.online-userssrc/app/_components/OnlineUsers.tsx:21Hub home widget listing users currently online across the ecosystem (last_seen ≤ 2 min, status ≠ invisible). Polls every 30s.component:OnlineUserssince 0.5.0
app/lib
23 features- app.lib.access-tokensrc/lib/access-token.ts:39Verify openalice-auth-issued access JWTs on the Hub. Used by routes that need a local user_id from the bearer without forwarding to persona.function:verifyAccessTokenfunction:extractBearerclass:AccessTokenErrorsince 0.13.2
- app.lib.agents-apisrc/lib/agentsApi.ts:24Typed client for /v1/me/agents on persona-server. Powers the AgentPicker dropdown and the per-agent settings page.function:listAgentsfunction:getAgentsince 0.11.0
- app.lib.ai-mod-apisrc/lib/aiModApi.ts:26Typed client for the AI moderation REST surfaces on persona-server. Powers `/account/ai-moderation` settings + pending-review + training-feedback panels.function:fetchAiModSettingsfunction:patchAiModSettingsfunction:fetchAiModActionsfunction:undoAiModActionfunction:fetchAiModFeedbackfunction:submitAiModFeedbacksince 0.13.0
- app.lib.api-clientsrc/lib/api-client.ts:47Shared apiFetch() helper — Bearer header + JSON parse + error normalization. Backs every src/lib/*Api.ts client.function:apiFetchfunction:personaApiFetchclass:ApiErrorclass:NotSignedInErrorsince 0.12.0
- app.lib.audio-apisrc/lib/audioApi.ts:37Typed client for /v1/me/audio CRUD on persona-server — Bearer JWT, multipart upload, JSON rename, public URL decoration. Powers the Hub Music & Audio picker.function:listAudiofunction:uploadAudiofunction:renameAudiofunction:deleteAudiosince 0.10.0
- app.lib.fonts-apisrc/lib/fontsApi.ts:37Typed client for /v1/me/fonts CRUD on persona-server — Bearer JWT, multipart upload, JSON rename, public URL decoration.function:listFontsfunction:uploadFontfunction:renameFontfunction:deleteFontsince 0.6.0
- app.lib.forwarded-originsrc/lib/forwarded-origin.ts:31Reconstructs the public origin (proto://host) from a NextRequest by honouring NEXT_PUBLIC_HUB_BASE_URL + X-Forwarded-Host/Proto, falling back to nextUrl.origin. Fixes 0.0.0.0:3203 leaking into OAuth redirects.function:publicOriginsince 0.12.1
- app.lib.idle-config-apisrc/lib/idleConfigApi.ts:23Typed client for /v1/me/agents/:id/idle-config — backs the Hub's Idle behaviour section.function:getIdleConfigfunction:patchIdleConfigsince 0.11.2
- app.lib.live-scenessrc/lib/liveScenes.ts:24Canonical scene-mode catalog for the Hub. Mirrors openalice-live/SCENE_REGISTRY. Drives "Allowed scenes" config + channel-point trigger validation.const:LIVE_SCENESconst:LIVE_SCENE_IDSconst:DEFAULT_LIVE_SCENE_IDfunction:isValidLiveSceneIdsince 0.14.0
- app.lib.lounge-apisrc/lib/loungeApi.ts:11Hub-side typed client for Discord-Style Lounge — listing rooms + Phase-4 moderation primitives (bans, mutes, mods, settings).function:listMyRoomsfunction:getModerationSnapshotfunction:grantModeratorfunction:revokeModeratorfunction:unbanUserfunction:unmuteUserfunction:listReportsfunction:resolveReportfunction:listAuditfunction:setSlowModefunction:setModOnlyModesince 0.11.0
- app.lib.lounge-reports-wssrc/lib/loungeReportsWs.ts:59Live WS subscription client for the Hub Reports tab — opens the chat WS, sends subscribe_mods after joined, surfaces report_received/report_resolved, reconnects with exponential backoff, signals fallback after 3 failures/60s, 30s heartbeat ping.function:openLoungeReportsWssince 0.13.0
- app.lib.music-gen-apisrc/lib/musicGenApi.ts:29Typed client for /v1/me/audio/generate (AI music generation via Lyria 3). Same Bearer JWT + same-origin BFF transport as audioApi. Powers the Hub generate page.function:generateMusicfunction:getMusicGenJobfunction:listMusicGenJobssince 0.11.0
- app.lib.polls-apisrc/lib/pollsApi.ts:24Typed client for /v1/me/polls (engagement polls). Powers the Hub Create-poll modal + active poll panel + history list.function:createPollfunction:closePollfunction:listPollsfunction:getPollsince 0.12.0
- app.lib.redemption-triggers-apisrc/lib/redemptionTriggersApi.ts:37Typed client for /v1/me/redemption-triggers CRUD on persona-server. Powers the Hub Channel-Point Triggers page where streamers bind viewer redemptions to live actions.function:listRedemptionTriggersfunction:createRedemptionTriggerfunction:patchRedemptionTriggerfunction:deleteRedemptionTriggersince 0.11.0
- app.lib.soundboard-settings-apisrc/lib/soundboardSettingsApi.ts:22Typed client for the per-agent soundboard kill switch on persona-server. Powers the Hub agent-settings toggle.function:listSoundboardSettingsfunction:setSoundboardEnabledsince 0.10.1
- app.lib.sounds-apisrc/lib/soundsApi.ts:31Typed client for /v1/me/sounds CRUD + play on persona-server. Powers the Hub Soundboard page where streamers upload + tag SFX for the agent's `play_sound` tool.function:listSoundsfunction:uploadSoundfunction:patchSoundfunction:deleteSoundfunction:testFireSoundsince 0.10.0
- app.lib.static-mod-apisrc/lib/staticModApi.ts:22Typed client for the static-mod REST surface on persona-server. Powers `/account/youtube/auto-mod` Static rules tab + Action log tab.function:listStaticModRulesfunction:createStaticModRulefunction:patchStaticModRulefunction:deleteStaticModRulefunction:fetchModActionsLogsince 0.13.0
- app.lib.use-auto-dismiss-errorsrc/lib/use-auto-dismiss-error.ts:31React hook that auto-dismisses an error string after a configurable timeout. Single source of truth for the Hub's auto-fading error banners.hook:useAutoDismissErrorsince 0.14.0
- app.lib.use-redirect-on-401src/lib/use-redirect-on-401.ts:30React hook that redirects to /login?return=<path> when a page's error state indicates an expired session.hook:useRedirectOn401function:isUnauthenticatedErrorsince 0.14.0
- app.lib.voices-apisrc/lib/voicesApi.ts:24Curated voice catalogue + browser-native TTS preview for the per-agent Voice editor. Lists ElevenLabs handles + the Default sentinel; preview uses SpeechSynthesisUtterance locally so sliders demo without burning ElevenLabs quota.function:listVoicesfunction:previewVoicesince 0.11.1
- app.lib.vrms-apisrc/lib/vrmsApi.ts:18Typed client for the per-tenant VRM library on persona-server. Powers the Hub's per-agent Avatar picker.function:listVrmssince 0.11.1
- app.lib.youtube-apisrc/lib/youtubeApi.ts:38Typed client for YT OAuth + mod-page surfaces on persona-server. Powers `/account/youtube` settings page + `/account/streams/[id]/chat-mod` mod view.function:fetchYouTubeOAuthfunction:disconnectYouTubefunction:fetchModPolicyfunction:patchModPolicyfunction:moderateDeletefunction:moderateBanfunction:fetchYtChatRecentsince 0.12.0
- app.lib.yt-handoffsrc/lib/yt-handoff.ts:38HS256 JWT helpers (sign + verify) for the YouTube OAuth callback handoff cookie. Uses SHARED_JWT_SECRET + aud="oa-yt-handoff".function:signHandoffTokenfunction:verifyHandoffTokenconst:YT_HANDOFF_COOKIEconst:YT_HANDOFF_AUDsince 0.12.1
hub/account
2 features- hub.account.audio.generatesrc/app/account/audio/generate/page.tsx:21AI music generation page. Lyria 3 via OpenRouter, $0.08/song, $10/month default cap. Async job lifecycle with 5s polling, inline player + add-to-BGM hand-off, recent generations history.page:/account/audio/generatesince 0.11.0
- hub.account.editsrc/app/account/edit/page.tsx:10Edit display_name, bio, avatar_url, banner_url, pronouns. One profile across all 6 OpenAlice products.page:/account/editsince 0.3.0