@alexkroman1/aai 0.8.8 → 0.9.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.
- package/dist/{sdk/_internal_types.d.ts → _internal-types.d.ts} +0 -3
- package/dist/_internal-types.js +19 -0
- package/dist/{sdk/_mock_ws.d.ts → _mock-ws.d.ts} +16 -5
- package/dist/_mock-ws.js +158 -0
- package/dist/{sdk/_utils.d.ts → _utils.d.ts} +1 -2
- package/dist/_utils.js +8 -0
- package/dist/{sdk/builtin_tools.d.ts → builtin-tools.d.ts} +5 -8
- package/dist/builtin-tools.js +270 -0
- package/dist/{sdk/direct_executor.d.ts → direct-executor.d.ts} +3 -7
- package/dist/direct-executor.js +125 -0
- package/dist/{sdk/mod.d.ts → index.d.ts} +0 -4
- package/dist/index.js +2 -0
- package/dist/{sdk/kv.d.ts → kv.d.ts} +23 -20
- package/dist/kv.js +99 -0
- package/dist/{sdk/protocol.d.ts → protocol.d.ts} +65 -29
- package/dist/protocol.js +142 -0
- package/dist/runtime.d.ts +18 -0
- package/dist/runtime.js +16 -0
- package/dist/s2s.d.ts +110 -0
- package/dist/s2s.js +242 -0
- package/dist/{sdk/server.d.ts → server.d.ts} +3 -23
- package/dist/server.js +105 -0
- package/dist/{sdk/session.d.ts → session.d.ts} +4 -11
- package/dist/session.js +312 -0
- package/dist/tsdown.config.d.ts +2 -0
- package/dist/{sdk/types.d.ts → types.d.ts} +41 -25
- package/dist/types.js +139 -0
- package/dist/{sdk/vector.d.ts → vector.d.ts} +14 -15
- package/dist/vector.js +56 -0
- package/dist/{sdk/worker_entry.d.ts → worker-entry.d.ts} +2 -5
- package/dist/worker-entry.js +59 -0
- package/dist/{sdk/ws_handler.d.ts → ws-handler.d.ts} +10 -8
- package/dist/ws-handler.js +155 -0
- package/package.json +66 -149
- package/README.md +0 -34
- package/dist/aai.js +0 -3
- package/dist/cli/tsconfig.tsbuildinfo +0 -1
- package/dist/cli.js +0 -2811
- package/dist/sdk/_internal_types.d.ts.map +0 -1
- package/dist/sdk/_internal_types.js +0 -25
- package/dist/sdk/_internal_types.js.map +0 -1
- package/dist/sdk/_mock_ws.d.ts.map +0 -1
- package/dist/sdk/_mock_ws.js +0 -154
- package/dist/sdk/_mock_ws.js.map +0 -1
- package/dist/sdk/_render_check.d.ts +0 -10
- package/dist/sdk/_render_check.d.ts.map +0 -1
- package/dist/sdk/_render_check.js +0 -72
- package/dist/sdk/_render_check.js.map +0 -1
- package/dist/sdk/_utils.d.ts.map +0 -1
- package/dist/sdk/_utils.js +0 -7
- package/dist/sdk/_utils.js.map +0 -1
- package/dist/sdk/builtin_tools.d.ts.map +0 -1
- package/dist/sdk/builtin_tools.js +0 -309
- package/dist/sdk/builtin_tools.js.map +0 -1
- package/dist/sdk/capnweb.d.ts +0 -102
- package/dist/sdk/capnweb.d.ts.map +0 -1
- package/dist/sdk/capnweb.js +0 -219
- package/dist/sdk/capnweb.js.map +0 -1
- package/dist/sdk/define_agent.d.ts +0 -36
- package/dist/sdk/define_agent.d.ts.map +0 -1
- package/dist/sdk/define_agent.js +0 -71
- package/dist/sdk/define_agent.js.map +0 -1
- package/dist/sdk/direct_executor.d.ts.map +0 -1
- package/dist/sdk/direct_executor.js +0 -145
- package/dist/sdk/direct_executor.js.map +0 -1
- package/dist/sdk/host.d.ts +0 -59
- package/dist/sdk/host.d.ts.map +0 -1
- package/dist/sdk/host.js +0 -131
- package/dist/sdk/host.js.map +0 -1
- package/dist/sdk/kv.d.ts.map +0 -1
- package/dist/sdk/kv.js +0 -94
- package/dist/sdk/kv.js.map +0 -1
- package/dist/sdk/memory_tools.d.ts +0 -38
- package/dist/sdk/memory_tools.d.ts.map +0 -1
- package/dist/sdk/memory_tools.js +0 -77
- package/dist/sdk/memory_tools.js.map +0 -1
- package/dist/sdk/mod.d.ts.map +0 -1
- package/dist/sdk/mod.js +0 -27
- package/dist/sdk/mod.js.map +0 -1
- package/dist/sdk/protocol.d.ts.map +0 -1
- package/dist/sdk/protocol.js +0 -133
- package/dist/sdk/protocol.js.map +0 -1
- package/dist/sdk/runtime.d.ts +0 -36
- package/dist/sdk/runtime.d.ts.map +0 -1
- package/dist/sdk/runtime.js +0 -27
- package/dist/sdk/runtime.js.map +0 -1
- package/dist/sdk/s2s.d.ts +0 -74
- package/dist/sdk/s2s.d.ts.map +0 -1
- package/dist/sdk/s2s.js +0 -218
- package/dist/sdk/s2s.js.map +0 -1
- package/dist/sdk/server.d.ts.map +0 -1
- package/dist/sdk/server.js +0 -144
- package/dist/sdk/server.js.map +0 -1
- package/dist/sdk/session.d.ts.map +0 -1
- package/dist/sdk/session.js +0 -303
- package/dist/sdk/session.js.map +0 -1
- package/dist/sdk/system_prompt.d.ts +0 -6
- package/dist/sdk/system_prompt.d.ts.map +0 -1
- package/dist/sdk/system_prompt.js +0 -35
- package/dist/sdk/system_prompt.js.map +0 -1
- package/dist/sdk/tsconfig.tsbuildinfo +0 -1
- package/dist/sdk/types.d.ts.map +0 -1
- package/dist/sdk/types.js +0 -96
- package/dist/sdk/types.js.map +0 -1
- package/dist/sdk/vector.d.ts.map +0 -1
- package/dist/sdk/vector.js +0 -63
- package/dist/sdk/vector.js.map +0 -1
- package/dist/sdk/winterc_server.d.ts +0 -56
- package/dist/sdk/winterc_server.d.ts.map +0 -1
- package/dist/sdk/winterc_server.js +0 -77
- package/dist/sdk/winterc_server.js.map +0 -1
- package/dist/sdk/worker_entry.d.ts.map +0 -1
- package/dist/sdk/worker_entry.js +0 -68
- package/dist/sdk/worker_entry.js.map +0 -1
- package/dist/sdk/worker_shim.d.ts +0 -19
- package/dist/sdk/worker_shim.d.ts.map +0 -1
- package/dist/sdk/worker_shim.js +0 -141
- package/dist/sdk/worker_shim.js.map +0 -1
- package/dist/sdk/ws_handler.d.ts.map +0 -1
- package/dist/sdk/ws_handler.js +0 -158
- package/dist/sdk/ws_handler.js.map +0 -1
- package/dist/ui/_cn.d.ts +0 -5
- package/dist/ui/_cn.d.ts.map +0 -1
- package/dist/ui/_cn.js +0 -22
- package/dist/ui/_cn.js.map +0 -1
- package/dist/ui/_components/app.d.ts +0 -5
- package/dist/ui/_components/app.d.ts.map +0 -1
- package/dist/ui/_components/app.js +0 -12
- package/dist/ui/_components/app.js.map +0 -1
- package/dist/ui/_components/button.d.ts +0 -11
- package/dist/ui/_components/button.d.ts.map +0 -1
- package/dist/ui/_components/button.js +0 -17
- package/dist/ui/_components/button.js.map +0 -1
- package/dist/ui/_components/chat_view.d.ts +0 -5
- package/dist/ui/_components/chat_view.d.ts.map +0 -1
- package/dist/ui/_components/chat_view.js +0 -15
- package/dist/ui/_components/chat_view.js.map +0 -1
- package/dist/ui/_components/controls.d.ts +0 -4
- package/dist/ui/_components/controls.d.ts.map +0 -1
- package/dist/ui/_components/controls.js +0 -10
- package/dist/ui/_components/controls.js.map +0 -1
- package/dist/ui/_components/error_banner.d.ts +0 -8
- package/dist/ui/_components/error_banner.d.ts.map +0 -1
- package/dist/ui/_components/error_banner.js +0 -8
- package/dist/ui/_components/error_banner.js.map +0 -1
- package/dist/ui/_components/message_bubble.d.ts +0 -7
- package/dist/ui/_components/message_bubble.d.ts.map +0 -1
- package/dist/ui/_components/message_bubble.js +0 -11
- package/dist/ui/_components/message_bubble.js.map +0 -1
- package/dist/ui/_components/message_list.d.ts +0 -4
- package/dist/ui/_components/message_list.d.ts.map +0 -1
- package/dist/ui/_components/message_list.js +0 -45
- package/dist/ui/_components/message_list.js.map +0 -1
- package/dist/ui/_components/sidebar_layout.d.ts +0 -20
- package/dist/ui/_components/sidebar_layout.d.ts.map +0 -1
- package/dist/ui/_components/sidebar_layout.js +0 -19
- package/dist/ui/_components/sidebar_layout.js.map +0 -1
- package/dist/ui/_components/start_screen.d.ts +0 -25
- package/dist/ui/_components/start_screen.d.ts.map +0 -1
- package/dist/ui/_components/start_screen.js +0 -28
- package/dist/ui/_components/start_screen.js.map +0 -1
- package/dist/ui/_components/state_indicator.d.ts +0 -8
- package/dist/ui/_components/state_indicator.d.ts.map +0 -1
- package/dist/ui/_components/state_indicator.js +0 -6
- package/dist/ui/_components/state_indicator.js.map +0 -1
- package/dist/ui/_components/thinking_indicator.d.ts +0 -5
- package/dist/ui/_components/thinking_indicator.d.ts.map +0 -1
- package/dist/ui/_components/thinking_indicator.js +0 -10
- package/dist/ui/_components/thinking_indicator.js.map +0 -1
- package/dist/ui/_components/tool_call_block.d.ts +0 -7
- package/dist/ui/_components/tool_call_block.d.ts.map +0 -1
- package/dist/ui/_components/tool_call_block.js +0 -46
- package/dist/ui/_components/tool_call_block.js.map +0 -1
- package/dist/ui/_components/tool_icons.d.ts +0 -18
- package/dist/ui/_components/tool_icons.d.ts.map +0 -1
- package/dist/ui/_components/tool_icons.js +0 -26
- package/dist/ui/_components/tool_icons.js.map +0 -1
- package/dist/ui/_components/transcript.d.ts +0 -7
- package/dist/ui/_components/transcript.d.ts.map +0 -1
- package/dist/ui/_components/transcript.js +0 -9
- package/dist/ui/_components/transcript.js.map +0 -1
- package/dist/ui/_dom_shim.d.ts +0 -7
- package/dist/ui/_dom_shim.d.ts.map +0 -1
- package/dist/ui/_dom_shim.js +0 -21
- package/dist/ui/_dom_shim.js.map +0 -1
- package/dist/ui/_hooks.d.ts +0 -21
- package/dist/ui/_hooks.d.ts.map +0 -1
- package/dist/ui/_hooks.js +0 -35
- package/dist/ui/_hooks.js.map +0 -1
- package/dist/ui/_jsdom_setup.d.ts +0 -1
- package/dist/ui/_jsdom_setup.d.ts.map +0 -1
- package/dist/ui/_jsdom_setup.js +0 -6
- package/dist/ui/_jsdom_setup.js.map +0 -1
- package/dist/ui/_render_check.d.ts +0 -10
- package/dist/ui/_render_check.d.ts.map +0 -1
- package/dist/ui/_render_check.js +0 -72
- package/dist/ui/_render_check.js.map +0 -1
- package/dist/ui/_test_utils.js +0 -272
- package/dist/ui/_test_utils.js.map +0 -1
- package/dist/ui/audio.d.ts +0 -46
- package/dist/ui/audio.d.ts.map +0 -1
- package/dist/ui/audio.js +0 -130
- package/dist/ui/audio.js.map +0 -1
- package/dist/ui/components.d.ts +0 -14
- package/dist/ui/components.d.ts.map +0 -1
- package/dist/ui/components.js +0 -15
- package/dist/ui/components.js.map +0 -1
- package/dist/ui/components_mod.d.ts +0 -34
- package/dist/ui/components_mod.d.ts.map +0 -1
- package/dist/ui/components_mod.js +0 -32
- package/dist/ui/components_mod.js.map +0 -1
- package/dist/ui/mod.d.ts +0 -23
- package/dist/ui/mod.d.ts.map +0 -1
- package/dist/ui/mod.js +0 -22
- package/dist/ui/mod.js.map +0 -1
- package/dist/ui/mount.d.ts +0 -44
- package/dist/ui/mount.d.ts.map +0 -1
- package/dist/ui/mount.js +0 -61
- package/dist/ui/mount.js.map +0 -1
- package/dist/ui/mount_context.d.ts +0 -22
- package/dist/ui/mount_context.d.ts.map +0 -1
- package/dist/ui/mount_context.js +0 -10
- package/dist/ui/mount_context.js.map +0 -1
- package/dist/ui/session.d.ts +0 -96
- package/dist/ui/session.d.ts.map +0 -1
- package/dist/ui/session.js +0 -379
- package/dist/ui/session.js.map +0 -1
- package/dist/ui/session_mod.d.ts +0 -19
- package/dist/ui/session_mod.d.ts.map +0 -1
- package/dist/ui/session_mod.js +0 -18
- package/dist/ui/session_mod.js.map +0 -1
- package/dist/ui/signals.d.ts +0 -80
- package/dist/ui/signals.d.ts.map +0 -1
- package/dist/ui/signals.js +0 -137
- package/dist/ui/signals.js.map +0 -1
- package/dist/ui/tsconfig.tsbuildinfo +0 -1
- package/dist/ui/types.d.ts +0 -36
- package/dist/ui/types.d.ts.map +0 -1
- package/dist/ui/types.js +0 -4
- package/dist/ui/types.js.map +0 -1
- package/dist/ui/worklets/capture-processor.d.ts +0 -3
- package/dist/ui/worklets/capture-processor.d.ts.map +0 -1
- package/dist/ui/worklets/capture-processor.js +0 -61
- package/dist/ui/worklets/capture-processor.js.map +0 -1
- package/dist/ui/worklets/playback-processor.d.ts +0 -3
- package/dist/ui/worklets/playback-processor.d.ts.map +0 -1
- package/dist/ui/worklets/playback-processor.js +0 -109
- package/dist/ui/worklets/playback-processor.js.map +0 -1
- package/templates/.env +0 -1
- package/templates/_shared/.env.example +0 -5
- package/templates/_shared/CLAUDE.md +0 -1073
- package/templates/_shared/biome.json +0 -32
- package/templates/_shared/global.d.ts +0 -1
- package/templates/_shared/index.html +0 -16
- package/templates/_shared/package.json +0 -22
- package/templates/_shared/tsconfig.json +0 -16
- package/templates/code-interpreter/agent.ts +0 -27
- package/templates/code-interpreter/client.tsx +0 -3
- package/templates/dispatch-center/agent.ts +0 -1223
- package/templates/dispatch-center/client.tsx +0 -505
- package/templates/embedded-assets/agent.ts +0 -48
- package/templates/embedded-assets/client.tsx +0 -3
- package/templates/embedded-assets/knowledge.json +0 -20
- package/templates/health-assistant/agent.ts +0 -160
- package/templates/health-assistant/client.tsx +0 -3
- package/templates/infocom-adventure/agent.ts +0 -164
- package/templates/infocom-adventure/client.tsx +0 -300
- package/templates/math-buddy/agent.ts +0 -21
- package/templates/math-buddy/client.tsx +0 -3
- package/templates/memory-agent/agent.ts +0 -20
- package/templates/memory-agent/client.tsx +0 -3
- package/templates/night-owl/agent.ts +0 -98
- package/templates/night-owl/client.tsx +0 -12
- package/templates/personal-finance/agent.ts +0 -26
- package/templates/personal-finance/client.tsx +0 -3
- package/templates/pizza-ordering/agent.ts +0 -214
- package/templates/pizza-ordering/client.tsx +0 -264
- package/templates/simple/agent.ts +0 -6
- package/templates/simple/client.tsx +0 -3
- package/templates/smart-research/agent.ts +0 -164
- package/templates/smart-research/client.tsx +0 -3
- package/templates/solo-rpg/agent.ts +0 -1240
- package/templates/solo-rpg/client.tsx +0 -698
- package/templates/support/README.md +0 -62
- package/templates/support/agent.ts +0 -19
- package/templates/support/client.tsx +0 -3
- package/templates/travel-concierge/agent.ts +0 -29
- package/templates/travel-concierge/client.tsx +0 -3
- package/templates/tsconfig.json +0 -1
- package/templates/web-researcher/agent.ts +0 -17
- package/templates/web-researcher/client.tsx +0 -3
- package/ui/styles.css +0 -74
package/dist/ui/_hooks.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_hooks.d.ts","sourceRoot":"","sources":["../../ui/_hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIxC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAahE"}
|
package/dist/ui/_hooks.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
// Copyright 2025 the AAI authors. MIT license.
|
|
2
|
-
import { useSignalEffect } from "@preact/signals";
|
|
3
|
-
import { useRef } from "preact/hooks";
|
|
4
|
-
import { useSession } from "./signals.js";
|
|
5
|
-
/**
|
|
6
|
-
* Auto-scroll a container to the bottom when messages, tool calls,
|
|
7
|
-
* or utterances change. Returns a ref to attach to a sentinel `<div>`
|
|
8
|
-
* at the bottom of the scrollable area.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```tsx
|
|
12
|
-
* function MyChat() {
|
|
13
|
-
* const bottomRef = useAutoScroll();
|
|
14
|
-
* return (
|
|
15
|
-
* <div class="overflow-y-auto">
|
|
16
|
-
* {messages.map((m, i) => <p key={i}>{m.text}</p>)}
|
|
17
|
-
* <div ref={bottomRef} />
|
|
18
|
-
* </div>
|
|
19
|
-
* );
|
|
20
|
-
* }
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export function useAutoScroll() {
|
|
24
|
-
const { session } = useSession();
|
|
25
|
-
const ref = useRef(null);
|
|
26
|
-
useSignalEffect(() => {
|
|
27
|
-
session.messages.value;
|
|
28
|
-
session.toolCalls.value;
|
|
29
|
-
session.userUtterance.value;
|
|
30
|
-
session.agentUtterance.value;
|
|
31
|
-
ref.current?.scrollIntoView({ behavior: "smooth" });
|
|
32
|
-
});
|
|
33
|
-
return ref;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=_hooks.js.map
|
package/dist/ui/_hooks.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_hooks.js","sourceRoot":"","sources":["../../ui/_hooks.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAEhD,eAAe,CAAC,GAAG,EAAE;QACnB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;QACxB,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5B,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC;QAC7B,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=_jsdom_setup.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_jsdom_setup.d.ts","sourceRoot":"","sources":["../../ui/_jsdom_setup.ts"],"names":[],"mappings":""}
|
package/dist/ui/_jsdom_setup.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_jsdom_setup.js","sourceRoot":"","sources":["../../ui/_jsdom_setup.ts"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;IACnF,OAAO,CAAC,SAAS,CAAC,cAAc,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Smoke-test a client.tsx by loading it via Vite SSR in a DOM-shimmed
|
|
3
|
-
* environment. The module's top-level `mount()` call executes as a side
|
|
4
|
-
* effect; if it throws, the client code has a render-time bug.
|
|
5
|
-
*
|
|
6
|
-
* Imports linkedom dynamically so this module can be loaded even when
|
|
7
|
-
* linkedom is not installed (the caller catches and skips).
|
|
8
|
-
*/
|
|
9
|
-
export declare function renderCheck(clientEntry: string, cwd: string): Promise<void>;
|
|
10
|
-
//# sourceMappingURL=_render_check.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_render_check.d.ts","sourceRoot":"","sources":["../../ui/_render_check.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkEjF"}
|
package/dist/ui/_render_check.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
// Copyright 2025 the AAI authors. MIT license.
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import preact from "@preact/preset-vite";
|
|
4
|
-
import { createServer as createViteServer } from "vite";
|
|
5
|
-
/**
|
|
6
|
-
* Smoke-test a client.tsx by loading it via Vite SSR in a DOM-shimmed
|
|
7
|
-
* environment. The module's top-level `mount()` call executes as a side
|
|
8
|
-
* effect; if it throws, the client code has a render-time bug.
|
|
9
|
-
*
|
|
10
|
-
* Imports linkedom dynamically so this module can be loaded even when
|
|
11
|
-
* linkedom is not installed (the caller catches and skips).
|
|
12
|
-
*/
|
|
13
|
-
export async function renderCheck(clientEntry, cwd) {
|
|
14
|
-
// Dynamic imports so esbuild doesn't bundle linkedom into the CLI dist.
|
|
15
|
-
const { DOMParser, installDomShim } = await import("./_dom_shim.js");
|
|
16
|
-
const { installMockWebSocket } = await import("../sdk/_mock_ws.js");
|
|
17
|
-
installDomShim();
|
|
18
|
-
const g = globalThis;
|
|
19
|
-
const doc = new DOMParser().parseFromString('<!DOCTYPE html><html><head></head><body><main id="app"></main></body></html>', "text/html");
|
|
20
|
-
const prevDoc = g.document;
|
|
21
|
-
const prevLocation = g.location;
|
|
22
|
-
g.document = doc;
|
|
23
|
-
g.location = { origin: "http://localhost:3000", pathname: "/", href: "http://localhost:3000/" };
|
|
24
|
-
// Build resolve.alias from package.json exports so templates can
|
|
25
|
-
// self-reference `@pkg/name/ui` and resolve to local .ts source.
|
|
26
|
-
// Vite's SSR loader doesn't support self-referencing exports (vitejs#9731),
|
|
27
|
-
// so resolve.alias is the standard workaround for monorepo-style setups.
|
|
28
|
-
const pkgRoot = path.resolve(import.meta.dirname ?? __dirname, "..");
|
|
29
|
-
const fs = await import("node:fs/promises");
|
|
30
|
-
const pkg = JSON.parse(await fs.readFile(path.join(pkgRoot, "package.json"), "utf-8"));
|
|
31
|
-
const alias = [];
|
|
32
|
-
for (const [key, val] of Object.entries(pkg.exports ?? {})) {
|
|
33
|
-
const source = typeof val === "object" && val !== null && "source" in val ? val.source : null;
|
|
34
|
-
if (typeof source === "string") {
|
|
35
|
-
alias.push({
|
|
36
|
-
find: `${pkg.name}${key.slice(1)}`,
|
|
37
|
-
replacement: path.resolve(pkgRoot, source),
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// Sort longest-first so `@pkg/name/ui` matches before `@pkg/name`.
|
|
42
|
-
alias.sort((a, b) => b.find.length - a.find.length);
|
|
43
|
-
const cssNoop = {
|
|
44
|
-
name: "ssr-css-noop",
|
|
45
|
-
enforce: "pre",
|
|
46
|
-
resolveId: (id) => (id.endsWith(".css") ? "\0css-noop" : undefined),
|
|
47
|
-
load: (id) => (id === "\0css-noop" ? "" : undefined),
|
|
48
|
-
};
|
|
49
|
-
const mock = installMockWebSocket();
|
|
50
|
-
const vite = await createViteServer({
|
|
51
|
-
root: cwd,
|
|
52
|
-
logLevel: "silent",
|
|
53
|
-
plugins: [preact(), cssNoop],
|
|
54
|
-
resolve: { alias, dedupe: ["preact", "@preact/signals"] },
|
|
55
|
-
ssr: { noExternal: [pkg.name] },
|
|
56
|
-
server: { middlewareMode: true },
|
|
57
|
-
});
|
|
58
|
-
try {
|
|
59
|
-
await vite.ssrLoadModule(clientEntry);
|
|
60
|
-
const app = doc.querySelector("#app");
|
|
61
|
-
if (!app?.innerHTML) {
|
|
62
|
-
throw new Error("client.tsx render check failed: #app is empty after mount()");
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
finally {
|
|
66
|
-
await vite.close();
|
|
67
|
-
mock.restore();
|
|
68
|
-
g.document = prevDoc;
|
|
69
|
-
g.location = prevLocation;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=_render_check.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_render_check.js","sourceRoot":"","sources":["../../ui/_render_check.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/_test_utils.js
DELETED
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
// Copyright 2025 the AAI authors. MIT license.
|
|
2
|
-
import { signal } from "@preact/signals";
|
|
3
|
-
import { render } from "preact";
|
|
4
|
-
import { vi } from "vitest";
|
|
5
|
-
import { DOMParser, installDomShim } from "./_dom_shim.js";
|
|
6
|
-
import { createVoiceSession } from "./session.js";
|
|
7
|
-
import { createSessionControls } from "./signals.js";
|
|
8
|
-
export { installMockWebSocket, MockWebSocket } from "../sdk/_mock_ws.js";
|
|
9
|
-
import { installMockWebSocket } from "../sdk/_mock_ws.js";
|
|
10
|
-
export function delay(ms) {
|
|
11
|
-
return new Promise((r) => setTimeout(r, ms));
|
|
12
|
-
}
|
|
13
|
-
const HTML = `<!DOCTYPE html><html><head></head><body><div id="app"></div></body></html>`;
|
|
14
|
-
const g = globalThis;
|
|
15
|
-
export function setupDOM() {
|
|
16
|
-
installDomShim();
|
|
17
|
-
const doc = new DOMParser().parseFromString(HTML, "text/html");
|
|
18
|
-
g.document = doc;
|
|
19
|
-
return doc;
|
|
20
|
-
}
|
|
21
|
-
export function getContainer() {
|
|
22
|
-
return globalThis.document.querySelector("#app");
|
|
23
|
-
}
|
|
24
|
-
// Ensure document exists at import time for modules that need DOM globals.
|
|
25
|
-
setupDOM();
|
|
26
|
-
export function flush() {
|
|
27
|
-
return new Promise((r) => queueMicrotask(r));
|
|
28
|
-
}
|
|
29
|
-
export function installMockLocation(origin = "http://localhost:3000") {
|
|
30
|
-
const had = "location" in globalThis;
|
|
31
|
-
if (!had)
|
|
32
|
-
g.location = { origin };
|
|
33
|
-
return {
|
|
34
|
-
restore() {
|
|
35
|
-
if (!had)
|
|
36
|
-
delete g.location;
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
export class MockMediaStreamTrack {
|
|
41
|
-
stopped = false;
|
|
42
|
-
stop() {
|
|
43
|
-
this.stopped = true;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
export class MockMediaStream {
|
|
47
|
-
#tracks = [new MockMediaStreamTrack()];
|
|
48
|
-
getTracks() {
|
|
49
|
-
return this.#tracks;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
export class MockMessagePort {
|
|
53
|
-
onmessage = null;
|
|
54
|
-
posted = [];
|
|
55
|
-
postMessage(data, _transfer) {
|
|
56
|
-
this.posted.push(data);
|
|
57
|
-
}
|
|
58
|
-
simulateMessage(data) {
|
|
59
|
-
this.onmessage?.(new MessageEvent("message", { data }));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
export class MockAudioWorkletNode {
|
|
63
|
-
port = new MockMessagePort();
|
|
64
|
-
connected = [];
|
|
65
|
-
name;
|
|
66
|
-
options;
|
|
67
|
-
constructor(_ctx, name, options) {
|
|
68
|
-
this.name = name;
|
|
69
|
-
this.options = options;
|
|
70
|
-
}
|
|
71
|
-
connect(dest) {
|
|
72
|
-
this.connected.push(dest);
|
|
73
|
-
}
|
|
74
|
-
disconnect() { }
|
|
75
|
-
}
|
|
76
|
-
export class MockAudioNode {
|
|
77
|
-
connected = [];
|
|
78
|
-
connect(dest) {
|
|
79
|
-
this.connected.push(dest);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
export class MockGainNode extends MockAudioNode {
|
|
83
|
-
gain = {
|
|
84
|
-
value: 1,
|
|
85
|
-
setTargetAtTime(value, _startTime, _tc) {
|
|
86
|
-
this.value = value;
|
|
87
|
-
},
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
export class MockAudioContext {
|
|
91
|
-
sampleRate;
|
|
92
|
-
state = "running";
|
|
93
|
-
currentTime = 0;
|
|
94
|
-
destination = new MockAudioNode();
|
|
95
|
-
audioWorklet = {
|
|
96
|
-
modules: [],
|
|
97
|
-
addModule(url) {
|
|
98
|
-
this.modules.push(url);
|
|
99
|
-
return Promise.resolve();
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
closed = false;
|
|
103
|
-
constructor(opts) {
|
|
104
|
-
this.sampleRate = opts?.sampleRate ?? 44100;
|
|
105
|
-
}
|
|
106
|
-
resume() {
|
|
107
|
-
return Promise.resolve();
|
|
108
|
-
}
|
|
109
|
-
createMediaStreamSource(_stream) {
|
|
110
|
-
return new MockAudioNode();
|
|
111
|
-
}
|
|
112
|
-
createGain() {
|
|
113
|
-
return new MockGainNode();
|
|
114
|
-
}
|
|
115
|
-
close() {
|
|
116
|
-
this.closed = true;
|
|
117
|
-
this.state = "closed";
|
|
118
|
-
return Promise.resolve();
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Install Web Audio API mocks on globalThis and run `fn`.
|
|
123
|
-
* All mocks are restored after `fn` completes.
|
|
124
|
-
*/
|
|
125
|
-
export function withAudioMocks(fn) {
|
|
126
|
-
return async () => {
|
|
127
|
-
const origAudioContext = globalThis.AudioContext;
|
|
128
|
-
const origAudioWorkletNode = globalThis.AudioWorkletNode;
|
|
129
|
-
const nav = g.navigator;
|
|
130
|
-
const origGetUserMedia = nav?.mediaDevices?.getUserMedia;
|
|
131
|
-
let _lastContext;
|
|
132
|
-
const _workletNodes = [];
|
|
133
|
-
g.AudioContext = class extends MockAudioContext {
|
|
134
|
-
constructor(opts) {
|
|
135
|
-
super(opts);
|
|
136
|
-
_lastContext = this;
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
g.AudioWorkletNode = class extends MockAudioWorkletNode {
|
|
140
|
-
constructor(ctx, name, options) {
|
|
141
|
-
super(ctx, name, options);
|
|
142
|
-
_workletNodes.push(this);
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
if (!nav.mediaDevices)
|
|
146
|
-
nav.mediaDevices = {};
|
|
147
|
-
nav.mediaDevices.getUserMedia = () => Promise.resolve(new MockMediaStream());
|
|
148
|
-
try {
|
|
149
|
-
await fn({
|
|
150
|
-
lastContext: () => _lastContext,
|
|
151
|
-
workletNodes: () => _workletNodes,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
finally {
|
|
155
|
-
globalThis.AudioContext = origAudioContext;
|
|
156
|
-
globalThis.AudioWorkletNode = origAudioWorkletNode;
|
|
157
|
-
if (origGetUserMedia) {
|
|
158
|
-
nav.mediaDevices.getUserMedia = origGetUserMedia;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
export function findWorkletNode(nodes, name) {
|
|
164
|
-
const node = nodes.find((n) => n.name === name);
|
|
165
|
-
if (!node)
|
|
166
|
-
throw new Error(`No worklet node named "${name}"`);
|
|
167
|
-
return node;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Set up a DOM + FakeTime environment, run `fn`, then clean up.
|
|
171
|
-
* Used by component tests that need a container and timer control.
|
|
172
|
-
*/
|
|
173
|
-
export function withDOM(fn) {
|
|
174
|
-
return async () => {
|
|
175
|
-
vi.useFakeTimers();
|
|
176
|
-
setupDOM();
|
|
177
|
-
const container = getContainer();
|
|
178
|
-
try {
|
|
179
|
-
await fn(container);
|
|
180
|
-
}
|
|
181
|
-
finally {
|
|
182
|
-
render(null, container);
|
|
183
|
-
await vi.advanceTimersByTimeAsync(100);
|
|
184
|
-
vi.useRealTimers();
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Set up DOM + mock WebSocket, run `fn`, then clean up.
|
|
190
|
-
* Used by mount tests.
|
|
191
|
-
*/
|
|
192
|
-
export function withMountEnv(fn) {
|
|
193
|
-
return async () => {
|
|
194
|
-
setupDOM();
|
|
195
|
-
const mock = installMockWebSocket();
|
|
196
|
-
try {
|
|
197
|
-
await fn(mock);
|
|
198
|
-
}
|
|
199
|
-
finally {
|
|
200
|
-
const app = globalThis.document.querySelector("#app");
|
|
201
|
-
if (app)
|
|
202
|
-
render(null, app);
|
|
203
|
-
await delay(0);
|
|
204
|
-
mock.restore();
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Set up mock WebSocket + location + session + signals, run `fn`, clean up.
|
|
210
|
-
* Used by signals tests.
|
|
211
|
-
*/
|
|
212
|
-
export function withSignalsEnv(fn) {
|
|
213
|
-
return async () => {
|
|
214
|
-
const mock = installMockWebSocket();
|
|
215
|
-
const loc = installMockLocation();
|
|
216
|
-
const session = createVoiceSession({
|
|
217
|
-
platformUrl: "http://localhost:3000",
|
|
218
|
-
});
|
|
219
|
-
const signals = createSessionControls(session);
|
|
220
|
-
try {
|
|
221
|
-
await fn({
|
|
222
|
-
mock,
|
|
223
|
-
session,
|
|
224
|
-
signals,
|
|
225
|
-
async connect() {
|
|
226
|
-
session.connect();
|
|
227
|
-
await flush();
|
|
228
|
-
},
|
|
229
|
-
send(msg) {
|
|
230
|
-
mock.lastWs.simulateMessage(JSON.stringify(msg));
|
|
231
|
-
},
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
finally {
|
|
235
|
-
mock.restore();
|
|
236
|
-
loc.restore();
|
|
237
|
-
}
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
export function createMockSignals(overrides) {
|
|
241
|
-
const mockSession = {
|
|
242
|
-
state: signal(overrides?.state ?? "disconnected"),
|
|
243
|
-
messages: signal(overrides?.messages ?? []),
|
|
244
|
-
toolCalls: signal([]),
|
|
245
|
-
userUtterance: signal(overrides?.userUtterance ?? null),
|
|
246
|
-
error: signal(overrides?.error ?? null),
|
|
247
|
-
disconnected: signal(null),
|
|
248
|
-
connect() { },
|
|
249
|
-
cancel() { },
|
|
250
|
-
resetState() { },
|
|
251
|
-
reset() { },
|
|
252
|
-
disconnect() { },
|
|
253
|
-
[Symbol.dispose]() { },
|
|
254
|
-
};
|
|
255
|
-
const signals = {
|
|
256
|
-
session: mockSession,
|
|
257
|
-
started: signal(overrides?.started ?? false),
|
|
258
|
-
running: signal(overrides?.running ?? true),
|
|
259
|
-
dispose() { },
|
|
260
|
-
[Symbol.dispose]() { },
|
|
261
|
-
start() {
|
|
262
|
-
signals.started.value = true;
|
|
263
|
-
signals.running.value = true;
|
|
264
|
-
},
|
|
265
|
-
toggle() {
|
|
266
|
-
signals.running.value = !signals.running.value;
|
|
267
|
-
},
|
|
268
|
-
reset() { },
|
|
269
|
-
};
|
|
270
|
-
return signals;
|
|
271
|
-
}
|
|
272
|
-
//# sourceMappingURL=_test_utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_test_utils.js","sourceRoot":"","sources":["../../ui/_test_utils.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/audio.d.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/** Configuration for creating a {@linkcode VoiceIO} instance. */
|
|
2
|
-
export type VoiceIOOptions = {
|
|
3
|
-
/** Sample rate in Hz expected by the STT engine (e.g. 16000). */
|
|
4
|
-
sttSampleRate: number;
|
|
5
|
-
/** Sample rate in Hz used by the TTS engine (e.g. 22050). */
|
|
6
|
-
ttsSampleRate: number;
|
|
7
|
-
/** Source URL or data URI for the capture AudioWorklet processor. */
|
|
8
|
-
captureWorkletSrc: string;
|
|
9
|
-
/** Source URL or data URI for the playback AudioWorklet processor. */
|
|
10
|
-
playbackWorkletSrc: string;
|
|
11
|
-
/** Callback invoked with buffered PCM16 microphone data to send to the server. */
|
|
12
|
-
onMicData: (pcm16: ArrayBuffer) => void;
|
|
13
|
-
/** Callback invoked with the current playback position in samples. */
|
|
14
|
-
onPlaybackProgress?: (samplesPlayed: number) => void;
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Audio I/O interface for voice capture and playback.
|
|
18
|
-
*
|
|
19
|
-
* Manages microphone capture via an AudioWorklet, resampling to the STT
|
|
20
|
-
* sample rate, and TTS audio playback through a second AudioWorklet. Implements
|
|
21
|
-
* {@linkcode AsyncDisposable} for resource cleanup.
|
|
22
|
-
*/
|
|
23
|
-
export type VoiceIO = AsyncDisposable & {
|
|
24
|
-
/** Enqueue a PCM16 audio buffer for playback through the TTS pipeline. */
|
|
25
|
-
enqueue(pcm16Buffer: ArrayBuffer): void;
|
|
26
|
-
/** Signal that all TTS audio for the current turn has been enqueued.
|
|
27
|
-
* Resolves when the worklet has finished playing all buffered audio. */
|
|
28
|
-
done(): Promise<void>;
|
|
29
|
-
/** Immediately stop playback and discard any buffered TTS audio. */
|
|
30
|
-
flush(): void;
|
|
31
|
-
/** Release all audio resources (microphone, AudioContext, worklets). */
|
|
32
|
-
close(): Promise<void>;
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Create a {@linkcode VoiceIO} instance that captures microphone audio and
|
|
36
|
-
* plays back TTS audio using the Web Audio API.
|
|
37
|
-
*
|
|
38
|
-
* The AudioContext runs at the TTS sample rate for playback fidelity.
|
|
39
|
-
* Captured audio is resampled to the STT rate when the rates differ.
|
|
40
|
-
*
|
|
41
|
-
* @param opts - Voice I/O configuration options.
|
|
42
|
-
* @returns A promise that resolves to a {@linkcode VoiceIO} handle.
|
|
43
|
-
* @throws If microphone access is denied or AudioWorklet registration fails.
|
|
44
|
-
*/
|
|
45
|
-
export declare function createVoiceIO(opts: VoiceIOOptions): Promise<VoiceIO>;
|
|
46
|
-
//# sourceMappingURL=audio.d.ts.map
|
package/dist/ui/audio.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../ui/audio.ts"],"names":[],"mappings":"AAGA,iEAAiE;AACjE,MAAM,MAAM,cAAc,GAAG;IAC3B,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG;IACtC,0EAA0E;IAC1E,OAAO,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IACxC;6EACyE;IACzE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,oEAAoE;IACpE,KAAK,IAAI,IAAI,CAAC;IACd,wEAAwE;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAuH1E"}
|
package/dist/ui/audio.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
// Copyright 2025 the AAI authors. MIT license.
|
|
2
|
-
import { MIC_BUFFER_SECONDS } from "./types.js";
|
|
3
|
-
/**
|
|
4
|
-
* Create a {@linkcode VoiceIO} instance that captures microphone audio and
|
|
5
|
-
* plays back TTS audio using the Web Audio API.
|
|
6
|
-
*
|
|
7
|
-
* The AudioContext runs at the TTS sample rate for playback fidelity.
|
|
8
|
-
* Captured audio is resampled to the STT rate when the rates differ.
|
|
9
|
-
*
|
|
10
|
-
* @param opts - Voice I/O configuration options.
|
|
11
|
-
* @returns A promise that resolves to a {@linkcode VoiceIO} handle.
|
|
12
|
-
* @throws If microphone access is denied or AudioWorklet registration fails.
|
|
13
|
-
*/
|
|
14
|
-
export async function createVoiceIO(opts) {
|
|
15
|
-
const { sttSampleRate, ttsSampleRate, captureWorkletSrc, playbackWorkletSrc, onMicData } = opts;
|
|
16
|
-
// Use TTS rate for the context — playback fidelity is more perceptible.
|
|
17
|
-
// Capture path resamples to STT rate if they differ.
|
|
18
|
-
const contextRate = ttsSampleRate;
|
|
19
|
-
const ctx = new AudioContext({
|
|
20
|
-
sampleRate: contextRate,
|
|
21
|
-
latencyHint: "playback",
|
|
22
|
-
});
|
|
23
|
-
await ctx.resume();
|
|
24
|
-
// Single AudioContext owns both capture and playback — required for AEC.
|
|
25
|
-
const stream = await navigator.mediaDevices.getUserMedia({
|
|
26
|
-
audio: {
|
|
27
|
-
sampleRate: contextRate,
|
|
28
|
-
echoCancellation: true,
|
|
29
|
-
noiseSuppression: true,
|
|
30
|
-
autoGainControl: true,
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
try {
|
|
34
|
-
await Promise.all([
|
|
35
|
-
ctx.audioWorklet.addModule(captureWorkletSrc),
|
|
36
|
-
ctx.audioWorklet.addModule(playbackWorkletSrc),
|
|
37
|
-
]);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
for (const t of stream.getTracks())
|
|
41
|
-
t.stop();
|
|
42
|
-
await ctx.close().catch(() => { });
|
|
43
|
-
throw err;
|
|
44
|
-
}
|
|
45
|
-
const mic = ctx.createMediaStreamSource(stream);
|
|
46
|
-
const capNode = new AudioWorkletNode(ctx, "capture-processor", {
|
|
47
|
-
channelCount: 1,
|
|
48
|
-
channelCountMode: "explicit",
|
|
49
|
-
processorOptions: { contextRate, sttSampleRate },
|
|
50
|
-
});
|
|
51
|
-
mic.connect(capNode);
|
|
52
|
-
// Worklet outputs PCM16 at the STT rate — just batch and send.
|
|
53
|
-
const chunkSizeBytes = Math.floor(sttSampleRate * MIC_BUFFER_SECONDS) * 2;
|
|
54
|
-
const capBuf = new Uint8Array(chunkSizeBytes * 2);
|
|
55
|
-
let capOffset = 0;
|
|
56
|
-
capNode.port.postMessage({ event: "start" });
|
|
57
|
-
capNode.port.onmessage = (e) => {
|
|
58
|
-
if (e.data.event !== "chunk")
|
|
59
|
-
return;
|
|
60
|
-
const chunk = new Uint8Array(e.data.buffer);
|
|
61
|
-
capBuf.set(chunk, capOffset);
|
|
62
|
-
capOffset += chunk.byteLength;
|
|
63
|
-
if (capOffset >= chunkSizeBytes) {
|
|
64
|
-
onMicData(capBuf.slice(0, capOffset).buffer);
|
|
65
|
-
capOffset = 0;
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
let playNode = null;
|
|
69
|
-
let onPlaybackStop = null;
|
|
70
|
-
const lifecycle = new AbortController();
|
|
71
|
-
const { onPlaybackProgress } = opts;
|
|
72
|
-
function ensurePlayNode() {
|
|
73
|
-
if (playNode)
|
|
74
|
-
return playNode;
|
|
75
|
-
const node = new AudioWorkletNode(ctx, "playback-processor", {
|
|
76
|
-
processorOptions: { sampleRate: contextRate },
|
|
77
|
-
});
|
|
78
|
-
node.connect(ctx.destination);
|
|
79
|
-
node.port.onmessage = (e) => {
|
|
80
|
-
if (e.data.event === "stop") {
|
|
81
|
-
node.disconnect();
|
|
82
|
-
if (playNode === node)
|
|
83
|
-
playNode = null;
|
|
84
|
-
onPlaybackStop?.();
|
|
85
|
-
onPlaybackStop = null;
|
|
86
|
-
}
|
|
87
|
-
else if (e.data.event === "progress") {
|
|
88
|
-
onPlaybackProgress?.(e.data.readPos);
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
playNode = node;
|
|
92
|
-
return node;
|
|
93
|
-
}
|
|
94
|
-
const io = {
|
|
95
|
-
enqueue(pcm16Buffer) {
|
|
96
|
-
if (lifecycle.signal.aborted)
|
|
97
|
-
return;
|
|
98
|
-
if (pcm16Buffer.byteLength === 0)
|
|
99
|
-
return;
|
|
100
|
-
const node = ensurePlayNode();
|
|
101
|
-
node.port.postMessage({ event: "write", buffer: new Uint8Array(pcm16Buffer) }, [pcm16Buffer]);
|
|
102
|
-
},
|
|
103
|
-
done() {
|
|
104
|
-
if (!playNode)
|
|
105
|
-
return Promise.resolve();
|
|
106
|
-
return new Promise((resolve) => {
|
|
107
|
-
onPlaybackStop = resolve;
|
|
108
|
-
playNode?.port.postMessage({ event: "done" });
|
|
109
|
-
});
|
|
110
|
-
},
|
|
111
|
-
flush() {
|
|
112
|
-
if (playNode)
|
|
113
|
-
playNode.port.postMessage({ event: "interrupt" });
|
|
114
|
-
},
|
|
115
|
-
async close() {
|
|
116
|
-
if (lifecycle.signal.aborted)
|
|
117
|
-
return;
|
|
118
|
-
lifecycle.abort();
|
|
119
|
-
capNode.port.postMessage({ event: "stop" });
|
|
120
|
-
for (const t of stream.getTracks())
|
|
121
|
-
t.stop();
|
|
122
|
-
await ctx.close().catch(() => { });
|
|
123
|
-
},
|
|
124
|
-
async [Symbol.asyncDispose]() {
|
|
125
|
-
await io.close();
|
|
126
|
-
},
|
|
127
|
-
};
|
|
128
|
-
return io;
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=audio.js.map
|
package/dist/ui/audio.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../../ui/audio.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/components.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export { App } from "./_components/app.tsx";
|
|
2
|
-
export { Button } from "./_components/button.tsx";
|
|
3
|
-
export { ChatView } from "./_components/chat_view.tsx";
|
|
4
|
-
export { Controls } from "./_components/controls.tsx";
|
|
5
|
-
export { ErrorBanner } from "./_components/error_banner.tsx";
|
|
6
|
-
export { MessageBubble } from "./_components/message_bubble.tsx";
|
|
7
|
-
export { MessageList } from "./_components/message_list.tsx";
|
|
8
|
-
export { SidebarLayout } from "./_components/sidebar_layout.tsx";
|
|
9
|
-
export { StartScreen } from "./_components/start_screen.tsx";
|
|
10
|
-
export { StateIndicator } from "./_components/state_indicator.tsx";
|
|
11
|
-
export { ThinkingIndicator } from "./_components/thinking_indicator.tsx";
|
|
12
|
-
export { ToolCallBlock } from "./_components/tool_call_block.tsx";
|
|
13
|
-
export { Transcript } from "./_components/transcript.tsx";
|
|
14
|
-
//# sourceMappingURL=components.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../ui/components.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC"}
|