speechflow 2.2.0 → 2.3.0

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.
Files changed (238) hide show
  1. package/{etc/claude.md → AGENTS.md} +8 -3
  2. package/CHANGELOG.md +78 -1
  3. package/README.md +28 -4
  4. package/etc/speechflow.yaml +3 -1
  5. package/etc/stx.conf +1 -1
  6. package/package.json +6 -6
  7. package/speechflow-cli/dst/speechflow-main-api.d.ts +2 -1
  8. package/speechflow-cli/dst/speechflow-main-api.js +57 -16
  9. package/speechflow-cli/dst/speechflow-main-api.js.map +1 -1
  10. package/speechflow-cli/dst/speechflow-main-cli.js +2 -2
  11. package/speechflow-cli/dst/speechflow-main-config.js +1 -1
  12. package/speechflow-cli/dst/speechflow-main-graph.js +55 -21
  13. package/speechflow-cli/dst/speechflow-main-graph.js.map +1 -1
  14. package/speechflow-cli/dst/speechflow-main-nodes.js +1 -1
  15. package/speechflow-cli/dst/speechflow-main-status.js +6 -3
  16. package/speechflow-cli/dst/speechflow-main-status.js.map +1 -1
  17. package/speechflow-cli/dst/speechflow-main.js +1 -1
  18. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js +7 -10
  19. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js.map +1 -1
  20. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js +8 -6
  21. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js.map +1 -1
  22. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js +9 -5
  23. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js.map +1 -1
  24. package/speechflow-cli/dst/speechflow-node-a2a-expander.js +6 -5
  25. package/speechflow-cli/dst/speechflow-node-a2a-expander.js.map +1 -1
  26. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js +2 -2
  27. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js.map +1 -1
  28. package/speechflow-cli/dst/speechflow-node-a2a-filler.js +2 -4
  29. package/speechflow-cli/dst/speechflow-node-a2a-filler.js.map +1 -1
  30. package/speechflow-cli/dst/speechflow-node-a2a-gain.js +1 -1
  31. package/speechflow-cli/dst/speechflow-node-a2a-gender.js +20 -12
  32. package/speechflow-cli/dst/speechflow-node-a2a-gender.js.map +1 -1
  33. package/speechflow-cli/dst/speechflow-node-a2a-gtcrn-wt.js +1 -1
  34. package/speechflow-cli/dst/speechflow-node-a2a-gtcrn.js +33 -11
  35. package/speechflow-cli/dst/speechflow-node-a2a-gtcrn.js.map +1 -1
  36. package/speechflow-cli/dst/speechflow-node-a2a-meter.js +1 -1
  37. package/speechflow-cli/dst/speechflow-node-a2a-mute.js +1 -1
  38. package/speechflow-cli/dst/speechflow-node-a2a-pitch.js +4 -3
  39. package/speechflow-cli/dst/speechflow-node-a2a-pitch.js.map +1 -1
  40. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise-wt.js +2 -2
  41. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise-wt.js.map +1 -1
  42. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js +19 -11
  43. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js.map +1 -1
  44. package/speechflow-cli/dst/speechflow-node-a2a-speex.js +8 -8
  45. package/speechflow-cli/dst/speechflow-node-a2a-speex.js.map +1 -1
  46. package/speechflow-cli/dst/speechflow-node-a2a-vad.js +33 -29
  47. package/speechflow-cli/dst/speechflow-node-a2a-vad.js.map +1 -1
  48. package/speechflow-cli/dst/speechflow-node-a2a-wav.js +6 -5
  49. package/speechflow-cli/dst/speechflow-node-a2a-wav.js.map +1 -1
  50. package/speechflow-cli/dst/speechflow-node-a2t-amazon.d.ts +2 -1
  51. package/speechflow-cli/dst/speechflow-node-a2t-amazon.js +34 -20
  52. package/speechflow-cli/dst/speechflow-node-a2t-amazon.js.map +1 -1
  53. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +13 -5
  54. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -1
  55. package/speechflow-cli/dst/speechflow-node-a2t-google.js +3 -2
  56. package/speechflow-cli/dst/speechflow-node-a2t-google.js.map +1 -1
  57. package/speechflow-cli/dst/speechflow-node-a2t-openai.js +33 -27
  58. package/speechflow-cli/dst/speechflow-node-a2t-openai.js.map +1 -1
  59. package/speechflow-cli/dst/speechflow-node-t2a-amazon.js +16 -5
  60. package/speechflow-cli/dst/speechflow-node-t2a-amazon.js.map +1 -1
  61. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js +17 -5
  62. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js.map +1 -1
  63. package/speechflow-cli/dst/speechflow-node-t2a-google.js +17 -5
  64. package/speechflow-cli/dst/speechflow-node-t2a-google.js.map +1 -1
  65. package/speechflow-cli/dst/{speechflow-node-t2t-simulator.d.ts → speechflow-node-t2a-kitten.d.ts} +5 -1
  66. package/speechflow-cli/dst/speechflow-node-t2a-kitten.js +194 -0
  67. package/speechflow-cli/dst/speechflow-node-t2a-kitten.js.map +1 -0
  68. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js +21 -9
  69. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js.map +1 -1
  70. package/speechflow-cli/dst/speechflow-node-t2a-openai.js +17 -5
  71. package/speechflow-cli/dst/speechflow-node-t2a-openai.js.map +1 -1
  72. package/speechflow-cli/dst/speechflow-node-t2a-supertonic.js +21 -7
  73. package/speechflow-cli/dst/speechflow-node-t2a-supertonic.js.map +1 -1
  74. package/speechflow-cli/dst/speechflow-node-t2t-amazon.js +1 -1
  75. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js +1 -1
  76. package/speechflow-cli/dst/speechflow-node-t2t-format.js +1 -1
  77. package/speechflow-cli/dst/speechflow-node-t2t-google.js +4 -2
  78. package/speechflow-cli/dst/speechflow-node-t2t-google.js.map +1 -1
  79. package/speechflow-cli/dst/speechflow-node-t2t-modify.js +1 -1
  80. package/speechflow-cli/dst/speechflow-node-t2t-opus.js +1 -1
  81. package/speechflow-cli/dst/speechflow-node-t2t-profanity.js +1 -1
  82. package/speechflow-cli/dst/speechflow-node-t2t-punctuation.js +1 -1
  83. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js +1 -1
  84. package/speechflow-cli/dst/speechflow-node-t2t-spellcheck.js +1 -1
  85. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js +34 -14
  86. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js.map +1 -1
  87. package/speechflow-cli/dst/speechflow-node-t2t-summary.js +3 -3
  88. package/speechflow-cli/dst/speechflow-node-t2t-summary.js.map +1 -1
  89. package/speechflow-cli/dst/speechflow-node-t2t-translate.js +1 -1
  90. package/speechflow-cli/dst/speechflow-node-x2x-filter.js +3 -2
  91. package/speechflow-cli/dst/speechflow-node-x2x-filter.js.map +1 -1
  92. package/speechflow-cli/dst/speechflow-node-x2x-trace.js +1 -1
  93. package/speechflow-cli/dst/speechflow-node-xio-device.js +18 -7
  94. package/speechflow-cli/dst/speechflow-node-xio-device.js.map +1 -1
  95. package/speechflow-cli/dst/speechflow-node-xio-exec.js +23 -11
  96. package/speechflow-cli/dst/speechflow-node-xio-exec.js.map +1 -1
  97. package/speechflow-cli/dst/speechflow-node-xio-file.js +13 -7
  98. package/speechflow-cli/dst/speechflow-node-xio-file.js.map +1 -1
  99. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js +25 -12
  100. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js.map +1 -1
  101. package/speechflow-cli/dst/speechflow-node-xio-vban.js +32 -20
  102. package/speechflow-cli/dst/speechflow-node-xio-vban.js.map +1 -1
  103. package/speechflow-cli/dst/speechflow-node-xio-webrtc.js +78 -62
  104. package/speechflow-cli/dst/speechflow-node-xio-webrtc.js.map +1 -1
  105. package/speechflow-cli/dst/speechflow-node-xio-websocket.d.ts +1 -0
  106. package/speechflow-cli/dst/speechflow-node-xio-websocket.js +63 -18
  107. package/speechflow-cli/dst/speechflow-node-xio-websocket.js.map +1 -1
  108. package/speechflow-cli/dst/speechflow-node.js +5 -7
  109. package/speechflow-cli/dst/speechflow-node.js.map +1 -1
  110. package/speechflow-cli/dst/speechflow-util-audio-wt.js +31 -5
  111. package/speechflow-cli/dst/speechflow-util-audio-wt.js.map +1 -1
  112. package/speechflow-cli/dst/speechflow-util-audio.d.ts +1 -1
  113. package/speechflow-cli/dst/speechflow-util-audio.js +25 -14
  114. package/speechflow-cli/dst/speechflow-util-audio.js.map +1 -1
  115. package/speechflow-cli/dst/speechflow-util-error.d.ts +1 -1
  116. package/speechflow-cli/dst/speechflow-util-error.js +2 -2
  117. package/speechflow-cli/dst/speechflow-util-error.js.map +1 -1
  118. package/speechflow-cli/dst/speechflow-util-llm.js +1 -1
  119. package/speechflow-cli/dst/speechflow-util-misc.d.ts +3 -2
  120. package/speechflow-cli/dst/speechflow-util-misc.js +63 -6
  121. package/speechflow-cli/dst/speechflow-util-misc.js.map +1 -1
  122. package/speechflow-cli/dst/speechflow-util-queue.d.ts +5 -17
  123. package/speechflow-cli/dst/speechflow-util-queue.js +57 -78
  124. package/speechflow-cli/dst/speechflow-util-queue.js.map +1 -1
  125. package/speechflow-cli/dst/speechflow-util-stream.d.ts +1 -1
  126. package/speechflow-cli/dst/speechflow-util-stream.js +35 -8
  127. package/speechflow-cli/dst/speechflow-util-stream.js.map +1 -1
  128. package/speechflow-cli/dst/speechflow-util.js +1 -1
  129. package/speechflow-cli/dst/speechflow.d.ts +1 -1
  130. package/speechflow-cli/dst/speechflow.js +1 -1
  131. package/speechflow-cli/etc/eslint.mjs +1 -1
  132. package/speechflow-cli/etc/oxlint.jsonc +2 -1
  133. package/speechflow-cli/etc/stx.conf +8 -2
  134. package/speechflow-cli/package.d/@ericedouard+vad-node-realtime+0.2.0.patch +2 -1
  135. package/speechflow-cli/package.d/@typescript-eslint+typescript-estree+8.57.2.patch +12 -0
  136. package/speechflow-cli/package.d/kitten-tts-js+0.1.2.patch +24 -0
  137. package/speechflow-cli/package.d/speex-resampler+3.0.1.patch +56 -0
  138. package/speechflow-cli/package.json +40 -30
  139. package/speechflow-cli/src/lib.d.ts +19 -1
  140. package/speechflow-cli/src/speechflow-main-api.ts +64 -19
  141. package/speechflow-cli/src/speechflow-main-cli.ts +2 -2
  142. package/speechflow-cli/src/speechflow-main-config.ts +1 -1
  143. package/speechflow-cli/src/speechflow-main-graph.ts +56 -22
  144. package/speechflow-cli/src/speechflow-main-nodes.ts +1 -1
  145. package/speechflow-cli/src/speechflow-main-status.ts +6 -3
  146. package/speechflow-cli/src/speechflow-main.ts +1 -1
  147. package/speechflow-cli/src/speechflow-node-a2a-compressor-wt.ts +7 -11
  148. package/speechflow-cli/src/speechflow-node-a2a-compressor.ts +8 -6
  149. package/speechflow-cli/src/speechflow-node-a2a-expander-wt.ts +10 -5
  150. package/speechflow-cli/src/speechflow-node-a2a-expander.ts +6 -5
  151. package/speechflow-cli/src/speechflow-node-a2a-ffmpeg.ts +3 -2
  152. package/speechflow-cli/src/speechflow-node-a2a-filler.ts +2 -4
  153. package/speechflow-cli/src/speechflow-node-a2a-gain.ts +1 -1
  154. package/speechflow-cli/src/speechflow-node-a2a-gender.ts +20 -13
  155. package/speechflow-cli/src/speechflow-node-a2a-gtcrn-wt.ts +1 -1
  156. package/speechflow-cli/src/speechflow-node-a2a-gtcrn.ts +43 -16
  157. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +1 -1
  158. package/speechflow-cli/src/speechflow-node-a2a-mute.ts +1 -1
  159. package/speechflow-cli/src/speechflow-node-a2a-pitch.ts +4 -3
  160. package/speechflow-cli/src/speechflow-node-a2a-rnnoise-wt.ts +2 -2
  161. package/speechflow-cli/src/speechflow-node-a2a-rnnoise.ts +24 -12
  162. package/speechflow-cli/src/speechflow-node-a2a-speex.ts +10 -9
  163. package/speechflow-cli/src/speechflow-node-a2a-vad.ts +38 -31
  164. package/speechflow-cli/src/speechflow-node-a2a-wav.ts +6 -5
  165. package/speechflow-cli/src/speechflow-node-a2t-amazon.ts +35 -22
  166. package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +17 -6
  167. package/speechflow-cli/src/speechflow-node-a2t-google.ts +5 -4
  168. package/speechflow-cli/src/speechflow-node-a2t-openai.ts +39 -31
  169. package/speechflow-cli/src/speechflow-node-t2a-amazon.ts +16 -5
  170. package/speechflow-cli/src/speechflow-node-t2a-elevenlabs.ts +17 -5
  171. package/speechflow-cli/src/speechflow-node-t2a-google.ts +17 -5
  172. package/speechflow-cli/src/speechflow-node-t2a-kitten.ts +178 -0
  173. package/speechflow-cli/src/speechflow-node-t2a-kokoro.ts +21 -9
  174. package/speechflow-cli/src/speechflow-node-t2a-openai.ts +17 -5
  175. package/speechflow-cli/src/speechflow-node-t2a-supertonic.ts +21 -7
  176. package/speechflow-cli/src/speechflow-node-t2t-amazon.ts +1 -1
  177. package/speechflow-cli/src/speechflow-node-t2t-deepl.ts +1 -1
  178. package/speechflow-cli/src/speechflow-node-t2t-format.ts +1 -1
  179. package/speechflow-cli/src/speechflow-node-t2t-google.ts +4 -2
  180. package/speechflow-cli/src/speechflow-node-t2t-modify.ts +1 -1
  181. package/speechflow-cli/src/speechflow-node-t2t-opus.ts +1 -1
  182. package/speechflow-cli/src/speechflow-node-t2t-profanity.ts +1 -1
  183. package/speechflow-cli/src/speechflow-node-t2t-punctuation.ts +1 -1
  184. package/speechflow-cli/src/speechflow-node-t2t-sentence.ts +1 -1
  185. package/speechflow-cli/src/speechflow-node-t2t-spellcheck.ts +1 -1
  186. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +39 -15
  187. package/speechflow-cli/src/speechflow-node-t2t-summary.ts +3 -3
  188. package/speechflow-cli/src/speechflow-node-t2t-translate.ts +1 -1
  189. package/speechflow-cli/src/speechflow-node-x2x-filter.ts +4 -3
  190. package/speechflow-cli/src/speechflow-node-x2x-trace.ts +1 -1
  191. package/speechflow-cli/src/speechflow-node-xio-device.ts +21 -7
  192. package/speechflow-cli/src/speechflow-node-xio-exec.ts +25 -11
  193. package/speechflow-cli/src/speechflow-node-xio-file.ts +15 -7
  194. package/speechflow-cli/src/speechflow-node-xio-mqtt.ts +28 -15
  195. package/speechflow-cli/src/speechflow-node-xio-vban.ts +35 -22
  196. package/speechflow-cli/src/speechflow-node-xio-webrtc.ts +85 -69
  197. package/speechflow-cli/src/speechflow-node-xio-websocket.ts +67 -20
  198. package/speechflow-cli/src/speechflow-node.ts +7 -8
  199. package/speechflow-cli/src/speechflow-util-audio-wt.ts +46 -7
  200. package/speechflow-cli/src/speechflow-util-audio.ts +27 -15
  201. package/speechflow-cli/src/speechflow-util-error.ts +3 -3
  202. package/speechflow-cli/src/speechflow-util-llm.ts +1 -1
  203. package/speechflow-cli/src/speechflow-util-misc.ts +63 -6
  204. package/speechflow-cli/src/speechflow-util-queue.ts +60 -81
  205. package/speechflow-cli/src/speechflow-util-stream.ts +40 -8
  206. package/speechflow-cli/src/speechflow-util.ts +1 -1
  207. package/speechflow-cli/src/speechflow.ts +1 -1
  208. package/speechflow-ui-db/dst/index.css +1 -1
  209. package/speechflow-ui-db/dst/index.html +1 -1
  210. package/speechflow-ui-db/dst/index.js +15 -15
  211. package/speechflow-ui-db/etc/eslint.mjs +1 -1
  212. package/speechflow-ui-db/etc/oxlint.jsonc +1 -1
  213. package/speechflow-ui-db/etc/stx.conf +1 -1
  214. package/speechflow-ui-db/etc/stylelint.js +1 -1
  215. package/speechflow-ui-db/etc/stylelint.yaml +1 -1
  216. package/speechflow-ui-db/etc/vite-client.mts +1 -1
  217. package/speechflow-ui-db/package.d/@typescript-eslint+typescript-estree+8.57.2.patch +12 -0
  218. package/speechflow-ui-db/package.json +22 -16
  219. package/speechflow-ui-db/src/app.styl +1 -1
  220. package/speechflow-ui-db/src/app.vue +4 -4
  221. package/speechflow-ui-db/src/index.html +1 -1
  222. package/speechflow-ui-db/src/index.ts +1 -1
  223. package/speechflow-ui-st/dst/index.html +1 -1
  224. package/speechflow-ui-st/dst/index.js +31 -31
  225. package/speechflow-ui-st/etc/eslint.mjs +1 -1
  226. package/speechflow-ui-st/etc/oxlint.jsonc +1 -1
  227. package/speechflow-ui-st/etc/stx.conf +1 -1
  228. package/speechflow-ui-st/etc/stylelint.js +1 -1
  229. package/speechflow-ui-st/etc/stylelint.yaml +1 -1
  230. package/speechflow-ui-st/etc/vite-client.mts +1 -1
  231. package/speechflow-ui-st/package.d/@typescript-eslint+typescript-estree+8.57.2.patch +12 -0
  232. package/speechflow-ui-st/package.json +23 -17
  233. package/speechflow-ui-st/src/app.styl +1 -1
  234. package/speechflow-ui-st/src/app.vue +9 -8
  235. package/speechflow-ui-st/src/index.html +1 -1
  236. package/speechflow-ui-st/src/index.ts +1 -1
  237. package/speechflow-cli/dst/speechflow-node-t2t-simulator.js +0 -128
  238. package/speechflow-cli/dst/speechflow-node-t2t-simulator.js.map +0 -1
@@ -1,10 +1,15 @@
1
- # CLAUDE.md
2
1
 
3
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
2
+ AGENTS
3
+ ======
4
+
5
+ This file provides guidance to AI agents, when working with code in this repository.
4
6
 
5
7
  ## Project Overview
6
8
 
7
- SpeechFlow is a command-line interface tool for establishing directed data flow graphs of audio and text processing nodes. It enables flexible speech processing tasks including capturing audio, text-to-speech, speech-to-text, and speech-to-speech translation.
9
+ SpeechFlow is a command-line interface tool for establishing directed
10
+ data flow graphs of audio and text processing nodes. It enables flexible
11
+ speech processing tasks including capturing audio, text-to-speech,
12
+ speech-to-text, and speech-to-speech translation.
8
13
 
9
14
  ## Architecture
10
15
 
package/CHANGELOG.md CHANGED
@@ -1,7 +1,84 @@
1
1
 
2
- ChangeLog
2
+ hangeLog
3
3
  =========
4
4
 
5
+ 2.3.0 (2026-03-27)
6
+ ------------------
7
+
8
+ - FEATURE: add a new "t2a-kitten" node which uses Kitten-TTS for text-to-speech
9
+ - REFACTOR: merge SingleQueue into AsyncQueue and use AsyncQueue in all nodes
10
+ - BUGFIX: avoid calling the transform callback twice in "t2a" nodes
11
+ - BUGFIX: avoid applying makeup gain twice in "a2a-compressor" node
12
+ - BUGFIX: fix hard-knee arithmetic in "a2a-expander" node
13
+ - BUGFIX: fix resource handling by tracking pending promises in "a2a" nodes
14
+ - BUGFIX: fix race condition between chunkQueue nulling and stream destruction in MQTT and VBAN nodes
15
+ - BUGFIX: fix start timestamp calculation in "a2t-google" node
16
+ - BUGFIX: fix error message in case a positional parameter does not match
17
+ - BUGFIX: fix shutdown procedure by avoiding double node deactivation
18
+ - BUGFIX: fix I16/F32 conversions in WebAudio and VBAN code
19
+ - BUGFIX: fix envelope double-writes in Compressor/Expander worklets
20
+ - BUGFIX: fix "a2t-openai" node handler by replacing a 50ms sleep with a close-event wait
21
+ - BUGFIX: fix "a2t-openai" node by improving close procedure to not loose results
22
+ - BUGFIX: fix "t2a-openai" node by allowing overlapping speech items to be received
23
+ - BUGFIX: fix "a2t-deepgram" where "open" promise had no error rejection handler
24
+ - BUGFIX: fix "t2a-kokoro" node for a timer leak on model load failure
25
+ - BUGFIX: fix "t2a-supertonic" node for automatically adapting to changing sampling rates
26
+ - BUGFIX: fix "t2t-subtitle" buffer handling for "import" mode
27
+ - BUGFIX: fix "t2t-subtitle" node by parsing VTT lines more correctly
28
+ - BUGFIX: fix "t2t-subtitle" node by checking the WebSocket ready state before sending
29
+ - BUGFIX: fix "t2t-subtitle" node by allowing large hours in parsing SRT format
30
+ - BUGFIX: fix "x2x-filter" node by not stumbling over undefined values
31
+ - BUGFIX: fix "x2x-filter" node by matching integer and float numbers more precisely
32
+ - BUGFIX: fix "xio-websocket" node by closing all client connections on destruction
33
+ - BUGFIX: fix "xio-websocket" node by correctly shutting down internal queue
34
+ - BUGFIX: fix "xio-webrtc" node by catching errors on listening
35
+ - BUGFIX: fix "xio-webrtc" node by catching errors on processing
36
+ - BUGFIX: fix "xio-device" node by shutdown the stream on destruction
37
+ - BUGFIX: fix "a2t-deepgram" chunk kind classification logic
38
+ - BUGFIX: fix StreamWrapper utility class to correctly flush data
39
+ - BUGFIX: fix "a2a-gtcrn" node by short-circuiting procedures in case of shutdown
40
+ - BUGFIX: fix "a2a-expander" node by guarding against IEEE 754 edge case
41
+ - BUGFIX: fix "a2t-amazon" race condition in ensureAudioStreamActive
42
+ - BUGFIX: fix "t2t-summary" node for accumulated results without sentence-ending punctuation
43
+ - BUGFIX: fix "t2t-summary" node for more correct counting of sentences
44
+ - BUGFIX: fix "t2t-google" node by awaiting the close method on shutdown
45
+ - BUGFIX: fix "a2a-filler" node by not terminating stream if a single chunk is invalid
46
+ - BUGFIX: fix "xio-vban" node by awaiting all VBANServer operations
47
+ - BUGFIX: fix "xio-file" node avoid double fs.close() on file descriptor in seekable write mode
48
+ - BUGFIX: fix "xio-file" node by avoiding unhandled promise rejection
49
+ - BUGFIX: fix "a2a-vad" node by avoiding the busy-polling event loop in unplugged mode for consecutive non-speech chunks
50
+ - BUGFIX: fix "a2a-rnnoise" by correctly clamping Int16 values
51
+ - BUGFIX: fix "a2a-gender" by not wasting buffers and fully filling them
52
+ - BUGFIX: fix "a2a-gender" by correctly calculating the duration of audio samples
53
+ - BUGFIX: avoid unbounded active captures memory growth in Audio Worklet
54
+ - BUGFIX: do not throw an exception from Stream::read() operations
55
+ - BUGFIX: signal handlers in main graph code discarded returned Promise and this way caused unhandled rejections
56
+ - BUGFIX: in node graph code avoid mutating a Set during iteration
57
+ - BUGFIX: in node graph code correctly deactivate nodes on shutdown
58
+ - BUGFIX: avoid dangling timers on shutdown by unreferencing sleep/timeout() timers
59
+ - BUGFIX: for SingleQueue.read() avoid conflating "queue empty" with "queue contains undefined"
60
+ - BUGFIX: correctly deep-clone the meta Map of nodes
61
+ - BUGFIX: in many audio transform nodes, clone chunks before mutating the payload to support chunk fan-out to multiple nodes
62
+ - BUGFIX: PromiseSet.awaitAll() can miss concurrently-added promises
63
+ - BUGFIX: In "a2a-speex" and "a2t-deepgram" ensure that Buffer extractions use correct slicing
64
+ - BUGFIX: fix Queue's walkBackwardUntil and searchBackward methods by correctly handling the element at position 0
65
+ - BUGFIX: remove event listeners from graph nodes on stop
66
+ - BUGFIX: honor little endian information in data conversions
67
+ - BUGFIX: in WebAudio code use a ready message instead of a time delay to ensure Worker is ready
68
+ - UPDATE: upgrade NPM dependencies and patches
69
+ - CLEANUP: remove second/dead "open" WebSocket handler in "t2a-openai" node
70
+ - CLEANUP: add missing type definitions for Kitten-TTS
71
+ - CLEANUP: update year in all copyright messages
72
+ - CLEANUP: fix version number and rename file
73
+
74
+ 2.2.1 (2026-02-23)
75
+ ------------------
76
+
77
+ - BUGFIX: fix type of "text" field
78
+ - BUGFIX: fix indexing for Vue loops
79
+ - BUGFIX: fix CSS values in Dashboard UI
80
+ - CLEANUP: remove unnecessary comma operator and index, and downgrade to ESLint 9
81
+
5
82
  2.2.0 (2026-02-23)
6
83
  ------------------
7
84
 
package/README.md CHANGED
@@ -58,8 +58,9 @@ speech-to-speech).
58
58
  [Amazon Polly](https://aws.amazon.com/polly/), or
59
59
  [Google Cloud Text-to-Speech](https://cloud.google.com/text-to-speech).
60
60
  - local text-to-speech conversion with
61
- [Kokoro](https://github.com/nazdridoy/kokoro-tts) or
62
- [Supertonic](https://huggingface.co/Supertone/supertonic).
61
+ [Kokoro](https://github.com/nazdridoy/kokoro-tts),
62
+ [Supertonic](https://huggingface.co/Supertone/supertonic), or
63
+ [Kitten-TTS](https://huggingface.co/KittenML/kitten-tts-nano-0.8).
63
64
  - local [FFmpeg](https://ffmpeg.org/)-based speech-to-speech conversion,
64
65
  - local WAV speech-to-speech decoding/encoding,
65
66
  - local text-to-text formatting, regex-based modification,
@@ -387,7 +388,8 @@ First a short overview of the available processing nodes:
387
388
  **t2a-elevenlabs**,
388
389
  **t2a-google**,
389
390
  **t2a-kokoro**,
390
- **t2a-supertonic**.
391
+ **t2a-supertonic**,
392
+ **t2a-kitten**.
391
393
  - Any-to-Any nodes:
392
394
  **x2x-filter**,
393
395
  **x2x-trace**.
@@ -1353,6 +1355,28 @@ The following nodes convert text chunks to audio chunks.
1353
1355
  | **speed** | 1 | 1.40 | `0.5 <= n <= 2.0` |
1354
1356
  | **steps** | 2 | 20 | `1 <= n <= 20` |
1355
1357
 
1358
+ - Node: **t2a-kitten**<br/>
1359
+ Purpose: **Kitten-TTS Text-to-Speech conversion**<br/>
1360
+ Example: `t2a-kitten(voice: "Bruno", speed: 1.25)`<br/>
1361
+
1362
+ > This node uses Kitten-TTS to perform Text-to-Speech (T2S) conversion,
1363
+ > i.e., it converts the input text stream into an output audio stream.
1364
+ > It is intended to generate speech. The ONNX models are automatically
1365
+ > downloaded from HuggingFace on first use. The node internally operates
1366
+ > at 24KHz sample rate and automatically resamples to SpeechFlow's
1367
+ > internal 48KHz for output. It supports English language only.
1368
+
1369
+ | Port | Payload |
1370
+ | ------- | ----------- |
1371
+ | input | text |
1372
+ | output | audio |
1373
+
1374
+ | Parameter | Position | Default | Requirement |
1375
+ | ------------ | --------- | ----------------------------- | ---------------------- |
1376
+ | **model** | 0 | "KittenML/kitten-tts-nano-0.8"| *none* |
1377
+ | **voice** | 1 | "Bruno" | `/^(?:Bella\|Jasper\|Luna\|Bruno\|Rosie\|Hugo\|Kiki\|Leo)$/` |
1378
+ | **speed** | 2 | 1.25 | `0.5 <= n <= 2.0` |
1379
+
1356
1380
  ### Any-to-Any Nodes
1357
1381
 
1358
1382
  The following nodes process any type of chunk, i.e., both audio and text chunks.
@@ -1449,6 +1473,6 @@ time used in production in the msg Filmstudio.
1449
1473
  Copyright & License
1450
1474
  -------------------
1451
1475
 
1452
- Copyright &copy; 2024-2025 [Dr. Ralf S. Engelschall](mailto:rse@engelschall.com)<br/>
1476
+ Copyright &copy; 2024-2026 [Dr. Ralf S. Engelschall](mailto:rse@engelschall.com)<br/>
1453
1477
  Licensed under [GPL 3.0](https://spdx.org/licenses/GPL-3.0-only)
1454
1478
 
@@ -88,7 +88,8 @@ studio-transcription: |
88
88
  # Real-time studio translation from German to English,
89
89
  # including the capturing of all involved inputs and outputs:
90
90
  studio-translation: |
91
- xio-device(device: env.SPEECHFLOW_DEVICE_MIC, mode: "r", chunk: 200) | {
91
+ xio-device(device: env.SPEECHFLOW_DEVICE_MIC, mode: "r", chunk: 200) |
92
+ a2a-mute() | {
92
93
  a2a-meter(interval: 50, dashboard: "audio-de", mode: "sink"),
93
94
  a2t-deepgram(language: "de", model: "nova-3", interim: true, keywords: env.SPEECHFLOW_KEYWORDS) | {
94
95
  t2t-profanity(lang: "de") | {
@@ -121,3 +122,4 @@ studio-translation: |
121
122
  }
122
123
  }
123
124
  }
125
+
package/etc/stx.conf CHANGED
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## SpeechFlow - Speech Processing Flow Graph
3
- ## Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
3
+ ## Copyright (c) 2024-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
4
4
  ## Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
5
5
  ##
6
6
 
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "speechflow",
3
- "version": "2.2.0",
4
- "x-stdver": "2.1.2-GA",
5
- "x-release": "2026-02-18",
3
+ "version": "2.3.0",
4
+ "x-stdver": "2.3.0-GA",
5
+ "x-release": "2026-03-27",
6
6
  "homepage": "https://github.com/rse/speechflow",
7
7
  "description": "Speech Processing Flow Graph",
8
8
  "keywords": [ "speech", "audio", "flow", "graph" ],
@@ -20,14 +20,14 @@
20
20
  "@rse/stx": "1.1.4"
21
21
  },
22
22
  "devDependencies": {
23
- "nodemon": "3.1.11",
23
+ "nodemon": "3.1.14",
24
24
  "watch": "1.0.2",
25
25
  "concurrently": "9.2.1",
26
26
  "wait-on": "9.0.4",
27
27
  "cross-env": "10.1.0",
28
28
  "shx": "0.4.0",
29
- "secretlint": "11.3.1",
30
- "@secretlint/secretlint-rule-preset-recommend": "11.3.1"
29
+ "secretlint": "11.4.0",
30
+ "@secretlint/secretlint-rule-preset-recommend": "11.4.0"
31
31
  },
32
32
  "engines": {
33
33
  "npm": ">=10.0.0",
@@ -6,8 +6,9 @@ export declare class APIServer {
6
6
  private wsPeers;
7
7
  private hapi;
8
8
  private sendOSC;
9
+ private graph;
9
10
  constructor(cli: CLIio);
10
11
  start(args: CLIOptions, graph: NodeGraph): Promise<void>;
11
12
  stop(args: CLIOptions): Promise<void>;
12
- sendErrorToDashboard(time: number, node: string, level: string, message: string): Promise<void>;
13
+ sendErrorToDashboard(time: number, node: string, level: string, message: string): void;
13
14
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /*
3
3
  ** SpeechFlow - Speech Processing Flow Graph
4
- ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
4
+ ** Copyright (c) 2024-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
5
  ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
6
  */
7
7
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
@@ -62,12 +62,15 @@ class APIServer {
62
62
  wsPeers = new Map();
63
63
  hapi = null;
64
64
  sendOSC = null;
65
+ graph = null;
65
66
  /* creation */
66
67
  constructor(cli) {
67
68
  this.cli = cli;
68
69
  }
69
70
  /* start API server service */
70
71
  async start(args, graph) {
72
+ /* remember graph for later cleanup */
73
+ this.graph = graph;
71
74
  /* define external request/response structure */
72
75
  const requestValidator = arktype.type({
73
76
  request: "string",
@@ -89,10 +92,13 @@ class APIServer {
89
92
  throw new Error(`external request failed: no such node <${name}>`);
90
93
  }
91
94
  else {
95
+ const ac = new AbortController();
92
96
  await Promise.race([
93
97
  foundNode.receiveRequest(argList),
94
- util.timeout(10 * 1000)
95
- ]).catch((err) => {
98
+ util.timeout(10 * 1000, "timeout", ac.signal)
99
+ ]).finally(() => {
100
+ ac.abort();
101
+ }).catch((err) => {
96
102
  this.cli.log("warning", `external request to node <${name}> failed: ${err.message}`);
97
103
  throw err;
98
104
  });
@@ -153,8 +159,13 @@ class APIServer {
153
159
  path: "/api/dashboard",
154
160
  handler: (request, h) => {
155
161
  const config = [];
162
+ if (args.d === "")
163
+ return h.response(config).code(200);
156
164
  for (const block of args.d.split(",")) {
157
- const [type, id, name] = block.split(":");
165
+ const parts = block.split(":");
166
+ if (parts.length !== 3)
167
+ continue;
168
+ const [type, id, name] = parts;
158
169
  config.push({ type, id, name });
159
170
  }
160
171
  return h.response(config).code(200);
@@ -232,7 +243,10 @@ class APIServer {
232
243
  for (const [peer, info] of this.wsPeers.entries()) {
233
244
  this.cli.log("debug", `HAPI: remote peer ${peer}: sending ${data}`);
234
245
  if (info.ws.readyState === ws_1.default.OPEN)
235
- info.ws.send(data);
246
+ info.ws.send(data, (err) => {
247
+ if (err)
248
+ this.cli.log("warning", `HAPI: peer ${peer}: send failed: ${err.message}`);
249
+ });
236
250
  }
237
251
  });
238
252
  }
@@ -246,12 +260,17 @@ class APIServer {
246
260
  const port = Number.parseInt(m[2], 10);
247
261
  this.sendOSC = (url, ...argList) => {
248
262
  const msg = new osc_js_1.default.Message(url, ...argList);
249
- osc.send(msg, { host, port });
263
+ try {
264
+ osc.send(msg, { host, port });
265
+ }
266
+ catch (err) {
267
+ this.cli.log("warning", `OSC/UDP send to ${host}:${port} failed: ${err.message}`);
268
+ }
250
269
  };
251
270
  }
252
271
  /* hook for send-dashboard method of nodes */
253
272
  for (const node of graph.getGraphNodes()) {
254
- node.on("send-dashboard", (info) => {
273
+ node.on("send-dashboard", async (info) => {
255
274
  const data = JSON.stringify({
256
275
  response: "DASHBOARD",
257
276
  node: "",
@@ -260,16 +279,24 @@ class APIServer {
260
279
  for (const [peer, peerInfo] of this.wsPeers.entries()) {
261
280
  this.cli.log("debug", `HAPI: dashboard peer ${peer}: send ${data}`);
262
281
  if (peerInfo.ws.readyState === ws_1.default.OPEN)
263
- peerInfo.ws.send(data);
282
+ peerInfo.ws.send(data, (err) => {
283
+ if (err)
284
+ this.cli.log("warning", `HAPI: dashboard peer ${peer}: send failed: ${err.message}`);
285
+ });
264
286
  }
287
+ const promises = [];
265
288
  for (const n of graph.getGraphNodes()) {
266
- Promise.race([
289
+ const ac = new AbortController();
290
+ promises.push(Promise.race([
267
291
  n.receiveDashboard(info.type, info.id, info.kind, info.value),
268
- util.timeout(10 * 1000)
269
- ]).catch((err) => {
292
+ util.timeout(10 * 1000, "timeout", ac.signal)
293
+ ]).finally(() => {
294
+ ac.abort();
295
+ }).catch((err) => {
270
296
  this.cli.log("warning", `sending dashboard info to node <${n.id}> failed: ${err.message}`);
271
- });
297
+ }));
272
298
  }
299
+ await Promise.allSettled(promises);
273
300
  if (args.o !== "" && this.sendOSC)
274
301
  this.sendOSC("/speechflow/dashboard", info.type, info.id, info.kind, info.value);
275
302
  });
@@ -277,6 +304,14 @@ class APIServer {
277
304
  }
278
305
  /* stop API server service */
279
306
  async stop(args) {
307
+ /* remove event listeners from graph nodes */
308
+ if (this.graph) {
309
+ for (const node of this.graph.getGraphNodes()) {
310
+ node.removeAllListeners("send-response");
311
+ node.removeAllListeners("send-dashboard");
312
+ }
313
+ this.graph = null;
314
+ }
280
315
  /* shutdown HAPI service */
281
316
  if (this.hapi) {
282
317
  this.cli.log("info", `HAPI: stopping REST/WebSocket network service: http://${args.a}:${args.p}`);
@@ -302,17 +337,20 @@ class APIServer {
302
337
  }
303
338
  }));
304
339
  }
340
+ const ac = new AbortController();
305
341
  await Promise.race([
306
342
  Promise.all(closePromises),
307
- util.timeout(5 * 1000)
308
- ]).catch((error) => {
343
+ util.timeout(5 * 1000, "timeout", ac.signal)
344
+ ]).finally(() => {
345
+ ac.abort();
346
+ }).catch((error) => {
309
347
  this.cli.log("warning", `HAPI: WebSockets failed to close: ${util.ensureError(error).message}`);
310
348
  });
311
349
  this.wsPeers.clear();
312
350
  }
313
351
  }
314
352
  /* send information to dashboard on error */
315
- async sendErrorToDashboard(time, node, level, message) {
353
+ sendErrorToDashboard(time, node, level, message) {
316
354
  const data = JSON.stringify({
317
355
  response: "HINT",
318
356
  node,
@@ -321,7 +359,10 @@ class APIServer {
321
359
  for (const [peer, peerInfo] of this.wsPeers.entries()) {
322
360
  this.cli.log("debug", `HAPI: dashboard peer ${peer}: send ${data}`);
323
361
  if (peerInfo.ws.readyState === ws_1.default.OPEN)
324
- peerInfo.ws.send(data);
362
+ peerInfo.ws.send(data, (err) => {
363
+ if (err)
364
+ this.cli.log("warning", `HAPI: dashboard peer ${peer}: send failed: ${err.message}`);
365
+ });
325
366
  }
326
367
  }
327
368
  }
@@ -1 +1 @@
1
- {"version":3,"file":"speechflow-main-api.js","sourceRoot":"","sources":["../src/speechflow-main-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"speechflow-main-api.js","sourceRoot":"","sources":["../src/speechflow-main-api.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /*
3
3
  ** SpeechFlow - Speech Processing Flow Graph
4
- ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
4
+ ** Copyright (c) 2024-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
5
  ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
6
  */
7
7
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
@@ -198,7 +198,7 @@ class CLIContext {
198
198
  if (this.args.V) {
199
199
  process.stderr.write(`SpeechFlow ${package_json_1.default["x-stdver"]} (${package_json_1.default["x-release"]}) <${package_json_1.default.homepage}>\n`);
200
200
  process.stderr.write(`${package_json_1.default.description}\n`);
201
- process.stderr.write(`Copyright (c) 2024-2025 ${package_json_1.default.author.name} <${package_json_1.default.author.url}>\n`);
201
+ process.stderr.write(`Copyright (c) 2024-2026 ${package_json_1.default.author.name} <${package_json_1.default.author.url}>\n`);
202
202
  process.stderr.write(`Licensed under ${package_json_1.default.license} <http://spdx.org/licenses/${package_json_1.default.license}.html>\n`);
203
203
  process.exit(0);
204
204
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /*
3
3
  ** SpeechFlow - Speech Processing Flow Graph
4
- ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
4
+ ** Copyright (c) 2024-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
5
  ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /*
3
3
  ** SpeechFlow - Speech Processing Flow Graph
4
- ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
4
+ ** Copyright (c) 2024-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
5
  ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
6
  */
7
7
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
@@ -182,10 +182,13 @@ class NodeGraph {
182
182
  /* open node */
183
183
  this.cli.log("info", `open node <${node.id}>`);
184
184
  node.setTimeZero(this.timeZero);
185
+ const ac = new AbortController();
185
186
  await Promise.race([
186
187
  node.open(),
187
- util.timeout(30 * 1000)
188
- ]).catch((err) => {
188
+ util.timeout(30 * 1000, "timeout", ac.signal)
189
+ ]).finally(() => {
190
+ ac.abort();
191
+ }).catch((err) => {
189
192
  this.cli.log("error", `<${node.id}>: failed to open node <${node.id}>: ${err.message}`);
190
193
  throw new Error(`failed to open node <${node.id}>: ${err.message}`);
191
194
  });
@@ -220,8 +223,9 @@ class NodeGraph {
220
223
  this.cli.log("info", `observe stream of node <${node.id}> for finish event`);
221
224
  this.activeNodes.add(node);
222
225
  const deactivateNode = (node, msg) => {
223
- if (this.activeNodes.has(node))
224
- this.activeNodes.delete(node);
226
+ if (!this.activeNodes.has(node))
227
+ return;
228
+ this.activeNodes.delete(node);
225
229
  this.cli.log("info", `${msg} (${this.activeNodes.size} active nodes remaining)`);
226
230
  if (this.activeNodes.size === 0) {
227
231
  const timeFinished = luxon_1.DateTime.now();
@@ -229,7 +233,9 @@ class NodeGraph {
229
233
  this.cli.log("info", "**** everything finished -- stream processing in SpeechFlow graph stops " +
230
234
  `(total duration: ${duration?.toFormat("hh:mm:ss.SSS") ?? "unknown"}) ****`);
231
235
  this.finishEvents.emit("finished");
232
- this.shutdown("finished", args, api);
236
+ this.shutdown("finished", args, api).catch((err) => {
237
+ this.cli.log("error", `failed to shutdown: ${err.message}`);
238
+ });
233
239
  }
234
240
  };
235
241
  node.stream.on("error", (err) => {
@@ -237,12 +243,25 @@ class NodeGraph {
237
243
  this.cli.log("warning", `stream of node <${node.id}> raised "error" event: ${error.message}`);
238
244
  api.sendErrorToDashboard(Date.now(), node.id, "warning", error.message);
239
245
  });
240
- node.stream.on("finish", () => {
241
- deactivateNode(node, `writable stream side (input) of node <${node.id}> raised "finish" event`);
242
- });
243
- node.stream.on("end", () => {
244
- deactivateNode(node, `readable stream side (output) of node <${node.id}> raised "end" event`);
245
- });
246
+ /* listen for the semantically correct completion event per stream type:
247
+ - for Duplex/Transform listen only for "end"
248
+ (readable-side, fires last, guarantees all output is drained),
249
+ - for pure Readable listen only for "end"
250
+ - for pure Writable listen only for "finish" */
251
+ if (node.stream instanceof node_stream_1.default.Duplex)
252
+ node.stream.on("end", () => {
253
+ deactivateNode(node, `readable stream side (output) of node <${node.id}> raised "end" event`);
254
+ });
255
+ else if (node.stream instanceof node_stream_1.default.Readable)
256
+ node.stream.on("end", () => {
257
+ deactivateNode(node, `readable stream side (output) of node <${node.id}> raised "end" event`);
258
+ });
259
+ else if (node.stream instanceof node_stream_1.default.Writable)
260
+ node.stream.on("finish", () => {
261
+ deactivateNode(node, `writable stream side (input) of node <${node.id}> raised "finish" event`);
262
+ });
263
+ else
264
+ throw new Error(`stream of node <${node.id}> is neither of Duplex, Writable, nor Readable type`);
246
265
  }
247
266
  /* start of internal stream processing */
248
267
  this.cli.log("info", "**** everything established -- stream processing in SpeechFlow graph starts ****");
@@ -257,12 +276,15 @@ class NodeGraph {
257
276
  const stream = node.stream;
258
277
  if ((stream instanceof node_stream_1.default.Writable || stream instanceof node_stream_1.default.Duplex)
259
278
  && (!stream.writableEnded && !stream.destroyed)) {
279
+ const ac = new AbortController();
260
280
  drainPromises.push(Promise.race([
261
281
  new Promise((resolve) => {
262
282
  stream.end(() => { resolve(); });
263
283
  }),
264
- util.timeout(5000)
265
- ]).catch(() => {
284
+ util.timeout(5000, "timeout", ac.signal)
285
+ ]).finally(() => {
286
+ ac.abort();
287
+ }).catch(() => {
266
288
  /* ignore timeout -- stream will be destroyed later */
267
289
  }));
268
290
  }
@@ -300,10 +322,13 @@ class NodeGraph {
300
322
  async closeNodes() {
301
323
  for (const node of this.graphNodes) {
302
324
  this.cli.log("info", `close node <${node.id}>`);
325
+ const ac = new AbortController();
303
326
  await Promise.race([
304
327
  node.close(),
305
- util.timeout(10 * 1000)
306
- ]).catch((err) => {
328
+ util.timeout(10 * 1000, "timeout", ac.signal)
329
+ ]).finally(() => {
330
+ ac.abort();
331
+ }).catch((err) => {
307
332
  this.cli.log("warning", `node <${node.id}> failed to close: ${err.message}`);
308
333
  });
309
334
  }
@@ -320,22 +345,31 @@ class NodeGraph {
320
345
  }
321
346
  /* graph destruction: PASS 5: destroy nodes */
322
347
  destroyNodes() {
323
- for (const node of this.graphNodes) {
348
+ for (const node of this.graphNodes)
324
349
  this.cli.log("info", `destroy node <${node.id}>`);
325
- this.graphNodes.delete(node);
326
- }
350
+ this.graphNodes.clear();
327
351
  }
328
352
  /* setup signal handling for shutdown */
329
353
  setupSignalHandlers(args, api) {
330
354
  /* internal helper functions */
331
- const shutdownHandler = (signal) => this.shutdown(signal, args, api);
332
355
  const logError = (error) => {
333
356
  if (this.debug)
334
357
  this.cli.log("error", `${error.message}\n${error.stack}`);
335
358
  else
336
359
  this.cli.log("error", error.message);
337
360
  };
338
- /* hook into process signals */
361
+ const shutdownHandler = (signal) => {
362
+ this.shutdown(signal, args, api).catch((err) => {
363
+ const error = util.ensureError(err, "shutdown error");
364
+ logError(error);
365
+ process.exit(1);
366
+ });
367
+ };
368
+ /* re-hook into process signals */
369
+ process.removeAllListeners("SIGINT");
370
+ process.removeAllListeners("SIGUSR1");
371
+ process.removeAllListeners("SIGUSR2");
372
+ process.removeAllListeners("SIGTERM");
339
373
  process.on("SIGINT", () => { shutdownHandler("SIGINT"); });
340
374
  process.on("SIGUSR1", () => { shutdownHandler("SIGUSR1"); });
341
375
  process.on("SIGUSR2", () => { shutdownHandler("SIGUSR2"); });