speechflow 1.3.2 → 1.4.1

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 (155) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +3 -3
  3. package/etc/stx.conf +54 -58
  4. package/package.json +31 -102
  5. package/speechflow-cli/etc/stx.conf +77 -0
  6. package/speechflow-cli/package.json +116 -0
  7. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +217 -0
  8. package/{src → speechflow-cli/src}/speechflow-node-a2a-vad.ts +14 -21
  9. package/{src → speechflow-cli/src}/speechflow-node-a2t-deepgram.ts +21 -38
  10. package/{src → speechflow-cli/src}/speechflow-node-t2a-elevenlabs.ts +10 -16
  11. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +276 -0
  12. package/{src → speechflow-cli/src}/speechflow-node-x2x-filter.ts +5 -1
  13. package/{src → speechflow-cli/src}/speechflow-node-x2x-trace.ts +15 -7
  14. package/{src → speechflow-cli/src}/speechflow-node.ts +7 -0
  15. package/{src → speechflow-cli/src}/speechflow.ts +81 -25
  16. package/speechflow-ui-db/etc/eslint.mjs +106 -0
  17. package/speechflow-ui-db/etc/htmllint.json +55 -0
  18. package/speechflow-ui-db/etc/stx.conf +79 -0
  19. package/speechflow-ui-db/etc/stylelint.js +46 -0
  20. package/speechflow-ui-db/etc/stylelint.yaml +33 -0
  21. package/speechflow-ui-db/etc/tsc-client.json +30 -0
  22. package/speechflow-ui-db/etc/tsc.node.json +9 -0
  23. package/speechflow-ui-db/etc/vite-client.mts +63 -0
  24. package/speechflow-ui-db/package.d/htmllint-cli+0.0.7.patch +20 -0
  25. package/speechflow-ui-db/package.json +75 -0
  26. package/speechflow-ui-db/src/app-icon.ai +1989 -4
  27. package/speechflow-ui-db/src/app-icon.svg +26 -0
  28. package/speechflow-ui-db/src/app.styl +64 -0
  29. package/speechflow-ui-db/src/app.vue +221 -0
  30. package/speechflow-ui-db/src/index.html +23 -0
  31. package/speechflow-ui-db/src/index.ts +26 -0
  32. package/{dst/speechflow.d.ts → speechflow-ui-db/src/lib.d.ts} +5 -3
  33. package/speechflow-ui-db/src/tsconfig.json +3 -0
  34. package/speechflow-ui-st/etc/eslint.mjs +106 -0
  35. package/speechflow-ui-st/etc/htmllint.json +55 -0
  36. package/speechflow-ui-st/etc/stx.conf +79 -0
  37. package/speechflow-ui-st/etc/stylelint.js +46 -0
  38. package/speechflow-ui-st/etc/stylelint.yaml +33 -0
  39. package/speechflow-ui-st/etc/tsc-client.json +30 -0
  40. package/speechflow-ui-st/etc/tsc.node.json +9 -0
  41. package/speechflow-ui-st/etc/vite-client.mts +63 -0
  42. package/speechflow-ui-st/package.d/htmllint-cli+0.0.7.patch +20 -0
  43. package/speechflow-ui-st/package.json +79 -0
  44. package/speechflow-ui-st/src/app-icon.ai +1989 -4
  45. package/speechflow-ui-st/src/app-icon.svg +26 -0
  46. package/speechflow-ui-st/src/app.styl +64 -0
  47. package/speechflow-ui-st/src/app.vue +142 -0
  48. package/speechflow-ui-st/src/index.html +23 -0
  49. package/speechflow-ui-st/src/index.ts +26 -0
  50. package/speechflow-ui-st/src/lib.d.ts +9 -0
  51. package/speechflow-ui-st/src/tsconfig.json +3 -0
  52. package/dst/speechflow-node-a2a-ffmpeg.d.ts +0 -13
  53. package/dst/speechflow-node-a2a-ffmpeg.js +0 -153
  54. package/dst/speechflow-node-a2a-ffmpeg.js.map +0 -1
  55. package/dst/speechflow-node-a2a-gender.d.ts +0 -20
  56. package/dst/speechflow-node-a2a-gender.js +0 -349
  57. package/dst/speechflow-node-a2a-gender.js.map +0 -1
  58. package/dst/speechflow-node-a2a-meter.d.ts +0 -14
  59. package/dst/speechflow-node-a2a-meter.js +0 -196
  60. package/dst/speechflow-node-a2a-meter.js.map +0 -1
  61. package/dst/speechflow-node-a2a-mute.d.ts +0 -17
  62. package/dst/speechflow-node-a2a-mute.js +0 -117
  63. package/dst/speechflow-node-a2a-mute.js.map +0 -1
  64. package/dst/speechflow-node-a2a-vad.d.ts +0 -19
  65. package/dst/speechflow-node-a2a-vad.js +0 -383
  66. package/dst/speechflow-node-a2a-vad.js.map +0 -1
  67. package/dst/speechflow-node-a2a-wav.d.ts +0 -11
  68. package/dst/speechflow-node-a2a-wav.js +0 -211
  69. package/dst/speechflow-node-a2a-wav.js.map +0 -1
  70. package/dst/speechflow-node-a2t-deepgram.d.ts +0 -19
  71. package/dst/speechflow-node-a2t-deepgram.js +0 -345
  72. package/dst/speechflow-node-a2t-deepgram.js.map +0 -1
  73. package/dst/speechflow-node-t2a-elevenlabs.d.ts +0 -18
  74. package/dst/speechflow-node-t2a-elevenlabs.js +0 -244
  75. package/dst/speechflow-node-t2a-elevenlabs.js.map +0 -1
  76. package/dst/speechflow-node-t2a-kokoro.d.ts +0 -14
  77. package/dst/speechflow-node-t2a-kokoro.js +0 -155
  78. package/dst/speechflow-node-t2a-kokoro.js.map +0 -1
  79. package/dst/speechflow-node-t2t-deepl.d.ts +0 -15
  80. package/dst/speechflow-node-t2t-deepl.js +0 -146
  81. package/dst/speechflow-node-t2t-deepl.js.map +0 -1
  82. package/dst/speechflow-node-t2t-format.d.ts +0 -11
  83. package/dst/speechflow-node-t2t-format.js +0 -82
  84. package/dst/speechflow-node-t2t-format.js.map +0 -1
  85. package/dst/speechflow-node-t2t-ollama.d.ts +0 -13
  86. package/dst/speechflow-node-t2t-ollama.js +0 -247
  87. package/dst/speechflow-node-t2t-ollama.js.map +0 -1
  88. package/dst/speechflow-node-t2t-openai.d.ts +0 -13
  89. package/dst/speechflow-node-t2t-openai.js +0 -227
  90. package/dst/speechflow-node-t2t-openai.js.map +0 -1
  91. package/dst/speechflow-node-t2t-sentence.d.ts +0 -17
  92. package/dst/speechflow-node-t2t-sentence.js +0 -250
  93. package/dst/speechflow-node-t2t-sentence.js.map +0 -1
  94. package/dst/speechflow-node-t2t-subtitle.d.ts +0 -12
  95. package/dst/speechflow-node-t2t-subtitle.js +0 -166
  96. package/dst/speechflow-node-t2t-subtitle.js.map +0 -1
  97. package/dst/speechflow-node-t2t-transformers.d.ts +0 -14
  98. package/dst/speechflow-node-t2t-transformers.js +0 -265
  99. package/dst/speechflow-node-t2t-transformers.js.map +0 -1
  100. package/dst/speechflow-node-x2x-filter.d.ts +0 -11
  101. package/dst/speechflow-node-x2x-filter.js +0 -117
  102. package/dst/speechflow-node-x2x-filter.js.map +0 -1
  103. package/dst/speechflow-node-x2x-trace.d.ts +0 -11
  104. package/dst/speechflow-node-x2x-trace.js +0 -104
  105. package/dst/speechflow-node-x2x-trace.js.map +0 -1
  106. package/dst/speechflow-node-xio-device.d.ts +0 -13
  107. package/dst/speechflow-node-xio-device.js +0 -230
  108. package/dst/speechflow-node-xio-device.js.map +0 -1
  109. package/dst/speechflow-node-xio-file.d.ts +0 -11
  110. package/dst/speechflow-node-xio-file.js +0 -216
  111. package/dst/speechflow-node-xio-file.js.map +0 -1
  112. package/dst/speechflow-node-xio-mqtt.d.ts +0 -13
  113. package/dst/speechflow-node-xio-mqtt.js +0 -188
  114. package/dst/speechflow-node-xio-mqtt.js.map +0 -1
  115. package/dst/speechflow-node-xio-websocket.d.ts +0 -13
  116. package/dst/speechflow-node-xio-websocket.js +0 -278
  117. package/dst/speechflow-node-xio-websocket.js.map +0 -1
  118. package/dst/speechflow-node.d.ts +0 -63
  119. package/dst/speechflow-node.js +0 -177
  120. package/dst/speechflow-node.js.map +0 -1
  121. package/dst/speechflow-utils.d.ts +0 -74
  122. package/dst/speechflow-utils.js +0 -519
  123. package/dst/speechflow-utils.js.map +0 -1
  124. package/dst/speechflow.js +0 -787
  125. package/dst/speechflow.js.map +0 -1
  126. package/src/speechflow-node-a2a-meter.ts +0 -177
  127. package/src/speechflow-node-t2t-subtitle.ts +0 -149
  128. /package/{etc → speechflow-cli/etc}/biome.jsonc +0 -0
  129. /package/{etc → speechflow-cli/etc}/eslint.mjs +0 -0
  130. /package/{etc → speechflow-cli/etc}/oxlint.jsonc +0 -0
  131. /package/{etc → speechflow-cli/etc}/speechflow.bat +0 -0
  132. /package/{etc → speechflow-cli/etc}/speechflow.sh +0 -0
  133. /package/{etc → speechflow-cli/etc}/speechflow.yaml +0 -0
  134. /package/{etc → speechflow-cli/etc}/tsconfig.json +0 -0
  135. /package/{package.d → speechflow-cli/package.d}/@ericedouard+vad-node-realtime+0.2.0.patch +0 -0
  136. /package/{src → speechflow-cli/src}/lib.d.ts +0 -0
  137. /package/{src → speechflow-cli/src}/speechflow-logo.ai +0 -0
  138. /package/{src → speechflow-cli/src}/speechflow-logo.svg +0 -0
  139. /package/{src → speechflow-cli/src}/speechflow-node-a2a-ffmpeg.ts +0 -0
  140. /package/{src → speechflow-cli/src}/speechflow-node-a2a-gender.ts +0 -0
  141. /package/{src → speechflow-cli/src}/speechflow-node-a2a-mute.ts +0 -0
  142. /package/{src → speechflow-cli/src}/speechflow-node-a2a-wav.ts +0 -0
  143. /package/{src → speechflow-cli/src}/speechflow-node-t2a-kokoro.ts +0 -0
  144. /package/{src → speechflow-cli/src}/speechflow-node-t2t-deepl.ts +0 -0
  145. /package/{src → speechflow-cli/src}/speechflow-node-t2t-format.ts +0 -0
  146. /package/{src → speechflow-cli/src}/speechflow-node-t2t-ollama.ts +0 -0
  147. /package/{src → speechflow-cli/src}/speechflow-node-t2t-openai.ts +0 -0
  148. /package/{src → speechflow-cli/src}/speechflow-node-t2t-sentence.ts +0 -0
  149. /package/{src → speechflow-cli/src}/speechflow-node-t2t-transformers.ts +0 -0
  150. /package/{src → speechflow-cli/src}/speechflow-node-xio-device.ts +0 -0
  151. /package/{src → speechflow-cli/src}/speechflow-node-xio-file.ts +0 -0
  152. /package/{src → speechflow-cli/src}/speechflow-node-xio-mqtt.ts +0 -0
  153. /package/{src → speechflow-cli/src}/speechflow-node-xio-websocket.ts +0 -0
  154. /package/{src → speechflow-cli/src}/speechflow-utils.ts +0 -0
  155. /package/{tsconfig.json → speechflow-cli/tsconfig.json} +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,29 @@
2
2
  ChangeLog
3
3
  =========
4
4
 
5
+ 1.4.1 (2025-08-05)
6
+ ------------------
7
+
8
+ - CLEANUP: fix logo references
9
+ - BUGFIX: fix top-level exports after refactoring
10
+
11
+ 1.4.0 (2025-08-05)
12
+ ------------------
13
+
14
+ - IMPROVEMENT: add dashboard infrastructure and expose information from "meter" and "trace" nodes
15
+ - IMPROVEMENT: add subtitle web interface for real-time subtitle display
16
+ - IMPROVEMENT: allow "deepgram" node to optionally provide "interim" results (primarily for subtitle)
17
+ - IMPROVEMENT: allow "filter" node to filter on chunk kind and type
18
+ - IMPROVEMENT: disable endpointing in "deepgram" node as it makes no sense for us
19
+ - IMPROVEMENT: allow -d (dashboard) option to accept a name which is displayed below the dashboard columns
20
+ - IMPROVEMENT: display names below the dashboard columns in UI
21
+ - IMPROVEMENT: move text columns in dashboard UI always to the bottom of the screen
22
+ - IMPROVEMENT: in dashboard UI adjust all colors to be blue as the main theme and make font sizes more eligible
23
+ - BUGFIX: switch back "deepgram" node to use "nova-2" model (as it supports numerals feature, etc)
24
+ - CLEANUP: in "deepgram" node remove ancient initialization workaround
25
+ - CLEANUP: simplify codebase structure and remove redundancy
26
+ - UPGRADE: upgrade NPM dependencies
27
+
5
28
  1.3.2 (2025-08-04)
6
29
  ------------------
7
30
 
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- <img src="https://raw.githubusercontent.com/rse/speechflow/master/src/speechflow-logo.svg" width="400" align="right" alt=""/>
2
+ <img src="https://raw.githubusercontent.com/rse/speechflow/master/speechflow-cli/src/speechflow-logo.svg" width="400" align="right" alt=""/>
3
3
 
4
4
  SpeechFlow
5
5
  ==========
@@ -63,7 +63,7 @@ $ npm install -g speechflow
63
63
  Usage
64
64
  -----
65
65
 
66
- ```sh
66
+ ```txt
67
67
  $ speechflow
68
68
  [-h|--help]
69
69
  [-V|--version]
@@ -85,7 +85,7 @@ The **SpeechFlow** graph expression language is based on
85
85
  [**FlowLink**](https://npmjs.org/flowlink), which itself has a language
86
86
  following the following BNF-style grammar:
87
87
 
88
- ```
88
+ ```txt
89
89
  expr ::= parallel
90
90
  | sequential
91
91
  | node
package/etc/stx.conf CHANGED
@@ -4,74 +4,70 @@
4
4
  ## Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
5
5
  ##
6
6
 
7
- # make patches
8
- patch-make
9
- npm shrinkwrap && \
10
- patch-package --patch-dir package.d "@ericedouard/vad-node-realtime" && \
11
- shx rm -f npm-shrinkwrap.json
7
+ # (internal): just pass-through "npm install" operation
8
+ post-install
9
+ npm --prefix speechflow-cli install && \
10
+ npm --prefix speechflow-ui-db install && \
11
+ npm --prefix speechflow-ui-st install
12
12
 
13
- # [INTERNAL] apply patches
14
- patch-apply
15
- patch-package --patch-dir package.d
13
+ # automatically update all NPM dependencies
14
+ upd
15
+ npx -y upd && \
16
+ (cd speechflow-cli && npx -y upd) && \
17
+ (cd speechflow-ui-db && npx -y upd) && \
18
+ (cd speechflow-ui-st && npx -y upd)
16
19
 
17
- # multiview-style development dashboard
18
- dev
19
- stmux -w always -m beep -e "built.in.+ms" -- \
20
- [ -s 35% "stx lint-watch" : \
21
- -s 15% "stx build-watch" : \
22
- -s 30% "stx server-delay server-watch" ]
20
+ # lint components for development
21
+ lint
22
+ npm --prefix speechflow-cli start lint && \
23
+ npm --prefix speechflow-ui-db start lint && \
24
+ npm --prefix speechflow-ui-st start lint
23
25
 
24
- # static code analysis (linting)
25
- lint:
26
- tsc --project etc/tsconfig.json --noEmit && \
27
- oxlint --config etc/oxlint.jsonc src/**/*.ts && \
28
- biome lint --diagnostic-level=warn --config-path=etc/biome.jsonc src/*.ts && \
29
- eslint --config etc/eslint.mjs src/**/*.ts
30
-
31
- # static code analysis (linting) with file watching
32
- lint-watch
33
- nodemon --exec "stx lint" --watch src --ext ts
34
-
35
- # code compilation/transpiling (building)
26
+ # build components for production (full build)
36
27
  build
37
- tsc --project etc/tsconfig.json
38
-
39
- # code compilation/transpiling (building) with file watching
40
- build-watch
41
- nodemon --exec "stx build" --watch src --ext ts
28
+ npm --prefix speechflow-cli start build && \
29
+ npm --prefix speechflow-ui-db start build && \
30
+ npm --prefix speechflow-ui-st start build
42
31
 
43
- # build all-in-one packages
44
- build-pkg
45
- cd dst && \
46
- targets="node24-linux-x64,node24-linux-arm64" && \
47
- targets="$targets,node24-win-x64,node24-win-arm64" && \
48
- targets="$targets,node24-macos-x64,node24-macos-arm64" && \
49
- pkg --sea --public -c ../package.json -t "$targets" speechflow.js && \
50
- shx mv speechflow-linux-x64 speechflow-lnx-x64 && \
51
- shx mv speechflow-linux-arm64 speechflow-lnx-a64 && \
52
- shx mv speechflow-win-x64.exe speechflow-win-x64.exe && \
53
- shx mv speechflow-win-arm64.exe speechflow-win-a64.exe && \
54
- shx mv speechflow-macos-x64 speechflow-mac-x64 && \
55
- shx mv speechflow-macos-arm64 speechflow-mac-a64
32
+ # (internal): build components for development (partial build only)
33
+ build:dev
34
+ npm --prefix speechflow-cli start build && \
35
+ npm --prefix speechflow-ui-db start build && \
36
+ npm --prefix speechflow-ui-st start build
56
37
 
57
- # [INTERNAL] wait for server
58
- server-delay
59
- delay 2.0
38
+ # (internal): build components for development (continuous file watching)
39
+ build:dev:watch
40
+ watch "npm start build:dev" \
41
+ speechflow-cli/src \
42
+ speechflow-ui-db/src \
43
+ speechflow-ui-st/src \
44
+ --wait=2 --interval=1
60
45
 
61
- # run program
62
- server
63
- node --enable-source-maps dst/speechflow.js -v info -c studio@etc/speechflow.yaml "$@"
46
+ # (internal): run command-line interface for production
47
+ run:dev:watch
48
+ wait-on -l "speechflow-cli/dst/speechflow.js" && \
49
+ cross-env NODE_OPTIONS="--no-warnings" \
50
+ nodemon --signal SIGINT -w speechflow-5-cli/dst-stage2 --delay 1500ms \
51
+ speechflow-cli/dst/speechflow.js -- \
52
+ $SPEECHFLOW_OPTIONS
64
53
 
65
- # run program with file watching
66
- server-watch
67
- cross-env NODE_OPTIONS="--enable-source-maps" \
68
- nodemon --exec "stx server" --watch dst --ext ts --delay 1.0
54
+ # (internal): run command-line interface for development (continuous file watching)
55
+ run:dev
56
+ concurrently -p "[{name}]" -n "build,run" -c "blue,red" \
57
+ "npm start build:dev:watch" \
58
+ "npm start run:dev:watch"
69
59
 
70
- # remove all files regularly generated
60
+ # remove all generated artifacts (reverse of "npm start build")
71
61
  clean
72
- shx rm -rf dst
62
+ npm --prefix speechflow-cli start clean && \
63
+ npm --prefix speechflow-ui-db start clean && \
64
+ npm --prefix speechflow-ui-st start clean
73
65
 
74
- # remove all files generated
75
- clean-dist : clean
66
+ # remove all generated artifacts (reverse of "npm install" and "npm start build")
67
+ clean:dist
68
+ npm --prefix speechflow-cli start clean:dist && \
69
+ npm --prefix speechflow-ui-db start clean:dist && \
70
+ npm --prefix speechflow-ui-st start clean:dist && \
71
+ shx rm -f package-lock.json && \
76
72
  shx rm -rf node_modules
77
73
 
package/package.json CHANGED
@@ -1,117 +1,46 @@
1
1
  {
2
- "name": "speechflow",
3
- "version": "1.3.2",
4
- "x-stdver": "1.3.2-GA",
5
- "x-release": "2025-08-04",
6
- "homepage": "https://github.com/rse/speechflow",
7
- "description": "Speech Processing Flow Graph",
8
- "license": "GPL-3.0-only",
2
+ "name": "speechflow",
3
+ "version": "1.4.1",
4
+ "x-stdver": "1.4.0-GA",
5
+ "x-release": "2025-08-05",
6
+ "homepage": "https://github.com/rse/speechflow",
7
+ "description": "Speech Processing Flow Graph",
8
+ "license": "GPL-3.0-only",
9
9
  "author": {
10
- "name": "Dr. Ralf S. Engelschall",
11
- "email": "rse@engelschall.com",
12
- "url": "http://engelschall.com"
10
+ "name": "Dr. Ralf S. Engelschall",
11
+ "email": "rse@engelschall.com",
12
+ "url": "http://engelschall.com"
13
13
  },
14
14
  "repository": {
15
- "type": "git",
16
- "url": "git+https://github.com/rse/speechflow.git"
17
- },
18
- "dependencies": {
19
- "cli-io": "0.9.13",
20
- "yargs": "18.0.0",
21
- "flowlink": "1.0.0",
22
- "js-yaml": "4.1.0",
23
- "@gpeng/naudiodon": "2.4.1",
24
- "@deepgram/sdk": "4.11.1",
25
- "deepl-node": "1.19.0",
26
- "@elevenlabs/elevenlabs-js": "2.7.0",
27
- "stream-transform": "3.4.0",
28
- "get-stream": "9.0.1",
29
- "@dotenvx/dotenvx": "1.48.4",
30
- "speex-resampler": "3.0.1",
31
- "object-path": "0.11.8",
32
- "ws": "8.18.3",
33
- "bufferutil": "4.0.9",
34
- "utf-8-validate": "6.0.5",
35
- "@hapi/hapi": "21.4.0",
36
- "@hapi/boom": "10.0.1",
37
- "@hapi/inert": "7.1.0",
38
- "hapi-plugin-header": "1.1.8",
39
- "hapi-plugin-websocket": "2.4.11",
40
- "@opensumi/reconnecting-websocket": "4.4.0",
41
- "ollama": "0.5.16",
42
- "openai": "5.11.0",
43
- "@rse/ffmpeg": "1.4.2",
44
- "ffmpeg-stream": "1.0.1",
45
- "installed-packages": "1.0.13",
46
- "syspath": "1.0.8",
47
- "wav": "1.0.2",
48
- "mqtt": "5.14.0",
49
- "cbor2": "2.0.1",
50
- "arktype": "2.1.20",
51
- "pure-uuid": "1.8.1",
52
- "wavefile": "11.0.0",
53
- "audio-inspect": "0.0.3",
54
- "@huggingface/transformers": "3.7.1",
55
- "kokoro-js": "1.2.1",
56
- "@ericedouard/vad-node-realtime": "0.2.0",
57
- "luxon": "3.7.1",
58
- "node-interval-tree": "2.1.2",
59
- "wrap-text": "1.0.10",
60
- "cli-table3": "0.6.5"
15
+ "type": "git",
16
+ "url": "git+https://github.com/rse/speechflow.git"
61
17
  },
62
18
  "devDependencies": {
63
- "eslint": "9.32.0",
64
- "@eslint/js": "9.32.0",
65
- "neostandard": "0.12.2",
66
- "eslint-plugin-promise": "7.2.1",
67
- "eslint-plugin-import": "2.32.0",
68
- "eslint-plugin-node": "11.1.0",
69
- "@typescript-eslint/eslint-plugin": "8.38.0",
70
- "@typescript-eslint/parser": "8.38.0",
71
- "oxlint": "1.9.0",
72
- "eslint-plugin-oxlint": "1.9.0",
73
- "@biomejs/biome": "2.0.6",
74
- "eslint-config-biome": "2.1.3",
75
-
76
- "@types/node": "24.1.0",
77
- "@types/yargs": "17.0.33",
78
- "@types/js-yaml": "4.0.9",
79
- "@types/object-path": "0.11.4",
80
- "@types/ws": "8.18.1",
81
- "@types/resolve": "1.20.6",
82
- "@types/wav": "1.0.4",
83
- "@types/luxon": "3.7.1",
84
- "@types/wrap-text": "1.0.2",
85
-
86
- "patch-package": "8.0.0",
87
- "stmux": "1.8.11",
88
- "nodemon": "3.1.10",
89
- "shx": "0.4.0",
90
- "@yao-pkg/pkg": "6.6.0",
91
- "typescript": "5.8.3",
92
- "delay-cli": "2.0.0",
93
- "@rse/stx": "1.0.7",
94
- "cross-env": "10.0.0"
95
- },
96
- "overrides": {
97
- "@huggingface/transformers": { "onnxruntime-node": "1.23.0-dev.20250703-7fc6235861" }
19
+ "@rse/stx": "1.0.7",
20
+ "nodemon": "3.1.10",
21
+ "watch": "1.0.2",
22
+ "concurrently": "9.2.0",
23
+ "wait-on": "8.0.4",
24
+ "cross-env": "10.0.0",
25
+ "shx": "0.4.0"
98
26
  },
99
- "upd": [ "!@biomejs/biome", "!typescript" ],
100
- "engines": {
101
- "node": ">=22.0.0"
27
+ "engines" : {
28
+ "npm": ">=10.0.0",
29
+ "node": ">=22.0.0"
102
30
  },
103
- "bin": { "speechflow": "dst/speechflow.js" },
104
- "types": "./dst/speechflow-node.d.ts",
105
- "module": "./dst/speechflow-node.js",
106
- "main": "./dst/speechflow-node.js",
31
+ "bin": { "speechflow": "speechflow-cli/dst/speechflow.js" },
32
+ "types": "./speechflow-cli/dst/speechflow-node.d.ts",
33
+ "module": "./speechflow-cli/dst/speechflow-node.js",
34
+ "main": "./speechflow-cli/dst/speechflow-node.js",
107
35
  "exports": {
108
36
  ".": {
109
- "import": { "types": "./dst/speechflow-node.d.ts", "default": "./dst/speechflow-node.js" },
110
- "require": { "types": "./dst/speechflow-node.d.ts", "default": "./dst/speechflow-node.js" }
37
+ "import": { "types": "./speechflow-cli/dst/speechflow-node.d.ts", "default": "./speechflow-cli/dst/speechflow-node.js" },
38
+ "require": { "types": "./speechflow-cli/dst/speechflow-node.d.ts", "default": "./speechflow-cli/dst/speechflow-node.js" }
111
39
  }
112
40
  },
113
41
  "scripts": {
114
- "postinstall": "npm start patch-apply",
115
- "start": "stx -v4 -c etc/stx.conf"
42
+ "postinstall": "npm start post-install",
43
+ "start": "stx -v4 -c etc/stx.conf",
44
+ "speechflow": "node --no-warnings speechflow-cli/dst/speechflow.js"
116
45
  }
117
46
  }
@@ -0,0 +1,77 @@
1
+ ##
2
+ ## SpeechFlow - Speech Processing Flow Graph
3
+ ## Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
4
+ ## Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
5
+ ##
6
+
7
+ # make patches
8
+ patch-make
9
+ npm shrinkwrap && \
10
+ patch-package --patch-dir package.d "@ericedouard/vad-node-realtime" && \
11
+ shx rm -f npm-shrinkwrap.json
12
+
13
+ # [INTERNAL] apply patches
14
+ patch-apply
15
+ patch-package --patch-dir package.d
16
+
17
+ # multiview-style development dashboard
18
+ dev
19
+ stmux -w always -m beep -e "built.in.+ms" -- \
20
+ [ -s 35% "stx lint-watch" : \
21
+ -s 15% "stx build-watch" : \
22
+ -s 30% "stx server-delay server-watch" ]
23
+
24
+ # static code analysis (linting)
25
+ lint:
26
+ tsc --project etc/tsconfig.json --noEmit && \
27
+ oxlint --config etc/oxlint.jsonc src/**/*.ts && \
28
+ biome lint --diagnostic-level=warn --config-path=etc/biome.jsonc src/*.ts && \
29
+ eslint --config etc/eslint.mjs src/**/*.ts
30
+
31
+ # static code analysis (linting) with file watching
32
+ lint-watch
33
+ nodemon --exec "stx lint" --watch src --ext ts
34
+
35
+ # code compilation/transpiling (building)
36
+ build
37
+ tsc --project etc/tsconfig.json
38
+
39
+ # code compilation/transpiling (building) with file watching
40
+ build-watch
41
+ nodemon --exec "stx build" --watch src --ext ts
42
+
43
+ # build all-in-one packages
44
+ build-pkg
45
+ cd dst && \
46
+ targets="node24-linux-x64,node24-linux-arm64" && \
47
+ targets="$targets,node24-win-x64,node24-win-arm64" && \
48
+ targets="$targets,node24-macos-x64,node24-macos-arm64" && \
49
+ pkg --sea --public -c ../package.json -t "$targets" speechflow.js && \
50
+ shx mv speechflow-linux-x64 speechflow-lnx-x64 && \
51
+ shx mv speechflow-linux-arm64 speechflow-lnx-a64 && \
52
+ shx mv speechflow-win-x64.exe speechflow-win-x64.exe && \
53
+ shx mv speechflow-win-arm64.exe speechflow-win-a64.exe && \
54
+ shx mv speechflow-macos-x64 speechflow-mac-x64 && \
55
+ shx mv speechflow-macos-arm64 speechflow-mac-a64
56
+
57
+ # [INTERNAL] wait for server
58
+ server-delay
59
+ delay 2.0
60
+
61
+ # run program
62
+ server
63
+ node --enable-source-maps dst/speechflow.js -v info -c studio@etc/speechflow.yaml "$@"
64
+
65
+ # run program with file watching
66
+ server-watch
67
+ cross-env NODE_OPTIONS="--enable-source-maps" \
68
+ nodemon --exec "stx server" --watch dst --ext ts --delay 1.0
69
+
70
+ # remove all files regularly generated
71
+ clean
72
+ shx rm -rf dst
73
+
74
+ # remove all files generated
75
+ clean-dist : clean
76
+ shx rm -rf node_modules
77
+
@@ -0,0 +1,116 @@
1
+ {
2
+ "private": "true",
3
+ "name": "speechflow",
4
+ "version": "0.0.0",
5
+ "homepage": "https://github.com/rse/speechflow",
6
+ "description": "Speech Processing Flow Graph",
7
+ "license": "GPL-3.0-only",
8
+ "author": {
9
+ "name": "Dr. Ralf S. Engelschall",
10
+ "email": "rse@engelschall.com",
11
+ "url": "http://engelschall.com"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/rse/speechflow.git"
16
+ },
17
+ "dependencies": {
18
+ "cli-io": "0.9.13",
19
+ "yargs": "18.0.0",
20
+ "flowlink": "1.0.0",
21
+ "js-yaml": "4.1.0",
22
+ "@gpeng/naudiodon": "2.4.1",
23
+ "@deepgram/sdk": "4.11.1",
24
+ "deepl-node": "1.19.0",
25
+ "@elevenlabs/elevenlabs-js": "2.7.0",
26
+ "stream-transform": "3.4.0",
27
+ "get-stream": "9.0.1",
28
+ "@dotenvx/dotenvx": "1.48.4",
29
+ "speex-resampler": "3.0.1",
30
+ "object-path": "0.11.8",
31
+ "ws": "8.18.3",
32
+ "bufferutil": "4.0.9",
33
+ "utf-8-validate": "6.0.5",
34
+ "@hapi/hapi": "21.4.2",
35
+ "@hapi/boom": "10.0.1",
36
+ "@hapi/inert": "7.1.0",
37
+ "hapi-plugin-header": "1.1.8",
38
+ "hapi-plugin-websocket": "2.4.11",
39
+ "@opensumi/reconnecting-websocket": "4.4.0",
40
+ "ollama": "0.5.16",
41
+ "openai": "5.12.0",
42
+ "@rse/ffmpeg": "1.4.2",
43
+ "ffmpeg-stream": "1.0.1",
44
+ "installed-packages": "1.0.13",
45
+ "syspath": "1.0.8",
46
+ "wav": "1.0.2",
47
+ "mqtt": "5.14.0",
48
+ "cbor2": "2.0.1",
49
+ "arktype": "2.1.20",
50
+ "pure-uuid": "1.8.1",
51
+ "wavefile": "11.0.0",
52
+ "audio-inspect": "0.0.3",
53
+ "@huggingface/transformers": "3.7.1",
54
+ "kokoro-js": "1.2.1",
55
+ "@ericedouard/vad-node-realtime": "0.2.0",
56
+ "luxon": "3.7.1",
57
+ "node-interval-tree": "2.1.2",
58
+ "wrap-text": "1.0.10",
59
+ "cli-table3": "0.6.5"
60
+ },
61
+ "devDependencies": {
62
+ "eslint": "9.32.0",
63
+ "@eslint/js": "9.32.0",
64
+ "neostandard": "0.12.2",
65
+ "eslint-plugin-promise": "7.2.1",
66
+ "eslint-plugin-import": "2.32.0",
67
+ "eslint-plugin-node": "11.1.0",
68
+ "@typescript-eslint/eslint-plugin": "8.39.0",
69
+ "@typescript-eslint/parser": "8.39.0",
70
+ "oxlint": "1.9.0",
71
+ "eslint-plugin-oxlint": "1.9.0",
72
+ "@biomejs/biome": "2.0.6",
73
+ "eslint-config-biome": "2.1.3",
74
+
75
+ "@types/node": "24.2.0",
76
+ "@types/yargs": "17.0.33",
77
+ "@types/js-yaml": "4.0.9",
78
+ "@types/object-path": "0.11.4",
79
+ "@types/ws": "8.18.1",
80
+ "@types/resolve": "1.20.6",
81
+ "@types/wav": "1.0.4",
82
+ "@types/luxon": "3.7.1",
83
+ "@types/wrap-text": "1.0.2",
84
+
85
+ "patch-package": "8.0.0",
86
+ "stmux": "1.8.11",
87
+ "nodemon": "3.1.10",
88
+ "shx": "0.4.0",
89
+ "@yao-pkg/pkg": "6.6.0",
90
+ "typescript": "5.9.2",
91
+ "delay-cli": "2.0.0",
92
+ "@rse/stx": "1.0.7",
93
+ "cross-env": "10.0.0"
94
+ },
95
+ "overrides": {
96
+ "@huggingface/transformers": { "onnxruntime-node": "1.23.0-dev.20250703-7fc6235861" }
97
+ },
98
+ "upd": [ "!@biomejs/biome" ],
99
+ "engines": {
100
+ "node": ">=22.0.0"
101
+ },
102
+ "bin": { "speechflow": "dst/speechflow.js" },
103
+ "types": "./dst/speechflow-node.d.ts",
104
+ "module": "./dst/speechflow-node.js",
105
+ "main": "./dst/speechflow-node.js",
106
+ "exports": {
107
+ ".": {
108
+ "import": { "types": "./dst/speechflow-node.d.ts", "default": "./dst/speechflow-node.js" },
109
+ "require": { "types": "./dst/speechflow-node.d.ts", "default": "./dst/speechflow-node.js" }
110
+ }
111
+ },
112
+ "scripts": {
113
+ "postinstall": "npm start patch-apply",
114
+ "start": "stx -v4 -c etc/stx.conf"
115
+ }
116
+ }