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": "웹",
"runtime": "시스템",
"advanced": "보안",
@@ -99,7 +100,8 @@
"mcp": "MCP 서비스",
"apps": "앱",
"nativeHost": "네이티브 호스트",
"hostSafety": "앱 보안"
"hostSafety": "앱 보안",
"voiceInput": "음성 입력"
},
"rows": {
"theme": "테마",
@@ -142,7 +144,13 @@
"engine": "엔진",
"logs": "로그",
"diagnostics": "진단",
"contextWindow": "컨텍스트 창"
"contextWindow": "컨텍스트 창",
"transcription": "전사",
"transcriptionProvider": "제공자",
"transcriptionProviderStatus": "제공자 상태",
"transcriptionModel": "모델",
"transcriptionLanguage": "언어",
"voiceLimits": "제한"
},
"help": {
"theme": "밝은 모드와 어두운 모드를 전환합니다.",
@@ -181,7 +189,12 @@
"diagnostics": "지원용 작은 런타임 보고서를 내보냅니다.",
"localServiceAccessNative": "Full Access shell 명령이 이 Mac의 서비스에 접근할 수 있게 합니다.",
"webuiDefaultAccessNative": "프로젝트별 권한이 없는 네이티브 채팅에 사용됩니다.",
"contextWindow": "이 모델 구성의 기본 컨텍스트 예산을 선택합니다."
"contextWindow": "이 모델 구성의 기본 컨텍스트 예산을 선택합니다.",
"transcription": "마이크 입력을 보내기 전에 텍스트로 변환합니다. 채널 음성 메시지도 같은 설정을 사용합니다.",
"transcriptionProvider": "Providers에 저장된 해당 제공자의 인증 정보를 사용합니다.",
"transcriptionProviderStatus": "API 키는 transcription 설정이 아니라 providers 아래에 유지됩니다.",
"transcriptionModel": "제공자가 사용자 지정 모델 ID를 요구하지 않으면 해석된 기본값을 사용하세요.",
"transcriptionLanguage": "en, zh, ja, ko 같은 선택적 ISO-639 힌트입니다."
},
"values": {
"light": "라이트",
@@ -283,6 +296,7 @@
"totalProviders": "{{count}}개 사용 가능",
"webSearch": "웹 검색",
"imageGeneration": "이미지 생성",
"voiceInput": "음성 입력",
"workspace": "작업공간"
},
"usage": {
@@ -486,6 +500,11 @@
"rawInstructions": "원본 SKILL.md",
"rawInstructionsEmpty": "원본 지침이 없습니다.",
"detailDescription": "{{name}} 세부 정보."
},
"voice": {
"selectProvider": "제공자 선택",
"configureProvider": "제공자 설정",
"languageAuto": "자동"
}
},
"chat": {
@@ -678,6 +697,21 @@
"deepResearch": "심층 조사",
"voice": "음성 입력"
},
"voice": {
"hint": "클릭해 받아쓰거나 길게 누르기",
"stop": "녹음 중지",
"transcribing": "변환 중...",
"recordingStatus": "녹음 중 {{time}}"
},
"voiceErrors": {
"unsupported": "이 브라우저는 음성 입력을 지원하지 않습니다.",
"permission": "마이크 권한이 필요합니다.",
"notConfigured": "먼저 음성 변환 제공업체를 설정하세요.",
"tooLong": "녹음 시간이 너무 깁니다.",
"tooShort": "음성을 녹음하려면 조금 더 길게 눌러 주세요.",
"noInput": "마이크 입력이 감지되지 않았습니다.",
"failed": "오디오를 변환하지 못했습니다."
},
"slash": {
"ariaLabel": "슬래시 명령",
"label": "명령",