@@ -12,7 +12,10 @@ import type {
1212 SpeechProviderPlugin ,
1313} from "openclaw/plugin-sdk/speech-core" ;
1414import { asObject , trimToUndefined } from "openclaw/plugin-sdk/speech-core" ;
15- import { asFiniteNumberInRange } from "openclaw/plugin-sdk/string-coerce-runtime" ;
15+ import {
16+ asFiniteNumberInRange ,
17+ parseStrictFiniteNumber ,
18+ } from "openclaw/plugin-sdk/string-coerce-runtime" ;
1619import {
1720 DEFAULT_MINIMAX_TTS_BASE_URL ,
1821 MINIMAX_TTS_MODELS ,
@@ -128,6 +131,10 @@ function normalizeMinimaxPitch(value: unknown): number | undefined {
128131 return pitch !== undefined ? Math . trunc ( pitch ) : undefined ;
129132}
130133
134+ function parseDirectiveFiniteNumber ( value : string ) : number | undefined {
135+ return parseStrictFiniteNumber ( value ) ;
136+ }
137+
131138function readMinimaxProviderConfig (
132139 config : SpeechProviderConfig ,
133140 cfg ?: OpenClawConfig ,
@@ -185,8 +192,8 @@ function parseDirectiveToken(ctx: SpeechDirectiveTokenParseContext): {
185192 if ( ! ctx . policy . allowVoiceSettings ) {
186193 return { handled : true } ;
187194 }
188- const speed = Number ( ctx . value ) ;
189- if ( ! Number . isFinite ( speed ) || speed < 0.5 || speed > 2.0 ) {
195+ const speed = parseDirectiveFiniteNumber ( ctx . value ) ;
196+ if ( speed === undefined || speed < 0.5 || speed > 2.0 ) {
190197 return { handled : true , warnings : [ `invalid MiniMax speed "${ ctx . value } " (0.5-2.0)` ] } ;
191198 }
192199 return { handled : true , overrides : { speed } } ;
@@ -196,8 +203,8 @@ function parseDirectiveToken(ctx: SpeechDirectiveTokenParseContext): {
196203 if ( ! ctx . policy . allowVoiceSettings ) {
197204 return { handled : true } ;
198205 }
199- const vol = Number ( ctx . value ) ;
200- if ( ! Number . isFinite ( vol ) || vol <= 0 || vol > 10 ) {
206+ const vol = parseDirectiveFiniteNumber ( ctx . value ) ;
207+ if ( vol === undefined || vol <= 0 || vol > 10 ) {
201208 return {
202209 handled : true ,
203210 warnings : [ `invalid MiniMax volume "${ ctx . value } " (0-10, exclusive)` ] ,
@@ -209,8 +216,8 @@ function parseDirectiveToken(ctx: SpeechDirectiveTokenParseContext): {
209216 if ( ! ctx . policy . allowVoiceSettings ) {
210217 return { handled : true } ;
211218 }
212- const pitch = Number ( ctx . value ) ;
213- if ( ! Number . isFinite ( pitch ) || pitch < - 12 || pitch > 12 ) {
219+ const pitch = parseDirectiveFiniteNumber ( ctx . value ) ;
220+ if ( pitch === undefined || pitch < - 12 || pitch > 12 ) {
214221 return { handled : true , warnings : [ `invalid MiniMax pitch "${ ctx . value } " (-12 to 12)` ] } ;
215222 }
216223 return { handled : true , overrides : { pitch } } ;
0 commit comments