@absolutejs/voice 0.0.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 (179) hide show
  1. package/README.md +150 -0
  2. package/dist/absolutejs/src/angular/angularDeps.d.ts +2 -0
  3. package/dist/absolutejs/src/angular/angularPatch.d.ts +1 -0
  4. package/dist/absolutejs/src/angular/injectorPatch.d.ts +1 -0
  5. package/dist/absolutejs/src/angular/islands.d.ts +3 -0
  6. package/dist/absolutejs/src/angular/lowerDeferSyntax.d.ts +18 -0
  7. package/dist/absolutejs/src/angular/lowerServerIslands.d.ts +1 -0
  8. package/dist/absolutejs/src/angular/pageHandler.d.ts +26 -0
  9. package/dist/absolutejs/src/angular/resolveAngularPackage.d.ts +7 -0
  10. package/dist/absolutejs/src/angular/ssrRender.d.ts +16 -0
  11. package/dist/absolutejs/src/angular/ssrSanitizer.d.ts +3 -0
  12. package/dist/absolutejs/src/build/angularLinkerPlugin.d.ts +11 -0
  13. package/dist/absolutejs/src/build/buildAngularVendor.d.ts +4 -0
  14. package/dist/absolutejs/src/build/buildDepVendor.d.ts +2 -0
  15. package/dist/absolutejs/src/build/buildReactVendor.d.ts +8 -0
  16. package/dist/absolutejs/src/build/buildSvelteVendor.d.ts +6 -0
  17. package/dist/absolutejs/src/build/buildVueVendor.d.ts +6 -0
  18. package/dist/absolutejs/src/build/compileAngular.d.ts +29 -0
  19. package/dist/absolutejs/src/build/compileSvelte.d.ts +13 -0
  20. package/dist/absolutejs/src/build/compileVue.d.ts +19 -0
  21. package/dist/absolutejs/src/build/generateManifest.d.ts +2 -0
  22. package/dist/absolutejs/src/build/generateReactIndexes.d.ts +1 -0
  23. package/dist/absolutejs/src/build/htmlScriptHMRPlugin.d.ts +13 -0
  24. package/dist/absolutejs/src/build/islandEntries.d.ts +32 -0
  25. package/dist/absolutejs/src/build/nativeRewrite.d.ts +5 -0
  26. package/dist/absolutejs/src/build/optimizeHtmlImages.d.ts +2 -0
  27. package/dist/absolutejs/src/build/outputLogs.d.ts +1 -0
  28. package/dist/absolutejs/src/build/resolvePackageImport.d.ts +9 -0
  29. package/dist/absolutejs/src/build/rewriteImports.d.ts +7 -0
  30. package/dist/absolutejs/src/build/rewriteReactImports.d.ts +7 -0
  31. package/dist/absolutejs/src/build/scanConventions.d.ts +5 -0
  32. package/dist/absolutejs/src/build/scanCssEntryPoints.d.ts +1 -0
  33. package/dist/absolutejs/src/build/scanEntryPoints.d.ts +1 -0
  34. package/dist/absolutejs/src/build/staticIslandPages.d.ts +9 -0
  35. package/dist/absolutejs/src/build/updateAssetPaths.d.ts +1 -0
  36. package/dist/absolutejs/src/build/wrapHTMLScript.d.ts +17 -0
  37. package/dist/absolutejs/src/cli/scripts/telemetry.d.ts +5 -0
  38. package/dist/absolutejs/src/cli/telemetryEvent.d.ts +1 -0
  39. package/dist/absolutejs/src/client/islandStore.d.ts +22 -0
  40. package/dist/absolutejs/src/client/streamSwap.d.ts +11 -0
  41. package/dist/absolutejs/src/constants.d.ts +60 -0
  42. package/dist/absolutejs/src/core/build.d.ts +9 -0
  43. package/dist/absolutejs/src/core/currentIslandRegistry.d.ts +7 -0
  44. package/dist/absolutejs/src/core/devBuild.d.ts +6 -0
  45. package/dist/absolutejs/src/core/devRouteRegistrationCallsite.d.ts +2 -0
  46. package/dist/absolutejs/src/core/devVendorPaths.d.ts +13 -0
  47. package/dist/absolutejs/src/core/index.d.ts +7 -0
  48. package/dist/absolutejs/src/core/islandManifest.d.ts +3 -0
  49. package/dist/absolutejs/src/core/islandMarkupAttributes.d.ts +12 -0
  50. package/dist/absolutejs/src/core/islandPageContext.d.ts +12 -0
  51. package/dist/absolutejs/src/core/islandSsr.d.ts +6 -0
  52. package/dist/absolutejs/src/core/islands.d.ts +16 -0
  53. package/dist/absolutejs/src/core/loadIslandRegistry.d.ts +1 -0
  54. package/dist/absolutejs/src/core/lookup.d.ts +1 -0
  55. package/dist/absolutejs/src/core/pageHandlers.d.ts +6 -0
  56. package/dist/absolutejs/src/core/prepare.d.ts +274 -0
  57. package/dist/absolutejs/src/core/prerender.d.ts +31 -0
  58. package/dist/absolutejs/src/core/renderIslandMarkup.d.ts +13 -0
  59. package/dist/absolutejs/src/core/responseEnhancers.d.ts +10 -0
  60. package/dist/absolutejs/src/core/staticStreaming.d.ts +25 -0
  61. package/dist/absolutejs/src/core/streamingSlotRegistrar.d.ts +16 -0
  62. package/dist/absolutejs/src/core/streamingSlotRegistry.d.ts +2 -0
  63. package/dist/absolutejs/src/core/streamingSlotWarningScope.d.ts +4 -0
  64. package/dist/absolutejs/src/core/svelteServerModule.d.ts +1 -0
  65. package/dist/absolutejs/src/core/wrapPageHandlerWithStreamingSlots.d.ts +2 -0
  66. package/dist/absolutejs/src/dev/assetStore.d.ts +8 -0
  67. package/dist/absolutejs/src/dev/buildHMRClient.d.ts +1 -0
  68. package/dist/absolutejs/src/dev/clientManager.d.ts +31 -0
  69. package/dist/absolutejs/src/dev/configResolver.d.ts +14 -0
  70. package/dist/absolutejs/src/dev/dependencyGraph.d.ts +10 -0
  71. package/dist/absolutejs/src/dev/devCert.d.ts +11 -0
  72. package/dist/absolutejs/src/dev/fileHashTracker.d.ts +2 -0
  73. package/dist/absolutejs/src/dev/fileWatcher.d.ts +4 -0
  74. package/dist/absolutejs/src/dev/moduleMapper.d.ts +27 -0
  75. package/dist/absolutejs/src/dev/moduleServer.d.ts +21 -0
  76. package/dist/absolutejs/src/dev/moduleVersionTracker.d.ts +7 -0
  77. package/dist/absolutejs/src/dev/pathUtils.d.ts +5 -0
  78. package/dist/absolutejs/src/dev/reactComponentClassifier.d.ts +2 -0
  79. package/dist/absolutejs/src/dev/rebuildTrigger.d.ts +10 -0
  80. package/dist/absolutejs/src/dev/simpleHTMLHMR.d.ts +4 -0
  81. package/dist/absolutejs/src/dev/simpleHTMXHMR.d.ts +4 -0
  82. package/dist/absolutejs/src/dev/transformCache.d.ts +6 -0
  83. package/dist/absolutejs/src/dev/webSocket.d.ts +9 -0
  84. package/dist/absolutejs/src/index.d.ts +5 -0
  85. package/dist/absolutejs/src/islands/pageMetadata.d.ts +13 -0
  86. package/dist/absolutejs/src/islands/sourceMetadata.d.ts +10 -0
  87. package/dist/absolutejs/src/plugins/devtoolsJson.d.ts +58 -0
  88. package/dist/absolutejs/src/plugins/hmr.d.ts +138 -0
  89. package/dist/absolutejs/src/plugins/imageOptimizer.d.ts +67 -0
  90. package/dist/absolutejs/src/plugins/index.d.ts +3 -0
  91. package/dist/absolutejs/src/plugins/networking.d.ts +2 -0
  92. package/dist/absolutejs/src/plugins/pageRouter.d.ts +1 -0
  93. package/dist/absolutejs/src/react/Island.d.ts +2 -0
  94. package/dist/absolutejs/src/react/bridgeInternals.d.ts +1 -0
  95. package/dist/absolutejs/src/react/createIsland.d.ts +2 -0
  96. package/dist/absolutejs/src/react/hooks/useIslandStore.d.ts +3 -0
  97. package/dist/absolutejs/src/react/index.d.ts +4 -0
  98. package/dist/absolutejs/src/react/pageHandler.d.ts +21 -0
  99. package/dist/absolutejs/src/svelte/lowerAwaitSlotSyntax.d.ts +4 -0
  100. package/dist/absolutejs/src/svelte/lowerIslandSyntax.d.ts +4 -0
  101. package/dist/absolutejs/src/svelte/pageHandler.d.ts +23 -0
  102. package/dist/absolutejs/src/svelte/renderToReadableStream.d.ts +14 -0
  103. package/dist/absolutejs/src/utils/cleanStaleOutputs.d.ts +1 -0
  104. package/dist/absolutejs/src/utils/cleanup.d.ts +8 -0
  105. package/dist/absolutejs/src/utils/commonAncestor.d.ts +1 -0
  106. package/dist/absolutejs/src/utils/defineConfig.d.ts +2 -0
  107. package/dist/absolutejs/src/utils/defineEnv.d.ts +10 -0
  108. package/dist/absolutejs/src/utils/escapeScriptContent.d.ts +1 -0
  109. package/dist/absolutejs/src/utils/generateHeadElement.d.ts +4 -0
  110. package/dist/absolutejs/src/utils/generateSitemap.d.ts +6 -0
  111. package/dist/absolutejs/src/utils/getDurationString.d.ts +1 -0
  112. package/dist/absolutejs/src/utils/getEnv.d.ts +1 -0
  113. package/dist/absolutejs/src/utils/imageProcessing.d.ts +33 -0
  114. package/dist/absolutejs/src/utils/index.d.ts +9 -0
  115. package/dist/absolutejs/src/utils/jsonLd.d.ts +2 -0
  116. package/dist/absolutejs/src/utils/loadConfig.d.ts +1 -0
  117. package/dist/absolutejs/src/utils/logger.d.ts +55 -0
  118. package/dist/absolutejs/src/utils/networking.d.ts +2 -0
  119. package/dist/absolutejs/src/utils/normalizePath.d.ts +9 -0
  120. package/dist/absolutejs/src/utils/registerClientScript.d.ts +36 -0
  121. package/dist/absolutejs/src/utils/resolveConvention.d.ts +9 -0
  122. package/dist/absolutejs/src/utils/ssrErrorPage.d.ts +1 -0
  123. package/dist/absolutejs/src/utils/startupBanner.d.ts +9 -0
  124. package/dist/absolutejs/src/utils/streamingSlotMetricSink.d.ts +18 -0
  125. package/dist/absolutejs/src/utils/streamingSlots.d.ts +76 -0
  126. package/dist/absolutejs/src/utils/stringModifiers.d.ts +3 -0
  127. package/dist/absolutejs/src/utils/validateSafePath.d.ts +1 -0
  128. package/dist/absolutejs/src/vue/pageHandler.d.ts +29 -0
  129. package/dist/absolutejs/types/ai.d.ts +4631 -0
  130. package/dist/absolutejs/types/angular.d.ts +29 -0
  131. package/dist/absolutejs/types/build.d.ts +67 -0
  132. package/dist/absolutejs/types/cli.d.ts +19 -0
  133. package/dist/absolutejs/types/client.d.ts +65 -0
  134. package/dist/absolutejs/types/conventions.d.ts +20 -0
  135. package/dist/absolutejs/types/env.d.ts +2 -0
  136. package/dist/absolutejs/types/image.d.ts +77 -0
  137. package/dist/absolutejs/types/index.d.ts +19 -0
  138. package/dist/absolutejs/types/island.d.ts +48 -0
  139. package/dist/absolutejs/types/jsonLd.d.ts +271 -0
  140. package/dist/absolutejs/types/messages.d.ts +144 -0
  141. package/dist/absolutejs/types/metadata.d.ts +49 -0
  142. package/dist/absolutejs/types/react.d.ts +2 -0
  143. package/dist/absolutejs/types/session.d.ts +16 -0
  144. package/dist/absolutejs/types/sitemap.d.ts +14 -0
  145. package/dist/absolutejs/types/svelte.d.ts +2 -0
  146. package/dist/absolutejs/types/telemetry.d.ts +15 -0
  147. package/dist/absolutejs/types/tool.d.ts +11 -0
  148. package/dist/absolutejs/types/typeGuards.d.ts +5 -0
  149. package/dist/absolutejs/types/vue.d.ts +14 -0
  150. package/dist/absolutejs/types/websocket.d.ts +6 -0
  151. package/dist/angular/index.js +505 -0
  152. package/dist/client/index.js +521 -0
  153. package/dist/index.js +693 -0
  154. package/dist/react/index.js +489 -0
  155. package/dist/svelte/index.js +456 -0
  156. package/dist/voice/src/angular/index.d.ts +1 -0
  157. package/dist/voice/src/angular/voice-stream.service.d.ts +15 -0
  158. package/dist/voice/src/client/actions.d.ts +58 -0
  159. package/dist/voice/src/client/connection.d.ts +12 -0
  160. package/dist/voice/src/client/createVoiceStream.d.ts +14 -0
  161. package/dist/voice/src/client/index.d.ts +3 -0
  162. package/dist/voice/src/client/microphone.d.ts +11 -0
  163. package/dist/voice/src/client/store.d.ts +7 -0
  164. package/dist/voice/src/index.d.ts +5 -0
  165. package/dist/voice/src/logger.d.ts +8 -0
  166. package/dist/voice/src/memoryStore.d.ts +2 -0
  167. package/dist/voice/src/plugin.d.ts +40 -0
  168. package/dist/voice/src/react/index.d.ts +1 -0
  169. package/dist/voice/src/react/useVoiceStream.d.ts +13 -0
  170. package/dist/voice/src/session.d.ts +2 -0
  171. package/dist/voice/src/store.d.ts +6 -0
  172. package/dist/voice/src/svelte/createVoiceStream.d.ts +14 -0
  173. package/dist/voice/src/svelte/index.d.ts +1 -0
  174. package/dist/voice/src/turnDetection.d.ts +3 -0
  175. package/dist/voice/src/types.d.ts +318 -0
  176. package/dist/voice/src/vue/index.d.ts +1 -0
  177. package/dist/voice/src/vue/useVoiceStream.d.ts +13 -0
  178. package/dist/vue/index.js +496 -0
  179. package/package.json +100 -0
@@ -0,0 +1,456 @@
1
+ // @bun
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __name = (target, name) => {
6
+ Object.defineProperty(target, "name", {
7
+ value: name,
8
+ enumerable: false,
9
+ configurable: true
10
+ });
11
+ return target;
12
+ };
13
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
14
+ var __typeError = (msg) => {
15
+ throw TypeError(msg);
16
+ };
17
+ var __defNormalProp = (obj, key, value) => (key in obj) ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
18
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
19
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
20
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
21
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
22
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
23
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
24
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
25
+ var __expectFn = (fn) => fn !== undefined && typeof fn !== "function" ? __typeError("Function expected") : fn;
26
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({
27
+ kind: __decoratorStrings[kind],
28
+ name,
29
+ metadata,
30
+ addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null))
31
+ });
32
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
33
+ var __runInitializers = (array, flags, self, value) => {
34
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length;i < n; i++)
35
+ flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
36
+ return value;
37
+ };
38
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
39
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
40
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
41
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
42
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : {
43
+ get [name]() {
44
+ return __privateGet(this, extra);
45
+ },
46
+ set [name](x) {
47
+ __privateSet(this, extra, x);
48
+ }
49
+ }, name));
50
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
51
+ for (var i = decorators.length - 1;i >= 0; i--) {
52
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
53
+ if (k) {
54
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => (name in x) };
55
+ if (k ^ 3)
56
+ access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
57
+ if (k > 2)
58
+ access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
59
+ }
60
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? undefined : { get: desc.get, set: desc.set } : target, ctx);
61
+ done._ = 1;
62
+ if (k ^ 4 || it === undefined)
63
+ __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
64
+ else if (typeof it !== "object" || it === null)
65
+ __typeError("Object expected");
66
+ else
67
+ __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
68
+ }
69
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
70
+ };
71
+
72
+ // src/client/actions.ts
73
+ var serverMessageToAction = (message) => {
74
+ switch (message.type) {
75
+ case "assistant":
76
+ return {
77
+ text: message.text,
78
+ type: "assistant"
79
+ };
80
+ case "complete":
81
+ return {
82
+ sessionId: message.sessionId,
83
+ type: "complete"
84
+ };
85
+ case "error":
86
+ return {
87
+ message: message.message,
88
+ type: "error"
89
+ };
90
+ case "final":
91
+ return {
92
+ transcript: message.transcript,
93
+ type: "final"
94
+ };
95
+ case "partial":
96
+ return {
97
+ transcript: message.transcript,
98
+ type: "partial"
99
+ };
100
+ case "session":
101
+ return {
102
+ sessionId: message.sessionId,
103
+ status: message.status,
104
+ type: "session"
105
+ };
106
+ case "turn":
107
+ return {
108
+ turn: message.turn,
109
+ type: "turn"
110
+ };
111
+ default:
112
+ return null;
113
+ }
114
+ };
115
+
116
+ // src/client/connection.ts
117
+ var WS_OPEN = 1;
118
+ var WS_CLOSED = 3;
119
+ var WS_NORMAL_CLOSURE = 1000;
120
+ var DEFAULT_MAX_RECONNECT_ATTEMPTS = 10;
121
+ var DEFAULT_PING_INTERVAL = 30000;
122
+ var RECONNECT_DELAY_MS = 500;
123
+ var noop = () => {};
124
+ var noopUnsubscribe = () => noop;
125
+ var NOOP_CONNECTION = {
126
+ close: noop,
127
+ endTurn: noop,
128
+ getReadyState: () => WS_CLOSED,
129
+ getSessionId: () => "",
130
+ send: noop,
131
+ sendAudio: noop,
132
+ subscribe: noopUnsubscribe
133
+ };
134
+ var createSessionId = () => crypto.randomUUID();
135
+ var buildWsUrl = (path, sessionId) => {
136
+ const { hostname, port, protocol } = window.location;
137
+ const wsProtocol = protocol === "https:" ? "wss:" : "ws:";
138
+ const portSuffix = port ? `:${port}` : "";
139
+ const url = new URL(`${wsProtocol}//${hostname}${portSuffix}${path}`);
140
+ url.searchParams.set("sessionId", sessionId);
141
+ return url.toString();
142
+ };
143
+ var isVoiceServerMessage = (value) => {
144
+ if (!value || typeof value !== "object" || !("type" in value)) {
145
+ return false;
146
+ }
147
+ switch (value.type) {
148
+ case "assistant":
149
+ case "complete":
150
+ case "error":
151
+ case "final":
152
+ case "partial":
153
+ case "pong":
154
+ case "session":
155
+ case "turn":
156
+ return true;
157
+ default:
158
+ return false;
159
+ }
160
+ };
161
+ var parseServerMessage = (event) => {
162
+ if (typeof event.data !== "string") {
163
+ return null;
164
+ }
165
+ try {
166
+ const parsed = JSON.parse(event.data);
167
+ return isVoiceServerMessage(parsed) ? parsed : null;
168
+ } catch {
169
+ return null;
170
+ }
171
+ };
172
+ var createVoiceConnection = (path, options = {}) => {
173
+ if (typeof window === "undefined") {
174
+ return NOOP_CONNECTION;
175
+ }
176
+ const listeners = new Set;
177
+ const shouldReconnect = options.reconnect !== false;
178
+ const maxReconnectAttempts = options.maxReconnectAttempts ?? DEFAULT_MAX_RECONNECT_ATTEMPTS;
179
+ const pingInterval = options.pingInterval ?? DEFAULT_PING_INTERVAL;
180
+ const state = {
181
+ isConnected: false,
182
+ pendingMessages: [],
183
+ pingInterval: null,
184
+ reconnectAttempts: 0,
185
+ reconnectTimeout: null,
186
+ sessionId: options.sessionId ?? createSessionId(),
187
+ ws: null
188
+ };
189
+ const clearTimers = () => {
190
+ if (state.pingInterval) {
191
+ clearInterval(state.pingInterval);
192
+ state.pingInterval = null;
193
+ }
194
+ if (state.reconnectTimeout) {
195
+ clearTimeout(state.reconnectTimeout);
196
+ state.reconnectTimeout = null;
197
+ }
198
+ };
199
+ const flushPendingMessages = () => {
200
+ if (state.ws?.readyState !== WS_OPEN) {
201
+ return;
202
+ }
203
+ while (state.pendingMessages.length > 0) {
204
+ const next = state.pendingMessages.shift();
205
+ if (next !== undefined) {
206
+ state.ws.send(next);
207
+ }
208
+ }
209
+ };
210
+ const scheduleReconnect = () => {
211
+ state.reconnectAttempts += 1;
212
+ state.reconnectTimeout = setTimeout(() => {
213
+ if (state.reconnectAttempts > maxReconnectAttempts) {
214
+ return;
215
+ }
216
+ connect();
217
+ }, RECONNECT_DELAY_MS);
218
+ };
219
+ const connect = () => {
220
+ const ws = new WebSocket(buildWsUrl(path, state.sessionId));
221
+ ws.binaryType = "arraybuffer";
222
+ ws.onopen = () => {
223
+ state.isConnected = true;
224
+ state.reconnectAttempts = 0;
225
+ flushPendingMessages();
226
+ listeners.forEach((listener) => listener({
227
+ sessionId: state.sessionId,
228
+ status: "active",
229
+ type: "session"
230
+ }));
231
+ state.pingInterval = setInterval(() => {
232
+ if (ws.readyState === WS_OPEN) {
233
+ ws.send(JSON.stringify({ type: "ping" }));
234
+ }
235
+ }, pingInterval);
236
+ };
237
+ ws.onmessage = (event) => {
238
+ const parsed = parseServerMessage(event);
239
+ if (!parsed) {
240
+ return;
241
+ }
242
+ if (parsed.type === "session") {
243
+ state.sessionId = parsed.sessionId;
244
+ }
245
+ listeners.forEach((listener) => listener(parsed));
246
+ };
247
+ ws.onclose = (event) => {
248
+ state.isConnected = false;
249
+ clearTimers();
250
+ const reconnectable = shouldReconnect && event.code !== WS_NORMAL_CLOSURE && state.reconnectAttempts < maxReconnectAttempts;
251
+ if (reconnectable) {
252
+ scheduleReconnect();
253
+ }
254
+ };
255
+ state.ws = ws;
256
+ };
257
+ const sendSerialized = (value) => {
258
+ if (state.ws?.readyState === WS_OPEN) {
259
+ state.ws.send(value);
260
+ return;
261
+ }
262
+ state.pendingMessages.push(value);
263
+ };
264
+ const send = (message) => {
265
+ sendSerialized(JSON.stringify(message));
266
+ };
267
+ const sendAudio = (audio) => {
268
+ sendSerialized(audio);
269
+ };
270
+ const endTurn = () => {
271
+ send({ type: "end_turn" });
272
+ };
273
+ const close = () => {
274
+ clearTimers();
275
+ if (state.ws) {
276
+ state.ws.close(WS_NORMAL_CLOSURE);
277
+ state.ws = null;
278
+ }
279
+ state.isConnected = false;
280
+ listeners.clear();
281
+ };
282
+ const subscribe = (callback) => {
283
+ listeners.add(callback);
284
+ return () => {
285
+ listeners.delete(callback);
286
+ };
287
+ };
288
+ connect();
289
+ return {
290
+ close,
291
+ endTurn,
292
+ getReadyState: () => state.ws?.readyState ?? WS_CLOSED,
293
+ getSessionId: () => state.sessionId,
294
+ send,
295
+ sendAudio,
296
+ subscribe
297
+ };
298
+ };
299
+
300
+ // src/client/store.ts
301
+ var createInitialState = () => ({
302
+ assistantTexts: [],
303
+ error: null,
304
+ isConnected: false,
305
+ partial: "",
306
+ sessionId: null,
307
+ status: "idle",
308
+ turns: []
309
+ });
310
+ var createVoiceStreamStore = () => {
311
+ let state = createInitialState();
312
+ const subscribers = new Set;
313
+ const notify = () => {
314
+ subscribers.forEach((subscriber) => subscriber());
315
+ };
316
+ const dispatch = (action) => {
317
+ switch (action.type) {
318
+ case "assistant":
319
+ state = {
320
+ ...state,
321
+ assistantTexts: [...state.assistantTexts, action.text]
322
+ };
323
+ break;
324
+ case "complete":
325
+ state = {
326
+ ...state,
327
+ sessionId: action.sessionId,
328
+ status: "completed"
329
+ };
330
+ break;
331
+ case "connected":
332
+ state = {
333
+ ...state,
334
+ isConnected: true
335
+ };
336
+ break;
337
+ case "disconnected":
338
+ state = {
339
+ ...state,
340
+ isConnected: false
341
+ };
342
+ break;
343
+ case "error":
344
+ state = {
345
+ ...state,
346
+ error: action.message
347
+ };
348
+ break;
349
+ case "final":
350
+ state = {
351
+ ...state,
352
+ partial: "",
353
+ turns: state.turns.map((turn) => turn)
354
+ };
355
+ break;
356
+ case "partial":
357
+ state = {
358
+ ...state,
359
+ partial: action.transcript.text
360
+ };
361
+ break;
362
+ case "session":
363
+ state = {
364
+ ...state,
365
+ error: null,
366
+ sessionId: action.sessionId,
367
+ status: action.status
368
+ };
369
+ break;
370
+ case "turn":
371
+ state = {
372
+ ...state,
373
+ partial: "",
374
+ turns: [...state.turns, action.turn]
375
+ };
376
+ break;
377
+ }
378
+ notify();
379
+ };
380
+ return {
381
+ dispatch,
382
+ getServerSnapshot: () => state,
383
+ getSnapshot: () => state,
384
+ subscribe: (subscriber) => {
385
+ subscribers.add(subscriber);
386
+ return () => {
387
+ subscribers.delete(subscriber);
388
+ };
389
+ }
390
+ };
391
+ };
392
+
393
+ // src/client/createVoiceStream.ts
394
+ var createVoiceStream = (path, options = {}) => {
395
+ const connection = createVoiceConnection(path, options);
396
+ const store = createVoiceStreamStore();
397
+ const subscribers = new Set;
398
+ const notify = () => {
399
+ subscribers.forEach((subscriber) => subscriber());
400
+ };
401
+ const unsubscribeConnection = connection.subscribe((message) => {
402
+ const action = serverMessageToAction(message);
403
+ if (action) {
404
+ store.dispatch(action);
405
+ notify();
406
+ }
407
+ });
408
+ store.dispatch({ type: "connected" });
409
+ return {
410
+ close() {
411
+ unsubscribeConnection();
412
+ connection.close();
413
+ store.dispatch({ type: "disconnected" });
414
+ notify();
415
+ },
416
+ endTurn() {
417
+ connection.endTurn();
418
+ },
419
+ get error() {
420
+ return store.getSnapshot().error;
421
+ },
422
+ get isConnected() {
423
+ return store.getSnapshot().isConnected;
424
+ },
425
+ get partial() {
426
+ return store.getSnapshot().partial;
427
+ },
428
+ get sessionId() {
429
+ return connection.getSessionId();
430
+ },
431
+ get status() {
432
+ return store.getSnapshot().status;
433
+ },
434
+ get turns() {
435
+ return store.getSnapshot().turns;
436
+ },
437
+ get assistantTexts() {
438
+ return store.getSnapshot().assistantTexts;
439
+ },
440
+ sendAudio(audio) {
441
+ connection.sendAudio(audio);
442
+ },
443
+ subscribe(subscriber) {
444
+ subscribers.add(subscriber);
445
+ return () => {
446
+ subscribers.delete(subscriber);
447
+ };
448
+ }
449
+ };
450
+ };
451
+
452
+ // src/svelte/createVoiceStream.ts
453
+ var createVoiceStream2 = (path, options = {}) => createVoiceStream(path, options);
454
+ export {
455
+ createVoiceStream2 as createVoiceStream
456
+ };
@@ -0,0 +1 @@
1
+ export { VoiceStreamService } from './voice-stream.service';
@@ -0,0 +1,15 @@
1
+ import type { VoiceConnectionOptions, VoiceTurnRecord } from '../types';
2
+ export declare class VoiceStreamService {
3
+ connect<TResult = unknown>(path: string, options?: VoiceConnectionOptions): {
4
+ assistantTexts: import("@angular/core").Signal<string[]>;
5
+ close: () => void;
6
+ endTurn: () => void;
7
+ error: import("@angular/core").Signal<string | null>;
8
+ isConnected: import("@angular/core").Signal<boolean>;
9
+ partial: import("@angular/core").Signal<string>;
10
+ sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
11
+ sessionId: import("@angular/core").Signal<string>;
12
+ status: import("@angular/core").Signal<"idle" | import("..").VoiceSessionStatus>;
13
+ turns: import("@angular/core").Signal<VoiceTurnRecord<TResult>[]>;
14
+ };
15
+ }
@@ -0,0 +1,58 @@
1
+ import type { VoiceServerMessage } from '../types';
2
+ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceServerMessage<TResult>) => {
3
+ text: string;
4
+ type: "assistant";
5
+ sessionId?: undefined;
6
+ message?: undefined;
7
+ transcript?: undefined;
8
+ status?: undefined;
9
+ turn?: undefined;
10
+ } | {
11
+ sessionId: string;
12
+ type: "complete";
13
+ text?: undefined;
14
+ message?: undefined;
15
+ transcript?: undefined;
16
+ status?: undefined;
17
+ turn?: undefined;
18
+ } | {
19
+ message: string;
20
+ type: "error";
21
+ text?: undefined;
22
+ sessionId?: undefined;
23
+ transcript?: undefined;
24
+ status?: undefined;
25
+ turn?: undefined;
26
+ } | {
27
+ transcript: import("..").Transcript;
28
+ type: "final";
29
+ text?: undefined;
30
+ sessionId?: undefined;
31
+ message?: undefined;
32
+ status?: undefined;
33
+ turn?: undefined;
34
+ } | {
35
+ transcript: import("..").Transcript;
36
+ type: "partial";
37
+ text?: undefined;
38
+ sessionId?: undefined;
39
+ message?: undefined;
40
+ status?: undefined;
41
+ turn?: undefined;
42
+ } | {
43
+ sessionId: string;
44
+ status: import("..").VoiceSessionStatus;
45
+ type: "session";
46
+ text?: undefined;
47
+ message?: undefined;
48
+ transcript?: undefined;
49
+ turn?: undefined;
50
+ } | {
51
+ turn: import("..").VoiceTurnRecord<TResult>;
52
+ type: "turn";
53
+ text?: undefined;
54
+ sessionId?: undefined;
55
+ message?: undefined;
56
+ transcript?: undefined;
57
+ status?: undefined;
58
+ } | null;
@@ -0,0 +1,12 @@
1
+ import type { VoiceClientMessage, VoiceConnectionOptions, VoiceServerMessage } from '../types';
2
+ type VoiceConnectionHandle = {
3
+ close: () => void;
4
+ endTurn: () => void;
5
+ getReadyState: () => number;
6
+ getSessionId: () => string;
7
+ send: (message: VoiceClientMessage) => void;
8
+ sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
9
+ subscribe: (callback: (message: VoiceServerMessage) => void) => () => void;
10
+ };
11
+ export declare const createVoiceConnection: (path: string, options?: VoiceConnectionOptions) => VoiceConnectionHandle;
12
+ export {};
@@ -0,0 +1,14 @@
1
+ import type { VoiceConnectionOptions } from '../types';
2
+ export declare const createVoiceStream: <TResult = unknown>(path: string, options?: VoiceConnectionOptions) => {
3
+ close(): void;
4
+ endTurn(): void;
5
+ readonly error: string | null;
6
+ readonly isConnected: boolean;
7
+ readonly partial: string;
8
+ readonly sessionId: string;
9
+ readonly status: "idle" | import("..").VoiceSessionStatus;
10
+ readonly turns: import("..").VoiceTurnRecord<TResult>[];
11
+ readonly assistantTexts: string[];
12
+ sendAudio(audio: Uint8Array | ArrayBuffer): void;
13
+ subscribe(subscriber: () => void): () => void;
14
+ };
@@ -0,0 +1,3 @@
1
+ export { createVoiceConnection } from './connection';
2
+ export { createVoiceStream } from './createVoiceStream';
3
+ export { createMicrophoneCapture } from './microphone';
@@ -0,0 +1,11 @@
1
+ type MicrophoneCaptureOptions = {
2
+ channelCount?: 1 | 2;
3
+ onAudio: (audio: Uint8Array) => void;
4
+ sampleRateHz?: number;
5
+ };
6
+ type MicrophoneCapture = {
7
+ start: () => Promise<void>;
8
+ stop: () => void;
9
+ };
10
+ export declare const createMicrophoneCapture: (options: MicrophoneCaptureOptions) => MicrophoneCapture;
11
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { VoiceStreamState, VoiceStoreAction } from '../types';
2
+ export declare const createVoiceStreamStore: <TResult = unknown>() => {
3
+ dispatch: (action: VoiceStoreAction<TResult>) => void;
4
+ getServerSnapshot: () => VoiceStreamState<TResult>;
5
+ getSnapshot: () => VoiceStreamState<TResult>;
6
+ subscribe: (subscriber: () => void) => () => void;
7
+ };
@@ -0,0 +1,5 @@
1
+ export { voice } from './plugin';
2
+ export { createVoiceMemoryStore } from './memoryStore';
3
+ export { createVoiceSession } from './session';
4
+ export { createId, createVoiceSessionRecord } from './store';
5
+ export * from './types';
@@ -0,0 +1,8 @@
1
+ import type { VoiceLogger } from './types';
2
+ export declare const createNoopLogger: () => Required<VoiceLogger>;
3
+ export declare const resolveLogger: (logger?: VoiceLogger) => {
4
+ debug: (message: string, meta?: Record<string, unknown>) => void;
5
+ info: (message: string, meta?: Record<string, unknown>) => void;
6
+ warn: (message: string, meta?: Record<string, unknown>) => void;
7
+ error: (message: string, meta?: Record<string, unknown>) => void;
8
+ };
@@ -0,0 +1,2 @@
1
+ import type { VoiceSessionRecord, VoiceSessionStore } from './types';
2
+ export declare const createVoiceMemoryStore: <TSession extends VoiceSessionRecord = VoiceSessionRecord>() => VoiceSessionStore<TSession>;
@@ -0,0 +1,40 @@
1
+ import { Elysia } from 'elysia';
2
+ import type { VoicePluginConfig, VoiceSessionRecord } from './types';
3
+ export declare const voice: <TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown>(config: VoicePluginConfig<TContext, TSession, TResult>) => Elysia<"", {
4
+ decorator: {};
5
+ store: {};
6
+ derive: {};
7
+ resolve: {};
8
+ }, {
9
+ typebox: {};
10
+ error: {};
11
+ }, {
12
+ schema: {};
13
+ standaloneSchema: {};
14
+ macro: {};
15
+ macroFn: {};
16
+ parser: {};
17
+ response: {};
18
+ }, {
19
+ [x: string]: {
20
+ subscribe: {
21
+ body: unknown;
22
+ params: {};
23
+ query: unknown;
24
+ headers: unknown;
25
+ response: {};
26
+ };
27
+ };
28
+ }, {
29
+ derive: {};
30
+ resolve: {};
31
+ schema: {};
32
+ standaloneSchema: {};
33
+ response: {};
34
+ }, {
35
+ derive: {};
36
+ resolve: {};
37
+ schema: {};
38
+ standaloneSchema: {};
39
+ response: {};
40
+ }>;
@@ -0,0 +1 @@
1
+ export { useVoiceStream } from './useVoiceStream';
@@ -0,0 +1,13 @@
1
+ import type { VoiceConnectionOptions } from '../types';
2
+ export declare const useVoiceStream: <TResult = unknown>(path: string, options?: VoiceConnectionOptions) => {
3
+ close: () => void;
4
+ endTurn: () => void;
5
+ sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
6
+ assistantTexts: string[];
7
+ error: string | null;
8
+ isConnected: boolean;
9
+ partial: string;
10
+ sessionId: string;
11
+ status: "idle" | import("..").VoiceSessionStatus;
12
+ turns: import("..").VoiceTurnRecord<TResult>[];
13
+ };
@@ -0,0 +1,2 @@
1
+ import type { CreateVoiceSessionOptions, VoiceSessionHandle, VoiceSessionRecord } from './types';
2
+ export declare const createVoiceSession: <TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown>(options: CreateVoiceSessionOptions<TContext, TSession, TResult>) => VoiceSessionHandle<TContext, TSession, TResult>;
@@ -0,0 +1,6 @@
1
+ import type { Transcript, VoiceSessionRecord, VoiceSessionSummary } from './types';
2
+ export declare const createId: () => `${string}-${string}-${string}-${string}-${string}`;
3
+ export declare const createTranscript: (text: string, input?: Partial<Transcript>) => Transcript;
4
+ export declare const createVoiceSessionRecord: <TSession extends VoiceSessionRecord = VoiceSessionRecord>(id: string) => TSession;
5
+ export declare const resetVoiceSessionRecord: <TSession extends VoiceSessionRecord = VoiceSessionRecord>(id: string, existing?: TSession) => TSession;
6
+ export declare const toVoiceSessionSummary: (session: VoiceSessionRecord) => VoiceSessionSummary;