- voice/Chain+Service: STTWithProvider/TTSWithProvider(真实档位cloud/local/edge-tts/espeak/silent), 旧方法改薄包装 - gateway: transcribe空文本带{text,provider} / voice_output空音频带provider / speech空音频tts_empty+X-Voice-Provider头 - middleware: CORS Access-Control-Expose-Headers: X-Voice-Provider - 可选接口 voiceProviderReporter(type断言透传), 自定义实现回退silent - 新增测试10个(provider_signal/voice_signal), build/vet/test全绿+交叉编译 - Docs/api-client v0.23 + api-reference CORS 同步
- voice/dashscope.go 新建:DashscopeSTT(qwen-audio-3.0-asr-flash, base64 data URI→text) + DashscopeTTS(cosyvoice 按 voice_id, 取非流式 24h URL 下载字节) - cloud.go newDashboardSTT/TTS 由空 endpoint stub 改为真实百炼 adapter - chain.go gating 从 DashscopeAPIKey!="" 改为 voiceConfigured(cfg); silent 兜底保留 - config.VoiceConfig 扩展 DASHSCOPE_BASE_URL/VOICE_STT_*/VOICE_TTS_* 字段(必填 DASHSCOPE_API_KEY) - gateway: POST /api/v1/audio/{transcribe,speech} (owner+审计+MaxBytesReader); voiceInputRequest 增 deviceId 并透传 runner.Run - 实测: cosyvoice-v3.5-plus+longxiaochun 回 418(引擎拒绝), 改用 cosyvoice-v3-flash+longxiaochun_v3; TTS 你好我是昔涟->106124B wav -> STT 回 你好我是西联, 链返回真实字节/文本 - 单测: dashscope_test/config voice defaults/gateway audio_test; go build/vet/test 全绿 - 声音复刻(响昔涟音色)待公网参考音频; 不做 create_voice