@xrkseek/harness 0.7.8 → 0.7.9

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 (143) hide show
  1. package/node_modules/@xrkseek/core-tools/dist/output-bound.d.ts +4 -1
  2. package/node_modules/@xrkseek/core-tools/dist/output-bound.d.ts.map +1 -1
  3. package/node_modules/@xrkseek/core-tools/dist/output-bound.js +19 -5
  4. package/node_modules/@xrkseek/core-tools/dist/output-bound.js.map +1 -1
  5. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.js +2 -2
  6. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.js.map +1 -1
  7. package/node_modules/@xrkseek/exec-memory/dist/layered.d.ts +2 -0
  8. package/node_modules/@xrkseek/exec-memory/dist/layered.d.ts.map +1 -1
  9. package/node_modules/@xrkseek/exec-memory/dist/layered.js +12 -1
  10. package/node_modules/@xrkseek/exec-memory/dist/layered.js.map +1 -1
  11. package/node_modules/@xrkseek/exec-memory/dist/tools.d.ts.map +1 -1
  12. package/node_modules/@xrkseek/exec-memory/dist/tools.js +25 -10
  13. package/node_modules/@xrkseek/exec-memory/dist/tools.js.map +1 -1
  14. package/node_modules/@xrkseek/exec-voice/dist/edge-tts.d.ts +60 -0
  15. package/node_modules/@xrkseek/exec-voice/dist/edge-tts.d.ts.map +1 -0
  16. package/node_modules/@xrkseek/exec-voice/dist/edge-tts.js +393 -0
  17. package/node_modules/@xrkseek/exec-voice/dist/edge-tts.js.map +1 -0
  18. package/node_modules/@xrkseek/exec-voice/dist/engine-ids.d.ts.map +1 -1
  19. package/node_modules/@xrkseek/exec-voice/dist/engine-ids.js +1 -0
  20. package/node_modules/@xrkseek/exec-voice/dist/engine-ids.js.map +1 -1
  21. package/node_modules/@xrkseek/exec-voice/dist/engines.d.ts +1 -1
  22. package/node_modules/@xrkseek/exec-voice/dist/engines.d.ts.map +1 -1
  23. package/node_modules/@xrkseek/exec-voice/dist/engines.js +19 -1
  24. package/node_modules/@xrkseek/exec-voice/dist/engines.js.map +1 -1
  25. package/node_modules/@xrkseek/exec-voice/dist/format.js +1 -1
  26. package/node_modules/@xrkseek/exec-voice/dist/format.js.map +1 -1
  27. package/node_modules/@xrkseek/exec-voice/dist/index.d.ts +1 -0
  28. package/node_modules/@xrkseek/exec-voice/dist/index.d.ts.map +1 -1
  29. package/node_modules/@xrkseek/exec-voice/dist/index.js +1 -0
  30. package/node_modules/@xrkseek/exec-voice/dist/index.js.map +1 -1
  31. package/node_modules/@xrkseek/exec-voice/dist/openai-http.d.ts.map +1 -1
  32. package/node_modules/@xrkseek/exec-voice/dist/openai-http.js +1 -0
  33. package/node_modules/@xrkseek/exec-voice/dist/openai-http.js.map +1 -1
  34. package/node_modules/@xrkseek/exec-voice/dist/readiness.d.ts +1 -1
  35. package/node_modules/@xrkseek/exec-voice/dist/readiness.d.ts.map +1 -1
  36. package/node_modules/@xrkseek/exec-voice/dist/readiness.js +13 -1
  37. package/node_modules/@xrkseek/exec-voice/dist/readiness.js.map +1 -1
  38. package/node_modules/@xrkseek/exec-voice/dist/sensevoice-local.d.ts.map +1 -1
  39. package/node_modules/@xrkseek/exec-voice/dist/sensevoice-local.js +6 -5
  40. package/node_modules/@xrkseek/exec-voice/dist/sensevoice-local.js.map +1 -1
  41. package/node_modules/@xrkseek/exec-voice/dist/system-tts.d.ts +2 -0
  42. package/node_modules/@xrkseek/exec-voice/dist/system-tts.d.ts.map +1 -1
  43. package/node_modules/@xrkseek/exec-voice/dist/system-tts.js +10 -7
  44. package/node_modules/@xrkseek/exec-voice/dist/system-tts.js.map +1 -1
  45. package/node_modules/@xrkseek/exec-voice/dist/tools.d.ts +19 -0
  46. package/node_modules/@xrkseek/exec-voice/dist/tools.d.ts.map +1 -1
  47. package/node_modules/@xrkseek/exec-voice/dist/tools.js +160 -25
  48. package/node_modules/@xrkseek/exec-voice/dist/tools.js.map +1 -1
  49. package/node_modules/@xrkseek/exec-voice/dist/types.d.ts +12 -1
  50. package/node_modules/@xrkseek/exec-voice/dist/types.d.ts.map +1 -1
  51. package/node_modules/@xrkseek/exec-voice/dist/types.js +6 -0
  52. package/node_modules/@xrkseek/exec-voice/dist/types.js.map +1 -1
  53. package/node_modules/@xrkseek/exec-voice/package.json +7 -2
  54. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
  55. package/node_modules/@xrkseek/preset-harness/dist/preset.js +8 -3
  56. package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
  57. package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
  58. package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
  59. package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
  60. package/node_modules/@xrkseek/server-face/dist/agent-home-boundary.d.ts +14 -0
  61. package/node_modules/@xrkseek/server-face/dist/agent-home-boundary.d.ts.map +1 -1
  62. package/node_modules/@xrkseek/server-face/dist/agent-home-boundary.js +40 -0
  63. package/node_modules/@xrkseek/server-face/dist/agent-home-boundary.js.map +1 -1
  64. package/node_modules/@xrkseek/server-face/dist/agent-member-pack.d.ts +21 -1
  65. package/node_modules/@xrkseek/server-face/dist/agent-member-pack.d.ts.map +1 -1
  66. package/node_modules/@xrkseek/server-face/dist/agent-member-pack.js +29 -1
  67. package/node_modules/@xrkseek/server-face/dist/agent-member-pack.js.map +1 -1
  68. package/node_modules/@xrkseek/server-face/dist/agent-roster-tools.js +4 -4
  69. package/node_modules/@xrkseek/server-face/dist/agent-roster-tools.js.map +1 -1
  70. package/node_modules/@xrkseek/server-face/dist/agent-team-roles.d.ts.map +1 -1
  71. package/node_modules/@xrkseek/server-face/dist/agent-team-roles.js +30 -15
  72. package/node_modules/@xrkseek/server-face/dist/agent-team-roles.js.map +1 -1
  73. package/node_modules/@xrkseek/server-face/dist/canvas-tools.d.ts.map +1 -1
  74. package/node_modules/@xrkseek/server-face/dist/canvas-tools.js +2 -1
  75. package/node_modules/@xrkseek/server-face/dist/canvas-tools.js.map +1 -1
  76. package/node_modules/@xrkseek/server-face/dist/handlers/voice.d.ts.map +1 -1
  77. package/node_modules/@xrkseek/server-face/dist/handlers/voice.js +32 -5
  78. package/node_modules/@xrkseek/server-face/dist/handlers/voice.js.map +1 -1
  79. package/node_modules/@xrkseek/server-face/dist/index.d.ts +2 -0
  80. package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
  81. package/node_modules/@xrkseek/server-face/dist/index.js +2 -0
  82. package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
  83. package/node_modules/@xrkseek/server-face/dist/model-catalog.d.ts.map +1 -1
  84. package/node_modules/@xrkseek/server-face/dist/model-catalog.js +18 -8
  85. package/node_modules/@xrkseek/server-face/dist/model-catalog.js.map +1 -1
  86. package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
  87. package/node_modules/@xrkseek/server-face/dist/runtime.js +12 -0
  88. package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
  89. package/node_modules/@xrkseek/server-face/dist/session-attachment.d.ts.map +1 -1
  90. package/node_modules/@xrkseek/server-face/dist/session-attachment.js +60 -5
  91. package/node_modules/@xrkseek/server-face/dist/session-attachment.js.map +1 -1
  92. package/node_modules/@xrkseek/server-face/dist/session-capability.d.ts.map +1 -1
  93. package/node_modules/@xrkseek/server-face/dist/session-capability.js +45 -19
  94. package/node_modules/@xrkseek/server-face/dist/session-capability.js.map +1 -1
  95. package/node_modules/@xrkseek/server-face/dist/session-thread-tools.d.ts +2 -2
  96. package/node_modules/@xrkseek/server-face/dist/session-thread-tools.d.ts.map +1 -1
  97. package/node_modules/@xrkseek/server-face/dist/session-thread-tools.js +5 -38
  98. package/node_modules/@xrkseek/server-face/dist/session-thread-tools.js.map +1 -1
  99. package/node_modules/@xrkseek/server-face/dist/session-tool-copy.d.ts.map +1 -1
  100. package/node_modules/@xrkseek/server-face/dist/session-tool-copy.js +6 -2
  101. package/node_modules/@xrkseek/server-face/dist/session-tool-copy.js.map +1 -1
  102. package/node_modules/@xrkseek/server-face/dist/session-tools.d.ts.map +1 -1
  103. package/node_modules/@xrkseek/server-face/dist/session-tools.js +0 -2
  104. package/node_modules/@xrkseek/server-face/dist/session-tools.js.map +1 -1
  105. package/node_modules/@xrkseek/server-face/dist/settings-schemas.d.ts.map +1 -1
  106. package/node_modules/@xrkseek/server-face/dist/settings-schemas.js +32 -7
  107. package/node_modules/@xrkseek/server-face/dist/settings-schemas.js.map +1 -1
  108. package/node_modules/@xrkseek/server-face/dist/subagent-tools.d.ts +2 -2
  109. package/node_modules/@xrkseek/server-face/dist/subagent-tools.d.ts.map +1 -1
  110. package/node_modules/@xrkseek/server-face/dist/subagent-tools.js +15 -56
  111. package/node_modules/@xrkseek/server-face/dist/subagent-tools.js.map +1 -1
  112. package/node_modules/@xrkseek/server-face/dist/tts-availability.d.ts +33 -0
  113. package/node_modules/@xrkseek/server-face/dist/tts-availability.d.ts.map +1 -0
  114. package/node_modules/@xrkseek/server-face/dist/tts-availability.js +67 -0
  115. package/node_modules/@xrkseek/server-face/dist/tts-availability.js.map +1 -0
  116. package/node_modules/@xrkseek/server-face/dist/workspace-orchestrate-tools.d.ts.map +1 -1
  117. package/node_modules/@xrkseek/server-face/dist/workspace-orchestrate-tools.js +58 -18
  118. package/node_modules/@xrkseek/server-face/dist/workspace-orchestrate-tools.js.map +1 -1
  119. package/node_modules/@xrkseek/server-face/dist/xiangyang-skill-bodies/mainline-sideline.d.ts +1 -1
  120. package/node_modules/@xrkseek/server-face/dist/xiangyang-skill-bodies/mainline-sideline.d.ts.map +1 -1
  121. package/node_modules/@xrkseek/server-face/dist/xiangyang-skill-bodies/mainline-sideline.js +1 -1
  122. package/node_modules/@xrkseek/server-host/dist/im-reply-tool.d.ts +5 -1
  123. package/node_modules/@xrkseek/server-host/dist/im-reply-tool.d.ts.map +1 -1
  124. package/node_modules/@xrkseek/server-host/dist/im-reply-tool.js +1 -1
  125. package/node_modules/@xrkseek/server-host/dist/im-reply-tool.js.map +1 -1
  126. package/node_modules/@xrkseek/server-host/dist/index.d.ts +2 -2
  127. package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
  128. package/node_modules/@xrkseek/server-host/dist/index.js +57 -9
  129. package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
  130. package/node_modules/@xrkseek/workspace/dist/durable-inject.d.ts +10 -4
  131. package/node_modules/@xrkseek/workspace/dist/durable-inject.d.ts.map +1 -1
  132. package/node_modules/@xrkseek/workspace/dist/durable-inject.js +26 -8
  133. package/node_modules/@xrkseek/workspace/dist/durable-inject.js.map +1 -1
  134. package/node_modules/@xrkseek/workspace/dist/skill-tools.js +1 -1
  135. package/node_modules/@xrkseek/workspace/dist/skill-tools.js.map +1 -1
  136. package/node_modules/@xrkseek/workspace/dist/skills.d.ts +1 -1
  137. package/node_modules/@xrkseek/workspace/dist/skills.d.ts.map +1 -1
  138. package/node_modules/@xrkseek/workspace/dist/skills.js +2 -2
  139. package/node_modules/@xrkseek/workspace/dist/skills.js.map +1 -1
  140. package/node_modules/@xrkseek/workspace/dist/standing-skill-dirs.d.ts.map +1 -1
  141. package/node_modules/@xrkseek/workspace/dist/standing-skill-dirs.js +1 -7
  142. package/node_modules/@xrkseek/workspace/dist/standing-skill-dirs.js.map +1 -1
  143. package/package.json +1 -1
@@ -0,0 +1,393 @@
1
+ /**
2
+ * Edge TTS — Microsoft Edge "Read Aloud" neural voices.
3
+ *
4
+ * Why this engine exists: the Host's OS voices (SAPI / `say` / espeak-ng) are
5
+ * concatenative engines from another era. Edge's Read Aloud endpoint speaks
6
+ * the same neural voices Microsoft ships in Azure Speech, but needs no key,
7
+ * no account and no model download — only a WebSocket. It is the only
8
+ * zero-install TTS worth listening to, and it covers Chinese and English
9
+ * with the same voice set.
10
+ *
11
+ * The trade-off is honestly a trade-off: this is the browser feature's
12
+ * endpoint, not a contracted API. Microsoft has changed the handshake before
13
+ * (Oct 2026) and may again, so `system` stays registered as the offline
14
+ * fallback rather than being replaced.
15
+ *
16
+ * Protocol frame shapes and the Sec-MS-GEC v2 derivation are adapted from
17
+ * `msedge-tts` (MIT) — https://github.com/MiniGlome/msedge-tts. The checksum
18
+ * is not documented by Microsoft; keeping the port close to the reference is
19
+ * what makes a future protocol change cheap to follow.
20
+ */
21
+ import { randomUUID } from "node:crypto";
22
+ import WebSocket from "ws";
23
+ import { VoiceError, } from "./types.js";
24
+ /** Public token Edge ships in its own client. */
25
+ const TRUSTED_CLIENT_TOKEN = "6A5AA1D4EAFF4E9FB37E23D68491D6F4";
26
+ const WSS_URL = "wss://speech.platform.bing.com/consumer/speech/synthesize/readaloud/edge/v1";
27
+ const VOICES_URL = `https://speech.platform.bing.com/consumer/speech/synthesize/readaloud/voices/list?trustedclienttoken=${TRUSTED_CLIENT_TOKEN}`;
28
+ /** Client build string in the handshake; Edge bumps this, so may we. */
29
+ const GEC_VERSION = "2-143.0.3650.96";
30
+ /**
31
+ * The endpoint rejects a bare Node handshake with 403. Edge's own client
32
+ * connects from its read-aloud extension origin, so present the same pair.
33
+ * Keep these in sync with {@link GEC_VERSION} when Microsoft ships a new Edge.
34
+ */
35
+ const EDGE_HANDSHAKE_HEADERS = {
36
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0",
37
+ Origin: "chrome-extension://jdiccldimpdaibmpdkjnbmckianbfold",
38
+ };
39
+ const JSON_XML_DELIM = "\r\n\r\n";
40
+ const AUDIO_DELIM = "Path:audio\r\n";
41
+ const TURN_END = "Path:turn.end";
42
+ const DEFAULT_OUTPUT_FORMAT = "audio-24khz-48kbitrate-mono-mp3";
43
+ /** Chinese female, the voice this product ships as default. */
44
+ export const EDGE_DEFAULT_VOICE = "zh-CN-XiaoxiaoNeural";
45
+ // ---------------------------------------------------------------------------
46
+ // Sec-MS-GEC v2 — adapted from msedge-tts (MIT). See file header.
47
+ // ---------------------------------------------------------------------------
48
+ const EDGE_COPYRIGHT = "Copyright (C) Microsoft Corporation. All rights reserved.";
49
+ const SWAP_FIRST_WORD = {
50
+ swappedWord: 0xef0569fb,
51
+ swappedSum: 0x76f50f34,
52
+ swappedProduct: 0xc3efea97,
53
+ };
54
+ const SWAP_SECOND_WORD = {
55
+ swappedWord: 0xc31713db,
56
+ swappedSum: 0x1881ce3c,
57
+ swappedProduct: 0x35bd1ec9,
58
+ };
59
+ const MIX_FIRST_WORD = [0xcf98b111, 0x87085b9f, 0x12ceb96d, 0x257e1d83];
60
+ const MIX_SECOND_WORD = [0xa27416f5, 0xd38396ff, 0x7c932b89, 0xbfa49f69];
61
+ function swapHalves(value) {
62
+ return ((value << 16) | (value >>> 16)) >>> 0;
63
+ }
64
+ function swapTerm(word, key, multipliers) {
65
+ const sum = Math.imul(word, key) + Math.imul(swapHalves(word), multipliers.swappedWord);
66
+ const product = Math.imul(swapHalves(sum), multipliers.swappedSum) >>> 0;
67
+ return ((Math.imul(swapHalves(product), multipliers.swappedProduct) + product) >>> 0);
68
+ }
69
+ function swapAndMultiply(value, multipliers) {
70
+ let next = value;
71
+ for (const multiplier of multipliers) {
72
+ next = Math.imul(swapHalves(next), multiplier) >>> 0;
73
+ }
74
+ return next;
75
+ }
76
+ function cs64(message, digest) {
77
+ const digestView = new DataView(digest.buffer, digest.byteOffset, digest.byteLength);
78
+ const firstKey = (digestView.getUint32(0, true) | 1) >>> 0;
79
+ const secondKey = (digestView.getUint32(4, true) | 1) >>> 0;
80
+ const padded = new Uint8Array(Math.ceil(message.length / 8) * 8);
81
+ padded.set(message);
82
+ const words = new DataView(padded.buffer);
83
+ let swapSum = 0;
84
+ let lastSwap = 0;
85
+ let mix = 0;
86
+ let mixSum = 0;
87
+ for (let offset = 0; offset < padded.length; offset += 8) {
88
+ const firstWord = words.getUint32(offset, true);
89
+ const secondWord = words.getUint32(offset + 4, true);
90
+ const firstSwap = swapTerm(firstWord, firstKey, SWAP_FIRST_WORD);
91
+ lastSwap = swapTerm(secondWord, secondKey, SWAP_SECOND_WORD);
92
+ swapSum = (swapSum + firstSwap + lastSwap) >>> 0;
93
+ mix = swapAndMultiply(Math.imul(mix + firstWord, firstKey), MIX_FIRST_WORD);
94
+ mixSum = (mixSum + mix) >>> 0;
95
+ mix = swapAndMultiply(Math.imul(mix + secondWord, secondKey), MIX_SECOND_WORD);
96
+ mixSum = (mixSum + mix) >>> 0;
97
+ }
98
+ const checksum = new Uint8Array(8);
99
+ const view = new DataView(checksum.buffer);
100
+ view.setUint32(0, lastSwap ^ mix, true);
101
+ view.setUint32(4, swapSum ^ mixSum, true);
102
+ return checksum;
103
+ }
104
+ function upperHex(bytes) {
105
+ return Array.from(bytes, (b) => b.toString(16).padStart(2, "0"))
106
+ .join("")
107
+ .toUpperCase();
108
+ }
109
+ /**
110
+ * `Sec-MS-GEC` is `<CS64 checksum>-<SHA-256>` over Edge's copyright line plus
111
+ * the Windows-tick timestamp and token.
112
+ */
113
+ export async function hashSecMsGecV2(ticksAndToken) {
114
+ const message = new TextEncoder().encode(EDGE_COPYRIGHT + ticksAndToken);
115
+ const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", message));
116
+ return `${upperHex(cs64(message, digest))}-${upperHex(digest)}`;
117
+ }
118
+ /** Ticks rounded to five minutes, matching the Edge client's cadence. */
119
+ async function generateSecMsGec(token, now = Date.now()) {
120
+ const ticks = Math.floor(now / 1000) + 11644473600;
121
+ const rounded = ticks - (ticks % 300);
122
+ const windowsTicks = rounded * 10000000;
123
+ return hashSecMsGecV2(`${windowsTicks}${token}`);
124
+ }
125
+ // ---------------------------------------------------------------------------
126
+ // SSML + socket
127
+ // ---------------------------------------------------------------------------
128
+ function voiceLocale(voice) {
129
+ const match = /\b([a-z]{2,}-[A-Z]{2})\b/.exec(voice);
130
+ return match?.[1] ?? "en-US";
131
+ }
132
+ function escapeXml(text) {
133
+ return text
134
+ .replaceAll("&", "&amp;")
135
+ .replaceAll("<", "&lt;")
136
+ .replaceAll(">", "&gt;")
137
+ .replaceAll('"', "&quot;")
138
+ .replaceAll("'", "&apos;");
139
+ }
140
+ function ssmlFor(text, voice) {
141
+ const lang = voiceLocale(voice);
142
+ return (`<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" ` +
143
+ `xml:lang="${lang}"><voice name="${voice}">` +
144
+ `<prosody pitch="+0Hz" rate="+0%" volume="+0%">${escapeXml(text)}</prosody>` +
145
+ `</voice></speak>`);
146
+ }
147
+ /**
148
+ * One synthesis over one socket. Resolves with the concatenated audio frames;
149
+ * rejects on handshake failure, socket error, or a synthesis timeout.
150
+ */
151
+ function synthesizeOverSocket(input) {
152
+ return new Promise((resolve, reject) => {
153
+ const connectionId = randomUUID();
154
+ const requestId = randomUUID().replaceAll("-", "");
155
+ let settled = false;
156
+ // One clock per phase, held as object properties: a `let` pair is what
157
+ // prefer-const rejects, and a plain Set cannot express "re-arm the same
158
+ // clock" (the synth deadline is pushed back on every audio frame).
159
+ const clocks = {};
160
+ const chunks = [];
161
+ const finish = (err) => {
162
+ if (settled)
163
+ return;
164
+ settled = true;
165
+ if (clocks.connect)
166
+ clearTimeout(clocks.connect);
167
+ if (clocks.synth)
168
+ clearTimeout(clocks.synth);
169
+ try {
170
+ // `close()` starts a graceful handshake and can leave a half-open
171
+ // socket (and its keepalive timer) behind; `terminate()` drops it now,
172
+ // so a one-shot CLI or test process actually exits.
173
+ const closable = socket;
174
+ if (typeof closable.terminate === "function")
175
+ closable.terminate();
176
+ else
177
+ closable.close?.();
178
+ }
179
+ catch {
180
+ /* already closing */
181
+ }
182
+ if (err)
183
+ reject(err);
184
+ else
185
+ resolve(concat(chunks));
186
+ };
187
+ const socket = new input.webSocketImpl(urlFor(connectionId, input.gec), {
188
+ headers: EDGE_HANDSHAKE_HEADERS,
189
+ });
190
+ clocks.connect = setTimeout(() => {
191
+ finish(new VoiceError(`edge tts connect timed out after ${input.connectTimeoutMs}ms`, "VOICE_BACKEND"));
192
+ }, input.connectTimeoutMs);
193
+ socket.on("open", () => {
194
+ if (settled)
195
+ return;
196
+ if (clocks.connect)
197
+ clearTimeout(clocks.connect);
198
+ clocks.synth = setTimeout(() => {
199
+ finish(new VoiceError(`edge tts synthesis timed out after ${input.synthesisTimeoutMs}ms`, "VOICE_BACKEND"));
200
+ }, input.synthesisTimeoutMs);
201
+ socket.send(speechConfig(input.outputFormat));
202
+ socket.send(ssmlFrame(requestId, ssmlFor(input.text, input.voice)));
203
+ });
204
+ socket.on("message", (data, isBinary) => {
205
+ if (settled)
206
+ return;
207
+ const buf = Buffer.isBuffer(data) ? data : Buffer.from(data);
208
+ if (!isBinary) {
209
+ const text = buf.toString("utf8");
210
+ if (text.includes(TURN_END))
211
+ finish();
212
+ return;
213
+ }
214
+ const headerEnd = buf.indexOf(AUDIO_DELIM);
215
+ if (headerEnd < 0)
216
+ return;
217
+ chunks.push(buf.subarray(headerEnd + AUDIO_DELIM.length));
218
+ if (clocks.synth) {
219
+ clearTimeout(clocks.synth);
220
+ clocks.synth = setTimeout(() => {
221
+ finish(new VoiceError(`edge tts synthesis timed out after ${input.synthesisTimeoutMs}ms`, "VOICE_BACKEND"));
222
+ }, input.synthesisTimeoutMs);
223
+ }
224
+ });
225
+ socket.on("error", (err) => {
226
+ finish(new VoiceError(`edge tts socket: ${err.message}`, "VOICE_BACKEND"));
227
+ });
228
+ socket.on("close", () => {
229
+ // A close before `turn.end` still delivers whatever audio arrived; only
230
+ // an empty body means the handshake was rejected.
231
+ finish(chunks.length > 0 ? undefined : new VoiceError("edge tts closed before audio (handshake rejected or voice unavailable)", "VOICE_BACKEND"));
232
+ });
233
+ });
234
+ }
235
+ function urlFor(connectionId, gec) {
236
+ return `${WSS_URL}?TrustedClientToken=${TRUSTED_CLIENT_TOKEN}` +
237
+ `&Sec-MS-GEC=${encodeURIComponent(gec)}` +
238
+ `&Sec-MS-GEC-Version=${GEC_VERSION}` +
239
+ `&ConnectionId=${connectionId}`;
240
+ }
241
+ function speechConfig(outputFormat) {
242
+ const payload = JSON.stringify({
243
+ context: {
244
+ synthesis: {
245
+ audio: {
246
+ metadataoptions: {
247
+ sentenceBoundaryEnabled: "false",
248
+ wordBoundaryEnabled: "false",
249
+ },
250
+ outputFormat,
251
+ },
252
+ },
253
+ },
254
+ });
255
+ return (`Content-Type:application/json; charset=utf-8\r\n` +
256
+ `Path:speech.config${JSON_XML_DELIM}${payload}`);
257
+ }
258
+ function ssmlFrame(requestId, ssml) {
259
+ return (`X-RequestId:${requestId}\r\n` +
260
+ `Content-Type:application/ssml+xml\r\n` +
261
+ `Path:ssml${JSON_XML_DELIM}${ssml}`);
262
+ }
263
+ function concat(chunks) {
264
+ const total = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
265
+ const out = new Uint8Array(total);
266
+ let offset = 0;
267
+ for (const chunk of chunks) {
268
+ out.set(chunk, offset);
269
+ offset += chunk.length;
270
+ }
271
+ return out;
272
+ }
273
+ /**
274
+ * Sec-MS-GEC is expensive enough (SHA-256 + checksum over a long string) that
275
+ * re-deriving it per request would be waste; it also only changes every five
276
+ * minutes. Cache one value per five-minute bucket.
277
+ */
278
+ const gecCache = { value: "", bucket: -1 };
279
+ async function currentGec(now = Date.now()) {
280
+ const bucket = Math.floor(now / 1000 / 300);
281
+ if (gecCache.bucket === bucket && gecCache.value !== "") {
282
+ return gecCache.value;
283
+ }
284
+ const value = await generateSecMsGec(TRUSTED_CLIENT_TOKEN, now);
285
+ gecCache.value = value;
286
+ gecCache.bucket = bucket;
287
+ return value;
288
+ }
289
+ // ---------------------------------------------------------------------------
290
+ // Voice catalog
291
+ // ---------------------------------------------------------------------------
292
+ /**
293
+ * Fetch the Read Aloud voice catalog.
294
+ *
295
+ * The card filters this by locale; the list is stable enough to cache for a
296
+ * day on the Host, but this function stays a plain fetch so callers decide.
297
+ */
298
+ export async function listEdgeVoices(options = {}) {
299
+ const fetchImpl = options.fetchImpl ?? fetch;
300
+ const res = await fetchImpl(VOICES_URL);
301
+ if (!res.ok) {
302
+ throw new VoiceError(`edge voices HTTP ${res.status}`, "VOICE_BACKEND");
303
+ }
304
+ const rows = (await res.json());
305
+ const out = [];
306
+ for (const row of rows) {
307
+ const shortName = String(row.ShortName ?? "").trim();
308
+ if (shortName === "")
309
+ continue;
310
+ out.push({
311
+ shortName,
312
+ gender: String(row.Gender ?? ""),
313
+ locale: String(row.Locale ?? ""),
314
+ friendlyName: String(row.FriendlyName ?? shortName),
315
+ });
316
+ }
317
+ return out;
318
+ }
319
+ /**
320
+ * Build the Edge TTS Provider.
321
+ *
322
+ * `transcribe` / `createLiveSession` are honestly unsupported: Edge has no
323
+ * STT and no realtime session, and pretending otherwise would make ASR
324
+ * cards silently point at nothing.
325
+ */
326
+ export function createEdgeVoiceProvider(options = {}) {
327
+ const webSocketImpl = options.webSocketImpl ?? WebSocket;
328
+ const defaultVoice = options.defaultVoice?.trim() || EDGE_DEFAULT_VOICE;
329
+ const connectTimeoutMs = options.connectTimeoutMs ?? 10_000;
330
+ const synthesisTimeoutMs = options.synthesisTimeoutMs ?? 30_000;
331
+ return {
332
+ async synthesize(req) {
333
+ const text = String(req.text ?? "").trim();
334
+ if (text === "") {
335
+ throw new VoiceError("synthesize text is empty", "VOICE_BAD_ARGS");
336
+ }
337
+ // Edge always streams MP3 regardless of the requested container; say so
338
+ // instead of returning WAV bytes under a WAV mime.
339
+ const voice = req.voice?.trim() || defaultVoice;
340
+ const gec = await currentGec(options.now?.() ?? Date.now());
341
+ const bytes = await synthesizeOverSocket({
342
+ text,
343
+ voice,
344
+ outputFormat: DEFAULT_OUTPUT_FORMAT,
345
+ gec,
346
+ connectTimeoutMs,
347
+ synthesisTimeoutMs,
348
+ webSocketImpl,
349
+ });
350
+ if (bytes.length === 0) {
351
+ throw new VoiceError(`edge tts returned no audio for voice ${voice}`, "VOICE_BACKEND");
352
+ }
353
+ return {
354
+ bytes,
355
+ mimeType: "audio/mpeg",
356
+ provider: "edge",
357
+ delivery: "edge",
358
+ voice,
359
+ note: `edge-tts bytes=${bytes.length} voice=${voice}`,
360
+ };
361
+ },
362
+ async transcribe(_req) {
363
+ throw new VoiceError("Edge TTS is synthesis-only; use the local or openai engine for dictation", "VOICE_UNAVAILABLE");
364
+ },
365
+ async createLiveSession(_req) {
366
+ throw new VoiceError("Edge TTS has no realtime session; use the openai engine for live voice", "VOICE_LIVE_UNSUPPORTED");
367
+ },
368
+ liveStatus() {
369
+ return {
370
+ available: false,
371
+ mode: "none",
372
+ provider: "edge",
373
+ reason: "TTS-only engine (no dictation / realtime session)",
374
+ };
375
+ },
376
+ };
377
+ }
378
+ /** Voices for one locale prefix (`zh-CN`, `en-US`, …); empty means all. */
379
+ export function filterEdgeVoices(voices, localePrefix) {
380
+ const prefix = localePrefix?.trim().toLowerCase();
381
+ if (prefix === undefined || prefix === "")
382
+ return voices;
383
+ return voices.filter((voice) => voice.locale.toLowerCase().startsWith(prefix));
384
+ }
385
+ /** Exposed for the voice catalog test: pure, no network. */
386
+ export const edgeTtsInternals = {
387
+ hashSecMsGecV2,
388
+ ssmlFor,
389
+ speechConfig,
390
+ voiceLocale,
391
+ escapeXml,
392
+ };
393
+ //# sourceMappingURL=edge-tts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-tts.js","sourceRoot":"","sources":["../src/edge-tts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engine-ids.d.ts","sourceRoot":"","sources":["../src/engine-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,MAAM,CAMR"}
1
+ {"version":3,"file":"engine-ids.d.ts","sourceRoot":"","sources":["../src/engine-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,MAAM,CAMR"}
@@ -10,6 +10,7 @@
10
10
  const ENV_ENGINE_ALIASES = {
11
11
  "1": "openai",
12
12
  openai: "openai",
13
+ edge: "edge",
13
14
  local: "local",
14
15
  sensevoice: "local",
15
16
  // TTS spells its local engine `system`; the registry's table lookup falls
@@ -1 +1 @@
1
- {"version":3,"file":"engine-ids.js","sourceRoot":"","sources":["../src/engine-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wCAAwC;AACxC,MAAM,kBAAkB,GAAqC;IAC3D,GAAG,EAAE,QAAQ;IACb,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,OAAO;IACnB,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAsB,EACtB,SAA6B;IAE7B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClE,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IACzD,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;SAClD,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"engine-ids.js","sourceRoot":"","sources":["../src/engine-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wCAAwC;AACxC,MAAM,kBAAkB,GAAqC;IAC3D,GAAG,EAAE,QAAQ;IACb,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,OAAO;IACnB,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAsB,EACtB,SAA6B;IAE7B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClE,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IACzD,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;SAClD,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;AACnB,CAAC"}
@@ -23,7 +23,7 @@ export interface VoiceEngineSpec {
23
23
  /**
24
24
  * Every engine registered for one direction.
25
25
  * @param direction - ASR or TTS.
26
- * @returns the specs, local first.
26
+ * @returns the specs in default order (TTS: edge → local → openai → memory).
27
27
  */
28
28
  export declare function listVoiceEngines(direction: VoiceDirection): readonly VoiceEngineSpec[];
29
29
  /** What one access request asks for. */
@@ -1 +1 @@
1
- {"version":3,"file":"engines.d.ts","sourceRoot":"","sources":["../src/engines.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,6BAA6B;AAC7B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,YAAY,GAAG,SAAS,CAAC;CACxE;AAwED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,cAAc,GACxB,SAAS,eAAe,EAAE,CAE5B;AAED,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,oEAAoE;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CA+B1E"}
1
+ {"version":3,"file":"engines.d.ts","sourceRoot":"","sources":["../src/engines.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,6BAA6B;AAC7B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,YAAY,GAAG,SAAS,CAAC;CACxE;AAyFD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,cAAc,GACxB,SAAS,eAAe,EAAE,CAE5B;AAED,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,oEAAoE;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CA+B1E"}
@@ -5,6 +5,7 @@
5
5
  * Face handler and the cards all resolve through this table instead of each
6
6
  * growing its own `if (engine === …)` ladder.
7
7
  */
8
+ import { createEdgeVoiceProvider, EDGE_DEFAULT_VOICE } from "./edge-tts.js";
8
9
  import { createMemoryVoiceProvider } from "./memory.js";
9
10
  import { createOpenAiVoiceProvider } from "./openai-http.js";
10
11
  import { createSenseVoiceLocalProvider } from "./sensevoice-local.js";
@@ -58,6 +59,23 @@ const ASR_ENGINES = [
58
59
  },
59
60
  ];
60
61
  const TTS_ENGINES = [
62
+ // First row is the default: a fresh install with `enabled: true` speaks
63
+ // through Edge (free neural voices, no key). `local` stays registered as the
64
+ // offline fallback for hosts with no network.
65
+ {
66
+ id: "edge",
67
+ direction: "tts",
68
+ needsKey: false,
69
+ create: (ctx) => {
70
+ const voice = ctx.voice?.trim();
71
+ return createEdgeVoiceProvider({
72
+ ...(voice === undefined || voice === "" || voice === EDGE_DEFAULT_VOICE
73
+ ? {}
74
+ : { defaultVoice: voice }),
75
+ ...(ctx.fetchImpl ? { fetchImpl: ctx.fetchImpl } : {}),
76
+ });
77
+ },
78
+ },
61
79
  {
62
80
  id: "local",
63
81
  direction: "tts",
@@ -81,7 +99,7 @@ const TTS_ENGINES = [
81
99
  /**
82
100
  * Every engine registered for one direction.
83
101
  * @param direction - ASR or TTS.
84
- * @returns the specs, local first.
102
+ * @returns the specs in default order (TTS: edge → local → openai → memory).
85
103
  */
86
104
  export function listVoiceEngines(direction) {
87
105
  return direction === "tts" ? TTS_ENGINES : ASR_ENGINES;
@@ -1 +1 @@
1
- {"version":3,"file":"engines.js","sourceRoot":"","sources":["../src/engines.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engines.js","sourceRoot":"","sources":["../src/engines.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * the surface.
8
8
  */
9
9
  export const VOICE_TTS_PROMPT_TEXT = [
10
- "- `text_to_speech` speaks text via the Host TTS Provider (returns audio meta; does not play on the server).",
10
+ "- `text_to_speech` speaks text via the Host TTS Provider and writes the clip into the session as a playable `file` attachment; it returns the `attachmentId` and the client renders a play bar (the Host itself never plays audio).",
11
11
  ].join("\n");
12
12
  export const VOICE_ASR_PROMPT_TEXT = [
13
13
  "- `voice_transcribe` runs one-shot STT on base64 audio (dictation / message audio).",
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,6GAA6G;CAC9G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,qFAAqF;IACrF,2KAA2K;CAC5K,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,gEAAgE;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,eAAe,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,IAAI,CACnG,IAAI,CACL,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAAC,GAA8B;IAC5D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,GAAG,CAAC,gBAAgB,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC9D,IAAI,GAAG,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,qOAAqO;CACtO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,qFAAqF;IACrF,2KAA2K;CAC5K,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,gEAAgE;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,eAAe,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,IAAI,CACnG,IAAI,CACL,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAAC,GAA8B;IAC5D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,GAAG,CAAC,gBAAgB,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC9D,IAAI,GAAG,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5E,CAAC"}
@@ -11,6 +11,7 @@ export { resolveEngineId } from "./engine-ids.js";
11
11
  export { createVoiceAccess, listVoiceEngines, type VoiceAccess, type VoiceAccessRequest, type VoiceEngineContext, type VoiceEngineSpec, } from "./engines.js";
12
12
  export { createVoiceTools, createSpeakTool, describeVoiceAccess, voiceUnavailableMessage, type CreateVoiceToolsOptions, type VoiceAccessDescription, type VoiceAccessFacts, type VoiceAccessKind, } from "./tools.js";
13
13
  export { VOICE_ASR_PROMPT_TEXT, VOICE_PROMPT_TEXT, VOICE_TTS_PROMPT_TEXT, voicePromptText, } from "./format.js";
14
+ export { createEdgeVoiceProvider, EDGE_DEFAULT_VOICE, filterEdgeVoices, listEdgeVoices, type EdgeTtsOptions, type EdgeVoice, type EdgeVoiceProviderOptions, } from "./edge-tts.js";
14
15
  export { createMemoryVoiceProvider, minimalWavBytes, type MemoryVoiceOptions, } from "./memory.js";
15
16
  export { createOpenAiVoiceProvider, type OpenAiVoiceOptions, } from "./openai-http.js";
16
17
  export { createSenseVoiceLocalProvider, inspectSenseVoiceAssets, probeSenseVoiceEngine, senseVoiceDataRoot, SENSEVOICE_PLATFORMS, type SenseVoiceEngineProbe, type SenseVoiceInspectResult, type SenseVoiceLocalOptions, } from "./sensevoice-local.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,eAAe,EACf,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,eAAe,EACf,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrD,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,EACzB,eAAe,EACf,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,eAAe,EACf,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrD,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B"}
@@ -11,6 +11,7 @@ export { resolveEngineId } from "./engine-ids.js";
11
11
  export { createVoiceAccess, listVoiceEngines, } from "./engines.js";
12
12
  export { createVoiceTools, createSpeakTool, describeVoiceAccess, voiceUnavailableMessage, } from "./tools.js";
13
13
  export { VOICE_ASR_PROMPT_TEXT, VOICE_PROMPT_TEXT, VOICE_TTS_PROMPT_TEXT, voicePromptText, } from "./format.js";
14
+ export { createEdgeVoiceProvider, EDGE_DEFAULT_VOICE, filterEdgeVoices, listEdgeVoices, } from "./edge-tts.js";
14
15
  export { createMemoryVoiceProvider, minimalWavBytes, } from "./memory.js";
15
16
  export { createOpenAiVoiceProvider, } from "./openai-http.js";
16
17
  export { createSenseVoiceLocalProvider, inspectSenseVoiceAssets, probeSenseVoiceEngine, senseVoiceDataRoot, SENSEVOICE_PLATFORMS, } from "./sensevoice-local.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,UAAU,EACV,YAAY,GAYb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAKjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,GAKxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,eAAe,GAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,GAE1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GAIrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,gBAAgB,GAGjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAMnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,eAAe,EACf,UAAU,GAIX,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,UAAU,EACV,YAAY,GAYb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAKjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,GAKxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GAIf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,EACzB,eAAe,GAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,GAE1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GAIrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,gBAAgB,GAGjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAMnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,eAAe,EACf,UAAU,GAIX,MAAM,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-http.d.ts","sourceRoot":"","sources":["../src/openai-http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAIV,YAAY,EAKb,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAMD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,GAC1B,YAAY,CA8Jd"}
1
+ {"version":3,"file":"openai-http.d.ts","sourceRoot":"","sources":["../src/openai-http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAIV,YAAY,EAKb,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAMD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,GAC1B,YAAY,CA+Jd"}
@@ -47,6 +47,7 @@ export function createOpenAiVoiceProvider(options) {
47
47
  mimeType: mime,
48
48
  provider: "openai",
49
49
  delivery: "openai",
50
+ voice: req.voice ?? defaultVoice,
50
51
  note: `openai-tts bytes=${ab.byteLength}`,
51
52
  };
52
53
  },
@@ -1 +1 @@
1
- {"version":3,"file":"openai-http.js","sourceRoot":"","sources":["../src/openai-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai-http.js","sourceRoot":"","sources":["../src/openai-http.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAYxC,SAAS,OAAO,CAAC,IAAY,EAAE,IAAY;IACzC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAA2B;IAE3B,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,2BAA2B,CAAC,CAAC,OAAO,CACtE,MAAM,EACN,EAAE,CACH,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,yBAAyB,CAAC;IACjE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC;IAErD,MAAM,OAAO,GAAG,GAA2B,EAAE,CAAC,CAAC;QAC7C,aAAa,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE;KAC1C,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,UAAU,CAAC,GAA2B;YAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,UAAU,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,CAAC;YACrE,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;gBAC5D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,GAAG,OAAO,EAAE;oBACZ,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,YAAY;oBAChC,eAAe,EAAE,MAAM;iBACxB,CAAC;aACH,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,IAAI,UAAU,CAClB,mBAAmB,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EACtD,eAAe,CAChB,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,IAAI,GACR,MAAM,KAAK,KAAK;gBACd,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,MAAM,KAAK,MAAM;oBACjB,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,YAAY,CAAC;YACrB,OAAO;gBACL,KAAK,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC;gBACzB,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,YAAY;gBAChC,IAAI,EAAE,oBAAoB,EAAE,CAAC,UAAU,EAAE;aAC1C,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,UAAU,CACd,GAA2B;YAE3B,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,UAAU,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACjC,IAAI,EAAE,GAAG,CAAC,QAAQ,IAAI,WAAW;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC/B,IAAI,GAAG,CAAC,QAAQ;gBAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC,EAAE;gBACpE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,OAAO,EAAE;gBAClB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,IAAI,UAAU,CAClB,mBAAmB,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EACtD,eAAe,CAChB,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAsB,CAAC;YACrD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO;gBACL,IAAI;gBACJ,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC;aAC5B,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,iBAAiB,CACrB,GAA2B;YAE3B,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE;gBACjE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,GAAG,OAAO,EAAE;oBACZ,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;oBAC7B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,YAAY;oBAChC,GAAG,CAAC,GAAG,CAAC,YAAY;wBAClB,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE;wBACpC,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;aACH,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,IAAI,UAAU,CAClB,gCAAgC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EACnE,eAAe,CAChB,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;YACF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,UAAU,CAClB,oCAAoC,EACpC,eAAe,CAChB,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC;YACzC,MAAM,MAAM,GAA0B;gBACpC,SAAS;gBACT,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EACF,kFAAkF;oBAClF,4BAA4B;aAC/B,CAAC;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;YAC7C,CAAC;YACD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjB,OAAO;oBACL,GAAG,MAAM;oBACT,IAAI,EACF,GAAG,MAAM,CAAC,IAAI,qFAAqF;iBACtG,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,UAAU;YACR,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,QAAQ;aACnB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -3,7 +3,7 @@
3
3
  * Wake-word / always-on hotword is intentionally out of scope (see docs/voice.md).
4
4
  */
5
5
  import type { VoiceDirection } from "./types.js";
6
- export type VoiceAccessKind = "off" | "memory" | "local" | "system" | "openai-ready" | "openai-missing-key" | "unknown";
6
+ export type VoiceAccessKind = "off" | "memory" | "local" | "system" | "edge" | "openai-ready" | "openai-missing-key" | "unknown";
7
7
  /** What a caller knows about the Settings side of voice. */
8
8
  export interface VoiceAccessFacts {
9
9
  readonly direction: VoiceDirection;