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": "プロバイダー設定にある対応する認証情報を使います。",
"transcriptionProviderStatus": "APIキーは文字起こし設定ではなくプロバイダー側に保存されます。",
"transcriptionModel": "プロバイダーがカスタムモデルIDを必要としない限り、解決済みのデフォルトのままにします。",
"transcriptionLanguage": "en、zh、ja、ko などの任意の ISO-639 ヒント。"
},
"values": {
"light": "ライト",
@@ -283,6 +296,7 @@
"totalProviders": "{{count}} 個利用可能",
"webSearch": "Web 検索",
"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": "コマンド",