@kuralle-syrinx/browser-client 4.4.0 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/agent-state.d.ts +35 -0
  2. package/dist/agent-state.d.ts.map +1 -0
  3. package/dist/agent-state.js +76 -0
  4. package/dist/agent-state.js.map +1 -0
  5. package/dist/audio.d.ts +61 -0
  6. package/dist/audio.d.ts.map +1 -0
  7. package/dist/audio.js +276 -0
  8. package/dist/audio.js.map +1 -0
  9. package/dist/browser-opus.d.ts +41 -0
  10. package/dist/browser-opus.d.ts.map +1 -0
  11. package/dist/browser-opus.js +81 -0
  12. package/dist/browser-opus.js.map +1 -0
  13. package/dist/index.d.ts +270 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +744 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/session-metrics.d.ts +28 -0
  18. package/dist/session-metrics.d.ts.map +1 -0
  19. package/dist/session-metrics.js +60 -0
  20. package/dist/session-metrics.js.map +1 -0
  21. package/dist/session-record.d.ts +112 -0
  22. package/dist/session-record.d.ts.map +1 -0
  23. package/dist/session-record.js +181 -0
  24. package/dist/session-record.js.map +1 -0
  25. package/dist/transport.d.ts +16 -0
  26. package/dist/transport.d.ts.map +1 -0
  27. package/dist/transport.js +3 -0
  28. package/dist/transport.js.map +1 -0
  29. package/dist/turn-recorder.d.ts +56 -0
  30. package/dist/turn-recorder.d.ts.map +1 -0
  31. package/dist/turn-recorder.js +168 -0
  32. package/dist/turn-recorder.js.map +1 -0
  33. package/dist/turn-timeline.d.ts +51 -0
  34. package/dist/turn-timeline.d.ts.map +1 -0
  35. package/dist/turn-timeline.js +92 -0
  36. package/dist/turn-timeline.js.map +1 -0
  37. package/dist/websocket-transport.d.ts +20 -0
  38. package/dist/websocket-transport.d.ts.map +1 -0
  39. package/dist/websocket-transport.js +92 -0
  40. package/dist/websocket-transport.js.map +1 -0
  41. package/package.json +35 -11
  42. package/src/agent-state.test.ts +143 -0
  43. package/src/audio.test.ts +130 -0
  44. package/src/index.test.ts +842 -0
  45. package/src/jitter-buffer.test.ts +275 -0
  46. package/src/session-metrics.test.ts +102 -0
  47. package/src/session-record.test.ts +219 -0
  48. package/src/studio-page.test.ts +69 -0
  49. package/src/transport.test.ts +233 -0
  50. package/src/turn-recorder.test.ts +138 -0
  51. package/src/turn-timeline.test.ts +151 -0
  52. package/index.html +0 -1073
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { TurnRecord } from "./session-record.js";
2
+ export interface StageStats {
3
+ readonly stage: string;
4
+ readonly label: string;
5
+ readonly count: number;
6
+ readonly medianMs: number;
7
+ readonly p95Ms: number;
8
+ readonly maxMs: number;
9
+ }
10
+ export interface SessionMetrics {
11
+ readonly turnCount: number;
12
+ /** Turns that carried timings. The Workers path sends none, so this can be 0. */
13
+ readonly measuredTurnCount: number;
14
+ readonly stages: readonly StageStats[];
15
+ /** Turns whose end-to-end fell below the floor — probable premature endpointing. */
16
+ readonly suspiciouslyFastTurnIds: readonly string[];
17
+ readonly floorMs: number;
18
+ /** True when nothing could be measured, so the UI says why instead of showing zeroes. */
19
+ readonly unavailable: boolean;
20
+ }
21
+ /**
22
+ * Nearest-rank percentile. Chosen over interpolation deliberately: every value
23
+ * reported is a real measurement that occurred, so a p95 can be traced back to
24
+ * an actual turn rather than being a number no turn ever had.
25
+ */
26
+ export declare function percentile(sortedAsc: readonly number[], p: number): number;
27
+ export declare function buildSessionMetrics(turns: readonly TurnRecord[], floorMs?: number): SessionMetrics;
28
+ //# sourceMappingURL=session-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-metrics.d.ts","sourceRoot":"","sources":["../src/session-metrics.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAGnE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,oFAAoF;IACpF,QAAQ,CAAC,uBAAuB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yFAAyF;IACzF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AASD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,OAAO,GAAE,MAA2B,GACnC,cAAc,CAiChB"}
@@ -0,0 +1,60 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // Session-level latency aggregates. A one-off spike and a consistent regression
4
+ // look identical turn by turn; you need the distribution to tell them apart.
5
+ //
6
+ // Deliberately reports a FLOOR as well as a ceiling. A sub-second reply is the
7
+ // number every voice framework optimises for, and in a turn-taking system it is
8
+ // usually evidence the endpointer fired while the caller was still speaking.
9
+ // Celebrating it is how "fast" agents ship that interrupt people.
10
+ import { FAST_TURN_FLOOR_MS } from "./turn-timeline.js";
11
+ const STAGES = [
12
+ { key: "sttMs", stage: "stt", label: "Hearing you" },
13
+ { key: "llmTTFTMs", stage: "llm", label: "Thinking (to first word)" },
14
+ { key: "ttsTTFBMs", stage: "tts", label: "Voice (to first audio)" },
15
+ { key: "e2eMs", stage: "e2e", label: "End to end" },
16
+ ];
17
+ /**
18
+ * Nearest-rank percentile. Chosen over interpolation deliberately: every value
19
+ * reported is a real measurement that occurred, so a p95 can be traced back to
20
+ * an actual turn rather than being a number no turn ever had.
21
+ */
22
+ export function percentile(sortedAsc, p) {
23
+ if (sortedAsc.length === 0)
24
+ return 0;
25
+ const rank = Math.ceil((p / 100) * sortedAsc.length);
26
+ const idx = Math.min(sortedAsc.length - 1, Math.max(0, rank - 1));
27
+ return sortedAsc[idx] ?? 0;
28
+ }
29
+ export function buildSessionMetrics(turns, floorMs = FAST_TURN_FLOOR_MS) {
30
+ const measured = turns.filter((t) => t.timings !== undefined);
31
+ const stages = STAGES.map(({ key, stage, label }) => {
32
+ const values = measured
33
+ .map((t) => t.timings?.[key])
34
+ .filter((v) => typeof v === "number")
35
+ .sort((a, b) => a - b);
36
+ return {
37
+ stage,
38
+ label,
39
+ count: values.length,
40
+ medianMs: percentile(values, 50),
41
+ p95Ms: percentile(values, 95),
42
+ maxMs: values.length > 0 ? (values[values.length - 1] ?? 0) : 0,
43
+ };
44
+ }).filter((s) => s.count > 0);
45
+ const suspiciouslyFastTurnIds = measured
46
+ .filter((t) => {
47
+ const e2e = t.timings?.e2eMs;
48
+ return typeof e2e === "number" && e2e > 0 && e2e < floorMs;
49
+ })
50
+ .map((t) => t.turnId);
51
+ return {
52
+ turnCount: turns.length,
53
+ measuredTurnCount: measured.length,
54
+ stages,
55
+ suspiciouslyFastTurnIds,
56
+ floorMs,
57
+ unavailable: measured.length === 0,
58
+ };
59
+ }
60
+ //# sourceMappingURL=session-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-metrics.js","sourceRoot":"","sources":["../src/session-metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import type { SyrinxStudioMessage } from "./index.js";
2
+ /** Per-turn latency decomposition, from the `metrics` message. */
3
+ export interface TurnTimings {
4
+ readonly speechEndMs?: number;
5
+ readonly textReadyMs?: number;
6
+ readonly firstAudioByteMs?: number;
7
+ readonly firstAudioPlayedMs?: number;
8
+ readonly lastAudioPlayedMs?: number;
9
+ readonly sttMs?: number;
10
+ readonly llmTTFTMs?: number;
11
+ readonly ttsTTFBMs?: number;
12
+ readonly e2eMs?: number;
13
+ }
14
+ /** Negotiated session parameters. Recorded so a replayed fixture cannot silently mislead. */
15
+ export interface SessionConfig {
16
+ readonly wsUrl?: string;
17
+ readonly sessionId?: string;
18
+ readonly inputSampleRateHz?: number;
19
+ readonly outputSampleRateHz?: number;
20
+ readonly encoding?: "pcm_s16le" | "opus";
21
+ readonly binaryEnvelope?: string;
22
+ readonly rawBinaryInput?: boolean;
23
+ /**
24
+ * Frame duration the host paces to. Node states it; the Workers/DO host does not
25
+ * (measured live, 2026-07-25) — which is exactly the kind of divergence the session
26
+ * info panel exists to make visible, so it is captured rather than dropped.
27
+ */
28
+ readonly targetFrameDurationMs?: number;
29
+ readonly resumeWindowMs?: number;
30
+ /** Only present once the server exposes it; the timeline omits the marker rather than guessing. */
31
+ readonly endpointingOwner?: string;
32
+ }
33
+ export interface ToolCall {
34
+ readonly id?: string;
35
+ readonly name?: string;
36
+ readonly args?: unknown;
37
+ readonly result?: unknown;
38
+ /** `delayed` means it outlived the cue threshold — a slow tool, not a failed one. */
39
+ readonly phase?: "started" | "delayed" | "complete" | "failed";
40
+ readonly afterMs?: number;
41
+ }
42
+ export interface RecordedEvent {
43
+ /** ms since the record started — comparable across turns. */
44
+ readonly atMs: number;
45
+ readonly message: SyrinxStudioMessage | {
46
+ readonly type: string;
47
+ readonly [k: string]: unknown;
48
+ };
49
+ }
50
+ export interface TurnRecord {
51
+ readonly turnId: string;
52
+ readonly startedAtMs: number;
53
+ readonly events: readonly RecordedEvent[];
54
+ /** Absent on runtimes that do not emit `metrics` — the Workers path does not. */
55
+ readonly timings?: TurnTimings;
56
+ readonly userTranscript?: string;
57
+ /** Latest interim, cleared once the final arrives. */
58
+ readonly userInterim?: string;
59
+ readonly userConfidence?: number;
60
+ readonly agentText: string;
61
+ readonly toolCalls: readonly ToolCall[];
62
+ readonly ttsAudioBytes: number;
63
+ readonly interrupted?: {
64
+ readonly atMs: number;
65
+ readonly reason?: string;
66
+ };
67
+ readonly errors: readonly {
68
+ readonly atMs: number;
69
+ readonly component?: string;
70
+ readonly category?: string;
71
+ readonly message: string;
72
+ }[];
73
+ readonly complete: boolean;
74
+ /** Non-zero when this turn's event list hit the cap. Surfaced, never silent. */
75
+ readonly droppedEvents: number;
76
+ /** Which owner decided the turn ended. Omitted when the backend did not say. */
77
+ readonly endpointingOwner?: string;
78
+ /** Why the turn ended. Omitted when the backend did not say. */
79
+ readonly endpointingReason?: string;
80
+ }
81
+ export interface SessionRecord {
82
+ readonly config: SessionConfig;
83
+ readonly turns: readonly TurnRecord[];
84
+ /** Non-zero when oldest turns were evicted. Surfaced, never silent. */
85
+ readonly droppedTurns: number;
86
+ /** Messages that arrived before any turn existed, or with no turnId. */
87
+ readonly sessionEvents: readonly RecordedEvent[];
88
+ }
89
+ export interface SessionRecordLimits {
90
+ readonly maxTurns: number;
91
+ readonly maxEventsPerTurn: number;
92
+ }
93
+ export declare const DEFAULT_LIMITS: SessionRecordLimits;
94
+ export declare function emptySessionRecord(config?: SessionConfig): SessionRecord;
95
+ type AnyMessage = SyrinxStudioMessage | {
96
+ readonly type: string;
97
+ readonly [k: string]: unknown;
98
+ };
99
+ /**
100
+ * Fold one message into the record. Pure: same inputs, same output, no side effects.
101
+ *
102
+ * `atMs` is the caller's clock (ms since the record started) rather than anything
103
+ * read from the message, so the record stays deterministic under test.
104
+ */
105
+ export declare function applyMessage(record: SessionRecord, message: AnyMessage, atMs: number, limits?: SessionRecordLimits): SessionRecord;
106
+ /** Fold a whole message stream. Equivalent to repeated `applyMessage`. */
107
+ export declare function buildSessionRecord(messages: readonly {
108
+ readonly message: AnyMessage;
109
+ readonly atMs: number;
110
+ }[], config?: SessionConfig, limits?: SessionRecordLimits): SessionRecord;
111
+ export {};
112
+ //# sourceMappingURL=session-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-record.d.ts","sourceRoot":"","sources":["../src/session-record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // SessionRecord — a structured, bounded view of what happened in a voice session,
4
+ // assembled from the messages the server already sends. Every debugging surface
5
+ // (turn timeline, event log, metrics, fixture capture) reads this one shape, and a
6
+ // fixture is a SessionRecord trimmed to one turn.
7
+ //
8
+ // Deliberately dependency-free and DOM-free: this module is exported from the
9
+ // `/record` subpath so a Node consumer can import it without pulling AudioContext
10
+ // or the opus codec. Assembly is a pure reduction over messages — no sockets, no
11
+ // timers, no React — which is what makes every consumer testable against recorded
12
+ // fixtures instead of a live provider.
13
+ export const DEFAULT_LIMITS = { maxTurns: 50, maxEventsPerTurn: 500 };
14
+ export function emptySessionRecord(config = {}) {
15
+ return { config, turns: [], droppedTurns: 0, sessionEvents: [] };
16
+ }
17
+ const turnIdOf = (m) => typeof m.turnId === "string" ? m.turnId : undefined;
18
+ function newTurn(turnId, atMs) {
19
+ return {
20
+ turnId,
21
+ startedAtMs: atMs,
22
+ events: [],
23
+ agentText: "",
24
+ toolCalls: [],
25
+ ttsAudioBytes: 0,
26
+ errors: [],
27
+ complete: false,
28
+ droppedEvents: 0,
29
+ };
30
+ }
31
+ function pushEvent(turn, ev, limits) {
32
+ if (turn.events.length < limits.maxEventsPerTurn) {
33
+ return { ...turn, events: [...turn.events, ev] };
34
+ }
35
+ // Drop the oldest, keep the newest, and count what was lost.
36
+ return { ...turn, events: [...turn.events.slice(1), ev], droppedEvents: turn.droppedEvents + 1 };
37
+ }
38
+ function upsertToolCall(calls, key, patch) {
39
+ // A later phase message carries fewer fields than an earlier one — `tool_call_complete`
40
+ // has no `afterMs` and may have no `toolName`. Spreading those as explicit `undefined`
41
+ // would erase what `tool_call_delayed`/`agent_tool_call` already established, so drop
42
+ // undefined keys before merging.
43
+ const defined = Object.fromEntries(Object.entries(patch).filter(([, v]) => v !== undefined));
44
+ const i = key === undefined ? -1 : calls.findIndex((c) => c.id === key);
45
+ if (i === -1)
46
+ return [...calls, { ...defined, id: key }];
47
+ const next = [...calls];
48
+ next[i] = { ...next[i], ...defined };
49
+ return next;
50
+ }
51
+ /**
52
+ * Fold one message into the record. Pure: same inputs, same output, no side effects.
53
+ *
54
+ * `atMs` is the caller's clock (ms since the record started) rather than anything
55
+ * read from the message, so the record stays deterministic under test.
56
+ */
57
+ export function applyMessage(record, message, atMs, limits = DEFAULT_LIMITS) {
58
+ const ev = { atMs, message };
59
+ const type = typeof message?.type === "string" ? message.type : "";
60
+ // `ready` carries the negotiated config and belongs to the session, not a turn.
61
+ if (type === "ready") {
62
+ const m = message;
63
+ return {
64
+ ...record,
65
+ config: {
66
+ ...record.config,
67
+ sessionId: m.sessionId ?? record.config.sessionId,
68
+ resumeWindowMs: m.resumeWindowMs ?? record.config.resumeWindowMs,
69
+ inputSampleRateHz: m.audio?.inputSampleRateHz ?? record.config.inputSampleRateHz,
70
+ outputSampleRateHz: m.audio?.outputSampleRateHz ?? record.config.outputSampleRateHz,
71
+ encoding: m.audio?.encoding ?? record.config.encoding,
72
+ binaryEnvelope: m.audio?.binaryEnvelope ?? record.config.binaryEnvelope,
73
+ rawBinaryInput: m.audio?.rawBinaryInput ?? record.config.rawBinaryInput,
74
+ targetFrameDurationMs: m.audio?.targetFrameDurationMs ?? record.config.targetFrameDurationMs,
75
+ },
76
+ sessionEvents: [...record.sessionEvents, ev],
77
+ };
78
+ }
79
+ const turnId = turnIdOf(message);
80
+ // No turn to attribute this to — including every unknown type that carries no
81
+ // turnId, e.g. the agents-SDK `cf_agent_*` messages. Retained, but inert.
82
+ if (turnId === undefined) {
83
+ return { ...record, sessionEvents: [...record.sessionEvents, ev] };
84
+ }
85
+ let turns = record.turns;
86
+ let droppedTurns = record.droppedTurns;
87
+ let current = turns.find((t) => t.turnId === turnId);
88
+ if (!current) {
89
+ // Out-of-order arrival is fine: a turn is created by whichever of its
90
+ // messages lands first, not by a designated "start" message.
91
+ current = newTurn(turnId, atMs);
92
+ let appended = [...turns, current];
93
+ if (appended.length > limits.maxTurns) {
94
+ appended = appended.slice(appended.length - limits.maxTurns);
95
+ droppedTurns += 1;
96
+ }
97
+ turns = appended;
98
+ }
99
+ let turn = pushEvent(current, ev, limits);
100
+ switch (type) {
101
+ case "stt_chunk":
102
+ turn = { ...turn, userInterim: message.transcript };
103
+ break;
104
+ case "stt_output": {
105
+ const m = message;
106
+ turn = { ...turn, userTranscript: m.transcript, userInterim: undefined, userConfidence: m.confidence };
107
+ break;
108
+ }
109
+ case "agent_chunk":
110
+ turn = { ...turn, agentText: turn.agentText + message.text };
111
+ break;
112
+ case "agent_tool_call": {
113
+ const m = message;
114
+ turn = { ...turn, toolCalls: upsertToolCall(turn.toolCalls, m.id, { name: m.name, args: m.args }) };
115
+ break;
116
+ }
117
+ case "agent_tool_result": {
118
+ const m = message;
119
+ turn = { ...turn, toolCalls: upsertToolCall(turn.toolCalls, m.id, { result: m.result }) };
120
+ break;
121
+ }
122
+ case "tool_call_started":
123
+ case "tool_call_delayed":
124
+ case "tool_call_complete":
125
+ case "tool_call_failed": {
126
+ const m = message;
127
+ const phase = type.slice("tool_call_".length);
128
+ turn = {
129
+ ...turn,
130
+ toolCalls: upsertToolCall(turn.toolCalls, m.toolId, { name: m.toolName, phase, afterMs: m.afterMs }),
131
+ };
132
+ break;
133
+ }
134
+ case "tts_chunk":
135
+ turn = { ...turn, ttsAudioBytes: turn.ttsAudioBytes + (message.byteLength ?? 0) };
136
+ break;
137
+ case "agent_interrupted":
138
+ turn = { ...turn, interrupted: { atMs, reason: message.reason } };
139
+ break;
140
+ case "turn_complete":
141
+ turn = {
142
+ ...turn,
143
+ complete: true,
144
+ userTranscript: message.transcript ?? turn.userTranscript,
145
+ };
146
+ break;
147
+ case "metrics": {
148
+ const { type: _t, turnId: _i, correlationId: _c, endpointingOwner: owner, endpointingReason: reason, ...timings } = message;
149
+ // The endpointing decision is a fact about the turn, not a timing, so it lives
150
+ // on the turn itself — not inside `timings`. Preserve an earlier value if this
151
+ // metrics message omits it (re-emission should not erase a known decision).
152
+ const nextOwner = typeof owner === "string" ? owner : turn.endpointingOwner;
153
+ const nextReason = typeof reason === "string" ? reason : turn.endpointingReason;
154
+ turn = {
155
+ ...turn,
156
+ timings: timings,
157
+ ...(nextOwner !== undefined ? { endpointingOwner: nextOwner } : {}),
158
+ ...(nextReason !== undefined ? { endpointingReason: nextReason } : {}),
159
+ };
160
+ break;
161
+ }
162
+ case "error": {
163
+ const m = message;
164
+ turn = {
165
+ ...turn,
166
+ errors: [...turn.errors, { atMs, component: m.component, category: m.category, message: m.message }],
167
+ };
168
+ break;
169
+ }
170
+ default:
171
+ // Unknown or non-mutating type (speech_started, tts_end, audio_clear, …):
172
+ // already recorded in `events`; nothing further to derive.
173
+ break;
174
+ }
175
+ return { ...record, turns: turns.map((t) => (t.turnId === turnId ? turn : t)), droppedTurns };
176
+ }
177
+ /** Fold a whole message stream. Equivalent to repeated `applyMessage`. */
178
+ export function buildSessionRecord(messages, config = {}, limits = DEFAULT_LIMITS) {
179
+ return messages.reduce((rec, { message, atMs }) => applyMessage(rec, message, atMs, limits), emptySessionRecord(config));
180
+ }
181
+ //# sourceMappingURL=session-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-record.js","sourceRoot":"","sources":["../src/session-record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface ClientTransportHandlers {
2
+ readonly onOpen?: () => void;
3
+ readonly onClose?: (code: number, reason: string) => void;
4
+ readonly onError?: (error: Event | Error) => void;
5
+ readonly onMessage?: (data: unknown) => void;
6
+ readonly onAudio?: (data: ArrayBuffer) => void;
7
+ }
8
+ export interface ClientTransport {
9
+ readonly connected: boolean;
10
+ connect(url: string): void;
11
+ disconnect(code?: number, reason?: string): void;
12
+ sendAudio(data: Uint8Array | ArrayBuffer): void;
13
+ sendJson(value: unknown): void;
14
+ setHandlers(handlers: ClientTransportHandlers): void;
15
+ }
16
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAC;CACtD"}
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: MIT
2
+ export {};
3
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,+BAA+B"}
@@ -0,0 +1,56 @@
1
+ import type { SyrinxStudioMessage } from "./index.js";
2
+ export interface TurnAudioRecorderOptions {
3
+ /** Turns to retain audio for. Older blobs are dropped; the TurnRecord itself is not ours to evict. */
4
+ readonly maxTurns?: number;
5
+ /**
6
+ * Audio kept from *before* `speech_started`, in ms.
7
+ *
8
+ * Load-bearing, not a nicety: VAD announces speech after onset, so a recorder that
9
+ * starts buffering on `speech_started` clips the first phoneme. A fixture missing its
10
+ * onset transcribes differently from the live turn it was captured from, which makes
11
+ * it worse than no fixture — it looks like a real regression.
12
+ */
13
+ readonly preRollMs?: number;
14
+ /** Hard ceiling per turn. A stuck endpointer must not grow a buffer without bound. */
15
+ readonly maxTurnMs?: number;
16
+ }
17
+ export declare const DEFAULT_RECORDER_OPTIONS: Required<TurnAudioRecorderOptions>;
18
+ export interface RecordedTurnAudio {
19
+ readonly turnId: string;
20
+ readonly sampleRateHz: number;
21
+ readonly durationMs: number;
22
+ readonly byteLength: number;
23
+ /** True when the turn hit `maxTurnMs` and the tail was dropped. Surfaced, never silent. */
24
+ readonly truncated: boolean;
25
+ }
26
+ /** Minimal RIFF/WAVE header + samples. Mono PCM16 — the format every STT accepts. */
27
+ export declare function encodeWav(samples: Int16Array, sampleRateHz: number): Uint8Array;
28
+ export declare class TurnAudioRecorder {
29
+ private readonly options;
30
+ private sampleRateHz;
31
+ /** Rolling pre-roll, trimmed to preRollMs on every push. */
32
+ private preRoll;
33
+ private preRollLength;
34
+ private open;
35
+ /** Sealed but not yet attributed to a turnId — turnId arrives with a later message. */
36
+ private pending;
37
+ private readonly turns;
38
+ constructor(options?: TurnAudioRecorderOptions);
39
+ /** Push the uplink frame you are already sending. Cheap: retains the reference, copies on seal. */
40
+ pushFrame(frame: Int16Array): void;
41
+ /** Feed the same messages you feed the SessionRecord. Turn boundaries come from the server. */
42
+ onMessage(message: SyrinxStudioMessage | {
43
+ readonly type: string;
44
+ readonly [k: string]: unknown;
45
+ }): void;
46
+ private attributeOnSeal;
47
+ private seal;
48
+ /** WAV bytes for a turn, or undefined if it was never captured or has been evicted. */
49
+ getWav(turnId: string): Uint8Array | undefined;
50
+ /** What audio is retained right now, oldest first. */
51
+ list(): readonly RecordedTurnAudio[];
52
+ /** Total retained audio in bytes — what a memory readout should show. */
53
+ retainedBytes(): number;
54
+ reset(): void;
55
+ }
56
+ //# sourceMappingURL=turn-recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-recorder.d.ts","sourceRoot":"","sources":["../src/turn-recorder.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,wBAAwB;IACvC,sGAAsG;IACtG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,wBAAwB,CAIvE,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAID,qFAAqF;AACrF,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,CA6B/E;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,YAAY,CAA0B;IAC9C,4DAA4D;IAC5D,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,IAAI,CAA0B;IACtC,uFAAuF;IACvF,OAAO,CAAC,OAAO,CAA0D;IACzE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkE;gBAE5E,OAAO,GAAE,wBAA6B;IAIlD,mGAAmG;IACnG,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAoBlC,+FAA+F;IAC/F,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI;IA0BxG,OAAO,CAAC,eAAe,CAAqB;IAE5C,OAAO,CAAC,IAAI;IAyBZ,uFAAuF;IACvF,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAK9C,sDAAsD;IACtD,IAAI,IAAI,SAAS,iBAAiB,EAAE;IAUpC,yEAAyE;IACzE,aAAa,IAAI,MAAM;IAMvB,KAAK,IAAI,IAAI;CAQd"}