@skillhq/concierge 1.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 (138) hide show
  1. package/README.md +91 -0
  2. package/dist/cli/program.d.ts +3 -0
  3. package/dist/cli/program.d.ts.map +1 -0
  4. package/dist/cli/program.js +46 -0
  5. package/dist/cli/program.js.map +1 -0
  6. package/dist/cli/shared.d.ts +18 -0
  7. package/dist/cli/shared.d.ts.map +1 -0
  8. package/dist/cli/shared.js +2 -0
  9. package/dist/cli/shared.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +5 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/commands/call.d.ts +7 -0
  15. package/dist/commands/call.d.ts.map +1 -0
  16. package/dist/commands/call.js +409 -0
  17. package/dist/commands/call.js.map +1 -0
  18. package/dist/commands/config.d.ts +4 -0
  19. package/dist/commands/config.d.ts.map +1 -0
  20. package/dist/commands/config.js +120 -0
  21. package/dist/commands/config.js.map +1 -0
  22. package/dist/commands/find-contact.d.ts +4 -0
  23. package/dist/commands/find-contact.d.ts.map +1 -0
  24. package/dist/commands/find-contact.js +57 -0
  25. package/dist/commands/find-contact.js.map +1 -0
  26. package/dist/commands/server.d.ts +7 -0
  27. package/dist/commands/server.d.ts.map +1 -0
  28. package/dist/commands/server.js +212 -0
  29. package/dist/commands/server.js.map +1 -0
  30. package/dist/index.d.ts +4 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +3 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/lib/call/audio/mulaw.d.ts +35 -0
  35. package/dist/lib/call/audio/mulaw.d.ts.map +1 -0
  36. package/dist/lib/call/audio/mulaw.js +109 -0
  37. package/dist/lib/call/audio/mulaw.js.map +1 -0
  38. package/dist/lib/call/audio/pcm-utils.d.ts +62 -0
  39. package/dist/lib/call/audio/pcm-utils.d.ts.map +1 -0
  40. package/dist/lib/call/audio/pcm-utils.js +149 -0
  41. package/dist/lib/call/audio/pcm-utils.js.map +1 -0
  42. package/dist/lib/call/audio/resample.d.ts +34 -0
  43. package/dist/lib/call/audio/resample.d.ts.map +1 -0
  44. package/dist/lib/call/audio/resample.js +97 -0
  45. package/dist/lib/call/audio/resample.js.map +1 -0
  46. package/dist/lib/call/audio/streaming-decoder.d.ts +45 -0
  47. package/dist/lib/call/audio/streaming-decoder.d.ts.map +1 -0
  48. package/dist/lib/call/audio/streaming-decoder.js +110 -0
  49. package/dist/lib/call/audio/streaming-decoder.js.map +1 -0
  50. package/dist/lib/call/call-server.d.ts +110 -0
  51. package/dist/lib/call/call-server.d.ts.map +1 -0
  52. package/dist/lib/call/call-server.js +681 -0
  53. package/dist/lib/call/call-server.js.map +1 -0
  54. package/dist/lib/call/call-session.d.ts +133 -0
  55. package/dist/lib/call/call-session.d.ts.map +1 -0
  56. package/dist/lib/call/call-session.js +890 -0
  57. package/dist/lib/call/call-session.js.map +1 -0
  58. package/dist/lib/call/call-types.d.ts +133 -0
  59. package/dist/lib/call/call-types.d.ts.map +1 -0
  60. package/dist/lib/call/call-types.js +16 -0
  61. package/dist/lib/call/call-types.js.map +1 -0
  62. package/dist/lib/call/conversation-ai.d.ts +56 -0
  63. package/dist/lib/call/conversation-ai.d.ts.map +1 -0
  64. package/dist/lib/call/conversation-ai.js +276 -0
  65. package/dist/lib/call/conversation-ai.js.map +1 -0
  66. package/dist/lib/call/eval/codec-test.d.ts +45 -0
  67. package/dist/lib/call/eval/codec-test.d.ts.map +1 -0
  68. package/dist/lib/call/eval/codec-test.js +169 -0
  69. package/dist/lib/call/eval/codec-test.js.map +1 -0
  70. package/dist/lib/call/eval/conversation-scripts.d.ts +55 -0
  71. package/dist/lib/call/eval/conversation-scripts.d.ts.map +1 -0
  72. package/dist/lib/call/eval/conversation-scripts.js +359 -0
  73. package/dist/lib/call/eval/conversation-scripts.js.map +1 -0
  74. package/dist/lib/call/eval/eval-runner.d.ts +64 -0
  75. package/dist/lib/call/eval/eval-runner.d.ts.map +1 -0
  76. package/dist/lib/call/eval/eval-runner.js +369 -0
  77. package/dist/lib/call/eval/eval-runner.js.map +1 -0
  78. package/dist/lib/call/eval/index.d.ts +9 -0
  79. package/dist/lib/call/eval/index.d.ts.map +1 -0
  80. package/dist/lib/call/eval/index.js +9 -0
  81. package/dist/lib/call/eval/index.js.map +1 -0
  82. package/dist/lib/call/eval/integration-test-suite.d.ts +71 -0
  83. package/dist/lib/call/eval/integration-test-suite.d.ts.map +1 -0
  84. package/dist/lib/call/eval/integration-test-suite.js +519 -0
  85. package/dist/lib/call/eval/integration-test-suite.js.map +1 -0
  86. package/dist/lib/call/eval/turn-taking-test.d.ts +84 -0
  87. package/dist/lib/call/eval/turn-taking-test.d.ts.map +1 -0
  88. package/dist/lib/call/eval/turn-taking-test.js +260 -0
  89. package/dist/lib/call/eval/turn-taking-test.js.map +1 -0
  90. package/dist/lib/call/index.d.ts +12 -0
  91. package/dist/lib/call/index.d.ts.map +1 -0
  92. package/dist/lib/call/index.js +17 -0
  93. package/dist/lib/call/index.js.map +1 -0
  94. package/dist/lib/call/providers/deepgram.d.ts +81 -0
  95. package/dist/lib/call/providers/deepgram.d.ts.map +1 -0
  96. package/dist/lib/call/providers/deepgram.js +279 -0
  97. package/dist/lib/call/providers/deepgram.js.map +1 -0
  98. package/dist/lib/call/providers/elevenlabs.d.ts +78 -0
  99. package/dist/lib/call/providers/elevenlabs.d.ts.map +1 -0
  100. package/dist/lib/call/providers/elevenlabs.js +272 -0
  101. package/dist/lib/call/providers/elevenlabs.js.map +1 -0
  102. package/dist/lib/call/providers/local-deps.d.ts +18 -0
  103. package/dist/lib/call/providers/local-deps.d.ts.map +1 -0
  104. package/dist/lib/call/providers/local-deps.js +114 -0
  105. package/dist/lib/call/providers/local-deps.js.map +1 -0
  106. package/dist/lib/call/providers/twilio.d.ts +53 -0
  107. package/dist/lib/call/providers/twilio.d.ts.map +1 -0
  108. package/dist/lib/call/providers/twilio.js +173 -0
  109. package/dist/lib/call/providers/twilio.js.map +1 -0
  110. package/dist/lib/concierge-client-types.d.ts +68 -0
  111. package/dist/lib/concierge-client-types.d.ts.map +1 -0
  112. package/dist/lib/concierge-client-types.js +2 -0
  113. package/dist/lib/concierge-client-types.js.map +1 -0
  114. package/dist/lib/concierge-client.d.ts +29 -0
  115. package/dist/lib/concierge-client.d.ts.map +1 -0
  116. package/dist/lib/concierge-client.js +534 -0
  117. package/dist/lib/concierge-client.js.map +1 -0
  118. package/dist/lib/config.d.ts +9 -0
  119. package/dist/lib/config.d.ts.map +1 -0
  120. package/dist/lib/config.js +66 -0
  121. package/dist/lib/config.js.map +1 -0
  122. package/dist/lib/output.d.ts +7 -0
  123. package/dist/lib/output.d.ts.map +1 -0
  124. package/dist/lib/output.js +114 -0
  125. package/dist/lib/output.js.map +1 -0
  126. package/dist/lib/utils/contact-extractor.d.ts +12 -0
  127. package/dist/lib/utils/contact-extractor.d.ts.map +1 -0
  128. package/dist/lib/utils/contact-extractor.js +159 -0
  129. package/dist/lib/utils/contact-extractor.js.map +1 -0
  130. package/dist/lib/utils/formatters.d.ts +15 -0
  131. package/dist/lib/utils/formatters.d.ts.map +1 -0
  132. package/dist/lib/utils/formatters.js +107 -0
  133. package/dist/lib/utils/formatters.js.map +1 -0
  134. package/dist/lib/utils/url-parser.d.ts +11 -0
  135. package/dist/lib/utils/url-parser.d.ts.map +1 -0
  136. package/dist/lib/utils/url-parser.js +103 -0
  137. package/dist/lib/utils/url-parser.js.map +1 -0
  138. package/package.json +67 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepgram.js","sourceRoot":"","sources":["../../../../src/lib/call/providers/deepgram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * ElevenLabs provider for text-to-speech
3
+ */
4
+ import { EventEmitter } from 'node:events';
5
+ import type { ElevenLabsVoiceSettings } from '../call-types.js';
6
+ export interface ElevenLabsConfig {
7
+ apiKey: string;
8
+ voiceId: string;
9
+ modelId?: string;
10
+ voiceSettings?: ElevenLabsVoiceSettings;
11
+ }
12
+ export interface ElevenLabsTTSPreflightResult {
13
+ ok: boolean;
14
+ provider: 'elevenlabs';
15
+ estimatedNeededChars: number;
16
+ remainingChars?: number;
17
+ characterLimit?: number;
18
+ characterCount?: number;
19
+ message: string;
20
+ }
21
+ export declare class ElevenLabsApiError extends Error {
22
+ readonly status: number;
23
+ readonly code?: string;
24
+ readonly provider = "elevenlabs";
25
+ readonly rawBody: string;
26
+ constructor(status: number, message: string, rawBody: string, code?: string);
27
+ get isQuotaExceeded(): boolean;
28
+ }
29
+ /**
30
+ * Conservative estimate of characters a typical call will need for TTS.
31
+ * Used to fail fast before dialing when quota is clearly insufficient.
32
+ */
33
+ export declare function estimateCallTTSCharacters(goal: string, context?: string): number;
34
+ /**
35
+ * Check ElevenLabs subscription budget before initiating a real phone call.
36
+ */
37
+ export declare function preflightElevenLabsTTSBudget(apiKey: string, goal: string, context?: string): Promise<ElevenLabsTTSPreflightResult>;
38
+ /**
39
+ * Stream text-to-speech from ElevenLabs
40
+ * Returns audio chunks as they become available
41
+ */
42
+ export declare function streamTTS(config: ElevenLabsConfig, text: string): AsyncGenerator<Buffer>;
43
+ /**
44
+ * Get TTS audio as a single buffer
45
+ */
46
+ export declare function synthesizeSpeech(config: ElevenLabsConfig, text: string): Promise<Buffer>;
47
+ /**
48
+ * ElevenLabs TTS class for streaming synthesis
49
+ */
50
+ export declare class ElevenLabsTTS extends EventEmitter {
51
+ private readonly config;
52
+ private abortController;
53
+ constructor(config: ElevenLabsConfig);
54
+ /**
55
+ * Synthesize text to speech and emit audio chunks
56
+ * Emits 'audio' events with MP3 data (converted to µ-law via ffmpeg in call-session)
57
+ */
58
+ speak(text: string, requestId?: number): Promise<void>;
59
+ /**
60
+ * Cancel ongoing speech synthesis
61
+ */
62
+ cancel(): void;
63
+ }
64
+ /**
65
+ * Create an ElevenLabs TTS instance for phone calls
66
+ */
67
+ export declare function createPhoneCallTTS(apiKey: string, voiceId: string): ElevenLabsTTS;
68
+ /**
69
+ * List available voices
70
+ */
71
+ export interface VoiceInfo {
72
+ voice_id: string;
73
+ name: string;
74
+ category: string;
75
+ labels: Record<string, string>;
76
+ }
77
+ export declare function listVoices(apiKey: string): Promise<VoiceInfo[]>;
78
+ //# sourceMappingURL=elevenlabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elevenlabs.d.ts","sourceRoot":"","sources":["../../../../src/lib/call/providers/elevenlabs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,uBAAuB,CAAC;CACzC;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,YAAY,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAsBD,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,gBAAgB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IAQ3E,IAAI,eAAe,IAAI,OAAO,CAE7B;CACF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAKhF;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,4BAA4B,CAAC,CAqEvC;AAkDD;;;GAGG;AACH,wBAAuB,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAc/F;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM9F;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,eAAe,CAAgC;gBAE3C,MAAM,EAAE,gBAAgB;IAKpC;;;OAGG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B5D;;OAEG;IACH,MAAM,IAAI,IAAI;CAMf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAYjF;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAarE"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * ElevenLabs provider for text-to-speech
3
+ */
4
+ import { EventEmitter } from 'node:events';
5
+ const DEFAULT_VOICE_SETTINGS = {
6
+ stability: 0.5,
7
+ similarity_boost: 0.75,
8
+ style: 0,
9
+ use_speaker_boost: true,
10
+ };
11
+ function toNumber(value) {
12
+ if (typeof value === 'number' && Number.isFinite(value)) {
13
+ return value;
14
+ }
15
+ if (typeof value === 'string') {
16
+ const parsed = Number.parseFloat(value);
17
+ if (Number.isFinite(parsed)) {
18
+ return parsed;
19
+ }
20
+ }
21
+ return undefined;
22
+ }
23
+ export class ElevenLabsApiError extends Error {
24
+ status;
25
+ code;
26
+ provider = 'elevenlabs';
27
+ rawBody;
28
+ constructor(status, message, rawBody, code) {
29
+ super(message);
30
+ this.name = 'ElevenLabsApiError';
31
+ this.status = status;
32
+ this.code = code;
33
+ this.rawBody = rawBody;
34
+ }
35
+ get isQuotaExceeded() {
36
+ return this.code === 'quota_exceeded';
37
+ }
38
+ }
39
+ /**
40
+ * Conservative estimate of characters a typical call will need for TTS.
41
+ * Used to fail fast before dialing when quota is clearly insufficient.
42
+ */
43
+ export function estimateCallTTSCharacters(goal, context) {
44
+ const goalLen = goal.trim().length;
45
+ const contextLen = (context ?? '').trim().length;
46
+ const estimate = 900 + Math.min(700, Math.round(goalLen * 1.8)) + Math.min(800, Math.round(contextLen * 0.8));
47
+ return Math.max(1200, Math.min(3000, estimate));
48
+ }
49
+ /**
50
+ * Check ElevenLabs subscription budget before initiating a real phone call.
51
+ */
52
+ export async function preflightElevenLabsTTSBudget(apiKey, goal, context) {
53
+ const estimatedNeededChars = estimateCallTTSCharacters(goal, context);
54
+ try {
55
+ const response = await fetch('https://api.elevenlabs.io/v1/user/subscription', {
56
+ headers: {
57
+ 'xi-api-key': apiKey,
58
+ },
59
+ });
60
+ if (!response.ok) {
61
+ return {
62
+ ok: true,
63
+ provider: 'elevenlabs',
64
+ estimatedNeededChars,
65
+ message: `TTS preflight could not verify quota (HTTP ${response.status}); continuing.`,
66
+ };
67
+ }
68
+ const data = (await response.json());
69
+ const characterLimit = toNumber(data.character_limit ?? data.characterLimit);
70
+ const characterCount = toNumber(data.character_count ?? data.characterCount);
71
+ const remainingCharsRaw = toNumber(data.remaining_characters ?? data.remainingCharacters);
72
+ const remainingChars = remainingCharsRaw ??
73
+ (characterLimit !== undefined && characterCount !== undefined
74
+ ? Math.max(0, characterLimit - characterCount)
75
+ : undefined);
76
+ if (remainingChars === undefined) {
77
+ return {
78
+ ok: true,
79
+ provider: 'elevenlabs',
80
+ estimatedNeededChars,
81
+ characterLimit,
82
+ characterCount,
83
+ message: 'TTS preflight could not determine remaining characters; continuing.',
84
+ };
85
+ }
86
+ if (remainingChars < estimatedNeededChars) {
87
+ return {
88
+ ok: false,
89
+ provider: 'elevenlabs',
90
+ estimatedNeededChars,
91
+ remainingChars,
92
+ characterLimit,
93
+ characterCount,
94
+ message: `TTS preflight failed: ElevenLabs has ~${Math.round(remainingChars)} characters remaining, estimated ~${estimatedNeededChars} needed for this call. Top up credits first.`,
95
+ };
96
+ }
97
+ return {
98
+ ok: true,
99
+ provider: 'elevenlabs',
100
+ estimatedNeededChars,
101
+ remainingChars,
102
+ characterLimit,
103
+ characterCount,
104
+ message: `TTS preflight passed: ~${Math.round(remainingChars)} characters remaining (estimated ~${estimatedNeededChars} needed).`,
105
+ };
106
+ }
107
+ catch (error) {
108
+ return {
109
+ ok: true,
110
+ provider: 'elevenlabs',
111
+ estimatedNeededChars,
112
+ message: `TTS preflight could not verify quota (${error instanceof Error ? error.message : String(error)}); continuing.`,
113
+ };
114
+ }
115
+ }
116
+ /**
117
+ * Internal helper to make TTS API request
118
+ */
119
+ async function makeTTSRequest(config, text, signal) {
120
+ const response = await fetch(`https://api.elevenlabs.io/v1/text-to-speech/${config.voiceId}/stream`, {
121
+ method: 'POST',
122
+ headers: {
123
+ 'Content-Type': 'application/json',
124
+ 'xi-api-key': config.apiKey,
125
+ },
126
+ body: JSON.stringify({
127
+ text,
128
+ model_id: config.modelId ?? 'eleven_turbo_v2',
129
+ voice_settings: config.voiceSettings ?? DEFAULT_VOICE_SETTINGS,
130
+ // ElevenLabs returns MP3 regardless of output_format requested
131
+ // We convert via ffmpeg, so request high-quality MP3
132
+ output_format: 'mp3_44100_128',
133
+ }),
134
+ signal,
135
+ });
136
+ if (!response.ok) {
137
+ const rawBody = await response.text();
138
+ let code;
139
+ let message = `ElevenLabs API error: ${response.status}`;
140
+ try {
141
+ const parsed = JSON.parse(rawBody);
142
+ code = parsed.detail?.status;
143
+ if (parsed.detail?.message) {
144
+ message = `ElevenLabs API error (${parsed.detail.status ?? response.status}): ${parsed.detail.message}`;
145
+ }
146
+ }
147
+ catch {
148
+ if (rawBody) {
149
+ message = `ElevenLabs API error: ${response.status} - ${rawBody}`;
150
+ }
151
+ }
152
+ throw new ElevenLabsApiError(response.status, message, rawBody, code);
153
+ }
154
+ if (!response.body) {
155
+ throw new Error('No response body from ElevenLabs');
156
+ }
157
+ return response;
158
+ }
159
+ /**
160
+ * Stream text-to-speech from ElevenLabs
161
+ * Returns audio chunks as they become available
162
+ */
163
+ export async function* streamTTS(config, text) {
164
+ const response = await makeTTSRequest(config, text);
165
+ // Stream the response
166
+ const reader = response.body.getReader();
167
+ try {
168
+ while (true) {
169
+ const { done, value } = await reader.read();
170
+ if (done)
171
+ break;
172
+ yield Buffer.from(value);
173
+ }
174
+ }
175
+ finally {
176
+ reader.releaseLock();
177
+ }
178
+ }
179
+ /**
180
+ * Get TTS audio as a single buffer
181
+ */
182
+ export async function synthesizeSpeech(config, text) {
183
+ const chunks = [];
184
+ for await (const chunk of streamTTS(config, text)) {
185
+ chunks.push(chunk);
186
+ }
187
+ return Buffer.concat(chunks);
188
+ }
189
+ /**
190
+ * ElevenLabs TTS class for streaming synthesis
191
+ */
192
+ export class ElevenLabsTTS extends EventEmitter {
193
+ config;
194
+ abortController = null;
195
+ constructor(config) {
196
+ super();
197
+ this.config = config;
198
+ }
199
+ /**
200
+ * Synthesize text to speech and emit audio chunks
201
+ * Emits 'audio' events with MP3 data (converted to µ-law via ffmpeg in call-session)
202
+ */
203
+ async speak(text, requestId) {
204
+ this.abortController = new AbortController();
205
+ try {
206
+ const response = await makeTTSRequest(this.config, text, this.abortController.signal);
207
+ const reader = response.body.getReader();
208
+ try {
209
+ while (true) {
210
+ const { done, value } = await reader.read();
211
+ if (done)
212
+ break;
213
+ this.emit('audio', Buffer.from(value), requestId);
214
+ }
215
+ this.emit('done', requestId);
216
+ }
217
+ finally {
218
+ reader.releaseLock();
219
+ }
220
+ }
221
+ catch (error) {
222
+ if (error instanceof Error && error.name === 'AbortError') {
223
+ this.emit('cancelled', requestId);
224
+ }
225
+ else {
226
+ this.emit('error', error, requestId);
227
+ throw error;
228
+ }
229
+ }
230
+ finally {
231
+ this.abortController = null;
232
+ }
233
+ }
234
+ /**
235
+ * Cancel ongoing speech synthesis
236
+ */
237
+ cancel() {
238
+ if (this.abortController) {
239
+ this.abortController.abort();
240
+ this.abortController = null;
241
+ }
242
+ }
243
+ }
244
+ /**
245
+ * Create an ElevenLabs TTS instance for phone calls
246
+ */
247
+ export function createPhoneCallTTS(apiKey, voiceId) {
248
+ return new ElevenLabsTTS({
249
+ apiKey,
250
+ voiceId,
251
+ modelId: 'eleven_turbo_v2', // Fastest model
252
+ voiceSettings: {
253
+ stability: 0.5,
254
+ similarity_boost: 0.75,
255
+ style: 0,
256
+ use_speaker_boost: true,
257
+ },
258
+ });
259
+ }
260
+ export async function listVoices(apiKey) {
261
+ const response = await fetch('https://api.elevenlabs.io/v1/voices', {
262
+ headers: {
263
+ 'xi-api-key': apiKey,
264
+ },
265
+ });
266
+ if (!response.ok) {
267
+ throw new Error(`Failed to list voices: ${response.status}`);
268
+ }
269
+ const data = (await response.json());
270
+ return data.voices;
271
+ }
272
+ //# sourceMappingURL=elevenlabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elevenlabs.js","sourceRoot":"","sources":["../../../../src/lib/call/providers/elevenlabs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Local system dependency preflight checks for call runtime.
3
+ */
4
+ export interface LocalDependencyPreflightResult {
5
+ ok: boolean;
6
+ provider: 'local';
7
+ dependency: 'ffmpeg' | 'ngrok';
8
+ message: string;
9
+ }
10
+ /**
11
+ * Checks that ffmpeg is available for realtime MP3 -> µ-law conversion.
12
+ */
13
+ export declare function preflightFfmpeg(): Promise<LocalDependencyPreflightResult>;
14
+ /**
15
+ * Checks that ngrok is available (used by auto-infra call mode).
16
+ */
17
+ export declare function preflightNgrok(): Promise<LocalDependencyPreflightResult>;
18
+ //# sourceMappingURL=local-deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-deps.d.ts","sourceRoot":"","sources":["../../../../src/lib/call/providers/local-deps.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AA4DD;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,8BAA8B,CAAC,CAoC/E;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,8BAA8B,CAAC,CA0B9E"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Local system dependency preflight checks for call runtime.
3
+ */
4
+ import { spawnSync } from 'node:child_process';
5
+ function checkCommand(command, args) {
6
+ const result = spawnSync(command, args, {
7
+ stdio: 'ignore',
8
+ timeout: 4000,
9
+ });
10
+ if (result.error) {
11
+ const error = result.error;
12
+ if (error.code === 'ENOENT') {
13
+ return { ok: false, reason: 'not_found' };
14
+ }
15
+ return { ok: false, reason: error.message };
16
+ }
17
+ if (typeof result.status === 'number' && result.status === 0) {
18
+ return { ok: true };
19
+ }
20
+ return {
21
+ ok: false,
22
+ reason: typeof result.status === 'number' ? `exit_${result.status}` : 'unknown_failure',
23
+ };
24
+ }
25
+ // Tiny known-good MP3 sample used to verify ffmpeg can decode MP3 on this host.
26
+ // Generated from a short sine wave and embedded to avoid external files/tools.
27
+ const MP3_DECODE_SMOKE_SAMPLE_BASE64 = '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';
28
+ function checkFfmpegMp3Decode() {
29
+ const sample = Buffer.from(MP3_DECODE_SMOKE_SAMPLE_BASE64, 'base64');
30
+ const result = spawnSync('ffmpeg', ['-hide_banner', '-loglevel', 'error', '-f', 'mp3', '-i', 'pipe:0', '-f', 'null', '-'], {
31
+ input: sample,
32
+ stdio: ['pipe', 'ignore', 'pipe'],
33
+ timeout: 6000,
34
+ maxBuffer: 1024 * 1024,
35
+ });
36
+ if (result.error) {
37
+ const error = result.error;
38
+ return { ok: false, reason: error.message };
39
+ }
40
+ if (typeof result.status === 'number' && result.status === 0) {
41
+ return { ok: true };
42
+ }
43
+ const stderr = result.stderr?.toString().trim();
44
+ return {
45
+ ok: false,
46
+ reason: stderr ? stderr.slice(0, 220) : `exit_${result.status ?? 'unknown'}`,
47
+ };
48
+ }
49
+ /**
50
+ * Checks that ffmpeg is available for realtime MP3 -> µ-law conversion.
51
+ */
52
+ export async function preflightFfmpeg() {
53
+ const check = checkCommand('ffmpeg', ['-version']);
54
+ if (check.ok) {
55
+ const decodeCheck = checkFfmpegMp3Decode();
56
+ if (!decodeCheck.ok) {
57
+ return {
58
+ ok: false,
59
+ provider: 'local',
60
+ dependency: 'ffmpeg',
61
+ message: `Local preflight failed: ffmpeg is installed but cannot decode MP3 (${decodeCheck.reason ?? 'unknown reason'}). Install a full ffmpeg build with MP3 decode support and retry.`,
62
+ };
63
+ }
64
+ return {
65
+ ok: true,
66
+ provider: 'local',
67
+ dependency: 'ffmpeg',
68
+ message: 'Local preflight passed: ffmpeg is available and MP3 decode works.',
69
+ };
70
+ }
71
+ if (check.reason === 'not_found') {
72
+ return {
73
+ ok: false,
74
+ provider: 'local',
75
+ dependency: 'ffmpeg',
76
+ message: 'Local preflight failed: ffmpeg is not installed or not in PATH. Install ffmpeg and retry.',
77
+ };
78
+ }
79
+ return {
80
+ ok: false,
81
+ provider: 'local',
82
+ dependency: 'ffmpeg',
83
+ message: `Local preflight failed: ffmpeg check could not run (${check.reason ?? 'unknown error'}).`,
84
+ };
85
+ }
86
+ /**
87
+ * Checks that ngrok is available (used by auto-infra call mode).
88
+ */
89
+ export async function preflightNgrok() {
90
+ const check = checkCommand('ngrok', ['version']);
91
+ if (check.ok) {
92
+ return {
93
+ ok: true,
94
+ provider: 'local',
95
+ dependency: 'ngrok',
96
+ message: 'Local preflight passed: ngrok is available.',
97
+ };
98
+ }
99
+ if (check.reason === 'not_found') {
100
+ return {
101
+ ok: false,
102
+ provider: 'local',
103
+ dependency: 'ngrok',
104
+ message: 'Local preflight failed: ngrok is not installed or not in PATH. Install ngrok and retry.',
105
+ };
106
+ }
107
+ return {
108
+ ok: false,
109
+ provider: 'local',
110
+ dependency: 'ngrok',
111
+ message: `Local preflight failed: ngrok check could not run (${check.reason ?? 'unknown error'}).`,
112
+ };
113
+ }
114
+ //# sourceMappingURL=local-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-deps.js","sourceRoot":"","sources":["../../../../src/lib/call/providers/local-deps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Twilio provider for phone calls
3
+ */
4
+ import type { CallConfig, TwilioVoiceWebhook } from '../call-types.js';
5
+ export interface TwilioCallResult {
6
+ callSid: string;
7
+ status: string;
8
+ }
9
+ export interface TwilioPreflightResult {
10
+ ok: boolean;
11
+ provider: 'twilio';
12
+ accountStatus?: string;
13
+ fromNumberVerified?: boolean;
14
+ message: string;
15
+ }
16
+ /**
17
+ * Preflight check for Twilio call readiness.
18
+ * Verifies credentials, account status, and that the configured from number exists on the account.
19
+ */
20
+ export declare function preflightTwilioCallSetup(config: CallConfig): Promise<TwilioPreflightResult>;
21
+ /**
22
+ * Initiate an outbound call via Twilio
23
+ */
24
+ export declare function initiateCall(config: CallConfig, toNumber: string, callId: string): Promise<TwilioCallResult>;
25
+ /**
26
+ * Generate TwiML for Media Streams connection
27
+ */
28
+ export declare function generateMediaStreamsTwiml(config: CallConfig, callId: string): string;
29
+ /**
30
+ * Generate TwiML to say something and hang up (for errors)
31
+ */
32
+ export declare function generateErrorTwiml(message: string): string;
33
+ /**
34
+ * Hang up an active call
35
+ */
36
+ export declare function hangupCall(config: CallConfig, callSid: string): Promise<void>;
37
+ /**
38
+ * Get call status
39
+ */
40
+ export declare function getCallStatus(config: CallConfig, callSid: string): Promise<string>;
41
+ /**
42
+ * Parse Twilio webhook body
43
+ */
44
+ export declare function parseWebhookBody(body: string | Record<string, string>): TwilioVoiceWebhook;
45
+ /**
46
+ * Validate Twilio webhook signature (optional but recommended for production)
47
+ */
48
+ export declare function validateWebhookSignature(config: CallConfig, signature: string, url: string, params: Record<string, string>): boolean;
49
+ /**
50
+ * Format phone number to E.164 format
51
+ */
52
+ export declare function formatPhoneNumber(phone: string): string;
53
+ //# sourceMappingURL=twilio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twilio.d.ts","sourceRoot":"","sources":["../../../../src/lib/call/providers/twilio.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAgDjG;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuBlH;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAapF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,kBAAkB,CAW1F;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBvD"}