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.agent
    src/app/account/agent/edit/page.tsx:227
    Hub 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/agent
    since 0.5.0
  • app.account.agent.redirect
    src/app/account/agent/page.tsx:17
    Legacy /account/agent path redirects to the new /account/agents list. The editor moved to /account/agent/edit.
    page:/account/agent → /account/agents
    since 0.11.0
  • app.account.agents.list
    src/app/account/agents/page.tsx:17
    Hub agents list — one row per agent under this tenant, link to per-agent settings.
    page:/account/agents
    since 0.11.0
  • app.account.agents.settings
    src/app/account/agents/[id]/settings/page.tsx:25
    Per-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]/settings
    since 0.11.1
  • app.account.ai-moderation
    src/app/account/ai-moderation/page.tsx:43
    Hub 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-moderation
    since 0.13.0
  • app.account.chat-sources
    src/app/account/chat-sources/page.tsx:96
    Hub 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-sources
    since 0.5.0
  • app.account.devices
    src/app/account/devices/page.tsx:26
    Hub 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/devices
    since 0.6.0
  • app.account.lounge
    src/app/account/lounge/page.tsx:19
    Hub 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/lounge
    since 0.11.0
  • app.account.lounge.audit
    src/app/account/lounge/[id]/audit/page.tsx:19
    Per-room unified moderation audit log — bans/mutes/deletes/reports/mods/settings; mod-only.
    page:/account/lounge/[id]/audit
    since 0.13.0
  • app.account.lounge.mods
    src/app/account/lounge/[id]/mods/page.tsx:20
    Per-room moderation panel — Phase 4 bans/mutes/mods/settings, owner-only grant picker.
    page:/account/lounge/[id]/mods
    since 0.11.0
  • app.account.lounge.reports
    src/app/account/lounge/[id]/reports/page.tsx:24
    Per-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]/reports
    since 0.12.0
  • app.account.radio
    src/app/account/radio/page.tsx:11
    Hub 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/radio
    since 0.11.0
  • app.account.redemption-triggers
    src/app/account/triggers/page.tsx:30
    Hub 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/triggers
    since 0.11.0
  • app.account.security
    src/app/account/security/page.tsx:23
    TOTP setup + disable surface for the authenticated user. Renders an otpauth QR + 6-digit verify input + password-gated disable form.
    page:/account/security
    since 0.5.0
  • app.account.sessions
    src/app/account/sessions/page.tsx:16
    Hub page listing the user's active refresh-token sessions with revoke buttons. Powered by /auth/sessions + /auth/sessions/:id.
    page:/account/sessions
    since 0.5.0
  • app.account.soundboard
    src/app/account/sounds/page.tsx:29
    Hub Soundboard page — upload, tag, bind, test-fire SFX clips for the agent's `play_sound` tool. Powers the Neuro-sama-style soundboard.
    page:/account/sounds
    since 0.10.0
  • app.account.streams
    src/app/account/streams/page.tsx:79
    Hub page for managing per-platform stream destinations the broadcaster service pushes to. CRUD + masked-list + reveal-after-password.
    page:/account/streams
    since 0.5.0
  • app.account.streams-chat-mod
    src/app/account/streams/[id]/chat-mod/page.tsx:32
    Mod-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-mod
    since 0.12.0
  • app.account.streams.chat-page
    src/app/account/streams/chat/page.tsx:27
    Studio 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/chat
    since 0.13.0
  • app.account.streams.engagement-picker
    src/app/account/streams/_components/EngagementPresetPicker.tsx:40
    Hub 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:EngagementPresetPicker
    since 0.11.0
  • app.account.streams.engagement-preset-fetch
    src/lib/api/broadcasts.ts:197
    Read 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-save
    src/lib/api/broadcasts.ts:222
    Persist 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-presets
    src/lib/engagementPresets.ts:23
    Hub-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:EngagementPresetPicker
    since 0.11.0
  • app.account.streams.host-health
    src/app/account/streams/_components/HostHealthCard.tsx:32
    Per-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:HostHealthCard
    since 0.13.1
  • app.account.streams.poll-manager
    src/app/account/streams/_components/PollManager.tsx:31
    Hub poll management surface — Create modal, active poll panel with countdown + Close-early, history list. Mounts under /account/streams when a broadcast is live.
    component:PollManager
    since 0.12.0
  • app.account.streams.scene-preview
    src/app/account/streams/_components/ScenePreviewButtons.tsx:55
    Two 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:ScenePreviewButtons
    since 0.6.0
  • app.account.streams.theme-picker
    src/app/account/streams/_components/ThemePicker.tsx:69
    Studio-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:ThemePicker
    since 0.6.0
  • app.account.streams.theme-picker.contract
    src/lib/streamThemes.ts:21
    Hub-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.sfx
    src/app/account/streams/_components/SfxPickerSection.tsx:25
    Hub-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:SfxPickerSection
    since 0.9.0
  • app.account.streams.theme-quick-swap
    src/app/account/streams/_components/ThemeQuickSwap.tsx:72
    Mid-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:ThemeQuickSwap
    since 0.6.0
  • app.account.streams.theme-save
    src/lib/api/broadcasts.ts:131
    Persist 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.youtube
    src/app/account/youtube/page.tsx:53
    Hub 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/youtube
    since 0.12.0
  • app.account.youtube.audit-feed
    src/app/account/youtube/page.tsx:773
    Hub 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:AuditFeedCard
    since 0.13.0
  • app.account.youtube.auto-mod
    src/app/account/youtube/auto-mod/page.tsx:50
    Hub page for the static auto-moderation rule set + shared mod-action audit log. Companion of /account/youtube + /account/ai-moderation.
    page:/account/youtube/auto-mod
    since 0.13.0
  • app.account.youtube.helpers
    src/app/account/youtube/helpers.ts:8
    Time / IP formatters used by the YouTube settings page (expires-in countdown, "last refreshed" indicator, audit-feed IP truncator).
    function:formatExpiresInSecondsfunction:secondsUntilfunction:truncateIp
    since 0.13.0
  • app.studio.chat-tab
    src/app/account/streams/_components/StudioChatTab.tsx:98
    Studio 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/chat
    since 0.13.0
  • app.studio.chat.send
    src/lib/api/chat.ts:167
    Hub-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.heartbeat
    src/app/api/internal/streamhost/heartbeat/route.ts:15
    Internal-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/heartbeat
    since 0.13.1
  • app.api.persona-bff
    src/app/api/persona/[...path]/route.ts:40
    Catch-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-bff
    src/app/api/radio/[...path]/route.ts:10
    Catch-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-read
    src/app/api/streamhost/heartbeat/route.ts:36
    Browser-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/heartbeat
    since 0.13.2
  • app.api.youtube-oauth-callback
    src/app/api/youtube/oauth/callback/route.ts:40
    Completes 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/callback
    since 0.12.1
  • app.api.youtube-oauth-complete
    src/app/api/youtube/oauth/complete/route.ts:31
    Client-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/complete
    since 0.12.1
  • app.api.youtube-oauth-start
    src/app/api/youtube/oauth/start/route.ts:41
    Builds 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/start
    since 0.12.0

app/auth

5 features
  • app.auth.forgot-password
    src/app/forgot-password/page.tsx:25
    Public form that requests a password-reset link by email.
    page:/forgot-password
    since 0.1.0
  • app.auth.login
    src/app/login/page.tsx:28
    Public login + signup form with two-leg MFA prompt. Honors
    page:/login
    since 0.1.0
  • app.auth.reset-password
    src/app/reset-password/page.tsx:22
    Set a new password using a single-use reset token.
    page:/reset-password
    since 0.1.0
  • app.auth.safe-return-url
    src/lib/safe-return-url.ts:2
    Validate `?return=<url>` query params for post-login redirects.
    lib:safe-return-url
    since 0.2.0
  • app.auth.verify-email
    src/app/verify/page.tsx:21
    Verify the email-verification token and bounce to /account.
    page:/verify
    since 0.1.0

app/component

1 feature
  • app.component.font-picker
    src/app/account/streams/_components/FontPicker.tsx:163
    Custom-font gallery — list, upload (drag-drop + file picker), rename, delete with confirm, "Use as display/body/mono" hooks for the Theme picker.
    component:FontPicker
    since 0.6.0

app/components

1 feature
  • app.components.confirm-dialog
    src/components/ConfirmDialog.tsx:33
    Shared async confirm() dialog + useConfirm() hook. Replaces native window.confirm() across the Hub.
    component:ConfirmDialoghook:useConfirmcomponent:ConfirmProvider
    since 0.14.0

app/hub

2 features
  • app.hub.launcher
    src/app/page.tsx:82
    Top-level OpenAlice ecosystem launcher tiling Alice, Social, World, Persona, Live, wrapped in the shared EcosystemShell.
    page:/
    since 0.1.0
  • app.hub.online-users
    src/app/_components/OnlineUsers.tsx:21
    Hub home widget listing users currently online across the ecosystem (last_seen ≤ 2 min, status ≠ invisible). Polls every 30s.
    component:OnlineUsers
    since 0.5.0

app/lib

23 features
  • app.lib.access-token
    src/lib/access-token.ts:39
    Verify 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:AccessTokenError
    since 0.13.2
  • app.lib.agents-api
    src/lib/agentsApi.ts:24
    Typed client for /v1/me/agents on persona-server. Powers the AgentPicker dropdown and the per-agent settings page.
    function:listAgentsfunction:getAgent
    since 0.11.0
  • app.lib.ai-mod-api
    src/lib/aiModApi.ts:26
    Typed 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:submitAiModFeedback
    since 0.13.0
  • app.lib.api-client
    src/lib/api-client.ts:47
    Shared apiFetch() helper — Bearer header + JSON parse + error normalization. Backs every src/lib/*Api.ts client.
    function:apiFetchfunction:personaApiFetchclass:ApiErrorclass:NotSignedInError
    since 0.12.0
  • app.lib.audio-api
    src/lib/audioApi.ts:37
    Typed 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:deleteAudio
    since 0.10.0
  • app.lib.fonts-api
    src/lib/fontsApi.ts:37
    Typed client for /v1/me/fonts CRUD on persona-server — Bearer JWT, multipart upload, JSON rename, public URL decoration.
    function:listFontsfunction:uploadFontfunction:renameFontfunction:deleteFont
    since 0.6.0
  • app.lib.forwarded-origin
    src/lib/forwarded-origin.ts:31
    Reconstructs 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:publicOrigin
    since 0.12.1
  • app.lib.idle-config-api
    src/lib/idleConfigApi.ts:23
    Typed client for /v1/me/agents/:id/idle-config — backs the Hub's Idle behaviour section.
    function:getIdleConfigfunction:patchIdleConfig
    since 0.11.2
  • app.lib.live-scenes
    src/lib/liveScenes.ts:24
    Canonical 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:isValidLiveSceneId
    since 0.14.0
  • app.lib.lounge-api
    src/lib/loungeApi.ts:11
    Hub-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:setModOnlyMode
    since 0.11.0
  • app.lib.lounge-reports-ws
    src/lib/loungeReportsWs.ts:59
    Live 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:openLoungeReportsWs
    since 0.13.0
  • app.lib.music-gen-api
    src/lib/musicGenApi.ts:29
    Typed 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:listMusicGenJobs
    since 0.11.0
  • app.lib.polls-api
    src/lib/pollsApi.ts:24
    Typed client for /v1/me/polls (engagement polls). Powers the Hub Create-poll modal + active poll panel + history list.
    function:createPollfunction:closePollfunction:listPollsfunction:getPoll
    since 0.12.0
  • app.lib.redemption-triggers-api
    src/lib/redemptionTriggersApi.ts:37
    Typed 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:deleteRedemptionTrigger
    since 0.11.0
  • app.lib.soundboard-settings-api
    src/lib/soundboardSettingsApi.ts:22
    Typed client for the per-agent soundboard kill switch on persona-server. Powers the Hub agent-settings toggle.
    function:listSoundboardSettingsfunction:setSoundboardEnabled
    since 0.10.1
  • app.lib.sounds-api
    src/lib/soundsApi.ts:31
    Typed 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:testFireSound
    since 0.10.0
  • app.lib.static-mod-api
    src/lib/staticModApi.ts:22
    Typed 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:fetchModActionsLog
    since 0.13.0
  • app.lib.use-auto-dismiss-error
    src/lib/use-auto-dismiss-error.ts:31
    React hook that auto-dismisses an error string after a configurable timeout. Single source of truth for the Hub's auto-fading error banners.
    hook:useAutoDismissError
    since 0.14.0
  • app.lib.use-redirect-on-401
    src/lib/use-redirect-on-401.ts:30
    React hook that redirects to /login?return=<path> when a page's error state indicates an expired session.
    hook:useRedirectOn401function:isUnauthenticatedError
    since 0.14.0
  • app.lib.voices-api
    src/lib/voicesApi.ts:24
    Curated 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:previewVoice
    since 0.11.1
  • app.lib.vrms-api
    src/lib/vrmsApi.ts:18
    Typed client for the per-tenant VRM library on persona-server. Powers the Hub's per-agent Avatar picker.
    function:listVrms
    since 0.11.1
  • app.lib.youtube-api
    src/lib/youtubeApi.ts:38
    Typed 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:fetchYtChatRecent
    since 0.12.0
  • app.lib.yt-handoff
    src/lib/yt-handoff.ts:38
    HS256 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_AUD
    since 0.12.1

hub/account

2 features
  • hub.account.audio.generate
    src/app/account/audio/generate/page.tsx:21
    AI 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/generate
    since 0.11.0
  • hub.account.edit
    src/app/account/edit/page.tsx:10
    Edit display_name, bio, avatar_url, banner_url, pronouns. One profile across all 6 OpenAlice products.
    page:/account/edit
    since 0.3.0