@openclaw/gradium-speech 2026.9.1-beta.1 → 2026.9.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.
@@ -0,0 +1,5 @@
1
+ import { buildGradiumSpeechProvider } from "./speech-provider.js";
2
+ //#region extensions/gradium/capability-catalog.ts
3
+ var capability_catalog_default = { speechProviders: [buildGradiumSpeechProvider()] };
4
+ //#endregion
5
+ export { capability_catalog_default as default };
@@ -1,42 +1,42 @@
1
1
  import { GRADIUM_VOICES, normalizeGradiumBaseUrl } from "./shared.js";
2
2
  import { gradiumTTS } from "./tts.js";
3
- import { resolveGeneratedMediaMaxBytes } from "openclaw/plugin-sdk/media-generation-runtime";
4
3
  import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
5
- import { trimToUndefined } from "openclaw/plugin-sdk/speech";
6
- import { resolveSpeechProviderApiKey } from "openclaw/plugin-sdk/speech-core";
7
- import { asOptionalRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
4
+ import { resolveSpeechProviderApiKey } from "openclaw/plugin-sdk/speech-provider";
5
+ import { asOptionalRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
8
6
  //#region extensions/gradium/speech-provider.ts
9
7
  function normalizeGradiumProviderConfig(rawConfig) {
10
- const raw = asOptionalRecord(asOptionalRecord(rawConfig.providers)?.gradium) ?? asOptionalRecord(rawConfig.gradium);
8
+ const providers = asOptionalRecord(rawConfig.providers);
9
+ const raw = asOptionalRecord(providers?.gradium) ?? asOptionalRecord(rawConfig.gradium);
11
10
  return {
12
11
  apiKey: normalizeResolvedSecretInputString({
13
12
  value: raw?.apiKey,
14
13
  path: "tts.providers.gradium.apiKey"
15
14
  }),
16
- baseUrl: normalizeGradiumBaseUrl(trimToUndefined(raw?.baseUrl)),
17
- voiceId: trimToUndefined(raw?.voiceId) ?? "YTpq7expH9539ERJ"
15
+ baseUrl: normalizeGradiumBaseUrl(normalizeOptionalString(raw?.baseUrl)),
16
+ voiceId: normalizeOptionalString(raw?.voiceId) ?? "YTpq7expH9539ERJ"
18
17
  };
19
18
  }
20
19
  function readGradiumProviderConfig(config) {
21
20
  const defaults = normalizeGradiumProviderConfig({});
22
21
  return {
23
- apiKey: trimToUndefined(config.apiKey) ?? defaults.apiKey,
24
- baseUrl: normalizeGradiumBaseUrl(trimToUndefined(config.baseUrl) ?? defaults.baseUrl),
25
- voiceId: trimToUndefined(config.voiceId) ?? defaults.voiceId
22
+ apiKey: normalizeOptionalString(config.apiKey) ?? defaults.apiKey,
23
+ baseUrl: normalizeGradiumBaseUrl(normalizeOptionalString(config.baseUrl) ?? defaults.baseUrl),
24
+ voiceId: normalizeOptionalString(config.voiceId) ?? defaults.voiceId
26
25
  };
27
26
  }
28
27
  function resolveGradiumApiKey(configApiKey) {
29
- return resolveSpeechProviderApiKey(trimToUndefined(configApiKey), process.env.GRADIUM_API_KEY);
28
+ return resolveSpeechProviderApiKey(normalizeOptionalString(configApiKey), process.env.GRADIUM_API_KEY);
30
29
  }
31
30
  async function synthesizeGradium(req, outputFormat) {
32
31
  const config = readGradiumProviderConfig(req.providerConfig);
33
32
  const apiKey = resolveGradiumApiKey(config.apiKey);
34
33
  if (!apiKey) throw new Error("Gradium API key missing");
34
+ const { resolveGeneratedMediaMaxBytes } = await import("openclaw/plugin-sdk/media-generation-runtime");
35
35
  return await gradiumTTS({
36
36
  text: req.text,
37
37
  apiKey,
38
38
  baseUrl: config.baseUrl,
39
- voiceId: trimToUndefined(req.providerOverrides?.voiceId) ?? config.voiceId,
39
+ voiceId: normalizeOptionalString(req.providerOverrides?.voiceId) ?? config.voiceId,
40
40
  outputFormat,
41
41
  timeoutMs: req.timeoutMs,
42
42
  maxBytes: resolveGeneratedMediaMaxBytes(req.cfg, "audio")
@@ -45,7 +45,7 @@ async function synthesizeGradium(req, outputFormat) {
45
45
  function isGradiumProviderConfigured(config) {
46
46
  if (!resolveGradiumApiKey(config.apiKey)) return false;
47
47
  try {
48
- normalizeGradiumBaseUrl(trimToUndefined(config.baseUrl));
48
+ normalizeGradiumBaseUrl(normalizeOptionalString(config.baseUrl));
49
49
  return true;
50
50
  } catch {
51
51
  return false;
package/dist/tts.js CHANGED
@@ -1,12 +1,13 @@
1
1
  import { GRADIUM_API_HOSTNAME, normalizeGradiumBaseUrl } from "./shared.js";
2
- import { assertOkOrThrowProviderError, readProviderBinaryResponse } from "openclaw/plugin-sdk/provider-http";
3
- import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/ssrf-runtime";
4
2
  //#region extensions/gradium/tts.ts
5
- const DEFAULT_TTS_MAX_BYTES = 16 * 1024 * 1024;
3
+ const DEFAULT_TTS_MAX_BYTES = 16777216;
6
4
  async function gradiumTTS(params) {
7
5
  const { text, apiKey, baseUrl, voiceId, outputFormat, timeoutMs, maxBytes = DEFAULT_TTS_MAX_BYTES } = params;
6
+ const url = `${normalizeGradiumBaseUrl(baseUrl)}/api/post/speech/tts`;
7
+ const { assertOkOrThrowProviderError, readProviderBinaryResponse } = await import("openclaw/plugin-sdk/provider-http");
8
+ const { fetchWithSsrFGuard } = await import("openclaw/plugin-sdk/ssrf-runtime");
8
9
  const { response, release } = await fetchWithSsrFGuard({
9
- url: `${normalizeGradiumBaseUrl(baseUrl)}/api/post/speech/tts`,
10
+ url,
10
11
  init: {
11
12
  method: "POST",
12
13
  headers: {
@@ -28,10 +29,10 @@ async function gradiumTTS(params) {
28
29
  });
29
30
  try {
30
31
  await assertOkOrThrowProviderError(response, "Gradium API error");
31
- return Buffer.from(await readProviderBinaryResponse(response, "Gradium API error", "audio", {
32
+ return await readProviderBinaryResponse(response, "Gradium API error", "audio", {
32
33
  maxBytes,
33
34
  onOverflow: ({ maxBytes: maxBytesLocal }) => /* @__PURE__ */ new Error(`Gradium TTS audio response exceeds ${maxBytesLocal} bytes`)
34
- }));
35
+ });
35
36
  } finally {
36
37
  await release();
37
38
  }
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "gradium",
3
+ "capabilityCatalogEntry": "./dist/capability-catalog.js",
3
4
  "activation": {
4
5
  "onStartup": false
5
6
  },
@@ -7,12 +8,16 @@
7
8
  "providers": [
8
9
  {
9
10
  "id": "gradium",
10
- "envVars": ["GRADIUM_API_KEY"]
11
+ "envVars": [
12
+ "GRADIUM_API_KEY"
13
+ ]
11
14
  }
12
15
  ]
13
16
  },
14
17
  "contracts": {
15
- "speechProviders": ["gradium"]
18
+ "speechProviders": [
19
+ "gradium"
20
+ ]
16
21
  },
17
22
  "configSchema": {
18
23
  "type": "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/gradium-speech",
3
- "version": "2026.9.1-beta.1",
3
+ "version": "2026.9.2",
4
4
  "description": "OpenClaw Gradium speech plugin.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,10 +18,10 @@
18
18
  "minHostVersion": ">=2026.6.8"
19
19
  },
20
20
  "compat": {
21
- "pluginApi": ">=2026.9.1-beta.1"
21
+ "pluginApi": ">=2026.9.2"
22
22
  },
23
23
  "build": {
24
- "openclawVersion": "2026.9.1-beta.1",
24
+ "openclawVersion": "2026.9.2",
25
25
  "bundledDist": false
26
26
  },
27
27
  "release": {
@@ -38,7 +38,7 @@
38
38
  "README.md"
39
39
  ],
40
40
  "peerDependencies": {
41
- "openclaw": ">=2026.9.1-beta.1"
41
+ "openclaw": ">=2026.9.2"
42
42
  },
43
43
  "peerDependenciesMeta": {
44
44
  "openclaw": {