@alexkroman1/aai 0.8.8 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/session.js
DELETED
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
// Copyright 2025 the AAI authors. MIT license.
|
|
2
|
-
import { batch, signal } from "@preact/signals";
|
|
3
|
-
import { errorMessage } from "../sdk/_utils.js";
|
|
4
|
-
/**
|
|
5
|
-
* Handles server→client messages and updates reactive Preact signals
|
|
6
|
-
* accordingly (state transitions, transcripts, messages, audio playback).
|
|
7
|
-
*/
|
|
8
|
-
/** @internal Exported for testing only. */
|
|
9
|
-
export class ClientHandler {
|
|
10
|
-
#state;
|
|
11
|
-
#messages;
|
|
12
|
-
#toolCalls;
|
|
13
|
-
#userUtterance;
|
|
14
|
-
#agentUtterance;
|
|
15
|
-
#error;
|
|
16
|
-
#voiceIO;
|
|
17
|
-
/** Incremented on each turn boundary — stale async callbacks compare against this. */
|
|
18
|
-
#generation = 0;
|
|
19
|
-
constructor(opts) {
|
|
20
|
-
this.#state = opts.state;
|
|
21
|
-
this.#messages = opts.messages;
|
|
22
|
-
this.#toolCalls = opts.toolCalls;
|
|
23
|
-
this.#userUtterance = opts.userUtterance;
|
|
24
|
-
this.#agentUtterance = opts.agentUtterance;
|
|
25
|
-
this.#error = opts.error;
|
|
26
|
-
this.#voiceIO = opts.voiceIO;
|
|
27
|
-
}
|
|
28
|
-
/** Single entry point for all server→client session events. */
|
|
29
|
-
event(e) {
|
|
30
|
-
switch (e.type) {
|
|
31
|
-
case "speech_started":
|
|
32
|
-
this.#userUtterance.value = "";
|
|
33
|
-
break;
|
|
34
|
-
case "speech_stopped":
|
|
35
|
-
// VAD detected end of speech — processing will follow.
|
|
36
|
-
break;
|
|
37
|
-
case "transcript":
|
|
38
|
-
this.#userUtterance.value = e.text;
|
|
39
|
-
break;
|
|
40
|
-
case "turn":
|
|
41
|
-
this.#generation++;
|
|
42
|
-
batch(() => {
|
|
43
|
-
this.#userUtterance.value = null;
|
|
44
|
-
this.#messages.value = [...this.#messages.value, { role: "user", text: e.text }];
|
|
45
|
-
this.#state.value = "thinking";
|
|
46
|
-
});
|
|
47
|
-
break;
|
|
48
|
-
case "chat_delta":
|
|
49
|
-
this.#agentUtterance.value = this.#agentUtterance.value
|
|
50
|
-
? `${this.#agentUtterance.value} ${e.text}`
|
|
51
|
-
: e.text;
|
|
52
|
-
break;
|
|
53
|
-
case "chat":
|
|
54
|
-
batch(() => {
|
|
55
|
-
this.#agentUtterance.value = null;
|
|
56
|
-
this.#messages.value = [...this.#messages.value, { role: "assistant", text: e.text }];
|
|
57
|
-
});
|
|
58
|
-
break;
|
|
59
|
-
case "tool_call_start":
|
|
60
|
-
this.#toolCalls.value = [
|
|
61
|
-
...this.#toolCalls.value,
|
|
62
|
-
{
|
|
63
|
-
toolCallId: e.toolCallId,
|
|
64
|
-
toolName: e.toolName,
|
|
65
|
-
args: e.args,
|
|
66
|
-
status: "pending",
|
|
67
|
-
afterMessageIndex: this.#messages.value.length - 1,
|
|
68
|
-
},
|
|
69
|
-
];
|
|
70
|
-
break;
|
|
71
|
-
case "tool_call_done": {
|
|
72
|
-
const tcs = this.#toolCalls.value;
|
|
73
|
-
const idx = tcs.findIndex((tc) => tc.toolCallId === e.toolCallId);
|
|
74
|
-
if (idx !== -1) {
|
|
75
|
-
const updated = [...tcs];
|
|
76
|
-
const existing = updated[idx];
|
|
77
|
-
if (existing)
|
|
78
|
-
updated[idx] = { ...existing, status: "done", result: e.result };
|
|
79
|
-
this.#toolCalls.value = updated;
|
|
80
|
-
}
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
case "tts_done":
|
|
84
|
-
// No-audio turns (empty LLM result) still use this event
|
|
85
|
-
// to transition back to listening. Audio turns signal via stream end.
|
|
86
|
-
this.#state.value = "listening";
|
|
87
|
-
break;
|
|
88
|
-
case "cancelled":
|
|
89
|
-
this.#generation++;
|
|
90
|
-
this.#voiceIO()?.flush();
|
|
91
|
-
batch(() => {
|
|
92
|
-
this.#userUtterance.value = null;
|
|
93
|
-
this.#agentUtterance.value = null;
|
|
94
|
-
this.#state.value = "listening";
|
|
95
|
-
});
|
|
96
|
-
break;
|
|
97
|
-
case "reset": {
|
|
98
|
-
this.#generation++;
|
|
99
|
-
this.#voiceIO()?.flush();
|
|
100
|
-
batch(() => {
|
|
101
|
-
this.#messages.value = [];
|
|
102
|
-
this.#toolCalls.value = [];
|
|
103
|
-
this.#userUtterance.value = null;
|
|
104
|
-
this.#agentUtterance.value = null;
|
|
105
|
-
this.#error.value = null;
|
|
106
|
-
this.#state.value = "listening";
|
|
107
|
-
});
|
|
108
|
-
break;
|
|
109
|
-
}
|
|
110
|
-
case "error":
|
|
111
|
-
console.error("Agent error:", e.message);
|
|
112
|
-
batch(() => {
|
|
113
|
-
this.#error.value = {
|
|
114
|
-
code: e.code,
|
|
115
|
-
message: e.message,
|
|
116
|
-
};
|
|
117
|
-
this.#state.value = "error";
|
|
118
|
-
});
|
|
119
|
-
break;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
playAudioChunk(chunk) {
|
|
123
|
-
if (this.#state.value === "error")
|
|
124
|
-
return;
|
|
125
|
-
if (this.#state.value !== "speaking") {
|
|
126
|
-
this.#state.value = "speaking";
|
|
127
|
-
}
|
|
128
|
-
this.#voiceIO()?.enqueue(chunk.buffer);
|
|
129
|
-
}
|
|
130
|
-
playAudioDone() {
|
|
131
|
-
const gen = this.#generation;
|
|
132
|
-
const io = this.#voiceIO();
|
|
133
|
-
if (io) {
|
|
134
|
-
void io
|
|
135
|
-
.done()
|
|
136
|
-
.then(() => {
|
|
137
|
-
if (this.#generation !== gen)
|
|
138
|
-
return;
|
|
139
|
-
this.#state.value = "listening";
|
|
140
|
-
})
|
|
141
|
-
.catch(() => { });
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
this.#state.value = "listening";
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Dispatch an incoming WebSocket message (text or binary).
|
|
149
|
-
*
|
|
150
|
-
* Returns the parsed config if the message is a `config` message,
|
|
151
|
-
* otherwise `null`.
|
|
152
|
-
*/
|
|
153
|
-
handleMessage(data) {
|
|
154
|
-
// Binary frame → raw PCM16 TTS audio
|
|
155
|
-
if (data instanceof ArrayBuffer) {
|
|
156
|
-
this.playAudioChunk(new Uint8Array(data));
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
// Text frame → JSON message
|
|
160
|
-
let msg;
|
|
161
|
-
try {
|
|
162
|
-
msg = JSON.parse(data);
|
|
163
|
-
}
|
|
164
|
-
catch {
|
|
165
|
-
return null;
|
|
166
|
-
}
|
|
167
|
-
if (msg.type === "config") {
|
|
168
|
-
const { type: _, ...config } = msg;
|
|
169
|
-
return config;
|
|
170
|
-
}
|
|
171
|
-
if (msg.type === "audio_done") {
|
|
172
|
-
this.playAudioDone();
|
|
173
|
-
return null;
|
|
174
|
-
}
|
|
175
|
-
// All other messages are ClientEvent
|
|
176
|
-
this.event(msg);
|
|
177
|
-
return null;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Create a voice session that connects to an AAI server via WebSocket.
|
|
182
|
-
*
|
|
183
|
-
* Uses plain JSON text frames and binary audio frames for communication.
|
|
184
|
-
*
|
|
185
|
-
* @param options - Session configuration including the platform server URL.
|
|
186
|
-
* @returns A {@linkcode VoiceSession} handle for controlling the session.
|
|
187
|
-
*/
|
|
188
|
-
export function createVoiceSession(options) {
|
|
189
|
-
const state = signal("disconnected");
|
|
190
|
-
const messages = signal([]);
|
|
191
|
-
const toolCalls = signal([]);
|
|
192
|
-
const userUtterance = signal(null);
|
|
193
|
-
const agentUtterance = signal(null);
|
|
194
|
-
const error = signal(null);
|
|
195
|
-
const disconnected = signal(null);
|
|
196
|
-
let ws = null;
|
|
197
|
-
let voiceIO = null;
|
|
198
|
-
let connectionController = null;
|
|
199
|
-
let hasConnected = false;
|
|
200
|
-
let audioSetupInFlight = false;
|
|
201
|
-
function cleanupAudio() {
|
|
202
|
-
audioSetupInFlight = false;
|
|
203
|
-
void voiceIO?.close();
|
|
204
|
-
voiceIO = null;
|
|
205
|
-
}
|
|
206
|
-
function resetState() {
|
|
207
|
-
batch(() => {
|
|
208
|
-
messages.value = [];
|
|
209
|
-
toolCalls.value = [];
|
|
210
|
-
userUtterance.value = null;
|
|
211
|
-
agentUtterance.value = null;
|
|
212
|
-
error.value = null;
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
function send(msg) {
|
|
216
|
-
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
217
|
-
ws.send(JSON.stringify(msg));
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
function sendBinary(data) {
|
|
221
|
-
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
222
|
-
ws.send(data);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
async function handleReady(msg) {
|
|
226
|
-
if (audioSetupInFlight)
|
|
227
|
-
return;
|
|
228
|
-
audioSetupInFlight = true;
|
|
229
|
-
try {
|
|
230
|
-
const [{ createVoiceIO }, captureWorklet, playbackWorklet] = await Promise.all([
|
|
231
|
-
import("./audio.js"),
|
|
232
|
-
import("./worklets/capture-processor.js").then((m) => m.default),
|
|
233
|
-
import("./worklets/playback-processor.js").then((m) => m.default),
|
|
234
|
-
]);
|
|
235
|
-
const io = await createVoiceIO({
|
|
236
|
-
sttSampleRate: msg.sampleRate,
|
|
237
|
-
ttsSampleRate: msg.ttsSampleRate,
|
|
238
|
-
captureWorkletSrc: captureWorklet,
|
|
239
|
-
playbackWorkletSrc: playbackWorklet,
|
|
240
|
-
onMicData: (pcm16) => {
|
|
241
|
-
// Always stream audio — S2S handles VAD natively.
|
|
242
|
-
try {
|
|
243
|
-
sendBinary(pcm16);
|
|
244
|
-
}
|
|
245
|
-
catch {
|
|
246
|
-
/* connection may be closed */
|
|
247
|
-
}
|
|
248
|
-
},
|
|
249
|
-
});
|
|
250
|
-
if (!ws || ws.readyState !== WebSocket.OPEN) {
|
|
251
|
-
io.close();
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
voiceIO = io;
|
|
255
|
-
send({ type: "audio_ready" });
|
|
256
|
-
state.value = "listening";
|
|
257
|
-
}
|
|
258
|
-
catch (err) {
|
|
259
|
-
if (!ws || ws.readyState !== WebSocket.OPEN)
|
|
260
|
-
return;
|
|
261
|
-
batch(() => {
|
|
262
|
-
error.value = {
|
|
263
|
-
code: "audio",
|
|
264
|
-
message: `Microphone access failed: ${errorMessage(err)}`,
|
|
265
|
-
};
|
|
266
|
-
state.value = "error";
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
finally {
|
|
270
|
-
audioSetupInFlight = false;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
function connect(opts) {
|
|
274
|
-
disconnected.value = null;
|
|
275
|
-
state.value = "connecting";
|
|
276
|
-
connectionController?.abort();
|
|
277
|
-
cleanupAudio();
|
|
278
|
-
ws?.close();
|
|
279
|
-
ws = null;
|
|
280
|
-
const controller = new AbortController();
|
|
281
|
-
connectionController = controller;
|
|
282
|
-
const { signal: sig } = controller;
|
|
283
|
-
if (opts?.signal) {
|
|
284
|
-
opts.signal.addEventListener("abort", () => disconnect(), {
|
|
285
|
-
signal: sig,
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
const base = options.platformUrl;
|
|
289
|
-
const wsUrl = new URL("websocket", base.endsWith("/") ? base : `${base}/`);
|
|
290
|
-
wsUrl.protocol = wsUrl.protocol === "https:" ? "wss:" : "ws:";
|
|
291
|
-
if (hasConnected)
|
|
292
|
-
wsUrl.searchParams.set("resume", "1");
|
|
293
|
-
const socket = new WebSocket(wsUrl.toString());
|
|
294
|
-
socket.binaryType = "arraybuffer";
|
|
295
|
-
ws = socket;
|
|
296
|
-
const handler = new ClientHandler({
|
|
297
|
-
state,
|
|
298
|
-
messages,
|
|
299
|
-
toolCalls,
|
|
300
|
-
userUtterance,
|
|
301
|
-
agentUtterance,
|
|
302
|
-
error,
|
|
303
|
-
voiceIO: () => voiceIO,
|
|
304
|
-
});
|
|
305
|
-
socket.addEventListener("open", () => {
|
|
306
|
-
state.value = "ready";
|
|
307
|
-
}, { signal: sig });
|
|
308
|
-
socket.addEventListener("message", (event) => {
|
|
309
|
-
const msgEvent = event;
|
|
310
|
-
const config = handler.handleMessage(msgEvent.data);
|
|
311
|
-
if (config) {
|
|
312
|
-
const isReconnect = hasConnected;
|
|
313
|
-
hasConnected = true;
|
|
314
|
-
void handleReady(config);
|
|
315
|
-
// Send history if reconnecting
|
|
316
|
-
if (isReconnect && messages.value.length > 0) {
|
|
317
|
-
send({
|
|
318
|
-
type: "history",
|
|
319
|
-
messages: messages.value.map((m) => ({
|
|
320
|
-
role: m.role,
|
|
321
|
-
text: m.text,
|
|
322
|
-
})),
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}, { signal: sig });
|
|
327
|
-
socket.addEventListener("close", () => {
|
|
328
|
-
if (sig.aborted) {
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
controller.abort();
|
|
332
|
-
disconnected.value = { intentional: false };
|
|
333
|
-
cleanupAudio();
|
|
334
|
-
state.value = "disconnected";
|
|
335
|
-
}, { signal: sig });
|
|
336
|
-
}
|
|
337
|
-
function cancel() {
|
|
338
|
-
voiceIO?.flush();
|
|
339
|
-
state.value = "listening";
|
|
340
|
-
send({ type: "cancel" });
|
|
341
|
-
}
|
|
342
|
-
function reset() {
|
|
343
|
-
voiceIO?.flush();
|
|
344
|
-
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
345
|
-
send({ type: "reset" });
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
resetState();
|
|
349
|
-
disconnect();
|
|
350
|
-
connect();
|
|
351
|
-
}
|
|
352
|
-
function disconnect() {
|
|
353
|
-
connectionController?.abort();
|
|
354
|
-
connectionController = null;
|
|
355
|
-
cleanupAudio();
|
|
356
|
-
ws?.close();
|
|
357
|
-
ws = null;
|
|
358
|
-
state.value = "disconnected";
|
|
359
|
-
disconnected.value = { intentional: true };
|
|
360
|
-
}
|
|
361
|
-
return {
|
|
362
|
-
state,
|
|
363
|
-
messages,
|
|
364
|
-
toolCalls,
|
|
365
|
-
userUtterance,
|
|
366
|
-
agentUtterance,
|
|
367
|
-
error,
|
|
368
|
-
disconnected,
|
|
369
|
-
connect,
|
|
370
|
-
cancel,
|
|
371
|
-
resetState,
|
|
372
|
-
reset,
|
|
373
|
-
disconnect,
|
|
374
|
-
[Symbol.dispose]() {
|
|
375
|
-
disconnect();
|
|
376
|
-
},
|
|
377
|
-
};
|
|
378
|
-
}
|
|
379
|
-
//# sourceMappingURL=session.js.map
|
package/dist/ui/session.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../ui/session.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/session_mod.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebSocket session management for AAI voice agents.
|
|
3
|
-
*
|
|
4
|
-
* Provides the low-level voice session without any Preact/UI dependencies.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```ts
|
|
8
|
-
* import { createVoiceSession } from "@aai/ui/session";
|
|
9
|
-
*
|
|
10
|
-
* const session = createVoiceSession({ platformUrl: "https://example.com" });
|
|
11
|
-
* session.connect();
|
|
12
|
-
* ```
|
|
13
|
-
*
|
|
14
|
-
* @module
|
|
15
|
-
*/
|
|
16
|
-
export type { VoiceSession } from "./session.ts";
|
|
17
|
-
export { createVoiceSession } from "./session.ts";
|
|
18
|
-
export type { AgentState, Message, SessionError, SessionErrorCode, SessionOptions, ToolCallInfo, } from "./types.ts";
|
|
19
|
-
//# sourceMappingURL=session_mod.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session_mod.d.ts","sourceRoot":"","sources":["../../ui/session_mod.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;GAcG;AAEH,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EACV,UAAU,EACV,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/dist/ui/session_mod.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// Copyright 2025 the AAI authors. MIT license.
|
|
2
|
-
/**
|
|
3
|
-
* WebSocket session management for AAI voice agents.
|
|
4
|
-
*
|
|
5
|
-
* Provides the low-level voice session without any Preact/UI dependencies.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```ts
|
|
9
|
-
* import { createVoiceSession } from "@aai/ui/session";
|
|
10
|
-
*
|
|
11
|
-
* const session = createVoiceSession({ platformUrl: "https://example.com" });
|
|
12
|
-
* session.connect();
|
|
13
|
-
* ```
|
|
14
|
-
*
|
|
15
|
-
* @module
|
|
16
|
-
*/
|
|
17
|
-
export { createVoiceSession } from "./session.js";
|
|
18
|
-
//# sourceMappingURL=session_mod.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session_mod.js","sourceRoot":"","sources":["../../ui/session_mod.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/ui/signals.d.ts
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { type Signal } from "@preact/signals";
|
|
2
|
-
import type { ComponentChildren, JSX, RefObject } from "preact";
|
|
3
|
-
import type { VoiceSession } from "./session.ts";
|
|
4
|
-
import type { ToolCallInfo } from "./types.ts";
|
|
5
|
-
/**
|
|
6
|
-
* Reactive session controls wrapping a {@linkcode VoiceSession} with Preact signals.
|
|
7
|
-
*
|
|
8
|
-
* Components access reactive data via `session` (e.g. `session.state`,
|
|
9
|
-
* `session.messages`). UI-only state (`started`, `running`) and actions
|
|
10
|
-
* (`start`, `toggle`, `reset`) live directly on this object.
|
|
11
|
-
*/
|
|
12
|
-
export type SessionSignals = {
|
|
13
|
-
/** The underlying voice session — all reactive data lives here. */
|
|
14
|
-
session: VoiceSession;
|
|
15
|
-
/** Whether the session has been started by the user. */
|
|
16
|
-
started: Signal<boolean>;
|
|
17
|
-
/** Whether the session is currently running (connected or connecting). */
|
|
18
|
-
running: Signal<boolean>;
|
|
19
|
-
/** Dispose the reactive effect that tracks error state. */
|
|
20
|
-
dispose(): void;
|
|
21
|
-
/** Start the session for the first time (sets `started` and `running`). */
|
|
22
|
-
start(): void;
|
|
23
|
-
/** Toggle between connected and disconnected states. */
|
|
24
|
-
toggle(): void;
|
|
25
|
-
/** Reset the session: clear state and reconnect. */
|
|
26
|
-
reset(): void;
|
|
27
|
-
/** Alias for {@linkcode dispose} for use with `using`. */
|
|
28
|
-
[Symbol.dispose](): void;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Wrap a {@linkcode VoiceSession} in Preact signals for reactive UI binding.
|
|
32
|
-
*
|
|
33
|
-
* Creates higher-level controls (start, toggle, reset) on top of the raw
|
|
34
|
-
* session, and automatically sets `running` to `false` when the session
|
|
35
|
-
* enters an error state.
|
|
36
|
-
*
|
|
37
|
-
* @param session - The voice session to wrap.
|
|
38
|
-
* @returns A {@linkcode SessionSignals} object for use in Preact components.
|
|
39
|
-
*/
|
|
40
|
-
export declare function createSessionControls(session: VoiceSession): SessionSignals;
|
|
41
|
-
/**
|
|
42
|
-
* Preact context provider that makes session signals available to descendant
|
|
43
|
-
* components via {@linkcode useSession}.
|
|
44
|
-
*
|
|
45
|
-
* @param props - Provider props.
|
|
46
|
-
* @param props.value - The session signals to provide.
|
|
47
|
-
* @param props.children - Child components that may consume the context.
|
|
48
|
-
* @returns A Preact VNode wrapping children in the session context.
|
|
49
|
-
*/
|
|
50
|
-
export declare function SessionProvider({ value, children, }: {
|
|
51
|
-
value: SessionSignals;
|
|
52
|
-
children?: ComponentChildren;
|
|
53
|
-
}): JSX.Element;
|
|
54
|
-
/**
|
|
55
|
-
* Hook to access session signals from within a {@linkcode SessionProvider}.
|
|
56
|
-
*
|
|
57
|
-
* @returns The {@linkcode SessionSignals} from the nearest provider.
|
|
58
|
-
* @throws {Error} If called outside of a `SessionProvider`.
|
|
59
|
-
*/
|
|
60
|
-
export declare function useSession(): SessionSignals;
|
|
61
|
-
/**
|
|
62
|
-
* Hook that fires a callback exactly once for each newly completed tool call.
|
|
63
|
-
*
|
|
64
|
-
* Handles deduplication internally — safe to use with `useState` setters
|
|
65
|
-
* without worrying about duplicates. The `result` argument is the parsed
|
|
66
|
-
* JSON result from the tool (or the raw string if parsing fails).
|
|
67
|
-
*
|
|
68
|
-
* Automatically resets tracking when the session is reset (toolCalls cleared).
|
|
69
|
-
*
|
|
70
|
-
* @param callback - Called once per completed tool call with the tool name,
|
|
71
|
-
* parsed result, and full {@linkcode ToolCallInfo}.
|
|
72
|
-
*/
|
|
73
|
-
export declare function useToolResult(callback: (toolName: string, result: unknown, toolCall: ToolCallInfo) => void): void;
|
|
74
|
-
/**
|
|
75
|
-
* Auto-scroll a container to the bottom when messages, tool calls,
|
|
76
|
-
* or utterances change. Returns a ref to attach to a sentinel `<div>`
|
|
77
|
-
* at the bottom of the scrollable area.
|
|
78
|
-
*/
|
|
79
|
-
export declare function useAutoScroll(): RefObject<HTMLDivElement>;
|
|
80
|
-
//# sourceMappingURL=signals.d.ts.map
|
package/dist/ui/signals.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../ui/signals.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,MAAM,EAA2B,MAAM,iBAAiB,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,mEAAmE;IACnE,OAAO,EAAE,YAAY,CAAC;IACtB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,2DAA2D;IAC3D,OAAO,IAAI,IAAI,CAAC;IAChB,2EAA2E;IAC3E,KAAK,IAAI,IAAI,CAAC;IACd,wDAAwD;IACxD,MAAM,IAAI,IAAI,CAAC;IACf,oDAAoD;IACpD,KAAK,IAAI,IAAI,CAAC;IACd,0DAA0D;IAC1D,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,cAAc,CAoC3E;AAID;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B,GAAG,GAAG,CAAC,OAAO,CAEd;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,cAAc,CAI3C;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,KAAK,IAAI,GAC5E,IAAI,CAqBN;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,cAAc,CAAC,CAazD"}
|
package/dist/ui/signals.js
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
// Copyright 2025 the AAI authors. MIT license.
|
|
2
|
-
import { batch, effect, signal, useSignalEffect } from "@preact/signals";
|
|
3
|
-
import { createContext, h } from "preact";
|
|
4
|
-
import { useContext, useEffect, useRef } from "preact/hooks";
|
|
5
|
-
/**
|
|
6
|
-
* Wrap a {@linkcode VoiceSession} in Preact signals for reactive UI binding.
|
|
7
|
-
*
|
|
8
|
-
* Creates higher-level controls (start, toggle, reset) on top of the raw
|
|
9
|
-
* session, and automatically sets `running` to `false` when the session
|
|
10
|
-
* enters an error state.
|
|
11
|
-
*
|
|
12
|
-
* @param session - The voice session to wrap.
|
|
13
|
-
* @returns A {@linkcode SessionSignals} object for use in Preact components.
|
|
14
|
-
*/
|
|
15
|
-
export function createSessionControls(session) {
|
|
16
|
-
const started = signal(false);
|
|
17
|
-
const running = signal(true);
|
|
18
|
-
const dispose = effect(() => {
|
|
19
|
-
if (session.state.value === "error")
|
|
20
|
-
running.value = false;
|
|
21
|
-
});
|
|
22
|
-
return {
|
|
23
|
-
session,
|
|
24
|
-
started,
|
|
25
|
-
running,
|
|
26
|
-
dispose,
|
|
27
|
-
start() {
|
|
28
|
-
batch(() => {
|
|
29
|
-
started.value = true;
|
|
30
|
-
running.value = true;
|
|
31
|
-
});
|
|
32
|
-
session.connect();
|
|
33
|
-
},
|
|
34
|
-
toggle() {
|
|
35
|
-
if (running.value) {
|
|
36
|
-
session.cancel();
|
|
37
|
-
session.disconnect();
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
session.connect();
|
|
41
|
-
}
|
|
42
|
-
running.value = !running.value;
|
|
43
|
-
},
|
|
44
|
-
reset() {
|
|
45
|
-
session.reset();
|
|
46
|
-
},
|
|
47
|
-
[Symbol.dispose]() {
|
|
48
|
-
dispose();
|
|
49
|
-
},
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
const Ctx = createContext(null);
|
|
53
|
-
/**
|
|
54
|
-
* Preact context provider that makes session signals available to descendant
|
|
55
|
-
* components via {@linkcode useSession}.
|
|
56
|
-
*
|
|
57
|
-
* @param props - Provider props.
|
|
58
|
-
* @param props.value - The session signals to provide.
|
|
59
|
-
* @param props.children - Child components that may consume the context.
|
|
60
|
-
* @returns A Preact VNode wrapping children in the session context.
|
|
61
|
-
*/
|
|
62
|
-
export function SessionProvider({ value, children, }) {
|
|
63
|
-
return h(Ctx.Provider, { value }, children);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Hook to access session signals from within a {@linkcode SessionProvider}.
|
|
67
|
-
*
|
|
68
|
-
* @returns The {@linkcode SessionSignals} from the nearest provider.
|
|
69
|
-
* @throws {Error} If called outside of a `SessionProvider`.
|
|
70
|
-
*/
|
|
71
|
-
export function useSession() {
|
|
72
|
-
const ctx = useContext(Ctx);
|
|
73
|
-
if (!ctx)
|
|
74
|
-
throw new Error("Hook useSession() requires a SessionProvider");
|
|
75
|
-
return ctx;
|
|
76
|
-
}
|
|
77
|
-
function tryParseJSON(str) {
|
|
78
|
-
try {
|
|
79
|
-
return JSON.parse(str);
|
|
80
|
-
}
|
|
81
|
-
catch {
|
|
82
|
-
return str;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Hook that fires a callback exactly once for each newly completed tool call.
|
|
87
|
-
*
|
|
88
|
-
* Handles deduplication internally — safe to use with `useState` setters
|
|
89
|
-
* without worrying about duplicates. The `result` argument is the parsed
|
|
90
|
-
* JSON result from the tool (or the raw string if parsing fails).
|
|
91
|
-
*
|
|
92
|
-
* Automatically resets tracking when the session is reset (toolCalls cleared).
|
|
93
|
-
*
|
|
94
|
-
* @param callback - Called once per completed tool call with the tool name,
|
|
95
|
-
* parsed result, and full {@linkcode ToolCallInfo}.
|
|
96
|
-
*/
|
|
97
|
-
export function useToolResult(callback) {
|
|
98
|
-
const { session } = useSession();
|
|
99
|
-
const seenRef = useRef(new Set());
|
|
100
|
-
const cbRef = useRef(callback);
|
|
101
|
-
cbRef.current = callback;
|
|
102
|
-
useEffect(() => {
|
|
103
|
-
return effect(() => {
|
|
104
|
-
const toolCalls = session.toolCalls.value;
|
|
105
|
-
if (toolCalls.length === 0) {
|
|
106
|
-
seenRef.current.clear();
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
for (const tc of toolCalls) {
|
|
110
|
-
if (tc.status !== "done" || !tc.result)
|
|
111
|
-
continue;
|
|
112
|
-
if (seenRef.current.has(tc.toolCallId))
|
|
113
|
-
continue;
|
|
114
|
-
seenRef.current.add(tc.toolCallId);
|
|
115
|
-
cbRef.current(tc.toolName, tryParseJSON(tc.result), tc);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
}, [session]);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Auto-scroll a container to the bottom when messages, tool calls,
|
|
122
|
-
* or utterances change. Returns a ref to attach to a sentinel `<div>`
|
|
123
|
-
* at the bottom of the scrollable area.
|
|
124
|
-
*/
|
|
125
|
-
export function useAutoScroll() {
|
|
126
|
-
const { session } = useSession();
|
|
127
|
-
const ref = useRef(null);
|
|
128
|
-
useSignalEffect(() => {
|
|
129
|
-
session.messages.value;
|
|
130
|
-
session.toolCalls.value;
|
|
131
|
-
session.userUtterance.value;
|
|
132
|
-
session.agentUtterance.value;
|
|
133
|
-
ref.current?.scrollIntoView({ behavior: "smooth" });
|
|
134
|
-
});
|
|
135
|
-
return ref;
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=signals.js.map
|
package/dist/ui/signals.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../ui/signals.ts"],"names":[],"mappings":"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"}
|