@kongyo2/kongyoroid 1.0.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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/cache.d.ts +36 -0
  4. package/dist/cache.d.ts.map +1 -0
  5. package/dist/cache.js +109 -0
  6. package/dist/cache.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +502 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/concurrency.d.ts +14 -0
  12. package/dist/concurrency.d.ts.map +1 -0
  13. package/dist/concurrency.js +107 -0
  14. package/dist/concurrency.js.map +1 -0
  15. package/dist/errors.d.ts +35 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +81 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/formant.d.ts +34 -0
  20. package/dist/formant.d.ts.map +1 -0
  21. package/dist/formant.js +622 -0
  22. package/dist/formant.js.map +1 -0
  23. package/dist/index.d.ts +40 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +23 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/io.d.ts +6 -0
  28. package/dist/io.d.ts.map +1 -0
  29. package/dist/io.js +144 -0
  30. package/dist/io.js.map +1 -0
  31. package/dist/kongyoroid.d.ts +82 -0
  32. package/dist/kongyoroid.d.ts.map +1 -0
  33. package/dist/kongyoroid.js +275 -0
  34. package/dist/kongyoroid.js.map +1 -0
  35. package/dist/limits.d.ts +18 -0
  36. package/dist/limits.d.ts.map +1 -0
  37. package/dist/limits.js +15 -0
  38. package/dist/limits.js.map +1 -0
  39. package/dist/mora.d.ts +28 -0
  40. package/dist/mora.d.ts.map +1 -0
  41. package/dist/mora.js +295 -0
  42. package/dist/mora.js.map +1 -0
  43. package/dist/notation.d.ts +15 -0
  44. package/dist/notation.d.ts.map +1 -0
  45. package/dist/notation.js +114 -0
  46. package/dist/notation.js.map +1 -0
  47. package/dist/pitch.d.ts +5 -0
  48. package/dist/pitch.d.ts.map +1 -0
  49. package/dist/pitch.js +36 -0
  50. package/dist/pitch.js.map +1 -0
  51. package/dist/player.d.ts +9 -0
  52. package/dist/player.d.ts.map +1 -0
  53. package/dist/player.js +81 -0
  54. package/dist/player.js.map +1 -0
  55. package/dist/request.d.ts +12 -0
  56. package/dist/request.d.ts.map +1 -0
  57. package/dist/request.js +115 -0
  58. package/dist/request.js.map +1 -0
  59. package/dist/schema.d.ts +9 -0
  60. package/dist/schema.d.ts.map +1 -0
  61. package/dist/schema.js +267 -0
  62. package/dist/schema.js.map +1 -0
  63. package/dist/score.d.ts +37 -0
  64. package/dist/score.d.ts.map +1 -0
  65. package/dist/score.js +166 -0
  66. package/dist/score.js.map +1 -0
  67. package/dist/text.d.ts +3 -0
  68. package/dist/text.d.ts.map +1 -0
  69. package/dist/text.js +54 -0
  70. package/dist/text.js.map +1 -0
  71. package/dist/types.d.ts +121 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +2 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/validate.d.ts +13 -0
  76. package/dist/validate.d.ts.map +1 -0
  77. package/dist/validate.js +59 -0
  78. package/dist/validate.js.map +1 -0
  79. package/dist/version.d.ts +3 -0
  80. package/dist/version.d.ts.map +1 -0
  81. package/dist/version.js +3 -0
  82. package/dist/version.js.map +1 -0
  83. package/dist/voicevox/api.d.ts +79 -0
  84. package/dist/voicevox/api.d.ts.map +1 -0
  85. package/dist/voicevox/api.js +176 -0
  86. package/dist/voicevox/api.js.map +1 -0
  87. package/dist/voicevox/client.d.ts +64 -0
  88. package/dist/voicevox/client.d.ts.map +1 -0
  89. package/dist/voicevox/client.js +321 -0
  90. package/dist/voicevox/client.js.map +1 -0
  91. package/dist/voicevox/dictionary.d.ts +21 -0
  92. package/dist/voicevox/dictionary.d.ts.map +1 -0
  93. package/dist/voicevox/dictionary.js +41 -0
  94. package/dist/voicevox/dictionary.js.map +1 -0
  95. package/dist/voicevox/song.d.ts +12 -0
  96. package/dist/voicevox/song.d.ts.map +1 -0
  97. package/dist/voicevox/song.js +45 -0
  98. package/dist/voicevox/song.js.map +1 -0
  99. package/dist/voicevox/speech.d.ts +17 -0
  100. package/dist/voicevox/speech.d.ts.map +1 -0
  101. package/dist/voicevox/speech.js +100 -0
  102. package/dist/voicevox/speech.js.map +1 -0
  103. package/dist/voicevox/styles.d.ts +15 -0
  104. package/dist/voicevox/styles.d.ts.map +1 -0
  105. package/dist/voicevox/styles.js +103 -0
  106. package/dist/voicevox/styles.js.map +1 -0
  107. package/dist/wav.d.ts +18 -0
  108. package/dist/wav.d.ts.map +1 -0
  109. package/dist/wav.js +198 -0
  110. package/dist/wav.js.map +1 -0
  111. package/examples/batch.jsonl +4 -0
  112. package/examples/song-notes.json +24 -0
  113. package/examples/song.json +12 -0
  114. package/examples/speech-kana.json +6 -0
  115. package/examples/speech.json +8 -0
  116. package/package.json +86 -0
package/dist/cli.js ADDED
@@ -0,0 +1,502 @@
1
+ #!/usr/bin/env node
2
+ import { resolve } from "node:path";
3
+ import process from "node:process";
4
+ import { parseArgs } from "node:util";
5
+ import { EXIT_CODES, KongyoroidError, asKongyoroidError, exitCodeOf, invalid } from "./errors.js";
6
+ import { readLines, readText, writeAudio, writeStream } from "./io.js";
7
+ import { LIMITS } from "./limits.js";
8
+ import { Kongyoroid } from "./kongyoroid.js";
9
+ import { playWav } from "./player.js";
10
+ import { parseEngine, parseJson } from "./request.js";
11
+ import { BATCH_JOB_SCHEMA, CAPABILITIES, REQUEST_SCHEMA } from "./schema.js";
12
+ import { isObject, keys, literal, object, string } from "./validate.js";
13
+ import { PACKAGE_NAME, VERSION } from "./version.js";
14
+ const HELP = `kongyoroid ${VERSION} — Japanese speech and singing for LLM agents (built-in formant engine, optional VOICEVOX ENGINE)
15
+
16
+ Usage: kongyoroid <command> [flags]
17
+
18
+ speak --text "こんにちは" [--speaker ずんだもん] [-o out.wav] Read text aloud
19
+ sing --lyrics "ドレミ" --melody "C4 D4 E4" [--beats "1 1 2"] Sing a score
20
+ render --input request.json | - Render a full JSON request (see: schema)
21
+ batch --input jobs.jsonl --output-dir out Many renders, one JSONL line per job
22
+ reading --text "..." [--speaker ...] Show the engine's reading (kana notation)
23
+ voices [--kind speech|song|all] [--query 名前] List VOICEVOX styles (id, character, type)
24
+ doctor [--speaker ...] [--initialize] Check the engine, versions, style counts
25
+ dict list | add | update <uuid> | delete <uuid> Manage the VOICEVOX user dictionary
26
+ play <file.wav> Play a WAV with the system player
27
+ schema [--kind request|batch] JSON Schema of the request format
28
+ capabilities Machine-readable feature descriptor
29
+
30
+ Common flags
31
+ --engine formant|voicevox|auto (default formant; a speaker/singer/teacher selects voicevox)
32
+ --endpoint URL --timeout-ms N --retries N --cache-dir DIR
33
+ -o, --output FILE|- (default: kongyoroid-<kind>-<hash>.wav; "-" streams WAV to stdout, JSON to stderr)
34
+ --force replace an existing output file --play play the result after writing
35
+
36
+ speak flags: -t/--text, -i/--input FILE|- (text), --kana NOTATION, --speaker ID|NAME, --speed, --pitch,
37
+ --intonation, --volume, --pre-pause, --post-pause, --pause-length, --pause-scale, --no-upspeak,
38
+ --split sentence|paragraph|none, --sample-rate, --seed
39
+ sing flags: --lyrics, --melody, --beats, --tempo, --singer, --teacher, --transpose, --volume, --vibrato-depth,
40
+ --vibrato-rate, --lead-in, --lead-out, --sample-rate, --seed, -i/--input FILE|- (song JSON; flags override)
41
+ dict flags: --surface, --pronunciation, --accent N, --word-type PROPER_NOUN|COMMON_NOUN|VERB|ADJECTIVE|SUFFIX, --priority 0-10
42
+
43
+ Environment: KONGYOROID_ENDPOINT (or VOICEVOX_URL), KONGYOROID_ENGINE, KONGYOROID_SPEAKER, KONGYOROID_SINGER,
44
+ KONGYOROID_TEACHER, KONGYOROID_CACHE_DIR
45
+ Output: one JSON object per line on stdout ({ "ok": true, ... }); errors on stderr ({ "ok": false, "error": {...} }).
46
+ Exit codes: 0 ok, 1 internal, 2 input, 3 engine, 4 io, 130 cancelled.
47
+ `;
48
+ const OPTIONS = {
49
+ help: { type: "boolean", short: "h" },
50
+ version: { type: "boolean", short: "v" },
51
+ text: { type: "string", short: "t" },
52
+ input: { type: "string", short: "i" },
53
+ output: { type: "string", short: "o" },
54
+ "output-dir": { type: "string" },
55
+ force: { type: "boolean" },
56
+ play: { type: "boolean" },
57
+ engine: { type: "string" },
58
+ endpoint: { type: "string" },
59
+ "timeout-ms": { type: "string" },
60
+ retries: { type: "string" },
61
+ concurrency: { type: "string" },
62
+ "cache-dir": { type: "string" },
63
+ kana: { type: "string" },
64
+ speaker: { type: "string" },
65
+ speed: { type: "string" },
66
+ pitch: { type: "string" },
67
+ intonation: { type: "string" },
68
+ volume: { type: "string" },
69
+ "pre-pause": { type: "string" },
70
+ "post-pause": { type: "string" },
71
+ "pause-length": { type: "string" },
72
+ "pause-scale": { type: "string" },
73
+ upspeak: { type: "boolean" },
74
+ split: { type: "string" },
75
+ "sample-rate": { type: "string" },
76
+ seed: { type: "string" },
77
+ lyrics: { type: "string" },
78
+ melody: { type: "string" },
79
+ beats: { type: "string" },
80
+ tempo: { type: "string" },
81
+ singer: { type: "string" },
82
+ teacher: { type: "string" },
83
+ transpose: { type: "string" },
84
+ "vibrato-depth": { type: "string" },
85
+ "vibrato-rate": { type: "string" },
86
+ "lead-in": { type: "string" },
87
+ "lead-out": { type: "string" },
88
+ kind: { type: "string" },
89
+ query: { type: "string" },
90
+ initialize: { type: "boolean" },
91
+ surface: { type: "string" },
92
+ pronunciation: { type: "string" },
93
+ accent: { type: "string" },
94
+ "word-type": { type: "string" },
95
+ priority: { type: "string" },
96
+ };
97
+ const NETWORK = ["endpoint", "timeout-ms", "retries", "engine"];
98
+ const OUTPUT = ["output", "force", "play", "cache-dir", "concurrency"];
99
+ const SPEECH = [
100
+ "text",
101
+ "input",
102
+ "kana",
103
+ "speaker",
104
+ "speed",
105
+ "pitch",
106
+ "intonation",
107
+ "volume",
108
+ "pre-pause",
109
+ "post-pause",
110
+ "pause-length",
111
+ "pause-scale",
112
+ "upspeak",
113
+ "split",
114
+ "sample-rate",
115
+ "seed",
116
+ ];
117
+ const SONG = [
118
+ "input",
119
+ "lyrics",
120
+ "melody",
121
+ "beats",
122
+ "tempo",
123
+ "singer",
124
+ "teacher",
125
+ "transpose",
126
+ "volume",
127
+ "vibrato-depth",
128
+ "vibrato-rate",
129
+ "lead-in",
130
+ "lead-out",
131
+ "sample-rate",
132
+ "seed",
133
+ ];
134
+ const ALLOWED = {
135
+ speak: [...NETWORK, ...OUTPUT, ...SPEECH],
136
+ sing: [...NETWORK, ...OUTPUT, ...SONG],
137
+ render: [...NETWORK, ...OUTPUT, "input"],
138
+ batch: [...NETWORK, "input", "output-dir", "force", "concurrency", "cache-dir"],
139
+ reading: [...NETWORK, "text", "input", "kana", "speaker"],
140
+ voices: [...NETWORK, "kind", "query"],
141
+ doctor: [...NETWORK, "speaker", "initialize"],
142
+ dict: [...NETWORK, "surface", "pronunciation", "accent", "word-type", "priority"],
143
+ play: [],
144
+ schema: ["kind"],
145
+ capabilities: [],
146
+ };
147
+ async function emit(value, error = false) {
148
+ await writeStream(error ? process.stderr : process.stdout, `${JSON.stringify(value)}\n`);
149
+ }
150
+ function numberFlag(values, name) {
151
+ const raw = values[name];
152
+ if (raw === undefined || typeof raw !== "string")
153
+ return undefined;
154
+ const value = Number(raw.trim());
155
+ if (raw.trim().length === 0 || !Number.isFinite(value))
156
+ invalid(`$flags.${name}`, `Expected a number, got ${JSON.stringify(raw)}.`);
157
+ return value;
158
+ }
159
+ function styleFlag(values, name) {
160
+ const raw = values[name];
161
+ if (raw === undefined)
162
+ return undefined;
163
+ return /^\d+$/u.test(raw.trim()) ? Number(raw) : raw;
164
+ }
165
+ function assign(target, key, value) {
166
+ if (value !== undefined)
167
+ target[key] = value;
168
+ }
169
+ function env(name) {
170
+ const value = process.env[name];
171
+ return value === undefined || value.trim().length === 0 ? undefined : value.trim();
172
+ }
173
+ function metadata(result) {
174
+ return {
175
+ engine: result.engine,
176
+ kind: result.kind,
177
+ styles: result.styles,
178
+ ...(result.kana === undefined ? {} : { kana: result.kana }),
179
+ chunks: result.chunks,
180
+ cached: result.cached,
181
+ sha256: result.sha256,
182
+ bytes: result.audio.length,
183
+ sampleRate: result.info.sampleRate,
184
+ channels: result.info.channels,
185
+ frames: result.info.frames,
186
+ durationSeconds: Math.round(result.info.durationSeconds * 1000) / 1000,
187
+ elapsedMs: result.elapsedMs,
188
+ };
189
+ }
190
+ async function deliver(result, values, signal) {
191
+ if (values.output === "-") {
192
+ if (values.play)
193
+ invalid("$flags.play", "--play cannot be combined with --output -.");
194
+ await writeStream(process.stdout, result.audio);
195
+ return { ok: true, output: "stdout", ...metadata(result) };
196
+ }
197
+ const path = values.output ?? `kongyoroid-${result.kind}-${result.sha256.slice(0, 8)}.wav`;
198
+ const written = await writeAudio(path, result.audio, values.force ?? false, signal);
199
+ const played = values.play ? await playWav(written, signal) : undefined;
200
+ return { ok: true, path: written, ...metadata(result), ...(played === undefined ? {} : { player: played.player }) };
201
+ }
202
+ function speechRequestFromFlags(values, text) {
203
+ const request = { kind: "speech", text };
204
+ assign(request, "engine", values.engine);
205
+ assign(request, "kana", values.kana);
206
+ assign(request, "speaker", styleFlag(values, "speaker"));
207
+ assign(request, "speed", numberFlag(values, "speed"));
208
+ assign(request, "pitch", numberFlag(values, "pitch"));
209
+ assign(request, "intonation", numberFlag(values, "intonation"));
210
+ assign(request, "volume", numberFlag(values, "volume"));
211
+ assign(request, "prePause", numberFlag(values, "pre-pause"));
212
+ assign(request, "postPause", numberFlag(values, "post-pause"));
213
+ assign(request, "pauseLength", numberFlag(values, "pause-length"));
214
+ assign(request, "pauseScale", numberFlag(values, "pause-scale"));
215
+ assign(request, "upspeak", values.upspeak);
216
+ assign(request, "split", values.split);
217
+ assign(request, "sampleRate", numberFlag(values, "sample-rate"));
218
+ assign(request, "seed", numberFlag(values, "seed"));
219
+ return request;
220
+ }
221
+ function songRequestFromFlags(values, base) {
222
+ const request = { ...base, kind: "song" };
223
+ if (values.lyrics !== undefined || values.melody !== undefined) {
224
+ const notes = { lyrics: values.lyrics ?? "", melody: values.melody ?? "" };
225
+ assign(notes, "beats", values.beats);
226
+ request["notes"] = notes;
227
+ }
228
+ else if (values.beats !== undefined) {
229
+ invalid("$flags.beats", "--beats needs --melody.");
230
+ }
231
+ assign(request, "engine", values.engine);
232
+ assign(request, "tempo", numberFlag(values, "tempo"));
233
+ assign(request, "singer", styleFlag(values, "singer"));
234
+ assign(request, "teacher", styleFlag(values, "teacher"));
235
+ assign(request, "transpose", numberFlag(values, "transpose"));
236
+ assign(request, "volume", numberFlag(values, "volume"));
237
+ assign(request, "vibratoDepth", numberFlag(values, "vibrato-depth"));
238
+ assign(request, "vibratoRate", numberFlag(values, "vibrato-rate"));
239
+ assign(request, "leadIn", numberFlag(values, "lead-in"));
240
+ assign(request, "leadOut", numberFlag(values, "lead-out"));
241
+ assign(request, "sampleRate", numberFlag(values, "sample-rate"));
242
+ assign(request, "seed", numberFlag(values, "seed"));
243
+ return request;
244
+ }
245
+ async function textInput(values, signal) {
246
+ if (values.text !== undefined && values.input !== undefined)
247
+ invalid("$flags", "Use either --text or --input, not both.");
248
+ if (values.text !== undefined)
249
+ return values.text;
250
+ if (values.input !== undefined)
251
+ return (await readText(values.input, signal)).replace(/\r?\n$/u, "");
252
+ return invalid("$flags.text", "Provide --text or --input FILE (use - for standard input).");
253
+ }
254
+ function createAgent(values) {
255
+ const engineFlag = values.engine ?? env("KONGYOROID_ENGINE");
256
+ const concurrency = numberFlag(values, "concurrency");
257
+ const timeoutMs = numberFlag(values, "timeout-ms");
258
+ const retries = numberFlag(values, "retries");
259
+ const cacheDir = values["cache-dir"] ?? env("KONGYOROID_CACHE_DIR");
260
+ const speaker = env("KONGYOROID_SPEAKER");
261
+ const singer = env("KONGYOROID_SINGER");
262
+ const teacher = env("KONGYOROID_TEACHER");
263
+ return new Kongyoroid({
264
+ endpoint: values.endpoint ?? env("KONGYOROID_ENDPOINT") ?? env("VOICEVOX_URL") ?? "http://127.0.0.1:50021",
265
+ ...(engineFlag === undefined ? {} : { engine: parseEngine(engineFlag, "$flags.engine") }),
266
+ ...(timeoutMs === undefined ? {} : { timeoutMs }),
267
+ ...(retries === undefined ? {} : { retries }),
268
+ ...(concurrency === undefined ? {} : { concurrency }),
269
+ ...(cacheDir === undefined ? {} : { cacheDir }),
270
+ ...(speaker === undefined ? {} : { speaker }),
271
+ ...(singer === undefined ? {} : { singer }),
272
+ ...(teacher === undefined ? {} : { teacher }),
273
+ });
274
+ }
275
+ async function runBatch(agent, values, signal, onFailure) {
276
+ const input = string(values.input, "$flags.input", 1, 4096);
277
+ const directory = string(values["output-dir"], "$flags.output-dir", 1, 4096);
278
+ const concurrency = numberFlag(values, "concurrency") ?? 2;
279
+ const active = new Set();
280
+ const ids = new Set();
281
+ let line = 0;
282
+ const run = async (text, index) => {
283
+ let id = null;
284
+ try {
285
+ const job = object(parseJson(text, `$line[${index}]`), `$line[${index}]`);
286
+ keys(job, ["id", "request"], `$line[${index}]`);
287
+ id = string(job["id"], `$line[${index}].id`, 1, 64);
288
+ if (!/^[A-Za-z0-9_-]+$/u.test(id))
289
+ invalid(`$line[${index}].id`, "Use 1–64 ASCII letters, digits, _ or -.");
290
+ if (ids.has(id.toLowerCase()))
291
+ invalid(`$line[${index}].id`, "Duplicate job id (case-insensitive).");
292
+ ids.add(id.toLowerCase());
293
+ const result = await agent.render(job["request"], { signal });
294
+ const path = await writeAudio(resolve(directory, `${id}.wav`), result.audio, values.force ?? false, signal);
295
+ await emit({ ok: true, id, line: index, path, ...metadata(result) });
296
+ }
297
+ catch (error) {
298
+ const failure = asKongyoroidError(error);
299
+ onFailure();
300
+ process.exitCode = Math.max(Number(process.exitCode ?? 0), exitCodeOf(failure));
301
+ await emit({ ok: false, id, line: index, error: failure.toJSON() });
302
+ if (failure.code === "ABORTED")
303
+ throw failure;
304
+ }
305
+ };
306
+ try {
307
+ for await (const text of readLines(input, signal)) {
308
+ line += 1;
309
+ if (line > LIMITS.batchLines)
310
+ invalid("$flags.input", `A batch is limited to ${LIMITS.batchLines} lines.`);
311
+ const task = run(text, line).finally(() => {
312
+ active.delete(task);
313
+ });
314
+ active.add(task);
315
+ if (active.size >= Math.max(1, Math.min(concurrency, LIMITS.concurrency)))
316
+ await Promise.race(active);
317
+ }
318
+ }
319
+ finally {
320
+ await Promise.allSettled(active);
321
+ }
322
+ }
323
+ async function runDict(agent, values, positionals, signal) {
324
+ const action = literal(positionals[1], "$.dict", ["list", "add", "update", "delete"]);
325
+ if (action === "list") {
326
+ await emit({ ok: true, words: await agent.dictionary.list({ signal }) });
327
+ return;
328
+ }
329
+ if (action === "delete") {
330
+ const uuid = string(positionals[2], "$.dict.uuid", 1, 200);
331
+ await agent.dictionary.remove(uuid, { signal });
332
+ await emit({ ok: true, deleted: uuid });
333
+ return;
334
+ }
335
+ const priority = numberFlag(values, "priority");
336
+ const draft = {
337
+ surface: string(values.surface, "$flags.surface", 1, 200),
338
+ pronunciation: string(values.pronunciation, "$flags.pronunciation", 1, 200),
339
+ accentType: numberFlag(values, "accent") ?? invalid("$flags.accent", "Provide --accent N (0 = flat)."),
340
+ ...(values["word-type"] === undefined ? {} : { wordType: values["word-type"] }),
341
+ ...(priority === undefined ? {} : { priority }),
342
+ };
343
+ if (action === "add") {
344
+ const uuid = await agent.dictionary.add(draft, { signal });
345
+ await emit({ ok: true, uuid, word: draft });
346
+ return;
347
+ }
348
+ const uuid = string(positionals[2], "$.dict.uuid", 1, 200);
349
+ await agent.dictionary.update(uuid, draft, { signal });
350
+ await emit({ ok: true, updated: uuid, word: draft });
351
+ }
352
+ async function main(argv) {
353
+ const { values, positionals } = parseArgs({
354
+ args: [...argv],
355
+ options: OPTIONS,
356
+ allowPositionals: true,
357
+ allowNegative: true,
358
+ strict: true,
359
+ });
360
+ if (values.help) {
361
+ await writeStream(process.stdout, HELP);
362
+ return;
363
+ }
364
+ if (values.version) {
365
+ await emit({ ok: true, name: PACKAGE_NAME, version: VERSION });
366
+ return;
367
+ }
368
+ const command = positionals[0];
369
+ if (command === undefined || !Object.hasOwn(ALLOWED, command)) {
370
+ invalid("$.command", `Unknown command ${JSON.stringify(command ?? "")}.`, "Run kongyoroid --help for the command list.");
371
+ }
372
+ const allowed = ALLOWED[command] ?? [];
373
+ for (const key of Object.keys(values)) {
374
+ if (!allowed.includes(key))
375
+ invalid(`$flags.${key}`, `--${key} is not accepted by ${command}.`, `Accepted: ${allowed.join(", ")}.`);
376
+ }
377
+ if (command === "schema") {
378
+ await emit(literal(values.kind ?? "request", "$flags.kind", ["request", "batch"]) === "batch"
379
+ ? BATCH_JOB_SCHEMA
380
+ : REQUEST_SCHEMA);
381
+ return;
382
+ }
383
+ if (command === "capabilities") {
384
+ await emit(CAPABILITIES);
385
+ return;
386
+ }
387
+ const controller = new AbortController();
388
+ const cancel = () => {
389
+ controller.abort();
390
+ };
391
+ process.once("SIGINT", cancel);
392
+ process.once("SIGTERM", cancel);
393
+ const signal = controller.signal;
394
+ try {
395
+ if (command === "play") {
396
+ const path = string(positionals[1], "$.play.file", 1, 4096);
397
+ await emit({ ok: true, path: resolve(path), ...(await playWav(resolve(path), signal)) });
398
+ return;
399
+ }
400
+ const agent = createAgent(values);
401
+ switch (command) {
402
+ case "speak": {
403
+ const result = await agent.render(speechRequestFromFlags(values, await textInput(values, signal)), { signal });
404
+ await emit(await deliver(result, values, signal), values.output === "-");
405
+ return;
406
+ }
407
+ case "sing": {
408
+ const base = values.input === undefined ? {} : object(parseJson(await readText(values.input, signal)), "$");
409
+ if (base["kind"] !== undefined && base["kind"] !== "song")
410
+ invalid("$.kind", "sing accepts only song requests.");
411
+ const result = await agent.render(songRequestFromFlags(values, base), { signal });
412
+ await emit(await deliver(result, values, signal), values.output === "-");
413
+ return;
414
+ }
415
+ case "render": {
416
+ const input = string(values.input, "$flags.input", 1, 4096);
417
+ const request = parseJson(await readText(input, signal));
418
+ const withEngine = isObject(request) && values.engine !== undefined ? { ...request, engine: values.engine } : request;
419
+ const result = await agent.render(withEngine, { signal });
420
+ await emit(await deliver(result, values, signal), values.output === "-");
421
+ return;
422
+ }
423
+ case "batch": {
424
+ let failures = 0;
425
+ await runBatch(agent, values, signal, () => {
426
+ failures += 1;
427
+ });
428
+ if (failures === 0)
429
+ process.exitCode = EXIT_CODES.success;
430
+ return;
431
+ }
432
+ case "reading": {
433
+ const text = await textInput(values, signal);
434
+ const speakerRef = styleFlag(values, "speaker");
435
+ const reading = await agent.reading(text, {
436
+ signal,
437
+ ...(values.kana === undefined ? {} : { kana: values.kana }),
438
+ ...(speakerRef === undefined ? {} : { speaker: speakerRef }),
439
+ });
440
+ await emit({ ok: true, text, ...reading });
441
+ return;
442
+ }
443
+ case "voices": {
444
+ const kind = literal(values.kind ?? "all", "$flags.kind", ["speech", "song", "all"]);
445
+ const query = values.query?.normalize("NFKC").toLowerCase();
446
+ const styles = (await agent.voices(kind, { signal })).filter((style) => query === undefined || `${style.character}/${style.name}`.normalize("NFKC").toLowerCase().includes(query));
447
+ await emit({ ok: true, kind, count: styles.length, styles });
448
+ return;
449
+ }
450
+ case "doctor": {
451
+ const diagnosis = await agent.doctor({ signal });
452
+ const speakerRef = styleFlag(values, "speaker");
453
+ let style;
454
+ if (diagnosis.ok && speakerRef !== undefined) {
455
+ const all = await agent.styles.all({ signal });
456
+ const selected = all.find((s) => s.id === speakerRef || `${s.character}/${s.name}` === speakerRef || s.character === speakerRef);
457
+ if (selected === undefined)
458
+ invalid("$flags.speaker", `No style matches ${JSON.stringify(speakerRef)}.`);
459
+ if (values.initialize)
460
+ await agent.client.initializeSpeaker(selected.id, true, { signal });
461
+ style = { ...selected, initialized: await agent.client.isInitializedSpeaker(selected.id, { signal }) };
462
+ }
463
+ await emit({ ...diagnosis, formant: { available: true }, ...(style === undefined ? {} : { style }) });
464
+ if (!diagnosis.ok)
465
+ process.exitCode = EXIT_CODES.engine;
466
+ return;
467
+ }
468
+ case "dict":
469
+ await runDict(agent, values, positionals, signal);
470
+ return;
471
+ default:
472
+ invalid("$.command", `Unknown command ${JSON.stringify(command)}.`);
473
+ }
474
+ }
475
+ finally {
476
+ process.removeListener("SIGINT", cancel);
477
+ process.removeListener("SIGTERM", cancel);
478
+ }
479
+ }
480
+ function isArgumentError(error) {
481
+ return (error instanceof Error &&
482
+ "code" in error &&
483
+ typeof error.code === "string" &&
484
+ error.code.startsWith("ERR_PARSE_ARGS"));
485
+ }
486
+ try {
487
+ await main(process.argv.slice(2));
488
+ }
489
+ catch (error) {
490
+ const data = isArgumentError(error)
491
+ ? {
492
+ code: "INVALID_INPUT",
493
+ message: error.message,
494
+ path: "$flags",
495
+ retryable: false,
496
+ hint: "Run kongyoroid --help.",
497
+ }
498
+ : asKongyoroidError(error).toJSON();
499
+ process.exitCode = exitCodeOf(new KongyoroidError(data));
500
+ await emit({ ok: false, error: data }, true);
501
+ }
502
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare class Semaphore {
2
+ private active;
3
+ private readonly limit;
4
+ private readonly maxQueue;
5
+ private readonly queue;
6
+ constructor(limit: number, maxQueue?: number);
7
+ get pending(): number;
8
+ get running(): number;
9
+ private release;
10
+ acquire(signal?: AbortSignal): Promise<() => void>;
11
+ run<T>(task: () => Promise<T>, signal?: AbortSignal): Promise<T>;
12
+ }
13
+ export declare function mapConcurrent<T, R>(items: readonly T[], limit: number, task: (item: T, index: number) => Promise<R>, signal?: AbortSignal): Promise<R[]>;
14
+ //# sourceMappingURL=concurrency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../src/concurrency.ts"],"names":[],"mappings":"AAWA,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;gBAEnB,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa;IAKzD,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,OAAO,CAAC,OAAO;IAeR,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IA2B5C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;CAQ9E;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EACtC,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAC5C,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,EAAE,CAAC,CA+Bd"}