@hivegpt/hiveai-angular 0.0.588 → 0.0.590

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 (29) hide show
  1. package/bundles/hivegpt-hiveai-angular.umd.js +252 -654
  2. package/bundles/hivegpt-hiveai-angular.umd.js.map +1 -1
  3. package/bundles/hivegpt-hiveai-angular.umd.min.js +1 -1
  4. package/bundles/hivegpt-hiveai-angular.umd.min.js.map +1 -1
  5. package/esm2015/hivegpt-hiveai-angular.js +4 -6
  6. package/esm2015/lib/components/chat-drawer/chat-drawer.component.js +1 -1
  7. package/esm2015/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.js +17 -24
  8. package/esm2015/lib/components/voice-agent/services/audio-analyzer.service.js +3 -3
  9. package/esm2015/lib/components/voice-agent/services/voice-agent.service.js +189 -155
  10. package/esm2015/lib/components/voice-agent/voice-agent.module.js +3 -7
  11. package/fesm2015/hivegpt-hiveai-angular.js +208 -579
  12. package/fesm2015/hivegpt-hiveai-angular.js.map +1 -1
  13. package/hivegpt-hiveai-angular.d.ts +3 -5
  14. package/hivegpt-hiveai-angular.d.ts.map +1 -1
  15. package/hivegpt-hiveai-angular.metadata.json +1 -1
  16. package/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.d.ts +7 -4
  17. package/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.d.ts.map +1 -1
  18. package/lib/components/voice-agent/services/audio-analyzer.service.d.ts +2 -2
  19. package/lib/components/voice-agent/services/voice-agent.service.d.ts +23 -17
  20. package/lib/components/voice-agent/services/voice-agent.service.d.ts.map +1 -1
  21. package/lib/components/voice-agent/voice-agent.module.d.ts +2 -2
  22. package/lib/components/voice-agent/voice-agent.module.d.ts.map +1 -1
  23. package/package.json +1 -1
  24. package/esm2015/lib/components/voice-agent/services/daily-voice-client.service.js +0 -312
  25. package/esm2015/lib/components/voice-agent/services/websocket-voice-client.service.js +0 -95
  26. package/lib/components/voice-agent/services/daily-voice-client.service.d.ts +0 -65
  27. package/lib/components/voice-agent/services/daily-voice-client.service.d.ts.map +0 -1
  28. package/lib/components/voice-agent/services/websocket-voice-client.service.d.ts +0 -49
  29. package/lib/components/voice-agent/services/websocket-voice-client.service.d.ts.map +0 -1
@@ -1,95 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * WebSocket-only client for voice agent signaling.
6
- * CRITICAL: Uses native WebSocket only. NO Socket.IO, NO ngx-socket-io.
7
- *
8
- * Responsibilities:
9
- * - Connect to ws_url (from POST /ai/ask-voice response)
10
- * - Parse JSON messages (room_created, user_transcript, bot_transcript)
11
- * - Emit roomCreated$, userTranscript$, botTranscript$
12
- * - NO audio logic, NO mic logic. Audio is handled by Daily.js (WebRTC).
13
- */
14
- export class WebSocketVoiceClientService {
15
- constructor() {
16
- this.ws = null;
17
- this.roomCreatedSubject = new Subject();
18
- this.userTranscriptSubject = new Subject();
19
- this.botTranscriptSubject = new Subject();
20
- /** Emits room_url when backend sends room_created. */
21
- this.roomCreated$ = this.roomCreatedSubject.asObservable();
22
- /** Emits user transcript updates. */
23
- this.userTranscript$ = this.userTranscriptSubject.asObservable();
24
- /** Emits bot transcript updates. */
25
- this.botTranscript$ = this.botTranscriptSubject.asObservable();
26
- }
27
- /** Connect to signaling WebSocket. No audio over this connection. */
28
- connect(wsUrl) {
29
- var _a;
30
- if (((_a = this.ws) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {
31
- return;
32
- }
33
- if (this.ws) {
34
- this.ws.close();
35
- this.ws = null;
36
- }
37
- try {
38
- this.ws = new WebSocket(wsUrl);
39
- this.ws.onmessage = (event) => {
40
- var _a;
41
- try {
42
- const msg = JSON.parse(event.data);
43
- if ((msg === null || msg === void 0 ? void 0 : msg.type) === 'room_created') {
44
- const roomUrl = ((_a = msg.room_url) !== null && _a !== void 0 ? _a : msg.roomUrl);
45
- if (typeof roomUrl === 'string') {
46
- this.roomCreatedSubject.next(roomUrl);
47
- }
48
- }
49
- else if ((msg === null || msg === void 0 ? void 0 : msg.type) === 'user_transcript' && typeof msg.text === 'string') {
50
- this.userTranscriptSubject.next({
51
- text: msg.text,
52
- final: msg.final === true,
53
- });
54
- }
55
- else if ((msg === null || msg === void 0 ? void 0 : msg.type) === 'bot_transcript' && typeof msg.text === 'string') {
56
- this.botTranscriptSubject.next(msg.text);
57
- }
58
- }
59
- catch (_b) {
60
- // Ignore non-JSON or unknown messages
61
- }
62
- };
63
- this.ws.onerror = () => {
64
- this.disconnect();
65
- };
66
- this.ws.onclose = () => {
67
- this.ws = null;
68
- };
69
- }
70
- catch (err) {
71
- console.error('WebSocketVoiceClient: connect failed', err);
72
- this.ws = null;
73
- throw err;
74
- }
75
- }
76
- /** Disconnect and cleanup. */
77
- disconnect() {
78
- if (this.ws) {
79
- this.ws.close();
80
- this.ws = null;
81
- }
82
- }
83
- /** Whether the WebSocket is open. */
84
- get isConnected() {
85
- var _a;
86
- return ((_a = this.ws) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN;
87
- }
88
- }
89
- WebSocketVoiceClientService.ɵprov = i0.ɵɵdefineInjectable({ factory: function WebSocketVoiceClientService_Factory() { return new WebSocketVoiceClientService(); }, token: WebSocketVoiceClientService, providedIn: "root" });
90
- WebSocketVoiceClientService.decorators = [
91
- { type: Injectable, args: [{
92
- providedIn: 'root',
93
- },] }
94
- ];
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXZvaWNlLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2hpdHRoYWt1ci9oaXZlLWdwdC9IaXZlQUktUGFja2FnZXMvQW5ndWxhci9wcm9qZWN0cy9oaXZlZ3B0L2V2ZW50c2dwdC1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3ZvaWNlLWFnZW50L3NlcnZpY2VzL3dlYnNvY2tldC12b2ljZS1jbGllbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBNkIzQzs7Ozs7Ozs7O0dBU0c7QUFJSCxNQUFNLE9BQU8sMkJBQTJCO0lBSHhDO1FBSVUsT0FBRSxHQUFxQixJQUFJLENBQUM7UUFDNUIsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUMzQywwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBa0IsQ0FBQztRQUN0RCx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXJELHNEQUFzRDtRQUN0RCxpQkFBWSxHQUF1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFMUUscUNBQXFDO1FBQ3JDLG9CQUFlLEdBQ2IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTVDLG9DQUFvQztRQUNwQyxtQkFBYyxHQUNaLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQTJENUM7SUF6REMscUVBQXFFO0lBQ3JFLE9BQU8sQ0FBQyxLQUFhOztRQUNuQixJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsRUFBRSwwQ0FBRSxVQUFVLE1BQUssU0FBUyxDQUFDLElBQUksRUFBRTtZQUMxQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1NBQ2hCO1FBRUQsSUFBSTtZQUNGLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7O2dCQUMxQyxJQUFJO29CQUNGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBNEIsQ0FBQztvQkFDOUQsSUFBSSxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxJQUFJLE1BQUssY0FBYyxFQUFFO3dCQUNoQyxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQUEsR0FBRyxDQUFDLFFBQVEsbUNBQUksR0FBRyxDQUFDLE9BQU8sQ0FBdUIsQ0FBQzt3QkFDcEUsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7NEJBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7eUJBQ3ZDO3FCQUNGO3lCQUFNLElBQUksQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsSUFBSSxNQUFLLGlCQUFpQixJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7d0JBQzFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7NEJBQzlCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTs0QkFDZCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJO3lCQUMxQixDQUFDLENBQUM7cUJBQ0o7eUJBQU0sSUFBSSxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxJQUFJLE1BQUssZ0JBQWdCLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTt3QkFDekUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQzFDO2lCQUNGO2dCQUFDLFdBQU07b0JBQ04sc0NBQXNDO2lCQUN2QztZQUNILENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDckIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDckIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDakIsQ0FBQyxDQUFDO1NBQ0g7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDZixNQUFNLEdBQUcsQ0FBQztTQUNYO0lBQ0gsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsSUFBSSxXQUFXOztRQUNiLE9BQU8sQ0FBQSxNQUFBLElBQUksQ0FBQyxFQUFFLDBDQUFFLFVBQVUsTUFBSyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ2hELENBQUM7Ozs7WUE1RUYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKiogV2ViU29ja2V0IG1lc3NhZ2UgdHlwZXMgZnJvbSBiYWNrZW5kIHNpZ25hbGluZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NNZXNzYWdlUm9vbUNyZWF0ZWQge1xuICB0eXBlOiAncm9vbV9jcmVhdGVkJztcbiAgcm9vbV91cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXc01lc3NhZ2VVc2VyVHJhbnNjcmlwdCB7XG4gIHR5cGU6ICd1c2VyX3RyYW5zY3JpcHQnO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGZpbmFsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXc01lc3NhZ2VCb3RUcmFuc2NyaXB0IHtcbiAgdHlwZTogJ2JvdF90cmFuc2NyaXB0JztcbiAgdGV4dDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBXc01lc3NhZ2UgPVxuICB8IFdzTWVzc2FnZVJvb21DcmVhdGVkXG4gIHwgV3NNZXNzYWdlVXNlclRyYW5zY3JpcHRcbiAgfCBXc01lc3NhZ2VCb3RUcmFuc2NyaXB0O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zY3JpcHREYXRhIHtcbiAgdGV4dDogc3RyaW5nO1xuICBmaW5hbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXZWJTb2NrZXQtb25seSBjbGllbnQgZm9yIHZvaWNlIGFnZW50IHNpZ25hbGluZy5cbiAqIENSSVRJQ0FMOiBVc2VzIG5hdGl2ZSBXZWJTb2NrZXQgb25seS4gTk8gU29ja2V0LklPLCBOTyBuZ3gtc29ja2V0LWlvLlxuICpcbiAqIFJlc3BvbnNpYmlsaXRpZXM6XG4gKiAtIENvbm5lY3QgdG8gd3NfdXJsIChmcm9tIFBPU1QgL2FpL2Fzay12b2ljZSByZXNwb25zZSlcbiAqIC0gUGFyc2UgSlNPTiBtZXNzYWdlcyAocm9vbV9jcmVhdGVkLCB1c2VyX3RyYW5zY3JpcHQsIGJvdF90cmFuc2NyaXB0KVxuICogLSBFbWl0IHJvb21DcmVhdGVkJCwgdXNlclRyYW5zY3JpcHQkLCBib3RUcmFuc2NyaXB0JFxuICogLSBOTyBhdWRpbyBsb2dpYywgTk8gbWljIGxvZ2ljLiBBdWRpbyBpcyBoYW5kbGVkIGJ5IERhaWx5LmpzIChXZWJSVEMpLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0Vm9pY2VDbGllbnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSB3czogV2ViU29ja2V0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcm9vbUNyZWF0ZWRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIHVzZXJUcmFuc2NyaXB0U3ViamVjdCA9IG5ldyBTdWJqZWN0PFRyYW5zY3JpcHREYXRhPigpO1xuICBwcml2YXRlIGJvdFRyYW5zY3JpcHRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIC8qKiBFbWl0cyByb29tX3VybCB3aGVuIGJhY2tlbmQgc2VuZHMgcm9vbV9jcmVhdGVkLiAqL1xuICByb29tQ3JlYXRlZCQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm9vbUNyZWF0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKiBFbWl0cyB1c2VyIHRyYW5zY3JpcHQgdXBkYXRlcy4gKi9cbiAgdXNlclRyYW5zY3JpcHQkOiBPYnNlcnZhYmxlPFRyYW5zY3JpcHREYXRhPiA9XG4gICAgdGhpcy51c2VyVHJhbnNjcmlwdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqIEVtaXRzIGJvdCB0cmFuc2NyaXB0IHVwZGF0ZXMuICovXG4gIGJvdFRyYW5zY3JpcHQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPVxuICAgIHRoaXMuYm90VHJhbnNjcmlwdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqIENvbm5lY3QgdG8gc2lnbmFsaW5nIFdlYlNvY2tldC4gTm8gYXVkaW8gb3ZlciB0aGlzIGNvbm5lY3Rpb24uICovXG4gIGNvbm5lY3Qod3NVcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLndzPy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy53cykge1xuICAgICAgdGhpcy53cy5jbG9zZSgpO1xuICAgICAgdGhpcy53cyA9IG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud3MgPSBuZXcgV2ViU29ja2V0KHdzVXJsKTtcbiAgICAgIHRoaXMud3Mub25tZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgIGlmIChtc2c/LnR5cGUgPT09ICdyb29tX2NyZWF0ZWQnKSB7XG4gICAgICAgICAgICBjb25zdCByb29tVXJsID0gKG1zZy5yb29tX3VybCA/PyBtc2cucm9vbVVybCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByb29tVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICB0aGlzLnJvb21DcmVhdGVkU3ViamVjdC5uZXh0KHJvb21VcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobXNnPy50eXBlID09PSAndXNlcl90cmFuc2NyaXB0JyAmJiB0eXBlb2YgbXNnLnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJUcmFuc2NyaXB0U3ViamVjdC5uZXh0KHtcbiAgICAgICAgICAgICAgdGV4dDogbXNnLnRleHQsXG4gICAgICAgICAgICAgIGZpbmFsOiBtc2cuZmluYWwgPT09IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZz8udHlwZSA9PT0gJ2JvdF90cmFuc2NyaXB0JyAmJiB0eXBlb2YgbXNnLnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmJvdFRyYW5zY3JpcHRTdWJqZWN0Lm5leHQobXNnLnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSWdub3JlIG5vbi1KU09OIG9yIHVua25vd24gbWVzc2FnZXNcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMud3Mub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgICB9O1xuICAgICAgdGhpcy53cy5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLndzID0gbnVsbDtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdXZWJTb2NrZXRWb2ljZUNsaWVudDogY29ubmVjdCBmYWlsZWQnLCBlcnIpO1xuICAgICAgdGhpcy53cyA9IG51bGw7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqIERpc2Nvbm5lY3QgYW5kIGNsZWFudXAuICovXG4gIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud3MpIHtcbiAgICAgIHRoaXMud3MuY2xvc2UoKTtcbiAgICAgIHRoaXMud3MgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBXZWJTb2NrZXQgaXMgb3Blbi4gKi9cbiAgZ2V0IGlzQ29ubmVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndzPy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcbiAgfVxufVxuIl19
@@ -1,65 +0,0 @@
1
- import { NgZone } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- /**
4
- * Daily.js WebRTC client for voice agent audio.
5
- * Responsibilities:
6
- * - Create and manage Daily CallObject
7
- * - Join Daily room using room_url
8
- * - Handle mic capture + speaker playback
9
- * - Bot speaking detection via AnalyserNode on remote track (instant)
10
- * - User speaking detection via active-speaker-change
11
- * - Expose speaking$ (bot speaking), userSpeaking$ (user speaking), micMuted$
12
- * - Expose localStream$ for waveform visualization (AudioAnalyzerService)
13
- */
14
- export declare class DailyVoiceClientService {
15
- private ngZone;
16
- private callObject;
17
- private localStream;
18
- private localSessionId;
19
- /** Explicit playback of remote (bot) audio; required in some browsers. */
20
- private remoteAudioElement;
21
- /** AnalyserNode-based remote audio monitor for instant bot speaking detection. */
22
- private remoteAudioContext;
23
- private remoteSpeakingRAF;
24
- private speakingSubject;
25
- private userSpeakingSubject;
26
- private micMutedSubject;
27
- private localStreamSubject;
28
- private firstRemoteAudioFrameSubject;
29
- /** True when bot (remote participant) is the active speaker. */
30
- speaking$: Observable<boolean>;
31
- /** True when user (local participant) is the active speaker. */
32
- userSpeaking$: Observable<boolean>;
33
- /** True when mic is muted. */
34
- micMuted$: Observable<boolean>;
35
- /** Emits local mic stream for waveform visualization. */
36
- localStream$: Observable<MediaStream | null>;
37
- /** Emits true once when first remote audio frame starts playing. */
38
- firstRemoteAudioFrame$: Observable<boolean>;
39
- constructor(ngZone: NgZone);
40
- /**
41
- * Connect to Daily room. Acquires mic first for waveform, then joins with audio.
42
- * @param roomUrl Daily room URL (from room_created)
43
- * @param token Optional meeting token
44
- */
45
- connect(roomUrl: string, token?: string): Promise<void>;
46
- private setupEventHandlers;
47
- /**
48
- * Play remote (bot) audio track via a dedicated audio element.
49
- * Required in many browsers where Daily's internal playback does not output to speakers.
50
- */
51
- private playRemoteTrack;
52
- /**
53
- * Monitor remote audio track energy via AnalyserNode.
54
- * Polls at ~60fps and flips speakingSubject based on actual audio energy.
55
- */
56
- private monitorRemoteAudio;
57
- private stopRemoteAudioMonitor;
58
- private stopRemoteAudio;
59
- /** Set mic muted state. */
60
- setMuted(muted: boolean): void;
61
- /** Disconnect and cleanup. */
62
- disconnect(): Promise<void>;
63
- private cleanup;
64
- }
65
- //# sourceMappingURL=daily-voice-client.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daily-voice-client.service.d.ts","sourceRoot":"/Users/rohitthakur/hive-gpt/HiveAI-Packages/Angular/projects/hivegpt/eventsgpt-angular/src/","sources":["lib/components/voice-agent/services/daily-voice-client.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAmB,UAAU,EAAE,MAAM,MAAM,CAAC;AAInD;;;;;;;;;;GAUG;AACH,qBAGa,uBAAuB;IAkCtB,OAAO,CAAC,MAAM;IAjC1B,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,cAAc,CAAuB;IAC7C,0EAA0E;IAC1E,OAAO,CAAC,kBAAkB,CAAiC;IAE3D,kFAAkF;IAClF,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,kBAAkB,CAAiD;IAC3E,OAAO,CAAC,4BAA4B,CAAuC;IAE3E,gEAAgE;IAChE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAuC;IAErE,gEAAgE;IAChE,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC,CAA2C;IAE7E,8BAA8B;IAC9B,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAuC;IAErE,yDAAyD;IACzD,YAAY,EAAE,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,CACH;IAEzC,oEAAoE;IACpE,sBAAsB,EAAE,UAAU,CAAC,OAAO,CAAC,CACQ;gBAE/B,MAAM,EAAE,MAAM;IAElC;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD7D,OAAO,CAAC,kBAAkB;IAuD1B;;;OAGG;IACH,OAAO,CAAC,eAAe;IA0CvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAoD1B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,eAAe;IAUvB,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAM9B,8BAA8B;IACxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,OAAO,CAAC,OAAO;CAkBhB"}
@@ -1,49 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- /** WebSocket message types from backend signaling. */
3
- export interface WsMessageRoomCreated {
4
- type: 'room_created';
5
- room_url: string;
6
- }
7
- export interface WsMessageUserTranscript {
8
- type: 'user_transcript';
9
- text: string;
10
- final?: boolean;
11
- }
12
- export interface WsMessageBotTranscript {
13
- type: 'bot_transcript';
14
- text: string;
15
- }
16
- export declare type WsMessage = WsMessageRoomCreated | WsMessageUserTranscript | WsMessageBotTranscript;
17
- export interface TranscriptData {
18
- text: string;
19
- final: boolean;
20
- }
21
- /**
22
- * WebSocket-only client for voice agent signaling.
23
- * CRITICAL: Uses native WebSocket only. NO Socket.IO, NO ngx-socket-io.
24
- *
25
- * Responsibilities:
26
- * - Connect to ws_url (from POST /ai/ask-voice response)
27
- * - Parse JSON messages (room_created, user_transcript, bot_transcript)
28
- * - Emit roomCreated$, userTranscript$, botTranscript$
29
- * - NO audio logic, NO mic logic. Audio is handled by Daily.js (WebRTC).
30
- */
31
- export declare class WebSocketVoiceClientService {
32
- private ws;
33
- private roomCreatedSubject;
34
- private userTranscriptSubject;
35
- private botTranscriptSubject;
36
- /** Emits room_url when backend sends room_created. */
37
- roomCreated$: Observable<string>;
38
- /** Emits user transcript updates. */
39
- userTranscript$: Observable<TranscriptData>;
40
- /** Emits bot transcript updates. */
41
- botTranscript$: Observable<string>;
42
- /** Connect to signaling WebSocket. No audio over this connection. */
43
- connect(wsUrl: string): void;
44
- /** Disconnect and cleanup. */
45
- disconnect(): void;
46
- /** Whether the WebSocket is open. */
47
- get isConnected(): boolean;
48
- }
49
- //# sourceMappingURL=websocket-voice-client.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-voice-client.service.d.ts","sourceRoot":"/Users/rohitthakur/hive-gpt/HiveAI-Packages/Angular/projects/hivegpt/eventsgpt-angular/src/","sources":["lib/components/voice-agent/services/websocket-voice-client.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAE3C,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oBAAY,SAAS,GACjB,oBAAoB,GACpB,uBAAuB,GACvB,sBAAsB,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,qBAGa,2BAA2B;IACtC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,oBAAoB,CAAyB;IAErD,sDAAsD;IACtD,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAA0C;IAE1E,qCAAqC;IACrC,eAAe,EAAE,UAAU,CAAC,cAAc,CAAC,CACC;IAE5C,oCAAoC;IACpC,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,CACS;IAE3C,qEAAqE;IACrE,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IA4C5B,8BAA8B;IAC9B,UAAU,IAAI,IAAI;IAOlB,qCAAqC;IACrC,IAAI,WAAW,IAAI,OAAO,CAEzB;CACF"}