@talk2view/sdk 0.18.1 → 0.20.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/README.md +71 -103
- package/dist/assistant-ui/index.d.ts.map +1 -1
- package/dist/assistant-ui/index.js +4 -2
- package/dist/assistant-ui/index.js.map +1 -1
- package/dist/auth.d.ts +8 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +27 -11
- package/dist/auth.js.map +1 -1
- package/dist/chat/auth-gate.d.ts +3 -1
- package/dist/chat/auth-gate.d.ts.map +1 -1
- package/dist/chat/auth-gate.js +29 -5
- package/dist/chat/auth-gate.js.map +1 -1
- package/dist/chat/composer-extras.js +2 -2
- package/dist/chat/index.d.ts +1 -0
- package/dist/chat/index.d.ts.map +1 -1
- package/dist/chat/index.js +1 -0
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/launcher.d.ts.map +1 -1
- package/dist/chat/launcher.js +6 -2
- package/dist/chat/launcher.js.map +1 -1
- package/dist/chat/markdown.d.ts +14 -4
- package/dist/chat/markdown.d.ts.map +1 -1
- package/dist/chat/markdown.js +28 -1
- package/dist/chat/markdown.js.map +1 -1
- package/dist/chat/provider.d.ts +7 -0
- package/dist/chat/provider.d.ts.map +1 -1
- package/dist/chat/provider.js +22 -1
- package/dist/chat/provider.js.map +1 -1
- package/dist/chat/vendor/LICENSE +21 -0
- package/dist/chat/vendor/MANIFEST.json +84 -0
- package/dist/chat/vendor/attachment.aui.d.ts.map +1 -1
- package/dist/chat/vendor/attachment.aui.js +8 -0
- package/dist/chat/vendor/attachment.aui.js.map +1 -1
- package/dist/chat/vendor/file.d.ts.map +1 -1
- package/dist/chat/vendor/file.js +8 -0
- package/dist/chat/vendor/file.js.map +1 -1
- package/dist/chat/vendor/follow-up-suggestions.aui.d.ts.map +1 -1
- package/dist/chat/vendor/follow-up-suggestions.aui.js +8 -0
- package/dist/chat/vendor/follow-up-suggestions.aui.js.map +1 -1
- package/dist/chat/vendor/image.d.ts.map +1 -1
- package/dist/chat/vendor/image.js +8 -0
- package/dist/chat/vendor/image.js.map +1 -1
- package/dist/chat/vendor/markdown-text.d.ts.map +1 -1
- package/dist/chat/vendor/markdown-text.js +8 -0
- package/dist/chat/vendor/markdown-text.js.map +1 -1
- package/dist/chat/vendor/reasoning.aui.d.ts.map +1 -1
- package/dist/chat/vendor/reasoning.aui.js +8 -0
- package/dist/chat/vendor/reasoning.aui.js.map +1 -1
- package/dist/chat/vendor/reasoning.d.ts.map +1 -1
- package/dist/chat/vendor/reasoning.js +8 -0
- package/dist/chat/vendor/reasoning.js.map +1 -1
- package/dist/chat/vendor/thread-list.aui.d.ts.map +1 -1
- package/dist/chat/vendor/thread-list.aui.js +8 -0
- package/dist/chat/vendor/thread-list.aui.js.map +1 -1
- package/dist/chat/vendor/thread.aui.d.ts.map +1 -1
- package/dist/chat/vendor/thread.aui.js +8 -0
- package/dist/chat/vendor/thread.aui.js.map +1 -1
- package/dist/chat/vendor/tool-fallback.aui.d.ts.map +1 -1
- package/dist/chat/vendor/tool-fallback.aui.js +8 -0
- package/dist/chat/vendor/tool-fallback.aui.js.map +1 -1
- package/dist/chat/vendor/tool-group.aui.d.ts.map +1 -1
- package/dist/chat/vendor/tool-group.aui.js +8 -0
- package/dist/chat/vendor/tool-group.aui.js.map +1 -1
- package/dist/chat/vendor/tooltip-icon-button.d.ts.map +1 -1
- package/dist/chat/vendor/tooltip-icon-button.js +8 -0
- package/dist/chat/vendor/tooltip-icon-button.js.map +1 -1
- package/dist/chat/views/account.d.ts.map +1 -1
- package/dist/chat/views/account.js +6 -0
- package/dist/chat/views/account.js.map +1 -1
- package/dist/chat/voice-button.d.ts +34 -0
- package/dist/chat/voice-button.d.ts.map +1 -0
- package/dist/chat/voice-button.js +175 -0
- package/dist/chat/voice-button.js.map +1 -0
- package/dist/chat-css.js +1 -1
- package/dist/chat.css +1 -1
- package/dist/chat.isolated.css +176 -3
- package/dist/chat.raw.css +176 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +49 -0
- package/dist/client.js.map +1 -1
- package/dist/event-emitter.d.ts +1 -0
- package/dist/event-emitter.d.ts.map +1 -1
- package/dist/event-emitter.js +3 -0
- package/dist/event-emitter.js.map +1 -1
- package/dist/index.d.ts +24 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -1
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +5 -1
- package/dist/streaming.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +13 -2
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +60 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/components/MarkdownRenderer.d.ts +1 -1
- package/dist/ui/components/MarkdownRenderer.js +1 -1
- package/dist/ui/index.d.ts +10 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +10 -0
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/safeMarkdown.d.ts.map +1 -1
- package/dist/ui/safeMarkdown.js +4 -2
- package/dist/ui/safeMarkdown.js.map +1 -1
- package/dist/voice-error.d.ts +8 -0
- package/dist/voice-error.d.ts.map +1 -0
- package/dist/voice-error.js +10 -0
- package/dist/voice-error.js.map +1 -0
- package/dist/voice-facade.d.ts +57 -0
- package/dist/voice-facade.d.ts.map +1 -0
- package/dist/voice-facade.js +139 -0
- package/dist/voice-facade.js.map +1 -0
- package/dist/voice.d.ts +157 -0
- package/dist/voice.d.ts.map +1 -0
- package/dist/voice.js +630 -0
- package/dist/voice.js.map +1 -0
- package/docs/chat.md +532 -0
- package/docs/voice.md +88 -0
- package/package.json +22 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeMarkdown.js","sourceRoot":"","sources":["../../src/ui/safeMarkdown.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC
|
|
1
|
+
{"version":3,"file":"safeMarkdown.js","sourceRoot":"","sources":["../../src/ui/safeMarkdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** A voice call that could not start. `type` is the machine-readable reason (see `VoiceError`). */
|
|
2
|
+
export declare class VoiceStartError extends Error {
|
|
3
|
+
readonly type: string;
|
|
4
|
+
constructor(type: string, message: string, options?: {
|
|
5
|
+
cause?: unknown;
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=voice-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-error.d.ts","sourceRoot":"","sources":["../src/voice-error.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAKhC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** A voice call that could not start. `type` is the machine-readable reason (see `VoiceError`). */
|
|
2
|
+
export class VoiceStartError extends Error {
|
|
3
|
+
type;
|
|
4
|
+
constructor(type, message, options) {
|
|
5
|
+
super(message, options);
|
|
6
|
+
this.type = type;
|
|
7
|
+
this.name = 'VoiceStartError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=voice-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-error.js","sourceRoot":"","sources":["../src/voice-error.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAEtB;IADlB,YACkB,IAAY,EAC5B,OAAe,EACf,OAA6B;QAE7B,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAQ;QAK5B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `t2v.voice` — a thin facade over the voice controller.
|
|
3
|
+
*
|
|
4
|
+
* Core imports only this file. The controller (`voice.ts`) is loaded with
|
|
5
|
+
* `import()` on the first `start()`, and it loads the Pipecat libraries, so a
|
|
6
|
+
* chat-only partner ships neither. Listeners can be added before the load:
|
|
7
|
+
* the facade owns the event emitter and forwards the controller's events.
|
|
8
|
+
*/
|
|
9
|
+
import type { VoiceEventMap, VoiceState } from './types.js';
|
|
10
|
+
import type { T2VVoiceController, T2VVoiceDeps } from './voice.js';
|
|
11
|
+
/** @internal Loads the voice controller class. Exported for typing; not part of the supported surface. */
|
|
12
|
+
export type VoiceControllerLoader = () => Promise<new (deps: T2VVoiceDeps) => T2VVoiceController>;
|
|
13
|
+
/** @internal What `Talk2View` builds `t2v.voice` from. Exported for typing; construct {@link Talk2View} instead. */
|
|
14
|
+
export interface T2VVoiceOptions extends T2VVoiceDeps {
|
|
15
|
+
/** Loads the controller class. Default: `import('./voice.js')`. Tests hand in their own. */
|
|
16
|
+
loadController?: VoiceControllerLoader;
|
|
17
|
+
}
|
|
18
|
+
export declare class T2VVoice {
|
|
19
|
+
private readonly options;
|
|
20
|
+
private readonly emitter;
|
|
21
|
+
private _state;
|
|
22
|
+
private controller;
|
|
23
|
+
private loading;
|
|
24
|
+
/** Bumped by stop(): a start() still waiting on the load must not go on. */
|
|
25
|
+
private epoch;
|
|
26
|
+
/** True while start() waits for the controller to load. */
|
|
27
|
+
private awaitingLoad;
|
|
28
|
+
constructor(options: T2VVoiceOptions);
|
|
29
|
+
/** `idle` until the first call; then the controller's state. */
|
|
30
|
+
get state(): VoiceState;
|
|
31
|
+
on<K extends keyof VoiceEventMap & string>(event: K, callback: (...args: VoiceEventMap[K]) => void): () => void;
|
|
32
|
+
off<K extends keyof VoiceEventMap & string>(event: K, callback: (...args: VoiceEventMap[K]) => void): void;
|
|
33
|
+
/** Press the button. Loads the voice controller on first use, then starts the call. */
|
|
34
|
+
start(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Load the voice code ahead of the first {@link start}, e.g. when the
|
|
37
|
+
* pointer reaches a voice button, so pressing it does not wait for the
|
|
38
|
+
* download. Safe to call any time; a failed load is retried by `start()`.
|
|
39
|
+
*/
|
|
40
|
+
preload(): void;
|
|
41
|
+
/** Hang up. Safe to call in any state, including while voice is still loading. */
|
|
42
|
+
stop(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* @internal The signed-in session died (not a deliberate sign-out). Ends any
|
|
45
|
+
* call, starting or live, as `auth_expired` with an `auth_expired` error.
|
|
46
|
+
* `Talk2View` calls this; partners call {@link stop}.
|
|
47
|
+
*/
|
|
48
|
+
expire(): Promise<void>;
|
|
49
|
+
private setState;
|
|
50
|
+
/**
|
|
51
|
+
* Emit without letting a throwing partner listener reject `start()` or
|
|
52
|
+
* `stop()`. Logged by event name only, never the payload.
|
|
53
|
+
*/
|
|
54
|
+
private safeEmit;
|
|
55
|
+
private load;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=voice-facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-facade.d.ts","sourceRoot":"","sources":["../src/voice-facade.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGnE,0GAA0G;AAC1G,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,KAAK,IAAI,EAAE,YAAY,KAAK,kBAAkB,CAAC,CAAC;AAElG,oHAAoH;AACpH,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,4FAA4F;IAC5F,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAOD,qBAAa,QAAQ;IAUP,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAClE,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,OAAO,CAA4C;IAC3D,4EAA4E;IAC5E,OAAO,CAAC,KAAK,CAAK;IAClB,2DAA2D;IAC3D,OAAO,CAAC,YAAY,CAAS;gBAEA,OAAO,EAAE,eAAe;IAErD,gEAAgE;IAChE,IAAI,KAAK,IAAI,UAAU,CAEtB;IAED,EAAE,CAAC,CAAC,SAAS,MAAM,aAAa,GAAG,MAAM,EACvC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,GAC5C,MAAM,IAAI;IAIb,GAAG,CAAC,CAAC,SAAS,MAAM,aAAa,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAI1G,uFAAuF;IACjF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B5B;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAUf,kFAAkF;IAC5E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7B,OAAO,CAAC,QAAQ;IAMhB;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,IAAI;CAeb"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `t2v.voice` — a thin facade over the voice controller.
|
|
3
|
+
*
|
|
4
|
+
* Core imports only this file. The controller (`voice.ts`) is loaded with
|
|
5
|
+
* `import()` on the first `start()`, and it loads the Pipecat libraries, so a
|
|
6
|
+
* chat-only partner ships neither. Listeners can be added before the load:
|
|
7
|
+
* the facade owns the event emitter and forwards the controller's events.
|
|
8
|
+
*/
|
|
9
|
+
import { TypedEventEmitter } from './event-emitter.js';
|
|
10
|
+
import { VoiceStartError } from './voice-error.js';
|
|
11
|
+
const loadVoiceController = async () => (await import('./voice.js')).T2VVoiceController;
|
|
12
|
+
/** Every event the controller emits; the facade forwards each one. */
|
|
13
|
+
const FORWARDED = ['transcript', 'toolCall', 'agentState', 'approvalChange', 'error', 'ended'];
|
|
14
|
+
export class T2VVoice {
|
|
15
|
+
options;
|
|
16
|
+
emitter = new TypedEventEmitter();
|
|
17
|
+
_state = 'idle';
|
|
18
|
+
controller = null;
|
|
19
|
+
loading = null;
|
|
20
|
+
/** Bumped by stop(): a start() still waiting on the load must not go on. */
|
|
21
|
+
epoch = 0;
|
|
22
|
+
/** True while start() waits for the controller to load. */
|
|
23
|
+
awaitingLoad = false;
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.options = options;
|
|
26
|
+
}
|
|
27
|
+
/** `idle` until the first call; then the controller's state. */
|
|
28
|
+
get state() {
|
|
29
|
+
return this._state;
|
|
30
|
+
}
|
|
31
|
+
on(event, callback) {
|
|
32
|
+
return this.emitter.on(event, callback);
|
|
33
|
+
}
|
|
34
|
+
off(event, callback) {
|
|
35
|
+
this.emitter.off(event, callback);
|
|
36
|
+
}
|
|
37
|
+
/** Press the button. Loads the voice controller on first use, then starts the call. */
|
|
38
|
+
async start() {
|
|
39
|
+
if (this.controller && !this.awaitingLoad)
|
|
40
|
+
return this.controller.start();
|
|
41
|
+
if (this.awaitingLoad)
|
|
42
|
+
return;
|
|
43
|
+
const epoch = ++this.epoch;
|
|
44
|
+
this.awaitingLoad = true;
|
|
45
|
+
this.setState('connecting');
|
|
46
|
+
let controller;
|
|
47
|
+
try {
|
|
48
|
+
controller = await this.load();
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
// Before the epoch check: a load that fails after a stop() must not stay
|
|
52
|
+
// cached, or the next start() would fail without retrying the import.
|
|
53
|
+
this.loading = null; // a failed chunk load can be retried
|
|
54
|
+
if (epoch !== this.epoch)
|
|
55
|
+
return;
|
|
56
|
+
this.awaitingLoad = false;
|
|
57
|
+
const message = 'Could not load voice. Check your connection and try again.';
|
|
58
|
+
this.safeEmit('error', { type: 'voice_error', message });
|
|
59
|
+
this.setState('error');
|
|
60
|
+
throw new VoiceStartError('voice_error', message, { cause: err });
|
|
61
|
+
}
|
|
62
|
+
// Hung up while the controller was loading: stop() already reported it.
|
|
63
|
+
if (epoch !== this.epoch)
|
|
64
|
+
return;
|
|
65
|
+
this.awaitingLoad = false;
|
|
66
|
+
return controller.start();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Load the voice code ahead of the first {@link start}, e.g. when the
|
|
70
|
+
* pointer reaches a voice button, so pressing it does not wait for the
|
|
71
|
+
* download. Safe to call any time; a failed load is retried by `start()`.
|
|
72
|
+
*/
|
|
73
|
+
preload() {
|
|
74
|
+
const load = this.load();
|
|
75
|
+
load.then((controller) => controller.preload(), () => {
|
|
76
|
+
if (this.loading === load)
|
|
77
|
+
this.loading = null;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/** Hang up. Safe to call in any state, including while voice is still loading. */
|
|
81
|
+
async stop() {
|
|
82
|
+
this.epoch += 1;
|
|
83
|
+
if (this.awaitingLoad) {
|
|
84
|
+
this.awaitingLoad = false;
|
|
85
|
+
this.setState('ended');
|
|
86
|
+
this.safeEmit('ended', 'stopped');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
await this.controller?.stop();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* @internal The signed-in session died (not a deliberate sign-out). Ends any
|
|
93
|
+
* call, starting or live, as `auth_expired` with an `auth_expired` error.
|
|
94
|
+
* `Talk2View` calls this; partners call {@link stop}.
|
|
95
|
+
*/
|
|
96
|
+
async expire() {
|
|
97
|
+
this.epoch += 1;
|
|
98
|
+
if (this.awaitingLoad) {
|
|
99
|
+
this.awaitingLoad = false;
|
|
100
|
+
this.safeEmit('error', { type: 'auth_expired', message: 'Your sign-in expired. Sign in again to keep talking.' });
|
|
101
|
+
this.setState('ended');
|
|
102
|
+
this.safeEmit('ended', 'auth_expired');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
await this.controller?.expire();
|
|
106
|
+
}
|
|
107
|
+
setState(state) {
|
|
108
|
+
if (this._state === state)
|
|
109
|
+
return;
|
|
110
|
+
this._state = state;
|
|
111
|
+
this.safeEmit('stateChange', state);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Emit without letting a throwing partner listener reject `start()` or
|
|
115
|
+
* `stop()`. Logged by event name only, never the payload.
|
|
116
|
+
*/
|
|
117
|
+
safeEmit(event, ...args) {
|
|
118
|
+
try {
|
|
119
|
+
this.emitter.emit(event, ...args);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
console.error(`[Talk2View] a voice "${event}" listener threw`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
load() {
|
|
126
|
+
this.loading ??= (this.options.loadController ?? loadVoiceController)().then((Controller) => {
|
|
127
|
+
const { loadController: _unused, ...deps } = this.options;
|
|
128
|
+
const controller = new Controller(deps);
|
|
129
|
+
controller.on('stateChange', (state) => this.setState(state));
|
|
130
|
+
for (const event of FORWARDED) {
|
|
131
|
+
controller.on(event, (...args) => this.safeEmit.call(this, event, ...args));
|
|
132
|
+
}
|
|
133
|
+
this.controller = controller;
|
|
134
|
+
return controller;
|
|
135
|
+
});
|
|
136
|
+
return this.loading;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=voice-facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-facade.js","sourceRoot":"","sources":["../src/voice-facade.ts"],"names":[],"mappings":"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"}
|
package/dist/voice.d.ts
ADDED
|
@@ -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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"}
|