feat: scaffold Fish Audio speech provider plugin

- index.ts: plugin entry with definePluginEntry + registerSpeechProvider
- speech-provider.ts: full SpeechProviderPlugin implementation
  - resolveConfig from messages.tts.providers.fish-audio
  - parseDirectiveToken for voice, model, speed, latency, temperature, top_p
  - listVoices merging official + user's own voices
  - synthesize with format-aware output (opus for voice-note, mp3 otherwise)
  - stub Talk Mode (resolveTalkConfig/resolveTalkOverrides)
- tts.ts: raw fishAudioTTS() fetch + listFishAudioVoices()
  - streaming chunked → buffer, error body included in exceptions
  - parallel voice listing with graceful partial failure
- speech-provider.test.ts: voice ID validation tests
- openclaw.plugin.json: speechProviders contract
- package.json: peer dep on openclaw >=2026.3.0
This commit is contained in:
Clawdbot
2026-03-29 18:14:29 +11:00
parent ee1eb27cf0
commit 4842dc64a5
7 changed files with 675 additions and 2 deletions

21
package.json Normal file
View File

@@ -0,0 +1,21 @@
{
"name": "@openclaw/fish-audio-speech",
"version": "0.1.0",
"description": "Fish Audio TTS speech provider plugin for OpenClaw",
"type": "module",
"license": "MIT",
"openclaw": {
"extensions": [
"./index.ts"
]
},
"peerDependencies": {
"openclaw": ">=2026.3.0"
},
"devDependencies": {
"vitest": "^3.0.0"
},
"scripts": {
"test": "vitest run"
}
}