前端 UI 组件

共享组件 (shared/)

app-nav.js — 动态导航栏

/api/apps 获取已启用的应用列表,动态渲染导航链接。

preset-selector.js — 预设选择器

PresetSelector 组件管理系统提示词预设。

save-share.js — 保存与分享

SaveShareUI 管理会话保存和分享:


内容编辑器

ref-audio-player.js — 参考音频播放器

可复用的音频播放器组件,用于参考音频预览:

system-content-editor.js — 系统内容编辑器

列表式编辑器,管理 system prompt 的多模态内容:

user-content-editor.js — 用户消息编辑器

多模态用户输入编辑器:

内容类型 输入方式
文本 文本框输入
音频 录音 / 文件上传 / 拖放
图片 文件上传 / 拖放 / 粘贴
视频 文件上传 / 拖放(仅 Chat 模式,自动启用 omni_mode)

快捷键Space 录音(点击切换/长按 push-to-talk),ESC 取消。


双工 UI 组件 (duplex/ui/)

duplex-ui.js — 指标面板 + 设置持久化

MetricsPanel 实时指标面板:

指标 颜色阈值
Latency(延迟) 绿 <200ms / 黄 <500ms / 红
TTFS(首音延迟) 绿 <300ms / 黄 <600ms / 红
Drift(漂移) 绿 <50ms / 黄 <200ms / 红
Gaps(间隙) 绿 =0 / 黄 <3 / 红
KV Cache 绿 <4096 / 黄 <6144 / 红

SettingsPersistence 设置持久化:声明式字段定义,localStorage 自动存储/恢复。

ref-audio-init.js — 参考音频初始化

Duplex 页面加载时初始化参考音频:从后端加载默认和自定义参考音频列表,构建下拉选择器。

tts-ref-controller.js — TTS 参考音频控制器

管理 TTS 参考音频选择、上传、删除。支持 LLM ref 和 TTS ref 使用不同音频。


通用工具 (lib/)

countdown-timer.js — 倒计时状态机

UI 无关的倒计时状态机,通过回调报告状态。用于排队等待时间显示。

chat-eta-estimator.js — ETA 估算器

基于历史响应时间的 EMA 估算,区分 Chat/Streaming 模式独立估算。