@talk2view/sdk 0.19.0 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +8 -2
  2. package/dist/assistant-ui/index.d.ts.map +1 -1
  3. package/dist/assistant-ui/index.js +9 -4
  4. package/dist/assistant-ui/index.js.map +1 -1
  5. package/dist/auth.d.ts +8 -0
  6. package/dist/auth.d.ts.map +1 -1
  7. package/dist/auth.js +27 -11
  8. package/dist/auth.js.map +1 -1
  9. package/dist/chat/index.d.ts +1 -0
  10. package/dist/chat/index.d.ts.map +1 -1
  11. package/dist/chat/index.js +1 -0
  12. package/dist/chat/index.js.map +1 -1
  13. package/dist/chat/launcher.d.ts.map +1 -1
  14. package/dist/chat/launcher.js +11 -2
  15. package/dist/chat/launcher.js.map +1 -1
  16. package/dist/chat/provider.d.ts +15 -0
  17. package/dist/chat/provider.d.ts.map +1 -1
  18. package/dist/chat/provider.js +36 -3
  19. package/dist/chat/provider.js.map +1 -1
  20. package/dist/chat/voice-button.d.ts +34 -0
  21. package/dist/chat/voice-button.d.ts.map +1 -0
  22. package/dist/chat/voice-button.js +175 -0
  23. package/dist/chat/voice-button.js.map +1 -0
  24. package/dist/chat-css.js +1 -1
  25. package/dist/chat.css +1 -1
  26. package/dist/chat.isolated.css +169 -3
  27. package/dist/chat.raw.css +169 -3
  28. package/dist/event-emitter.d.ts +1 -0
  29. package/dist/event-emitter.d.ts.map +1 -1
  30. package/dist/event-emitter.js +3 -0
  31. package/dist/event-emitter.js.map +1 -1
  32. package/dist/index.d.ts +21 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +34 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/types.d.ts +60 -0
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/voice-error.d.ts +8 -0
  39. package/dist/voice-error.d.ts.map +1 -0
  40. package/dist/voice-error.js +10 -0
  41. package/dist/voice-error.js.map +1 -0
  42. package/dist/voice-facade.d.ts +57 -0
  43. package/dist/voice-facade.d.ts.map +1 -0
  44. package/dist/voice-facade.js +139 -0
  45. package/dist/voice-facade.js.map +1 -0
  46. package/dist/voice.d.ts +157 -0
  47. package/dist/voice.d.ts.map +1 -0
  48. package/dist/voice.js +630 -0
  49. package/dist/voice.js.map +1 -0
  50. package/docs/chat.md +4 -4
  51. package/docs/voice.md +88 -0
  52. package/package.json +3 -1
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Voice controller — the realtime voice agent behind `t2v.voice`.
3
+ *
4
+ * Core never imports this module statically: the `T2VVoice` facade
5
+ * (`voice-facade.ts`) loads it with `import()` on the first `start()`, and it
6
+ * in turn loads the Pipecat libraries, so chat-only partners ship neither.
7
+ *
8
+ * The engine mints a ticket (`POST /v1/voice/sessions`); the Pipecat client
9
+ * libraries are loaded on first `start()` so chat-only partners never ship
10
+ * them; WebRTC audio goes to the voice agent service; client tools the agent
11
+ * calls arrive here over the RTVI data channel and run through the SAME tool
12
+ * registry and permission check as chat, so partners write no new code.
13
+ */
14
+ import { VoiceStartError } from './voice-error.js';
15
+ import type { T2VTools } from './tools.js';
16
+ import type { VoiceEventMap, VoiceState } from './types.js';
17
+ export interface PipecatCallbacks {
18
+ onConnected?: () => void;
19
+ onDisconnected?: () => void;
20
+ onError?: (message: {
21
+ data?: {
22
+ message?: string;
23
+ };
24
+ }) => void;
25
+ onServerMessage?: (data: unknown) => void;
26
+ onUserTranscript?: (data: {
27
+ text: string;
28
+ final?: boolean;
29
+ }) => void;
30
+ onBotTranscript?: (data: {
31
+ text: string;
32
+ }) => void;
33
+ onTrackStarted?: (track: MediaStreamTrack, participant?: {
34
+ local?: boolean;
35
+ }) => void;
36
+ /** client-js 1.13.1 passes a `DeviceError` (`devices`, `type`, `message`). */
37
+ onDeviceError?: (error: {
38
+ devices?: string[];
39
+ type?: string;
40
+ message?: string;
41
+ }) => void;
42
+ }
43
+ export interface PipecatClientLike {
44
+ /** Opens the microphone (the browser's permission prompt, first time). */
45
+ initDevices(): Promise<void>;
46
+ connect(params: unknown): Promise<unknown>;
47
+ disconnect(): Promise<void>;
48
+ sendClientMessage(type: string, data?: unknown): void;
49
+ /** The live tracks; `local.audio` is the microphone. */
50
+ tracks(): {
51
+ local?: {
52
+ audio?: MediaStreamTrack | null;
53
+ };
54
+ };
55
+ }
56
+ export interface VoiceLibs {
57
+ PipecatClient: new (opts: {
58
+ transport: unknown;
59
+ enableMic: boolean;
60
+ enableCam: boolean;
61
+ callbacks: PipecatCallbacks;
62
+ }) => PipecatClientLike;
63
+ /** `iceServers` can be set after construction, before `connect()`. */
64
+ SmallWebRTCTransport: new (opts: {
65
+ iceServers: RTCIceServer[];
66
+ }) => {
67
+ iceServers: RTCIceServer[];
68
+ };
69
+ }
70
+ export type VoiceLibLoader = () => Promise<VoiceLibs>;
71
+ /** Dynamic imports: a bundler splits these into their own chunk. */
72
+ export declare const loadPipecatLibs: VoiceLibLoader;
73
+ export interface T2VVoiceDeps {
74
+ request: <T>(endpoint: string, options?: RequestInit) => Promise<T>;
75
+ ensureSession: () => Promise<boolean>;
76
+ getValidAccessToken: (opts?: {
77
+ forceRefresh?: boolean;
78
+ }) => Promise<string | null>;
79
+ tools: Pick<T2VTools, 'checkPermission' | 'executeToolCall' | 'getDescription'>;
80
+ partnerKey: string;
81
+ loadLibs?: VoiceLibLoader;
82
+ /** Where the bot's audio goes. Default: an autoplaying `<audio>` element. */
83
+ attachAudio?: (track: MediaStreamTrack) => void;
84
+ /** Auto-deny an approval nobody answers. Under the service's 30 s tool timeout. */
85
+ approvalTimeoutMs?: number;
86
+ /** Whether the browser will prompt for the microphone. Default: the Permissions API. */
87
+ micPermission?: () => Promise<PermissionState | 'unknown'>;
88
+ }
89
+ export { VoiceStartError };
90
+ /** The voice controller. Construct the {@link T2VVoice} facade (`t2v.voice`) instead. */
91
+ export declare class T2VVoiceController {
92
+ private readonly deps;
93
+ private readonly emitter;
94
+ private _state;
95
+ private client;
96
+ private audio;
97
+ private libs;
98
+ private pendingApproval;
99
+ /** Ends the open approval without a human answer; the reason goes to the agent. */
100
+ private cancelApproval;
101
+ private readonly alwaysAllowed;
102
+ /**
103
+ * Bumped by every ending. A `start()` or a client callback from an older
104
+ * epoch belongs to a call that was hung up, and must not touch this one.
105
+ */
106
+ private epoch;
107
+ /** Settles the in-flight `start()`'s connect wait when the call is hung up mid-start. */
108
+ private abortStart;
109
+ /**
110
+ * The hang-up in progress; a concurrent `stop()` joins it. Tagged with the
111
+ * epoch it ended, so a `stop()` for a call started after it (say, from an
112
+ * `ended` listener) is not mistaken for a second hang-up of the old one.
113
+ */
114
+ private ending;
115
+ constructor(deps: T2VVoiceDeps);
116
+ get state(): VoiceState;
117
+ on<K extends keyof VoiceEventMap & string>(event: K, callback: (...args: VoiceEventMap[K]) => void): () => void;
118
+ /**
119
+ * Emit without letting a throwing partner listener break the caller: a hang-up
120
+ * must still release the mic and a tool call must still be answered. Logged
121
+ * by event name only, never the payload (it can carry tool arguments).
122
+ */
123
+ private safeEmit;
124
+ private setState;
125
+ private emitError;
126
+ /**
127
+ * @internal Start loading the call libraries before the first `start()`
128
+ * (the button calls this on hover). `start()` reuses the load.
129
+ */
130
+ preload(): void;
131
+ /** The call libraries, loaded once. A failed load is retried next time. */
132
+ private loadLibs;
133
+ /**
134
+ * Press the button. Resolves once the microphone is live, or quietly if the
135
+ * call is hung up (`stop()`) before it connects.
136
+ */
137
+ start(): Promise<void>;
138
+ /** Hang up. Safe to call in any state. */
139
+ stop(): Promise<void>;
140
+ /**
141
+ * @internal The signed-in session died (not a deliberate sign-out): end any
142
+ * call, starting or live, as `auth_expired` with an `auth_expired` error.
143
+ */
144
+ expire(): Promise<void>;
145
+ private finish;
146
+ private endCall;
147
+ private teardown;
148
+ private attachAudio;
149
+ private detachAudio;
150
+ private handleServerMessage;
151
+ private relayToolCall;
152
+ private runToolCall;
153
+ /** Close the open card without a human answer, telling the agent why. */
154
+ private endApproval;
155
+ private awaitApproval;
156
+ }
157
+ //# sourceMappingURL=voice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../src/voice.ts"],"names":[],"mappings":"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"}