speechflow 1.6.5 → 1.6.7
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.
- package/CHANGELOG.md +19 -0
- package/README.md +23 -0
- package/etc/stx.conf +5 -0
- package/package.json +4 -4
- package/speechflow-cli/dst/speechflow-main-cli.js +2 -2
- package/speechflow-cli/dst/speechflow-main-cli.js.map +1 -1
- package/speechflow-cli/dst/speechflow-main-graph.js +4 -3
- package/speechflow-cli/dst/speechflow-main-graph.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-compressor.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-compressor.js +12 -11
- package/speechflow-cli/dst/speechflow-node-a2a-compressor.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-expander.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-expander.js +12 -11
- package/speechflow-cli/dst/speechflow-node-a2a-expander.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js +2 -8
- package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-filler.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-filler.js +18 -16
- package/speechflow-cli/dst/speechflow-node-a2a-filler.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-gain.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-gain.js +8 -8
- package/speechflow-cli/dst/speechflow-node-a2a-gain.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-gender.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-gender.js +38 -34
- package/speechflow-cli/dst/speechflow-node-a2a-gender.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-meter.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-meter.js +11 -11
- package/speechflow-cli/dst/speechflow-node-a2a-meter.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-mute.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-mute.js +44 -10
- package/speechflow-cli/dst/speechflow-node-a2a-mute.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-pitch.d.ts +13 -0
- package/speechflow-cli/dst/speechflow-node-a2a-pitch.js +213 -0
- package/speechflow-cli/dst/speechflow-node-a2a-pitch.js.map +1 -0
- package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js +12 -11
- package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-speex.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-speex.js +13 -12
- package/speechflow-cli/dst/speechflow-node-a2a-speex.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-vad.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-vad.js +24 -23
- package/speechflow-cli/dst/speechflow-node-a2a-vad.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-wav.js +35 -7
- package/speechflow-cli/dst/speechflow-node-a2a-wav.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2t-amazon.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2t-amazon.js +16 -16
- package/speechflow-cli/dst/speechflow-node-a2t-amazon.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2t-deepgram.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +16 -16
- package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2t-openai.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-a2t-openai.js +15 -15
- package/speechflow-cli/dst/speechflow-node-a2t-openai.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2a-amazon.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-t2a-amazon.js +9 -9
- package/speechflow-cli/dst/speechflow-node-t2a-amazon.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js +13 -12
- package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js +4 -4
- package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-amazon.js +3 -3
- package/speechflow-cli/dst/speechflow-node-t2t-amazon.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-deepl.js +2 -2
- package/speechflow-cli/dst/speechflow-node-t2t-deepl.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-format.js +36 -2
- package/speechflow-cli/dst/speechflow-node-t2t-format.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-google.js +2 -2
- package/speechflow-cli/dst/speechflow-node-t2t-google.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-modify.js +5 -5
- package/speechflow-cli/dst/speechflow-node-t2t-modify.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-ollama.js +2 -2
- package/speechflow-cli/dst/speechflow-node-t2t-ollama.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-openai.js +2 -2
- package/speechflow-cli/dst/speechflow-node-t2t-openai.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-sentence.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-sentence.js +13 -13
- package/speechflow-cli/dst/speechflow-node-t2t-sentence.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js +2 -2
- package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-transformers.js +2 -2
- package/speechflow-cli/dst/speechflow-node-t2t-transformers.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-x2x-filter.js +2 -2
- package/speechflow-cli/dst/speechflow-node-x2x-filter.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-x2x-trace.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-x2x-trace.js +42 -8
- package/speechflow-cli/dst/speechflow-node-x2x-trace.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-device.js +3 -2
- package/speechflow-cli/dst/speechflow-node-xio-device.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-file.js +19 -18
- package/speechflow-cli/dst/speechflow-node-xio-file.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-mqtt.js +13 -13
- package/speechflow-cli/dst/speechflow-node-xio-mqtt.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-websocket.js +8 -8
- package/speechflow-cli/dst/speechflow-node-xio-websocket.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node.js +7 -7
- package/speechflow-cli/dst/speechflow-node.js.map +1 -1
- package/speechflow-cli/dst/speechflow-util-audio.js +2 -2
- package/speechflow-cli/dst/speechflow-util-audio.js.map +1 -1
- package/speechflow-cli/dst/speechflow-util-stream.d.ts +1 -0
- package/speechflow-cli/dst/speechflow-util-stream.js +22 -2
- package/speechflow-cli/dst/speechflow-util-stream.js.map +1 -1
- package/speechflow-cli/etc/oxlint.jsonc +2 -1
- package/speechflow-cli/etc/tsconfig.json +1 -0
- package/speechflow-cli/package.json +21 -21
- package/speechflow-cli/src/speechflow-main-cli.ts +2 -2
- package/speechflow-cli/src/speechflow-main-graph.ts +4 -3
- package/speechflow-cli/src/speechflow-node-a2a-compressor.ts +13 -12
- package/speechflow-cli/src/speechflow-node-a2a-expander.ts +13 -12
- package/speechflow-cli/src/speechflow-node-a2a-ffmpeg.ts +2 -8
- package/speechflow-cli/src/speechflow-node-a2a-filler.ts +19 -17
- package/speechflow-cli/src/speechflow-node-a2a-gain.ts +8 -8
- package/speechflow-cli/src/speechflow-node-a2a-gender.ts +42 -36
- package/speechflow-cli/src/speechflow-node-a2a-meter.ts +11 -11
- package/speechflow-cli/src/speechflow-node-a2a-mute.ts +11 -10
- package/speechflow-cli/src/speechflow-node-a2a-pitch.ts +221 -0
- package/speechflow-cli/src/speechflow-node-a2a-rnnoise.ts +13 -12
- package/speechflow-cli/src/speechflow-node-a2a-speex.ts +14 -13
- package/speechflow-cli/src/speechflow-node-a2a-vad.ts +24 -23
- package/speechflow-cli/src/speechflow-node-a2a-wav.ts +2 -7
- package/speechflow-cli/src/speechflow-node-a2t-amazon.ts +16 -16
- package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +16 -16
- package/speechflow-cli/src/speechflow-node-a2t-openai.ts +15 -15
- package/speechflow-cli/src/speechflow-node-t2a-amazon.ts +9 -9
- package/speechflow-cli/src/speechflow-node-t2a-elevenlabs.ts +13 -12
- package/speechflow-cli/src/speechflow-node-t2a-kokoro.ts +4 -4
- package/speechflow-cli/src/speechflow-node-t2t-amazon.ts +3 -3
- package/speechflow-cli/src/speechflow-node-t2t-deepl.ts +2 -2
- package/speechflow-cli/src/speechflow-node-t2t-format.ts +3 -2
- package/speechflow-cli/src/speechflow-node-t2t-google.ts +2 -2
- package/speechflow-cli/src/speechflow-node-t2t-modify.ts +6 -6
- package/speechflow-cli/src/speechflow-node-t2t-ollama.ts +2 -2
- package/speechflow-cli/src/speechflow-node-t2t-openai.ts +2 -2
- package/speechflow-cli/src/speechflow-node-t2t-sentence.ts +13 -13
- package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +2 -2
- package/speechflow-cli/src/speechflow-node-t2t-transformers.ts +2 -2
- package/speechflow-cli/src/speechflow-node-x2x-filter.ts +2 -2
- package/speechflow-cli/src/speechflow-node-x2x-trace.ts +10 -9
- package/speechflow-cli/src/speechflow-node-xio-device.ts +4 -3
- package/speechflow-cli/src/speechflow-node-xio-file.ts +20 -19
- package/speechflow-cli/src/speechflow-node-xio-mqtt.ts +14 -14
- package/speechflow-cli/src/speechflow-node-xio-websocket.ts +10 -10
- package/speechflow-cli/src/speechflow-node.ts +7 -7
- package/speechflow-cli/src/speechflow-util-audio.ts +2 -2
- package/speechflow-cli/src/speechflow-util-stream.ts +30 -5
- package/speechflow-ui-db/dst/app-font-fa-brands-400.woff2 +0 -0
- package/speechflow-ui-db/dst/app-font-fa-regular-400.woff2 +0 -0
- package/speechflow-ui-db/dst/app-font-fa-solid-900.woff2 +0 -0
- package/speechflow-ui-db/dst/app-font-fa-v4compatibility.woff2 +0 -0
- package/speechflow-ui-db/dst/index.css +1 -1
- package/speechflow-ui-db/dst/index.js +28 -25
- package/speechflow-ui-db/package.json +14 -14
- package/speechflow-ui-st/dst/app-font-fa-brands-400.woff2 +0 -0
- package/speechflow-ui-st/dst/app-font-fa-regular-400.woff2 +0 -0
- package/speechflow-ui-st/dst/app-font-fa-solid-900.woff2 +0 -0
- package/speechflow-ui-st/dst/app-font-fa-v4compatibility.woff2 +0 -0
- package/speechflow-ui-st/dst/index.css +1 -1
- package/speechflow-ui-st/dst/index.js +137 -51
- package/speechflow-ui-st/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speechflow-util-audio.js","sourceRoot":"","sources":["../src/speechflow-util-audio.ts"],"names":[],"mappings":";AAAA;;;;EAIE;;;;;;AASF,kDAuBC;AAGD,gDAgBC;AAGD,0CAQC;AAGD,0CAWC;AAGD,0CAQC;AAGD,0CAWC;AAGD,kEAwBC;AAGD,4DA2BC;AAGD,wBAEC;AACD,wBAEC;AApKD,6BAA6B;AAC7B,0DAA4B;AAE5B,6BAA6B;AAC7B,2DAAmE;AAEnE,6CAA6C;AAC7C,SAAgB,mBAAmB,CAC/B,MAAc,EACd,UAAU,GAAK,KAAK,EACpB,QAAQ,GAAO,EAAE,EACjB,QAAQ,GAAO,CAAC,EAChB,YAAY,GAAG,IAAI;IAEnB,+BAA+B;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACtD,IAAI,YAAY,KAAK,IAAI;QACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACnD,IAAI,UAAU,IAAI,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACnD,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACnE,IAAI,QAAQ,IAAI,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAEhD,0BAA0B;IAC1B,MAAM,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAA;IACnC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAA;IAChE,OAAO,YAAY,GAAG,UAAU,CAAA;AACpC,CAAC;AAED,4CAA4C;AAC5C,SAAgB,kBAAkB,CAC9B,GAAiB,EACjB,UAAU,GAAK,KAAK,EACpB,QAAQ,GAAO,CAAC;IAEhB,+BAA+B;IAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAChB,OAAO,CAAC,CAAA;IACZ,IAAI,UAAU,IAAI,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACnD,IAAI,QAAQ,IAAI,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAEhD,0BAA0B;IAC1B,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAA;IAC1C,OAAO,YAAY,GAAG,UAAU,CAAA;AACpC,CAAC;AAED,oFAAoF;AACpF,SAAgB,eAAe,CAAE,GAAW,EAAE,YAAY,GAAG,IAAI;IAC7D,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IACpE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"speechflow-util-audio.js","sourceRoot":"","sources":["../src/speechflow-util-audio.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,3 +16,4 @@ export declare class StreamWrapper extends Stream.Transform {
|
|
|
16
16
|
_flush(callback: Stream.TransformCallback): void;
|
|
17
17
|
_destroy(error: Error | null, callback: Stream.TransformCallback): void;
|
|
18
18
|
}
|
|
19
|
+
export declare function destroyStream(stream: Stream.Readable | Stream.Writable | Stream.Duplex | Stream.Transform): Promise<void>;
|
|
@@ -47,6 +47,7 @@ exports.createTransformStreamForReadableSide = createTransformStreamForReadableS
|
|
|
47
47
|
exports.ensureStreamChunk = ensureStreamChunk;
|
|
48
48
|
exports.streamChunkEncode = streamChunkEncode;
|
|
49
49
|
exports.streamChunkDecode = streamChunkDecode;
|
|
50
|
+
exports.destroyStream = destroyStream;
|
|
50
51
|
/* standard dependencies */
|
|
51
52
|
const node_stream_1 = __importDefault(require("node:stream"));
|
|
52
53
|
/* external dependencies */
|
|
@@ -80,7 +81,7 @@ function createTransformStreamForReadableSide(type, getTimeZero, highWaterMark)
|
|
|
80
81
|
readableObjectMode: true,
|
|
81
82
|
writableObjectMode: true,
|
|
82
83
|
decodeStrings: false,
|
|
83
|
-
highWaterMark: highWaterMark ?? (type === "audio" ? 19200
|
|
84
|
+
highWaterMark: highWaterMark ?? (type === "audio" ? 19200 /* 400ms */ : 65536 /* 64KB */),
|
|
84
85
|
transform(chunk, encoding, callback) {
|
|
85
86
|
if (chunk === null) {
|
|
86
87
|
this.push(null);
|
|
@@ -135,6 +136,8 @@ function streamChunkEncode(chunk) {
|
|
|
135
136
|
type: chunk.type,
|
|
136
137
|
payload
|
|
137
138
|
};
|
|
139
|
+
if (chunk.meta.size > 0)
|
|
140
|
+
data.meta = Array.from(chunk.meta.entries());
|
|
138
141
|
const _data = CBOR.encode(data);
|
|
139
142
|
return _data;
|
|
140
143
|
}
|
|
@@ -152,7 +155,7 @@ function streamChunkDecode(_data) {
|
|
|
152
155
|
payload = Buffer.from(data.payload);
|
|
153
156
|
else
|
|
154
157
|
payload = (new TextDecoder()).decode(data.payload);
|
|
155
|
-
const chunk = new speechflow_node_1.SpeechFlowChunk(luxon_1.Duration.fromMillis(data.timestampStart), luxon_1.Duration.fromMillis(data.timestampEnd), data.kind, data.type, payload);
|
|
158
|
+
const chunk = new speechflow_node_1.SpeechFlowChunk(luxon_1.Duration.fromMillis(data.timestampStart), luxon_1.Duration.fromMillis(data.timestampEnd), data.kind, data.type, payload, data.meta ? new Map(data.meta) : undefined);
|
|
156
159
|
return chunk;
|
|
157
160
|
}
|
|
158
161
|
/* utility class for wrapping a custom stream into a regular Transform stream */
|
|
@@ -216,4 +219,21 @@ class StreamWrapper extends node_stream_1.default.Transform {
|
|
|
216
219
|
}
|
|
217
220
|
}
|
|
218
221
|
exports.StreamWrapper = StreamWrapper;
|
|
222
|
+
/* helper function for destruction of a stream */
|
|
223
|
+
async function destroyStream(stream) {
|
|
224
|
+
/* signal the end for a writable stream */
|
|
225
|
+
if ((stream instanceof node_stream_1.default.Duplex ||
|
|
226
|
+
stream instanceof node_stream_1.default.Transform ||
|
|
227
|
+
stream instanceof node_stream_1.default.Writable) &&
|
|
228
|
+
(!stream.writableEnded &&
|
|
229
|
+
!stream.destroyed))
|
|
230
|
+
await Promise.race([
|
|
231
|
+
new Promise((resolve) => {
|
|
232
|
+
stream.end(() => { resolve(); });
|
|
233
|
+
}),
|
|
234
|
+
util.timeoutPromise(5000, "stream end timeout")
|
|
235
|
+
]);
|
|
236
|
+
/* destroy the stream */
|
|
237
|
+
stream.destroy();
|
|
238
|
+
}
|
|
219
239
|
//# sourceMappingURL=speechflow-util-stream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speechflow-util-stream.js","sourceRoot":"","sources":["../src/speechflow-util-stream.ts"],"names":[],"mappings":";AAAA;;;;EAIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeF,oFAeC;AAID,oFA6BC;AAGD,8CAYC;
|
|
1
|
+
{"version":3,"file":"speechflow-util-stream.js","sourceRoot":"","sources":["../src/speechflow-util-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,16 +22,15 @@
|
|
|
22
22
|
"@gpeng/naudiodon": "2.4.1",
|
|
23
23
|
"@deepgram/sdk": "4.11.2",
|
|
24
24
|
"deepl-node": "1.19.1",
|
|
25
|
-
"@elevenlabs/elevenlabs-js": "2.
|
|
26
|
-
"stream-transform": "3.4.0",
|
|
25
|
+
"@elevenlabs/elevenlabs-js": "2.17.0",
|
|
27
26
|
"get-stream": "9.0.1",
|
|
28
|
-
"@dotenvx/dotenvx": "1.
|
|
27
|
+
"@dotenvx/dotenvx": "1.51.0",
|
|
29
28
|
"speex-resampler": "3.0.1",
|
|
30
29
|
"@sapphi-red/speex-preprocess-wasm": "0.4.0",
|
|
31
30
|
"@shiguredo/rnnoise-wasm": "2025.1.5",
|
|
32
|
-
"@aws-sdk/client-transcribe-streaming": "3.
|
|
33
|
-
"@aws-sdk/client-translate": "3.
|
|
34
|
-
"@aws-sdk/client-polly": "3.
|
|
31
|
+
"@aws-sdk/client-transcribe-streaming": "3.901.0",
|
|
32
|
+
"@aws-sdk/client-translate": "3.901.0",
|
|
33
|
+
"@aws-sdk/client-polly": "3.901.0",
|
|
35
34
|
"@google-cloud/translate": "9.2.0",
|
|
36
35
|
"node-web-audio-api": "1.0.4",
|
|
37
36
|
"object-path": "0.11.8",
|
|
@@ -45,8 +44,8 @@
|
|
|
45
44
|
"hapi-plugin-header": "1.1.8",
|
|
46
45
|
"hapi-plugin-websocket": "2.4.11",
|
|
47
46
|
"@opensumi/reconnecting-websocket": "4.4.0",
|
|
48
|
-
"ollama": "0.
|
|
49
|
-
"openai": "
|
|
47
|
+
"ollama": "0.6.0",
|
|
48
|
+
"openai": "6.1.0",
|
|
50
49
|
"@rse/ffmpeg": "1.4.2",
|
|
51
50
|
"ffmpeg-stream": "1.0.1",
|
|
52
51
|
"installed-packages": "1.0.13",
|
|
@@ -58,7 +57,7 @@
|
|
|
58
57
|
"pure-uuid": "1.8.1",
|
|
59
58
|
"wavefile": "11.0.0",
|
|
60
59
|
"audio-inspect": "0.0.4",
|
|
61
|
-
"@huggingface/transformers": "3.7.
|
|
60
|
+
"@huggingface/transformers": "3.7.5",
|
|
62
61
|
"kokoro-js": "1.2.1",
|
|
63
62
|
"@ericedouard/vad-node-realtime": "0.2.0",
|
|
64
63
|
"osc-js": "2.4.1",
|
|
@@ -66,24 +65,25 @@
|
|
|
66
65
|
"node-interval-tree": "2.1.2",
|
|
67
66
|
"wrap-text": "1.0.10",
|
|
68
67
|
"cli-table3": "0.6.5",
|
|
68
|
+
"@soundtouchjs/audio-worklet": "0.2.1",
|
|
69
69
|
"@rse/stx": "1.1.2"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
|
-
"eslint": "9.
|
|
73
|
-
"@eslint/js": "9.
|
|
72
|
+
"eslint": "9.37.0",
|
|
73
|
+
"@eslint/js": "9.37.0",
|
|
74
74
|
"neostandard": "0.12.2",
|
|
75
75
|
"eslint-plugin-promise": "7.2.1",
|
|
76
76
|
"eslint-plugin-import": "2.32.0",
|
|
77
77
|
"eslint-plugin-node": "11.1.0",
|
|
78
|
-
"typescript-eslint": "8.
|
|
79
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
80
|
-
"@typescript-eslint/parser": "8.
|
|
81
|
-
"oxlint": "1.
|
|
82
|
-
"eslint-plugin-oxlint": "1.
|
|
78
|
+
"typescript-eslint": "8.45.0",
|
|
79
|
+
"@typescript-eslint/eslint-plugin": "8.45.0",
|
|
80
|
+
"@typescript-eslint/parser": "8.45.0",
|
|
81
|
+
"oxlint": "1.19.0",
|
|
82
|
+
"eslint-plugin-oxlint": "1.19.0",
|
|
83
83
|
"@biomejs/biome": "2.0.6",
|
|
84
84
|
"eslint-config-biome": "2.1.3",
|
|
85
85
|
|
|
86
|
-
"@types/node": "24.
|
|
86
|
+
"@types/node": "24.6.2",
|
|
87
87
|
"@types/yargs": "17.0.33",
|
|
88
88
|
"@types/js-yaml": "4.0.9",
|
|
89
89
|
"@types/object-path": "0.11.4",
|
|
@@ -93,14 +93,14 @@
|
|
|
93
93
|
"@types/luxon": "3.7.1",
|
|
94
94
|
"@types/wrap-text": "1.0.2",
|
|
95
95
|
|
|
96
|
-
"patch-package": "8.0.
|
|
96
|
+
"patch-package": "8.0.1",
|
|
97
97
|
"stmux": "1.8.11",
|
|
98
98
|
"nodemon": "3.1.10",
|
|
99
99
|
"shx": "0.4.0",
|
|
100
|
-
"@yao-pkg/pkg": "6.
|
|
101
|
-
"typescript": "5.9.
|
|
100
|
+
"@yao-pkg/pkg": "6.7.0",
|
|
101
|
+
"typescript": "5.9.3",
|
|
102
102
|
"delay-cli": "2.0.0",
|
|
103
|
-
"cross-env": "10.
|
|
103
|
+
"cross-env": "10.1.0"
|
|
104
104
|
},
|
|
105
105
|
"overrides": {
|
|
106
106
|
"@huggingface/transformers": { "onnxruntime-node": "1.23.0-dev.20250703-7fc6235861" }
|
|
@@ -69,7 +69,7 @@ export class CLIContext {
|
|
|
69
69
|
"[-p|--port <tcp-port>] " +
|
|
70
70
|
"[-C|--cache <directory>] " +
|
|
71
71
|
"[-d|--dashboard <type>:<id>:<name>[,...]] " +
|
|
72
|
-
"[-o|--osc <ip-address>:<udp-port> " +
|
|
72
|
+
"[-o|--osc <ip-address>:<udp-port>] " +
|
|
73
73
|
"[-e|--expression <expression>] " +
|
|
74
74
|
"[-f|--file <file>] " +
|
|
75
75
|
"[-c|--config <id>@<yaml-config-file>] " +
|
|
@@ -252,7 +252,7 @@ export class CLIContext {
|
|
|
252
252
|
if (this.debug)
|
|
253
253
|
process.stderr.write(`${pkg.name}: ${chalk.red("ERROR")}: ${err.message}\n${err.stack}\n`)
|
|
254
254
|
else
|
|
255
|
-
process.stderr.write(`${pkg.name}: ${chalk.red("ERROR")}: ${err.message}`)
|
|
255
|
+
process.stderr.write(`${pkg.name}: ${chalk.red("ERROR")}: ${err.message}\n`)
|
|
256
256
|
}
|
|
257
257
|
process.exit(1)
|
|
258
258
|
}
|
|
@@ -76,7 +76,8 @@ export class NodeGraph {
|
|
|
76
76
|
if (!objectPath.has(variables, id))
|
|
77
77
|
throw new Error(`failed to resolve variable "${id}"`)
|
|
78
78
|
const value = objectPath.get(variables, id)
|
|
79
|
-
|
|
79
|
+
const sensitive = /(?:key|secret|token|password)/i.test(id)
|
|
80
|
+
this.cli.log("info", `resolve variable: "${id}" -> "${sensitive ? "***" : value}"`)
|
|
80
81
|
return value
|
|
81
82
|
},
|
|
82
83
|
createNode: (id: string, opts: { [ id: string ]: any }, args: any[]) => {
|
|
@@ -100,8 +101,8 @@ export class NodeGraph {
|
|
|
100
101
|
process.exit(1)
|
|
101
102
|
}
|
|
102
103
|
const params = Object.keys(node.params).map((key) => {
|
|
103
|
-
if (key.
|
|
104
|
-
return `${key}:
|
|
104
|
+
if (/(?:key|secret|token|password)/i.test(key))
|
|
105
|
+
return `${key}: ***`
|
|
105
106
|
else
|
|
106
107
|
return `${key}: ${JSON.stringify(node.params[key])}`
|
|
107
108
|
}).join(", ")
|
|
@@ -137,8 +137,6 @@ class AudioCompressor extends util.WebAudio {
|
|
|
137
137
|
|
|
138
138
|
/* destroy the compressor */
|
|
139
139
|
public async destroy (): Promise<void> {
|
|
140
|
-
await super.destroy()
|
|
141
|
-
|
|
142
140
|
/* destroy nodes */
|
|
143
141
|
if (this.compressorNode !== null) {
|
|
144
142
|
this.compressorNode.disconnect()
|
|
@@ -148,6 +146,9 @@ class AudioCompressor extends util.WebAudio {
|
|
|
148
146
|
this.gainNode.disconnect()
|
|
149
147
|
this.gainNode = null
|
|
150
148
|
}
|
|
149
|
+
|
|
150
|
+
/* destroy parent */
|
|
151
|
+
await super.destroy()
|
|
151
152
|
}
|
|
152
153
|
}
|
|
153
154
|
|
|
@@ -157,7 +158,7 @@ export default class SpeechFlowNodeA2ACompressor extends SpeechFlowNode {
|
|
|
157
158
|
public static name = "a2a-compressor"
|
|
158
159
|
|
|
159
160
|
/* internal state */
|
|
160
|
-
private
|
|
161
|
+
private closing = false
|
|
161
162
|
private compressor: AudioCompressor | null = null
|
|
162
163
|
private bus: EventEmitter | null = null
|
|
163
164
|
private intervalId: ReturnType<typeof setInterval> | null = null
|
|
@@ -193,7 +194,7 @@ export default class SpeechFlowNodeA2ACompressor extends SpeechFlowNode {
|
|
|
193
194
|
/* open node */
|
|
194
195
|
async open () {
|
|
195
196
|
/* clear destruction flag */
|
|
196
|
-
this.
|
|
197
|
+
this.closing = false
|
|
197
198
|
|
|
198
199
|
/* setup compressor */
|
|
199
200
|
this.compressor = new AudioCompressor(
|
|
@@ -234,7 +235,7 @@ export default class SpeechFlowNodeA2ACompressor extends SpeechFlowNode {
|
|
|
234
235
|
writableObjectMode: true,
|
|
235
236
|
decodeStrings: false,
|
|
236
237
|
transform (chunk: SpeechFlowChunk & { payload: Buffer }, encoding, callback) {
|
|
237
|
-
if (self.
|
|
238
|
+
if (self.closing) {
|
|
238
239
|
callback(new Error("stream already destroyed"))
|
|
239
240
|
return
|
|
240
241
|
}
|
|
@@ -244,7 +245,7 @@ export default class SpeechFlowNodeA2ACompressor extends SpeechFlowNode {
|
|
|
244
245
|
/* compress chunk */
|
|
245
246
|
const payload = util.convertBufToI16(chunk.payload)
|
|
246
247
|
self.compressor?.process(payload).then((result) => {
|
|
247
|
-
if (self.
|
|
248
|
+
if (self.closing)
|
|
248
249
|
throw new Error("stream already destroyed")
|
|
249
250
|
if ((self.params.type === "standalone" && self.params.mode === "compress") ||
|
|
250
251
|
(self.params.type === "sidechain" && self.params.mode === "adjust") ) {
|
|
@@ -255,13 +256,13 @@ export default class SpeechFlowNodeA2ACompressor extends SpeechFlowNode {
|
|
|
255
256
|
this.push(chunk)
|
|
256
257
|
callback()
|
|
257
258
|
}).catch((error: unknown) => {
|
|
258
|
-
if (!self.
|
|
259
|
+
if (!self.closing)
|
|
259
260
|
callback(util.ensureError(error, "compression failed"))
|
|
260
261
|
})
|
|
261
262
|
}
|
|
262
263
|
},
|
|
263
264
|
final (callback) {
|
|
264
|
-
if (self.
|
|
265
|
+
if (self.closing) {
|
|
265
266
|
callback()
|
|
266
267
|
return
|
|
267
268
|
}
|
|
@@ -273,8 +274,8 @@ export default class SpeechFlowNodeA2ACompressor extends SpeechFlowNode {
|
|
|
273
274
|
|
|
274
275
|
/* close node */
|
|
275
276
|
async close () {
|
|
276
|
-
/* indicate
|
|
277
|
-
this.
|
|
277
|
+
/* indicate closing */
|
|
278
|
+
this.closing = true
|
|
278
279
|
|
|
279
280
|
/* clear interval */
|
|
280
281
|
if (this.intervalId !== null) {
|
|
@@ -294,9 +295,9 @@ export default class SpeechFlowNodeA2ACompressor extends SpeechFlowNode {
|
|
|
294
295
|
this.compressor = null
|
|
295
296
|
}
|
|
296
297
|
|
|
297
|
-
/*
|
|
298
|
+
/* shutdown stream */
|
|
298
299
|
if (this.stream !== null) {
|
|
299
|
-
this.stream
|
|
300
|
+
await util.destroyStream(this.stream)
|
|
300
301
|
this.stream = null
|
|
301
302
|
}
|
|
302
303
|
}
|
|
@@ -87,13 +87,14 @@ class AudioExpander extends util.WebAudio {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
public async destroy (): Promise<void> {
|
|
90
|
-
await super.destroy()
|
|
91
|
-
|
|
92
90
|
/* destroy expander node */
|
|
93
91
|
if (this.expanderNode !== null) {
|
|
94
92
|
this.expanderNode.disconnect()
|
|
95
93
|
this.expanderNode = null
|
|
96
94
|
}
|
|
95
|
+
|
|
96
|
+
/* destroy parent */
|
|
97
|
+
await super.destroy()
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
|
|
@@ -103,7 +104,7 @@ export default class SpeechFlowNodeA2AExpander extends SpeechFlowNode {
|
|
|
103
104
|
public static name = "a2a-expander"
|
|
104
105
|
|
|
105
106
|
/* internal state */
|
|
106
|
-
private
|
|
107
|
+
private closing = false
|
|
107
108
|
private expander: AudioExpander | null = null
|
|
108
109
|
|
|
109
110
|
/* construct node */
|
|
@@ -133,7 +134,7 @@ export default class SpeechFlowNodeA2AExpander extends SpeechFlowNode {
|
|
|
133
134
|
/* open node */
|
|
134
135
|
async open () {
|
|
135
136
|
/* clear destruction flag */
|
|
136
|
-
this.
|
|
137
|
+
this.closing = false
|
|
137
138
|
|
|
138
139
|
/* setup expander */
|
|
139
140
|
this.expander = new AudioExpander(
|
|
@@ -157,7 +158,7 @@ export default class SpeechFlowNodeA2AExpander extends SpeechFlowNode {
|
|
|
157
158
|
writableObjectMode: true,
|
|
158
159
|
decodeStrings: false,
|
|
159
160
|
transform (chunk: SpeechFlowChunk & { payload: Buffer }, encoding, callback) {
|
|
160
|
-
if (self.
|
|
161
|
+
if (self.closing) {
|
|
161
162
|
callback(new Error("stream already destroyed"))
|
|
162
163
|
return
|
|
163
164
|
}
|
|
@@ -167,7 +168,7 @@ export default class SpeechFlowNodeA2AExpander extends SpeechFlowNode {
|
|
|
167
168
|
/* expand chunk */
|
|
168
169
|
const payload = util.convertBufToI16(chunk.payload)
|
|
169
170
|
self.expander?.process(payload).then((result) => {
|
|
170
|
-
if (self.
|
|
171
|
+
if (self.closing)
|
|
171
172
|
throw new Error("stream already destroyed")
|
|
172
173
|
|
|
173
174
|
/* take over expanded data */
|
|
@@ -176,13 +177,13 @@ export default class SpeechFlowNodeA2AExpander extends SpeechFlowNode {
|
|
|
176
177
|
this.push(chunk)
|
|
177
178
|
callback()
|
|
178
179
|
}).catch((error: unknown) => {
|
|
179
|
-
if (!self.
|
|
180
|
+
if (!self.closing)
|
|
180
181
|
callback(util.ensureError(error, "expansion failed"))
|
|
181
182
|
})
|
|
182
183
|
}
|
|
183
184
|
},
|
|
184
185
|
final (callback) {
|
|
185
|
-
if (self.
|
|
186
|
+
if (self.closing) {
|
|
186
187
|
callback()
|
|
187
188
|
return
|
|
188
189
|
}
|
|
@@ -194,8 +195,8 @@ export default class SpeechFlowNodeA2AExpander extends SpeechFlowNode {
|
|
|
194
195
|
|
|
195
196
|
/* close node */
|
|
196
197
|
async close () {
|
|
197
|
-
/* indicate
|
|
198
|
-
this.
|
|
198
|
+
/* indicate closing */
|
|
199
|
+
this.closing = true
|
|
199
200
|
|
|
200
201
|
/* destroy expander */
|
|
201
202
|
if (this.expander !== null) {
|
|
@@ -203,9 +204,9 @@ export default class SpeechFlowNodeA2AExpander extends SpeechFlowNode {
|
|
|
203
204
|
this.expander = null
|
|
204
205
|
}
|
|
205
206
|
|
|
206
|
-
/*
|
|
207
|
+
/* shutdown stream */
|
|
207
208
|
if (this.stream !== null) {
|
|
208
|
-
this.stream
|
|
209
|
+
await util.destroyStream(this.stream)
|
|
209
210
|
this.stream = null
|
|
210
211
|
}
|
|
211
212
|
}
|
|
@@ -106,15 +106,9 @@ export default class SpeechFlowNodeA2AFFMPEG extends SpeechFlowNode {
|
|
|
106
106
|
|
|
107
107
|
/* close node */
|
|
108
108
|
async close () {
|
|
109
|
-
/*
|
|
109
|
+
/* shutdown stream */
|
|
110
110
|
if (this.stream !== null) {
|
|
111
|
-
await
|
|
112
|
-
if (this.stream instanceof Stream.Duplex)
|
|
113
|
-
this.stream.end(() => { resolve() })
|
|
114
|
-
else
|
|
115
|
-
resolve()
|
|
116
|
-
})
|
|
117
|
-
this.stream.destroy()
|
|
111
|
+
await util.destroyStream(this.stream)
|
|
118
112
|
this.stream = null
|
|
119
113
|
}
|
|
120
114
|
|
|
@@ -44,14 +44,14 @@ class AudioFiller extends EventEmitter {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/* emit a chunk of silence */
|
|
47
|
-
private emitSilence (fromSamples: number, toSamples: number) {
|
|
47
|
+
private emitSilence (fromSamples: number, toSamples: number, meta?: Map<string, any>) {
|
|
48
48
|
const frames = Math.max(0, Math.floor(toSamples - fromSamples))
|
|
49
49
|
if (frames <= 0)
|
|
50
50
|
return
|
|
51
51
|
const payload = Buffer.alloc(frames * this.bytesPerFrame) /* already zeroed */
|
|
52
52
|
const timestampStart = this.durationFromSamples(fromSamples)
|
|
53
53
|
const timestampEnd = this.durationFromSamples(toSamples)
|
|
54
|
-
const chunk = new SpeechFlowChunk(timestampStart, timestampEnd, "final", "audio", payload)
|
|
54
|
+
const chunk = new SpeechFlowChunk(timestampStart, timestampEnd, "final", "audio", payload, meta ? new Map(meta) : undefined)
|
|
55
55
|
this.emit("chunk", chunk)
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -64,7 +64,7 @@ class AudioFiller extends EventEmitter {
|
|
|
64
64
|
|
|
65
65
|
/* if chunk starts beyond what we've emitted, insert silence for the gap */
|
|
66
66
|
if (startSamp > this.emittedEndSamples + this.sampleTolerance) {
|
|
67
|
-
this.emitSilence(this.emittedEndSamples, startSamp)
|
|
67
|
+
this.emitSilence(this.emittedEndSamples, startSamp, chunk.meta)
|
|
68
68
|
this.emittedEndSamples = startSamp
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -95,7 +95,7 @@ class AudioFiller extends EventEmitter {
|
|
|
95
95
|
const outEndSamples = outStartSamples + Math.floor(payload.length / this.bytesPerFrame)
|
|
96
96
|
const timestampStart = this.durationFromSamples(outStartSamples)
|
|
97
97
|
const timestampEnd = this.durationFromSamples(outEndSamples)
|
|
98
|
-
const c = new SpeechFlowChunk(timestampStart, timestampEnd, "final", "audio", payload)
|
|
98
|
+
const c = new SpeechFlowChunk(timestampStart, timestampEnd, "final", "audio", payload, new Map(chunk.meta))
|
|
99
99
|
this.emit("chunk", c)
|
|
100
100
|
|
|
101
101
|
/* advance emitted cursor */
|
|
@@ -109,7 +109,7 @@ export default class SpeechFlowNodeA2AFiller extends SpeechFlowNode {
|
|
|
109
109
|
public static name = "a2a-filler"
|
|
110
110
|
|
|
111
111
|
/* internal state */
|
|
112
|
-
private
|
|
112
|
+
private closing = false
|
|
113
113
|
private filler: AudioFiller | null = null
|
|
114
114
|
private sendQueue: util.AsyncQueue<SpeechFlowChunk | null> | null = null
|
|
115
115
|
|
|
@@ -130,7 +130,7 @@ export default class SpeechFlowNodeA2AFiller extends SpeechFlowNode {
|
|
|
130
130
|
/* open node */
|
|
131
131
|
async open () {
|
|
132
132
|
/* clear destruction flag */
|
|
133
|
-
this.
|
|
133
|
+
this.closing = false
|
|
134
134
|
|
|
135
135
|
/* establish queues */
|
|
136
136
|
this.filler = new AudioFiller(this.config.audioSampleRate, this.config.audioChannels)
|
|
@@ -148,27 +148,29 @@ export default class SpeechFlowNodeA2AFiller extends SpeechFlowNode {
|
|
|
148
148
|
writableObjectMode: true,
|
|
149
149
|
decodeStrings: false,
|
|
150
150
|
write (chunk: SpeechFlowChunk & { type: "audio", payload: Buffer }, encoding, callback) {
|
|
151
|
-
if (self.
|
|
151
|
+
if (self.closing || self.filler === null)
|
|
152
152
|
callback(new Error("stream already destroyed"))
|
|
153
153
|
else if (!Buffer.isBuffer(chunk.payload))
|
|
154
154
|
callback(new Error("invalid chunk payload type"))
|
|
155
155
|
else {
|
|
156
156
|
try {
|
|
157
|
+
if (self.closing || self.filler === null)
|
|
158
|
+
throw new Error("stream already destroyed")
|
|
157
159
|
self.filler.add(chunk)
|
|
158
160
|
callback()
|
|
159
161
|
}
|
|
160
|
-
catch (error:
|
|
161
|
-
callback(error)
|
|
162
|
+
catch (error: unknown) {
|
|
163
|
+
callback(util.ensureError(error))
|
|
162
164
|
}
|
|
163
165
|
}
|
|
164
166
|
},
|
|
165
167
|
read (size) {
|
|
166
|
-
if (self.
|
|
168
|
+
if (self.closing || self.sendQueue === null) {
|
|
167
169
|
this.push(null)
|
|
168
170
|
return
|
|
169
171
|
}
|
|
170
172
|
self.sendQueue.read().then((chunk) => {
|
|
171
|
-
if (self.
|
|
173
|
+
if (self.closing || self.sendQueue === null) {
|
|
172
174
|
this.push(null)
|
|
173
175
|
return
|
|
174
176
|
}
|
|
@@ -181,12 +183,12 @@ export default class SpeechFlowNodeA2AFiller extends SpeechFlowNode {
|
|
|
181
183
|
this.push(chunk)
|
|
182
184
|
}
|
|
183
185
|
}).catch((error: unknown) => {
|
|
184
|
-
if (!self.
|
|
186
|
+
if (!self.closing && self.sendQueue !== null)
|
|
185
187
|
self.log("error", `queue read error: ${util.ensureError(error).message}`)
|
|
186
188
|
})
|
|
187
189
|
},
|
|
188
190
|
final (callback) {
|
|
189
|
-
if (self.
|
|
191
|
+
if (self.closing) {
|
|
190
192
|
callback()
|
|
191
193
|
return
|
|
192
194
|
}
|
|
@@ -198,8 +200,8 @@ export default class SpeechFlowNodeA2AFiller extends SpeechFlowNode {
|
|
|
198
200
|
|
|
199
201
|
/* close node */
|
|
200
202
|
async close () {
|
|
201
|
-
/* indicate
|
|
202
|
-
this.
|
|
203
|
+
/* indicate closing */
|
|
204
|
+
this.closing = true
|
|
203
205
|
|
|
204
206
|
/* destroy queues */
|
|
205
207
|
if (this.sendQueue !== null) {
|
|
@@ -213,9 +215,9 @@ export default class SpeechFlowNodeA2AFiller extends SpeechFlowNode {
|
|
|
213
215
|
this.filler = null
|
|
214
216
|
}
|
|
215
217
|
|
|
216
|
-
/*
|
|
218
|
+
/* shutdown stream */
|
|
217
219
|
if (this.stream !== null) {
|
|
218
|
-
this.stream
|
|
220
|
+
await util.destroyStream(this.stream)
|
|
219
221
|
this.stream = null
|
|
220
222
|
}
|
|
221
223
|
}
|