@openclaw/fish-audio-speech 2026.10.10 → 2026.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  import { buildFishAudioSpeechProvider } from "./speech-provider.js";
2
- // extensions/fish-audio-speech/capability-catalog.ts
2
+ //#region extensions/fish-audio-speech/capability-catalog.ts
3
3
  var capability_catalog_default = { speechProviders: [buildFishAudioSpeechProvider()] };
4
+ //#endregion
4
5
  export { capability_catalog_default as default };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { buildFishAudioSpeechProvider } from "./speech-provider.js";
2
2
  import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
3
- // extensions/fish-audio-speech/index.ts
3
+ //#region extensions/fish-audio-speech/index.ts
4
4
  var fish_audio_speech_default = definePluginEntry({
5
5
  id: "fish-audio-speech",
6
6
  name: "Fish Audio Speech",
@@ -9,4 +9,5 @@ var fish_audio_speech_default = definePluginEntry({
9
9
  api.registerSpeechProvider(buildFishAudioSpeechProvider());
10
10
  }
11
11
  });
12
+ //#endregion
12
13
  export { fish_audio_speech_default as default };
@@ -2,7 +2,7 @@ import { FISH_AUDIO_MODELS, fishAudioTts, fishAudioTtsStream, listFishAudioVoice
2
2
  import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
3
3
  import { MAX_AUDIO_BYTES, parseSpeechDirectiveNumberOverride, resolveSpeechProviderApiKey } from "openclaw/plugin-sdk/speech-provider";
4
4
  import { asBoolean, asFiniteNumberInRange, asOptionalRecord, filterStringRecord, normalizeOptionalString, parseBooleanValue } from "openclaw/plugin-sdk/string-coerce-runtime";
5
- // extensions/fish-audio-speech/speech-provider.ts
5
+ //#region extensions/fish-audio-speech/speech-provider.ts
6
6
  const DEFAULT_MODEL = "s2.1-pro";
7
7
  const DEFAULT_LATENCY = "balanced";
8
8
  const DEFAULT_TIMEOUT_MS = 24e4;
@@ -310,4 +310,5 @@ function buildFishAudioSpeechProvider() {
310
310
  }
311
311
  };
312
312
  }
313
+ //#endregion
313
314
  export { buildFishAudioSpeechProvider };
package/dist/tts.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { asOptionalRecord, normalizeOptionalString, normalizeTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
2
- // extensions/fish-audio-speech/tts.ts
2
+ //#region extensions/fish-audio-speech/tts.ts
3
3
  const FISH_AUDIO_BASE_URL = "https://api.fish.audio";
4
4
  const FISH_AUDIO_VOICES_MAX_BYTES = 2097152;
5
5
  const FISH_AUDIO_VOICE_PAGE_SIZE = 100;
@@ -51,7 +51,7 @@ async function fishAudioTts(params) {
51
51
  const { assertOkOrThrowProviderError, readProviderBinaryResponse } = await import("openclaw/plugin-sdk/provider-http");
52
52
  const { response, release } = await requestFishAudioTts(params);
53
53
  try {
54
- await assertOkOrThrowProviderError(response, "Fish Audio TTS API error");
54
+ await assertOkOrThrowProviderError(response, "Fish Audio TTS API error", { requestHeaders: { Authorization: `Bearer ${params.apiKey}` } });
55
55
  return await readProviderBinaryResponse(response, "Fish Audio TTS API error", "audio", { maxBytes: params.maxBytes });
56
56
  } finally {
57
57
  await release();
@@ -63,7 +63,7 @@ async function fishAudioTtsStream(params) {
63
63
  const { response, release } = await requestFishAudioTts(params);
64
64
  let handedOff = false;
65
65
  try {
66
- await assertOkOrThrowProviderError(response, "Fish Audio TTS API error");
66
+ await assertOkOrThrowProviderError(response, "Fish Audio TTS API error", { requestHeaders: { Authorization: `Bearer ${params.apiKey}` } });
67
67
  assertProviderBinaryResponseContent(response, "Fish Audio TTS API error", "audio");
68
68
  if (!response.body) throw new Error("Fish Audio TTS API response missing audio stream");
69
69
  const bounded = createBoundedProviderBinaryStream(response.body, {
@@ -105,16 +105,20 @@ async function requestVoicePage(params) {
105
105
  else url.searchParams.set("sort_by", "score");
106
106
  const { assertOkOrThrowProviderError, readProviderJsonResponse } = await import("openclaw/plugin-sdk/provider-http");
107
107
  const { fetchWithSsrFGuard, ssrfPolicyFromHttpBaseUrlAllowedHostname } = await import("openclaw/plugin-sdk/ssrf-runtime");
108
+ const requestHeaders = { Authorization: `Bearer ${params.apiKey}` };
108
109
  const { response, release } = await fetchWithSsrFGuard({
109
110
  url: url.toString(),
110
- init: { headers: { Authorization: `Bearer ${params.apiKey}` } },
111
+ init: { headers: requestHeaders },
111
112
  timeoutMs: params.timeoutMs,
112
113
  policy: ssrfPolicyFromHttpBaseUrlAllowedHostname(params.baseUrl),
113
114
  auditContext: "fish-audio.voices"
114
115
  });
115
116
  try {
116
- await assertOkOrThrowProviderError(response, "Fish Audio voices API error");
117
- return await readProviderJsonResponse(response, "Fish Audio voices", { maxBytes: FISH_AUDIO_VOICES_MAX_BYTES });
117
+ await assertOkOrThrowProviderError(response, "Fish Audio voices API error", { requestHeaders });
118
+ return await readProviderJsonResponse(response, "Fish Audio voices", {
119
+ maxBytes: FISH_AUDIO_VOICES_MAX_BYTES,
120
+ requestHeaders
121
+ });
118
122
  } finally {
119
123
  await release();
120
124
  }
@@ -147,4 +151,5 @@ async function listFishAudioVoices(params) {
147
151
  return true;
148
152
  });
149
153
  }
154
+ //#endregion
150
155
  export { FISH_AUDIO_MODELS, fishAudioTts, fishAudioTtsStream, listFishAudioVoices, normalizeFishAudioBaseUrl };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/fish-audio-speech",
3
- "version": "2026.10.10",
3
+ "version": "2026.11.2",
4
4
  "description": "OpenClaw Fish Audio speech plugin.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,10 +18,10 @@
18
18
  "minHostVersion": ">=2026.7.2"
19
19
  },
20
20
  "compat": {
21
- "pluginApi": ">=2026.10.10"
21
+ "pluginApi": ">=2026.11.2"
22
22
  },
23
23
  "build": {
24
- "openclawVersion": "2026.10.10",
24
+ "openclawVersion": "2026.11.2",
25
25
  "bundledDist": false
26
26
  },
27
27
  "release": {
@@ -40,7 +40,7 @@
40
40
  "assets/activity.svg"
41
41
  ],
42
42
  "peerDependencies": {
43
- "openclaw": ">=2026.10.10"
43
+ "openclaw": ">=2026.11.2"
44
44
  },
45
45
  "peerDependenciesMeta": {
46
46
  "openclaw": {
@@ -1 +0,0 @@
1
- {"version":3,"entries":[{"output":"capability-catalog.js","source":"extensions/fish-audio-speech/capability-catalog.ts"},{"output":"index.js","source":"extensions/fish-audio-speech/index.ts"},{"output":"speech-provider.js","source":"extensions/fish-audio-speech/speech-provider.ts"},{"output":"tts.js","source":"extensions/fish-audio-speech/tts.ts"}],"chunks":[{"output":"capability-catalog.js","sha256":"7c9a47df6e8ec5e2db37ce36f3f23369e937a6deb650b55c529f73b37380621a","facadeSource":"extensions/fish-audio-speech/capability-catalog.ts","sources":["extensions/fish-audio-speech/capability-catalog.ts"]},{"output":"index.js","sha256":"7c1ea79ef77e53df527e73de571411ed79266f9cdbffa6a988e7b40b0b0e5edc","facadeSource":"extensions/fish-audio-speech/index.ts","sources":["extensions/fish-audio-speech/index.ts"]},{"output":"speech-provider.js","sha256":"2f404b3086043af13ac71224cdfaf0d9918fe429b17d1831934e3b2ba11c0de9","facadeSource":"extensions/fish-audio-speech/speech-provider.ts","sources":["extensions/fish-audio-speech/speech-provider.ts"]},{"output":"tts.js","sha256":"fd415647f88514968ba0e1b026410326ca20c6da40d807e1dbe76d5d39ce322f","facadeSource":"extensions/fish-audio-speech/tts.ts","sources":["extensions/fish-audio-speech/tts.ts"]}],"unrenderedSources":[]}