feat(transcription): add shared voice input support (#4232)

* feat(webui): add voice transcription input

* feat(webui): render ANSI output in code blocks

* refactor(webui): isolate voice recorder logic

* refactor(transcription): keep websocket ingress thin

* refactor(transcription): resolve channel audio settings on demand

* style(webui): neutralize voice waveform color

* feat(webui): add voice input tooltip

* feat(webui): add voice input keyboard shortcut

* fix(webui): distinguish voice shortcut platforms

* fix(webui): place voice button after model selector

* refactor(webui): share voice hold recording helpers

* fix(desktop): allow microphone voice input

* fix(webui): stabilize token usage month labels

* feat(webui): show voice input on settings overview

* fix(webui): label voice capability as recognition

* fix(webui): align capability overview status

* refactor(webui): isolate transcription socket handling

* fix(webui): soften silent voice waveform

* refactor(audio): clarify transcription service location

* docs(transcription): clarify audio and provider boundaries

* fix(exec): reduce session output polling flake
This commit is contained in:
Xubin Ren
2026-06-09 01:08:49 +08:00
committed by GitHub
parent 06d454a225
commit 9c81280300
49 changed files with 3071 additions and 257 deletions
+37 -3
View File
@@ -73,6 +73,7 @@
"models": "模型",
"providers": "提供商",
"image": "图片",
"voice": "语音",
"browser": "网页",
"cliApps": "CLI 应用",
"mcp": "MCP",
@@ -99,7 +100,8 @@
"capabilities": "能力",
"apps": "应用",
"nativeHost": "原生宿主",
"hostSafety": "应用安全"
"hostSafety": "应用安全",
"voiceInput": "语音识别"
},
"models": {
"selectModel": "选择模型",
@@ -161,7 +163,13 @@
"engine": "引擎",
"logs": "日志",
"diagnostics": "诊断",
"contextWindow": "上下文窗口"
"contextWindow": "上下文窗口",
"transcription": "语音转写",
"transcriptionProvider": "提供商",
"transcriptionProviderStatus": "提供商状态",
"transcriptionModel": "模型",
"transcriptionLanguage": "语言",
"voiceLimits": "限制"
},
"help": {
"theme": "在浅色和深色外观之间切换。",
@@ -200,7 +208,12 @@
"diagnostics": "导出一份用于支持排查的小型运行报告。",
"localServiceAccessNative": "允许完全访问权限下的 shell 命令访问这台 Mac 上的服务。",
"webuiDefaultAccessNative": "用于没有单独项目权限的原生聊天。",
"contextWindow": "选择此模型配置的默认上下文预算。"
"contextWindow": "选择此模型配置的默认上下文预算。",
"transcription": "发送前先把麦克风输入转写到输入框。聊天渠道里的语音消息也使用同一套设置。",
"transcriptionProvider": "使用「提供商」中对应提供商的凭据。",
"transcriptionProviderStatus": "API Key 仍保存在 providers 里,不写进 transcription 设置。",
"transcriptionModel": "除非提供商需要自定义模型 ID,否则保持解析后的默认值即可。",
"transcriptionLanguage": "可选 ISO-639 语言提示,例如 en、zh、ja 或 ko。"
},
"timezone": {
"select": "选择时区",
@@ -391,6 +404,7 @@
"totalProviders": "共 {{count}} 个可用",
"webSearch": "网页搜索",
"imageGeneration": "图片生成",
"voiceInput": "语音识别",
"workspace": "工作区"
},
"usage": {
@@ -486,6 +500,11 @@
"rawInstructions": "原始 SKILL.md",
"rawInstructionsEmpty": "没有原始说明。",
"detailDescription": "{{name}} 的详情。"
},
"voice": {
"selectProvider": "选择提供商",
"configureProvider": "配置提供商",
"languageAuto": "自动"
}
},
"chat": {
@@ -677,6 +696,21 @@
"deepResearch": "深度研究",
"voice": "语音输入"
},
"voice": {
"hint": "点击进行听写或长按",
"stop": "停止录音",
"transcribing": "正在转写...",
"recordingStatus": "正在录音 {{time}}"
},
"voiceErrors": {
"unsupported": "当前浏览器不支持语音输入。",
"permission": "需要麦克风权限。",
"notConfigured": "请先配置转写提供商。",
"tooLong": "录音时间太长。",
"tooShort": "请稍微多录一会儿。",
"noInput": "没有检测到麦克风输入。",
"failed": "语音转写失败。"
},
"slash": {
"ariaLabel": "斜杠命令",
"label": "命令",