speechflow 1.6.0 → 1.6.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 (182) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +1 -1
  3. package/package.json +2 -2
  4. package/speechflow-cli/dst/speechflow-main-api.d.ts +12 -0
  5. package/speechflow-cli/dst/speechflow-main-api.js +319 -0
  6. package/speechflow-cli/dst/speechflow-main-api.js.map +1 -0
  7. package/speechflow-cli/dst/speechflow-main-cli.d.ts +28 -0
  8. package/speechflow-cli/dst/speechflow-main-cli.js +271 -0
  9. package/speechflow-cli/dst/speechflow-main-cli.js.map +1 -0
  10. package/speechflow-cli/dst/speechflow-main-config.d.ts +9 -0
  11. package/speechflow-cli/dst/speechflow-main-config.js +27 -0
  12. package/speechflow-cli/dst/speechflow-main-config.js.map +1 -0
  13. package/speechflow-cli/dst/speechflow-main-graph.d.ts +34 -0
  14. package/speechflow-cli/dst/speechflow-main-graph.js +367 -0
  15. package/speechflow-cli/dst/speechflow-main-graph.js.map +1 -0
  16. package/speechflow-cli/dst/speechflow-main-nodes.d.ts +10 -0
  17. package/speechflow-cli/dst/speechflow-main-nodes.js +60 -0
  18. package/speechflow-cli/dst/speechflow-main-nodes.js.map +1 -0
  19. package/speechflow-cli/dst/speechflow-main-status.d.ts +11 -0
  20. package/speechflow-cli/dst/speechflow-main-status.js +60 -0
  21. package/speechflow-cli/dst/speechflow-main-status.js.map +1 -0
  22. package/speechflow-cli/dst/speechflow-main.d.ts +7 -0
  23. package/speechflow-cli/dst/speechflow-main.js +127 -0
  24. package/speechflow-cli/dst/speechflow-main.js.map +1 -0
  25. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js +4 -4
  26. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js.map +1 -1
  27. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js +5 -6
  28. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js.map +1 -1
  29. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js +5 -5
  30. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js.map +1 -1
  31. package/speechflow-cli/dst/speechflow-node-a2a-expander.js +5 -6
  32. package/speechflow-cli/dst/speechflow-node-a2a-expander.js.map +1 -1
  33. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js +5 -5
  34. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js.map +1 -1
  35. package/speechflow-cli/dst/speechflow-node-a2a-filler.js +3 -3
  36. package/speechflow-cli/dst/speechflow-node-a2a-filler.js.map +1 -1
  37. package/speechflow-cli/dst/speechflow-node-a2a-gain.js +2 -2
  38. package/speechflow-cli/dst/speechflow-node-a2a-gain.js.map +1 -1
  39. package/speechflow-cli/dst/speechflow-node-a2a-gender.js +4 -4
  40. package/speechflow-cli/dst/speechflow-node-a2a-gender.js.map +1 -1
  41. package/speechflow-cli/dst/speechflow-node-a2a-meter.js +2 -2
  42. package/speechflow-cli/dst/speechflow-node-a2a-meter.js.map +1 -1
  43. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js +4 -4
  44. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js.map +1 -1
  45. package/speechflow-cli/dst/speechflow-node-a2a-speex.js +4 -4
  46. package/speechflow-cli/dst/speechflow-node-a2a-speex.js.map +1 -1
  47. package/speechflow-cli/dst/speechflow-node-a2a-vad.js +4 -4
  48. package/speechflow-cli/dst/speechflow-node-a2a-vad.js.map +1 -1
  49. package/speechflow-cli/dst/speechflow-node-a2t-amazon.js +6 -6
  50. package/speechflow-cli/dst/speechflow-node-a2t-amazon.js.map +1 -1
  51. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +4 -4
  52. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -1
  53. package/speechflow-cli/dst/speechflow-node-a2t-openai.js +4 -4
  54. package/speechflow-cli/dst/speechflow-node-a2t-openai.js.map +1 -1
  55. package/speechflow-cli/dst/speechflow-node-t2a-amazon.js +2 -2
  56. package/speechflow-cli/dst/speechflow-node-t2a-amazon.js.map +1 -1
  57. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js +2 -2
  58. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js.map +1 -1
  59. package/speechflow-cli/dst/speechflow-node-t2t-amazon.js +2 -2
  60. package/speechflow-cli/dst/speechflow-node-t2t-amazon.js.map +1 -1
  61. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js +2 -2
  62. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js.map +1 -1
  63. package/speechflow-cli/dst/speechflow-node-t2t-google.js +5 -5
  64. package/speechflow-cli/dst/speechflow-node-t2t-google.js.map +1 -1
  65. package/speechflow-cli/dst/speechflow-node-t2t-modify.js +2 -2
  66. package/speechflow-cli/dst/speechflow-node-t2t-modify.js.map +1 -1
  67. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js +2 -2
  68. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js.map +1 -1
  69. package/speechflow-cli/dst/speechflow-node-t2t-openai.js +2 -2
  70. package/speechflow-cli/dst/speechflow-node-t2t-openai.js.map +1 -1
  71. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js +2 -2
  72. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js.map +1 -1
  73. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js +2 -2
  74. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js.map +1 -1
  75. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js +2 -2
  76. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js.map +1 -1
  77. package/speechflow-cli/dst/speechflow-node-x2x-filter.js +2 -2
  78. package/speechflow-cli/dst/speechflow-node-x2x-filter.js.map +1 -1
  79. package/speechflow-cli/dst/speechflow-node-xio-device.js +5 -5
  80. package/speechflow-cli/dst/speechflow-node-xio-device.js.map +1 -1
  81. package/speechflow-cli/dst/speechflow-node-xio-file.js +27 -27
  82. package/speechflow-cli/dst/speechflow-node-xio-file.js.map +1 -1
  83. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js +4 -4
  84. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js.map +1 -1
  85. package/speechflow-cli/dst/speechflow-node-xio-websocket.js +7 -7
  86. package/speechflow-cli/dst/speechflow-node-xio-websocket.js.map +1 -1
  87. package/speechflow-cli/dst/{speechflow-utils-audio-wt.js → speechflow-util-audio-wt.js} +1 -1
  88. package/speechflow-cli/dst/speechflow-util-audio-wt.js.map +1 -0
  89. package/speechflow-cli/dst/speechflow-util-audio.d.ts +22 -0
  90. package/speechflow-cli/dst/speechflow-util-audio.js +251 -0
  91. package/speechflow-cli/dst/speechflow-util-audio.js.map +1 -0
  92. package/speechflow-cli/dst/speechflow-util-error.d.ts +14 -0
  93. package/speechflow-cli/dst/speechflow-util-error.js +131 -0
  94. package/speechflow-cli/dst/speechflow-util-error.js.map +1 -0
  95. package/speechflow-cli/dst/speechflow-util-queue.d.ts +68 -0
  96. package/speechflow-cli/dst/speechflow-util-queue.js +338 -0
  97. package/speechflow-cli/dst/speechflow-util-queue.js.map +1 -0
  98. package/speechflow-cli/dst/speechflow-util-stream.d.ts +18 -0
  99. package/speechflow-cli/dst/speechflow-util-stream.js +219 -0
  100. package/speechflow-cli/dst/speechflow-util-stream.js.map +1 -0
  101. package/speechflow-cli/dst/speechflow-util-webaudio-wt.js +124 -0
  102. package/speechflow-cli/dst/speechflow-util-webaudio-wt.js.map +1 -0
  103. package/speechflow-cli/dst/{speechflow-utils-audio.js → speechflow-util-webaudio.js} +2 -2
  104. package/speechflow-cli/dst/speechflow-util-webaudio.js.map +1 -0
  105. package/speechflow-cli/dst/speechflow-util.d.ts +4 -0
  106. package/speechflow-cli/dst/speechflow-util.js +26 -0
  107. package/speechflow-cli/dst/speechflow-util.js.map +1 -0
  108. package/speechflow-cli/dst/speechflow.js +3 -912
  109. package/speechflow-cli/dst/speechflow.js.map +1 -1
  110. package/speechflow-cli/etc/oxlint.jsonc +4 -1
  111. package/speechflow-cli/package.json +1 -0
  112. package/speechflow-cli/src/speechflow-main-api.ts +315 -0
  113. package/speechflow-cli/src/speechflow-main-cli.ts +259 -0
  114. package/speechflow-cli/src/speechflow-main-config.ts +17 -0
  115. package/speechflow-cli/src/speechflow-main-graph.ts +372 -0
  116. package/speechflow-cli/src/speechflow-main-nodes.ts +61 -0
  117. package/speechflow-cli/src/speechflow-main-status.ts +70 -0
  118. package/speechflow-cli/src/speechflow-main.ts +106 -0
  119. package/speechflow-cli/src/speechflow-node-a2a-compressor-wt.ts +4 -4
  120. package/speechflow-cli/src/speechflow-node-a2a-compressor.ts +5 -6
  121. package/speechflow-cli/src/speechflow-node-a2a-expander-wt.ts +5 -5
  122. package/speechflow-cli/src/speechflow-node-a2a-expander.ts +5 -6
  123. package/speechflow-cli/src/speechflow-node-a2a-ffmpeg.ts +5 -5
  124. package/speechflow-cli/src/speechflow-node-a2a-filler.ts +4 -4
  125. package/speechflow-cli/src/speechflow-node-a2a-gain.ts +2 -2
  126. package/speechflow-cli/src/speechflow-node-a2a-gender.ts +4 -4
  127. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +2 -2
  128. package/speechflow-cli/src/speechflow-node-a2a-rnnoise.ts +4 -4
  129. package/speechflow-cli/src/speechflow-node-a2a-speex.ts +4 -4
  130. package/speechflow-cli/src/speechflow-node-a2a-vad.ts +4 -4
  131. package/speechflow-cli/src/speechflow-node-a2t-amazon.ts +7 -7
  132. package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +5 -5
  133. package/speechflow-cli/src/speechflow-node-a2t-openai.ts +5 -5
  134. package/speechflow-cli/src/speechflow-node-t2a-amazon.ts +2 -2
  135. package/speechflow-cli/src/speechflow-node-t2a-kokoro.ts +2 -2
  136. package/speechflow-cli/src/speechflow-node-t2t-amazon.ts +2 -2
  137. package/speechflow-cli/src/speechflow-node-t2t-deepl.ts +2 -2
  138. package/speechflow-cli/src/speechflow-node-t2t-google.ts +5 -5
  139. package/speechflow-cli/src/speechflow-node-t2t-modify.ts +2 -2
  140. package/speechflow-cli/src/speechflow-node-t2t-ollama.ts +2 -2
  141. package/speechflow-cli/src/speechflow-node-t2t-openai.ts +2 -2
  142. package/speechflow-cli/src/speechflow-node-t2t-sentence.ts +2 -2
  143. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +2 -2
  144. package/speechflow-cli/src/speechflow-node-t2t-transformers.ts +2 -2
  145. package/speechflow-cli/src/speechflow-node-x2x-filter.ts +2 -2
  146. package/speechflow-cli/src/speechflow-node-xio-device.ts +5 -5
  147. package/speechflow-cli/src/speechflow-node-xio-file.ts +9 -10
  148. package/speechflow-cli/src/speechflow-node-xio-mqtt.ts +5 -5
  149. package/speechflow-cli/src/speechflow-node-xio-websocket.ts +7 -7
  150. package/speechflow-cli/src/{speechflow-utils-audio.ts → speechflow-util-audio.ts} +131 -1
  151. package/speechflow-cli/src/speechflow-util-error.ts +184 -0
  152. package/speechflow-cli/src/speechflow-util-queue.ts +320 -0
  153. package/speechflow-cli/src/speechflow-util-stream.ts +197 -0
  154. package/speechflow-cli/src/speechflow-util.ts +10 -0
  155. package/speechflow-cli/src/speechflow.ts +3 -953
  156. package/speechflow-cli/dst/speechflow-node-a2a-dynamics-wt.js +0 -208
  157. package/speechflow-cli/dst/speechflow-node-a2a-dynamics-wt.js.map +0 -1
  158. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.d.ts +0 -15
  159. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.js +0 -312
  160. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.js.map +0 -1
  161. package/speechflow-cli/dst/speechflow-node-a2t-awstranscribe.d.ts +0 -18
  162. package/speechflow-cli/dst/speechflow-node-a2t-awstranscribe.js +0 -312
  163. package/speechflow-cli/dst/speechflow-node-a2t-awstranscribe.js.map +0 -1
  164. package/speechflow-cli/dst/speechflow-node-a2t-openaitranscribe.d.ts +0 -19
  165. package/speechflow-cli/dst/speechflow-node-a2t-openaitranscribe.js +0 -351
  166. package/speechflow-cli/dst/speechflow-node-a2t-openaitranscribe.js.map +0 -1
  167. package/speechflow-cli/dst/speechflow-node-t2a-awspolly.d.ts +0 -16
  168. package/speechflow-cli/dst/speechflow-node-t2a-awspolly.js +0 -204
  169. package/speechflow-cli/dst/speechflow-node-t2a-awspolly.js.map +0 -1
  170. package/speechflow-cli/dst/speechflow-node-t2t-awstranslate.d.ts +0 -13
  171. package/speechflow-cli/dst/speechflow-node-t2t-awstranslate.js +0 -175
  172. package/speechflow-cli/dst/speechflow-node-t2t-awstranslate.js.map +0 -1
  173. package/speechflow-cli/dst/speechflow-utils-audio-wt.js.map +0 -1
  174. package/speechflow-cli/dst/speechflow-utils-audio.js.map +0 -1
  175. package/speechflow-cli/dst/speechflow-utils.d.ts +0 -108
  176. package/speechflow-cli/dst/speechflow-utils.js +0 -746
  177. package/speechflow-cli/dst/speechflow-utils.js.map +0 -1
  178. package/speechflow-cli/src/speechflow-utils.ts +0 -810
  179. /package/speechflow-cli/dst/{speechflow-node-a2a-dynamics-wt.d.ts → speechflow-util-audio-wt.d.ts} +0 -0
  180. /package/speechflow-cli/dst/{speechflow-utils-audio-wt.d.ts → speechflow-util-webaudio-wt.d.ts} +0 -0
  181. /package/speechflow-cli/dst/{speechflow-utils-audio.d.ts → speechflow-util-webaudio.d.ts} +0 -0
  182. /package/speechflow-cli/src/{speechflow-utils-audio-wt.ts → speechflow-util-audio-wt.ts} +0 -0
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ /*
3
+ ** SpeechFlow - Speech Processing Flow Graph
4
+ ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
+ ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.CLIContext = void 0;
45
+ /* standard dependencies */
46
+ const node_path_1 = __importDefault(require("node:path"));
47
+ /* external dependencies */
48
+ const cli_io_1 = __importDefault(require("cli-io"));
49
+ const yargs_1 = __importDefault(require("yargs"));
50
+ const helpers_1 = require("yargs/helpers");
51
+ const js_yaml_1 = __importDefault(require("js-yaml"));
52
+ const dotenvx_1 = __importDefault(require("@dotenvx/dotenvx"));
53
+ const syspath_1 = __importDefault(require("syspath"));
54
+ const chalk_1 = __importDefault(require("chalk"));
55
+ /* internal dependencies */
56
+ const util = __importStar(require("./speechflow-util"));
57
+ const package_json_1 = __importDefault(require("../../package.json"));
58
+ class CLIContext {
59
+ cli = null;
60
+ args = null;
61
+ config = null;
62
+ debug = false;
63
+ /* type guard for initialization */
64
+ isInitialized() {
65
+ return this.cli !== null && this.args !== null && this.config !== null;
66
+ }
67
+ /* initialization of CLI */
68
+ async init() {
69
+ /* determine system paths */
70
+ const { dataDir } = (0, syspath_1.default)({
71
+ appName: "speechflow",
72
+ dataDirAutoCreate: true
73
+ });
74
+ /* parse command-line arguments */
75
+ const coerce = (arg) => Array.isArray(arg) ? arg[arg.length - 1] : arg;
76
+ this.args = await (0, yargs_1.default)()
77
+ /* eslint @stylistic/indent: off */
78
+ .usage("Usage: $0 " +
79
+ "[-h|--help] " +
80
+ "[-V|--version] " +
81
+ "[-S|--status] " +
82
+ "[-v|--verbose <level>] " +
83
+ "[-a|--address <ip-address>] " +
84
+ "[-p|--port <tcp-port>] " +
85
+ "[-C|--cache <directory>] " +
86
+ "[-d|--dashboard <type>:<id>:<name>[,...]] " +
87
+ "[-o|--osc <ip-address>:<udp-port> " +
88
+ "[-e|--expression <expression>] " +
89
+ "[-f|--file <file>] " +
90
+ "[-c|--config <id>@<yaml-config-file>] " +
91
+ "[<argument> [...]]")
92
+ .version(false)
93
+ .option("V", {
94
+ alias: "version",
95
+ type: "boolean",
96
+ array: false,
97
+ coerce,
98
+ default: false,
99
+ describe: "show program version information"
100
+ })
101
+ .option("S", {
102
+ alias: "status",
103
+ type: "boolean",
104
+ array: false,
105
+ coerce,
106
+ default: false,
107
+ describe: "show one-time status of nodes"
108
+ })
109
+ .option("v", {
110
+ alias: "log-level",
111
+ type: "string",
112
+ array: false,
113
+ coerce,
114
+ nargs: 1,
115
+ default: "warning",
116
+ describe: "level for verbose logging ('none', 'error', 'warning', 'info', 'debug')"
117
+ })
118
+ .option("a", {
119
+ alias: "address",
120
+ type: "string",
121
+ array: false,
122
+ coerce,
123
+ nargs: 1,
124
+ default: "0.0.0.0",
125
+ describe: "IP address for REST/WebSocket API"
126
+ })
127
+ .option("p", {
128
+ alias: "port",
129
+ type: "number",
130
+ array: false,
131
+ coerce,
132
+ nargs: 1,
133
+ default: 8484,
134
+ describe: "TCP port for REST/WebSocket API"
135
+ })
136
+ .option("C", {
137
+ alias: "cache",
138
+ type: "string",
139
+ array: false,
140
+ coerce,
141
+ nargs: 1,
142
+ default: node_path_1.default.join(dataDir, "cache"),
143
+ describe: "directory for cached files (primarily AI model files)"
144
+ })
145
+ .option("d", {
146
+ alias: "dashboard",
147
+ type: "string",
148
+ array: false,
149
+ coerce,
150
+ nargs: 1,
151
+ default: "",
152
+ describe: "list of dashboard block types and names"
153
+ })
154
+ .option("o", {
155
+ alias: "osc",
156
+ type: "string",
157
+ array: false,
158
+ coerce,
159
+ nargs: 1,
160
+ default: "",
161
+ describe: "OSC/UDP endpoint to send dashboard information"
162
+ })
163
+ .option("e", {
164
+ alias: "expression",
165
+ type: "string",
166
+ array: false,
167
+ coerce,
168
+ nargs: 1,
169
+ default: "",
170
+ describe: "FlowLink expression string"
171
+ })
172
+ .option("f", {
173
+ alias: "file",
174
+ type: "string",
175
+ array: false,
176
+ coerce,
177
+ nargs: 1,
178
+ default: "",
179
+ describe: "FlowLink expression file"
180
+ })
181
+ .option("c", {
182
+ alias: "config",
183
+ type: "string",
184
+ array: false,
185
+ coerce,
186
+ nargs: 1,
187
+ default: "",
188
+ describe: "FlowLink expression reference into YAML file (in format <id>@<file>)"
189
+ })
190
+ .help("h", "show usage help")
191
+ .alias("h", "help")
192
+ .showHelpOnFail(true)
193
+ .strict()
194
+ .demand(0)
195
+ .parse((0, helpers_1.hideBin)(process.argv));
196
+ /* short-circuit version request */
197
+ if (this.args.V) {
198
+ process.stderr.write(`SpeechFlow ${package_json_1.default["x-stdver"]} (${package_json_1.default["x-release"]}) <${package_json_1.default.homepage}>\n`);
199
+ process.stderr.write(`${package_json_1.default.description}\n`);
200
+ process.stderr.write(`Copyright (c) 2024-2025 ${package_json_1.default.author.name} <${package_json_1.default.author.url}>\n`);
201
+ process.stderr.write(`Licensed under ${package_json_1.default.license} <http://spdx.org/licenses/${package_json_1.default.license}.html>\n`);
202
+ process.exit(0);
203
+ }
204
+ /* establish CLI environment */
205
+ this.cli = new cli_io_1.default({
206
+ encoding: "utf8",
207
+ logLevel: this.args.v,
208
+ logTime: true,
209
+ logPrefix: package_json_1.default.name
210
+ });
211
+ if (this.args.v.match(/^(?:info|debug)$/))
212
+ this.debug = true;
213
+ /* provide startup information */
214
+ this.cli.log("info", `starting SpeechFlow ${package_json_1.default["x-stdver"]} (${package_json_1.default["x-release"]})`);
215
+ /* load .env files */
216
+ const result = dotenvx_1.default.config({
217
+ encoding: "utf8",
218
+ ignore: ["MISSING_ENV_FILE"],
219
+ quiet: true
220
+ });
221
+ if (result?.parsed !== undefined)
222
+ for (const key of Object.keys(result.parsed))
223
+ this.cli.log("info", `loaded environment variable "${key}" from ".env" files`);
224
+ /* sanity check configuration situation */
225
+ let n = 0;
226
+ if (typeof this.args.e === "string" && this.args.e !== "")
227
+ n++;
228
+ if (typeof this.args.f === "string" && this.args.f !== "")
229
+ n++;
230
+ if (typeof this.args.c === "string" && this.args.c !== "")
231
+ n++;
232
+ if (n === 0)
233
+ throw new Error("need at least one FlowLink specification source (use one of the options -e, -f or -c)");
234
+ else if (n !== 1)
235
+ throw new Error("cannot use more than one FlowLink specification source (use only one of the options -e, -f or -c)");
236
+ /* read configuration */
237
+ if (typeof this.args.e === "string" && this.args.e !== "")
238
+ this.config = this.args.e;
239
+ else if (typeof this.args.f === "string" && this.args.f !== "")
240
+ this.config = await this.cli.input(this.args.f, { encoding: "utf8" });
241
+ else if (typeof this.args.c === "string" && this.args.c !== "") {
242
+ const m = this.args.c.match(/^(.+?)@(.+)$/);
243
+ if (m === null)
244
+ throw new Error("invalid configuration file specification (expected \"<id>@<yaml-config-file>\")");
245
+ const [, id, file] = m;
246
+ const yaml = await this.cli.input(file, { encoding: "utf8" });
247
+ const obj = util.run("parsing YAML configuration", () => js_yaml_1.default.load(yaml));
248
+ if (obj[id] === undefined)
249
+ throw new Error(`no such id "${id}" found in configuration file "${file}"`);
250
+ this.config = obj[id];
251
+ }
252
+ }
253
+ /* utility function for handling a top-level error */
254
+ handleTopLevelError(err) {
255
+ if (this.cli !== null) {
256
+ if (this.debug)
257
+ this.cli.log("error", `${err.message}\n${err.stack}`);
258
+ else
259
+ this.cli.log("error", `${err.message}`);
260
+ }
261
+ else {
262
+ if (this.debug)
263
+ process.stderr.write(`${package_json_1.default.name}: ${chalk_1.default.red("ERROR")}: ${err.message}\n${err.stack}\n`);
264
+ else
265
+ process.stderr.write(`${package_json_1.default.name}: ${chalk_1.default.red("ERROR")}: ${err.message}`);
266
+ }
267
+ process.exit(1);
268
+ }
269
+ }
270
+ exports.CLIContext = CLIContext;
271
+ //# sourceMappingURL=speechflow-main-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-main-cli.js","sourceRoot":"","sources":["../src/speechflow-main-cli.ts"],"names":[],"mappings":";AAAA;;;;EAIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,6BAA6B;AAC7B,0DAAyC;AAEzC,6BAA6B;AAC7B,oDAAsC;AACtC,kDAAqC;AACrC,2CAA6C;AAC7C,sDAAuC;AACvC,+DAAgD;AAChD,sDAAuC;AACvC,kDAAqC;AAErC,6BAA6B;AAC7B,wDAAiD;AACjD,sEAAkD;AAkBlD,MAAa,UAAU;IACZ,GAAG,GAAyB,IAAI,CAAA;IAChC,IAAI,GAAwB,IAAI,CAAA;IAChC,MAAM,GAAsB,IAAI,CAAA;IAChC,KAAK,GAAuB,KAAK,CAAA;IAExC,qCAAqC;IACrC,aAAa;QACT,OAAO,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAA;IAC1E,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,IAAI;QACN,8BAA8B;QAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,iBAAO,EAAC;YACxB,OAAO,EAAE,YAAY;YACrB,iBAAiB,EAAE,IAAI;SAC1B,CAAC,CAAA;QAEF,oCAAoC;QACpC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QAC9E,IAAI,CAAC,IAAI,GAAG,MAAM,IAAA,eAAK,GAAE;YACrB,mCAAmC;aAClC,KAAK,CACF,YAAY;YACZ,cAAc;YACd,iBAAiB;YACjB,gBAAgB;YAChB,yBAAyB;YACzB,8BAA8B;YAC9B,yBAAyB;YACzB,2BAA2B;YAC3B,4CAA4C;YAC5C,oCAAoC;YACpC,iCAAiC;YACjC,qBAAqB;YACrB,wCAAwC;YACxC,oBAAoB,CACvB;aACA,OAAO,CAAC,KAAK,CAAC;aACd,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,SAAS;YACnB,IAAI,EAAM,SAAS;YACnB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,OAAO,EAAG,KAAK;YACf,QAAQ,EAAE,kCAAkC;SAC/C,CAAC;aACD,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,QAAQ;YAClB,IAAI,EAAM,SAAS;YACnB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,OAAO,EAAG,KAAK;YACf,QAAQ,EAAE,+BAA+B;SAC5C,CAAC;aACD,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,WAAW;YACrB,IAAI,EAAM,QAAQ;YAClB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,KAAK,EAAK,CAAC;YACX,OAAO,EAAG,SAAS;YACnB,QAAQ,EAAE,yEAAyE;SACtF,CAAC;aACD,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,SAAS;YACnB,IAAI,EAAM,QAAQ;YAClB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,KAAK,EAAK,CAAC;YACX,OAAO,EAAG,SAAS;YACnB,QAAQ,EAAE,mCAAmC;SAChD,CAAC;aACD,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,MAAM;YAChB,IAAI,EAAM,QAAQ;YAClB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,KAAK,EAAK,CAAC;YACX,OAAO,EAAG,IAAI;YACd,QAAQ,EAAE,iCAAiC;SAC9C,CAAC;aACD,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,OAAO;YACjB,IAAI,EAAM,QAAQ;YAClB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,KAAK,EAAK,CAAC;YACX,OAAO,EAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;YACrC,QAAQ,EAAE,uDAAuD;SACpE,CAAC;aACD,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,WAAW;YACrB,IAAI,EAAM,QAAQ;YAClB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,KAAK,EAAK,CAAC;YACX,OAAO,EAAG,EAAE;YACZ,QAAQ,EAAE,yCAAyC;SACtD,CAAC;aACD,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,KAAK;YACf,IAAI,EAAM,QAAQ;YAClB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,KAAK,EAAK,CAAC;YACX,OAAO,EAAG,EAAE;YACZ,QAAQ,EAAE,gDAAgD;SAC7D,CAAC;aACD,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,YAAY;YACtB,IAAI,EAAM,QAAQ;YAClB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,KAAK,EAAK,CAAC;YACX,OAAO,EAAG,EAAE;YACZ,QAAQ,EAAE,4BAA4B;SACzC,CAAC;aACD,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,MAAM;YAChB,IAAI,EAAM,QAAQ;YAClB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,KAAK,EAAK,CAAC;YACX,OAAO,EAAG,EAAE;YACZ,QAAQ,EAAE,0BAA0B;SACvC,CAAC;aACD,MAAM,CAAC,GAAG,EAAE;YACT,KAAK,EAAK,QAAQ;YAClB,IAAI,EAAM,QAAQ;YAClB,KAAK,EAAK,KAAK;YACf,MAAM;YACN,KAAK,EAAK,CAAC;YACX,OAAO,EAAG,EAAE;YACZ,QAAQ,EAAE,sEAAsE;SACnF,CAAC;aACD,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC;aAC5B,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;aAClB,cAAc,CAAC,IAAI,CAAC;aACpB,MAAM,EAAE;aACR,MAAM,CAAC,CAAC,CAAC;aACT,KAAK,CAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAe,CAAA;QAE/C,qCAAqC;QACrC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,sBAAG,CAAC,UAAU,CAAC,KAAK,sBAAG,CAAC,WAAW,CAAC,MAAM,sBAAG,CAAC,QAAQ,KAAK,CAAC,CAAA;YAC/F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,sBAAG,CAAC,WAAW,IAAI,CAAC,CAAA;YAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,sBAAG,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAA;YACxF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,sBAAG,CAAC,OAAO,8BAA8B,sBAAG,CAAC,OAAO,UAAU,CAAC,CAAA;YACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,GAAG,GAAG,IAAI,gBAAK,CAAC;YACjB,QAAQ,EAAG,MAAM;YACjB,QAAQ,EAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,EAAI,IAAI;YACf,SAAS,EAAE,sBAAG,CAAC,IAAI;SACtB,CAAC,CAAA;QACF,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QAErB,mCAAmC;QACnC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,uBAAuB,sBAAG,CAAC,UAAU,CAAC,KAAK,sBAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAEpF,uBAAuB;QACvB,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,CAAC;YAC1B,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAI,CAAE,kBAAkB,CAAE;YAChC,KAAK,EAAK,IAAI;SACjB,CAAC,CAAA;QACF,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS;YAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,gCAAgC,GAAG,qBAAqB,CAAC,CAAA;QAEtF,4CAA4C;QAC5C,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YAAE,CAAC,EAAE,CAAA;QAC9D,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YAAE,CAAC,EAAE,CAAA;QAC9D,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YAAE,CAAC,EAAE,CAAA;QAC9D,IAAI,CAAC,KAAK,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAA;aACvG,IAAI,CAAC,KAAK,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAA;QAExH,0BAA0B;QAC1B,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YACrD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;aACxB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YAC1D,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;aACpE,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;YAC3C,IAAI,CAAC,KAAK,IAAI;gBACV,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAA;YACtG,MAAM,CAAE,AAAD,EAAG,EAAE,EAAE,IAAI,CAAE,GAAG,CAAC,CAAA;YACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;YAC7D,MAAM,GAAG,GAAQ,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,iBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAChF,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS;gBACrB,MAAM,IAAI,KAAK,CAAC,eAAe,EAAE,kCAAkC,IAAI,GAAG,CAAC,CAAA;YAC/E,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAW,CAAA;QACnC,CAAC;IACL,CAAC;IAED,uDAAuD;IACvD,mBAAmB,CAAE,GAAU;QAC3B,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,KAAK;gBACV,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;;gBAErD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAC/C,CAAC;aACI,CAAC;YACF,IAAI,IAAI,CAAC,KAAK;gBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,sBAAG,CAAC,IAAI,KAAK,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA;;gBAE1F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,sBAAG,CAAC,IAAI,KAAK,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAClF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;CACJ;AA5ND,gCA4NC"}
@@ -0,0 +1,9 @@
1
+ export declare class NodeConfig {
2
+ readonly audioChannels: number;
3
+ readonly audioBitDepth: number;
4
+ readonly audioLittleEndian: boolean;
5
+ readonly audioSampleRate: number;
6
+ readonly textEncoding: string;
7
+ cacheDir: string;
8
+ constructor(audioChannels?: number, audioBitDepth?: number, audioLittleEndian?: boolean, audioSampleRate?: number, textEncoding?: string, cacheDir?: string);
9
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /*
3
+ ** SpeechFlow - Speech Processing Flow Graph
4
+ ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
+ ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.NodeConfig = void 0;
9
+ /* the node configuration */
10
+ class NodeConfig {
11
+ audioChannels;
12
+ audioBitDepth;
13
+ audioLittleEndian;
14
+ audioSampleRate;
15
+ textEncoding;
16
+ cacheDir;
17
+ constructor(audioChannels = 1, audioBitDepth = 16, audioLittleEndian = true, audioSampleRate = 48000, textEncoding = "utf8", cacheDir = "") {
18
+ this.audioChannels = audioChannels;
19
+ this.audioBitDepth = audioBitDepth;
20
+ this.audioLittleEndian = audioLittleEndian;
21
+ this.audioSampleRate = audioSampleRate;
22
+ this.textEncoding = textEncoding;
23
+ this.cacheDir = cacheDir;
24
+ }
25
+ }
26
+ exports.NodeConfig = NodeConfig;
27
+ //# sourceMappingURL=speechflow-main-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-main-config.js","sourceRoot":"","sources":["../src/speechflow-main-config.ts"],"names":[],"mappings":";AAAA;;;;EAIE;;;AAEF,8BAA8B;AAC9B,MAAa,UAAU;IAEC;IACA;IACA;IACA;IACA;IACT;IANX,YACoB,gBAAqB,CAAC,EACtB,gBAAqB,EAAE,EACvB,oBAAqB,IAAI,EACzB,kBAAqB,KAAK,EAC1B,eAAqB,MAAM,EACpC,WAA8B,EAAE;QALvB,kBAAa,GAAb,aAAa,CAAS;QACtB,kBAAa,GAAb,aAAa,CAAU;QACvB,sBAAiB,GAAjB,iBAAiB,CAAQ;QACzB,oBAAe,GAAf,eAAe,CAAW;QAC1B,iBAAY,GAAZ,YAAY,CAAe;QACpC,aAAQ,GAAR,QAAQ,CAAwB;IACxC,CAAC;CACP;AATD,gCASC"}
@@ -0,0 +1,34 @@
1
+ import { EventEmitter } from "node:events";
2
+ import CLIio from "cli-io";
3
+ import SpeechFlowNode from "./speechflow-node";
4
+ import { NodeConfig } from "./speechflow-main-config";
5
+ import { CLIOptions } from "./speechflow-main-cli";
6
+ import { APIServer } from "./speechflow-main-api";
7
+ export declare class NodeGraph {
8
+ private cli;
9
+ private debug;
10
+ private graphNodes;
11
+ private activeNodes;
12
+ private finishEvents;
13
+ private timeZero;
14
+ private shuttingDown;
15
+ constructor(cli: CLIio, debug?: boolean);
16
+ getGraphNodes(): Set<SpeechFlowNode>;
17
+ findGraphNode(name: string): SpeechFlowNode | undefined;
18
+ createAndConnectNodes(config: string, nodes: {
19
+ [id: string]: typeof SpeechFlowNode;
20
+ }, cfg: NodeConfig, variables: {
21
+ argv: any[];
22
+ env: any;
23
+ }, accessBus: (name: string) => EventEmitter): Promise<void>;
24
+ pruneConnections(): Promise<void>;
25
+ openNodes(): Promise<void>;
26
+ connectStreams(): Promise<void>;
27
+ trackFinishing(args: CLIOptions, api: APIServer): void;
28
+ disconnectStreams(): Promise<void>;
29
+ closeNodes(): Promise<void>;
30
+ disconnectNodes(): void;
31
+ destroyNodes(): void;
32
+ setupSignalHandlers(args: CLIOptions, api: APIServer): void;
33
+ shutdown(signal: string, args: CLIOptions, api: APIServer): Promise<void>;
34
+ }