@skillhq/concierge 1.10.0 → 1.12.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 (47) hide show
  1. package/dist/commands/call.d.ts.map +1 -1
  2. package/dist/commands/call.js +130 -50
  3. package/dist/commands/call.js.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +3 -0
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/lib/call/call-session.d.ts +2 -0
  8. package/dist/lib/call/call-session.d.ts.map +1 -1
  9. package/dist/lib/call/call-session.js +29 -6
  10. package/dist/lib/call/call-session.js.map +1 -1
  11. package/dist/lib/call/conversation-ai.d.ts +7 -0
  12. package/dist/lib/call/conversation-ai.d.ts.map +1 -1
  13. package/dist/lib/call/conversation-ai.js +178 -1
  14. package/dist/lib/call/conversation-ai.js.map +1 -1
  15. package/dist/lib/call/echo-suppression.d.ts +9 -0
  16. package/dist/lib/call/echo-suppression.d.ts.map +1 -0
  17. package/dist/lib/call/echo-suppression.js +13 -0
  18. package/dist/lib/call/echo-suppression.js.map +1 -0
  19. package/dist/lib/call/eval/echo-suppression-test.d.ts +27 -0
  20. package/dist/lib/call/eval/echo-suppression-test.d.ts.map +1 -0
  21. package/dist/lib/call/eval/echo-suppression-test.js +85 -0
  22. package/dist/lib/call/eval/echo-suppression-test.js.map +1 -0
  23. package/dist/lib/call/eval/eval-runner.js +1 -1
  24. package/dist/lib/call/eval/index.d.ts +3 -0
  25. package/dist/lib/call/eval/index.d.ts.map +1 -1
  26. package/dist/lib/call/eval/index.js +3 -0
  27. package/dist/lib/call/eval/index.js.map +1 -1
  28. package/dist/lib/call/eval/integration-test-suite.d.ts +19 -0
  29. package/dist/lib/call/eval/integration-test-suite.d.ts.map +1 -1
  30. package/dist/lib/call/eval/integration-test-suite.js +64 -0
  31. package/dist/lib/call/eval/integration-test-suite.js.map +1 -1
  32. package/dist/lib/call/eval/streaming-chunk-test.d.ts +21 -0
  33. package/dist/lib/call/eval/streaming-chunk-test.d.ts.map +1 -0
  34. package/dist/lib/call/eval/streaming-chunk-test.js +74 -0
  35. package/dist/lib/call/eval/streaming-chunk-test.js.map +1 -0
  36. package/dist/lib/call/eval/transcript-regression-test.d.ts +10 -0
  37. package/dist/lib/call/eval/transcript-regression-test.d.ts.map +1 -0
  38. package/dist/lib/call/eval/transcript-regression-test.js +275 -0
  39. package/dist/lib/call/eval/transcript-regression-test.js.map +1 -0
  40. package/dist/lib/call/eval/turn-taking-test.d.ts.map +1 -1
  41. package/dist/lib/call/eval/turn-taking-test.js +40 -0
  42. package/dist/lib/call/eval/turn-taking-test.js.map +1 -1
  43. package/dist/lib/call/providers/deepgram.js +3 -3
  44. package/dist/lib/call/providers/deepgram.js.map +1 -1
  45. package/dist/lib/concierge-client-types.d.ts +3 -0
  46. package/dist/lib/concierge-client-types.d.ts.map +1 -1
  47. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-ai.d.ts","sourceRoot":"","sources":["../../../src/lib/call/conversation-ai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAqBD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWlE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU1E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBzD;AA+FD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,kBAAkB;IAQtC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAwBpC;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA6BnF;;OAEG;IACH,OAAO,CAAC,cAAc;YAiBR,gBAAgB;IA6C9B;;;;OAIG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;IAwFrG;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,UAAU,IAAI,mBAAmB,EAAE;IAInC;;OAEG;IACH,YAAY,IAAI,IAAI;CAGrB"}
1
+ {"version":3,"file":"conversation-ai.d.ts","sourceRoot":"","sources":["../../../src/lib/call/conversation-ai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAsDD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA0CjE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgBtD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWrD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAStD;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWlE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU1E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBzD;AA+FD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,kBAAkB;IAQtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAmC;IACxF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAwC;IACxF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAmC;IAEnF;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAwBpC;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA+DnF;;OAEG;IACH,OAAO,CAAC,cAAc;YAiBR,gBAAgB;IA6C9B;;;;OAIG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;IA6HrG;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,UAAU,IAAI,mBAAmB,EAAE;IAInC;;OAEG;IACH,YAAY,IAAI,IAAI;CAGrB"}
@@ -20,6 +20,117 @@ const SHORT_ACK_VALUES = new Set([
20
20
  'mhm',
21
21
  'uhhuh',
22
22
  ]);
23
+ const INCOMPLETE_UTTERANCE_ENDINGS = new Set([
24
+ 'you',
25
+ 'your',
26
+ 'they',
27
+ 'them',
28
+ 'it',
29
+ 'this',
30
+ 'that',
31
+ 'these',
32
+ 'those',
33
+ 'the',
34
+ 'a',
35
+ 'an',
36
+ 'to',
37
+ 'for',
38
+ 'with',
39
+ 'on',
40
+ 'in',
41
+ 'of',
42
+ 'are',
43
+ 'is',
44
+ 'do',
45
+ 'does',
46
+ 'did',
47
+ 'can',
48
+ 'could',
49
+ 'would',
50
+ 'should',
51
+ 'will',
52
+ ]);
53
+ const COMPLETE_SHORT_QUESTIONS = new Set(['how are you', 'who are you']);
54
+ export function isLikelyIncompleteUtterance(text) {
55
+ const trimmed = text.trim();
56
+ if (!trimmed)
57
+ return false;
58
+ if (/[.!?]$/.test(trimmed))
59
+ return false;
60
+ const normalized = trimmed
61
+ .toLowerCase()
62
+ .replace(/[^a-z0-9\s]/g, ' ')
63
+ .replace(/\s+/g, ' ')
64
+ .trim();
65
+ if (!normalized)
66
+ return false;
67
+ if (COMPLETE_SHORT_QUESTIONS.has(normalized))
68
+ return false;
69
+ const words = normalized.split(' ');
70
+ if (words.length > 8 || words.length < 2)
71
+ return false;
72
+ const lastWord = words[words.length - 1];
73
+ if (!INCOMPLETE_UTTERANCE_ENDINGS.has(lastWord))
74
+ return false;
75
+ const startsLikeQuestion = normalized.startsWith('how ') ||
76
+ normalized.startsWith('how many ') ||
77
+ normalized.startsWith('how much ') ||
78
+ normalized.startsWith('what ') ||
79
+ normalized.startsWith('which ') ||
80
+ normalized.startsWith('who ') ||
81
+ normalized.startsWith('when ') ||
82
+ normalized.startsWith('where ') ||
83
+ normalized.startsWith('why ') ||
84
+ normalized.startsWith('do ') ||
85
+ normalized.startsWith('does ') ||
86
+ normalized.startsWith('did ') ||
87
+ normalized.startsWith('can ') ||
88
+ normalized.startsWith('could ') ||
89
+ normalized.startsWith('would ') ||
90
+ normalized.startsWith('should ') ||
91
+ normalized.startsWith('will ') ||
92
+ normalized.startsWith('are ') ||
93
+ normalized.startsWith('is ');
94
+ return startsLikeQuestion;
95
+ }
96
+ export function isSpeedComplaint(text) {
97
+ const normalized = text
98
+ .toLowerCase()
99
+ .replace(/[^a-z0-9\s]/g, ' ')
100
+ .replace(/\s+/g, ' ')
101
+ .trim();
102
+ if (!normalized)
103
+ return false;
104
+ return (normalized.includes('slow') ||
105
+ normalized.includes('lag') ||
106
+ normalized.includes('latency') ||
107
+ normalized.includes('taking too long') ||
108
+ normalized.includes('too long'));
109
+ }
110
+ export function isRepeatRequest(text) {
111
+ const normalized = text
112
+ .toLowerCase()
113
+ .replace(/[^a-z0-9\s]/g, ' ')
114
+ .replace(/\s+/g, ' ')
115
+ .trim();
116
+ if (!normalized)
117
+ return false;
118
+ if (normalized.includes('repeat') || normalized.includes('say that again'))
119
+ return true;
120
+ if (normalized.includes('can you say that again') || normalized.includes('could you say that again'))
121
+ return true;
122
+ return false;
123
+ }
124
+ export function isAnotherRequest(text) {
125
+ const normalized = text
126
+ .toLowerCase()
127
+ .replace(/[^a-z0-9\s]/g, ' ')
128
+ .replace(/\s+/g, ' ')
129
+ .trim();
130
+ if (!normalized)
131
+ return false;
132
+ return normalized.includes('another') || normalized.includes('one more');
133
+ }
23
134
  export function isLikelyShortAcknowledgement(text) {
24
135
  const normalized = text
25
136
  .toLowerCase()
@@ -171,6 +282,9 @@ export class ConversationAI {
171
282
  // Use a fast current Haiku model for phone-call latency.
172
283
  this.model = config.model || 'claude-haiku-4-5';
173
284
  }
285
+ static INCOMPLETE_UTTERANCE_RESPONSE = 'Sorry, could you finish that?';
286
+ static SPEED_COMPLAINT_RESPONSE = 'Sorry about that. Please continue.';
287
+ static REPEAT_FALLBACK_RESPONSE = 'Sorry, could you repeat that?';
174
288
  /**
175
289
  * Generate the initial greeting
176
290
  * NOTE: Greeting should NEVER mark conversation as complete
@@ -202,6 +316,36 @@ Generate a brief greeting to start the call. Remember:
202
316
  if (this.isComplete) {
203
317
  return null;
204
318
  }
319
+ if (isRepeatRequest(humanSaid)) {
320
+ const lastAssistant = [...this.messages].reverse().find((msg) => msg.role === 'assistant')?.content.trim();
321
+ const repeatResponse = lastAssistant || ConversationAI.REPEAT_FALLBACK_RESPONSE;
322
+ this.messages.push({ role: 'user', content: humanSaid });
323
+ this.messages.push({ role: 'assistant', content: repeatResponse });
324
+ return repeatResponse;
325
+ }
326
+ if (isSpeedComplaint(humanSaid)) {
327
+ this.messages.push({ role: 'user', content: humanSaid });
328
+ this.messages.push({ role: 'assistant', content: ConversationAI.SPEED_COMPLAINT_RESPONSE });
329
+ return ConversationAI.SPEED_COMPLAINT_RESPONSE;
330
+ }
331
+ if (isLikelyIncompleteUtterance(humanSaid)) {
332
+ this.messages.push({ role: 'user', content: humanSaid });
333
+ this.messages.push({ role: 'assistant', content: ConversationAI.INCOMPLETE_UTTERANCE_RESPONSE });
334
+ return ConversationAI.INCOMPLETE_UTTERANCE_RESPONSE;
335
+ }
336
+ if (isAnotherRequest(humanSaid)) {
337
+ const lastAssistant = [...this.messages].reverse().find((msg) => msg.role === 'assistant')?.content.trim();
338
+ if (lastAssistant) {
339
+ const contextLines = [
340
+ '[TURN CONTEXT]',
341
+ 'The human asked for another response. Do NOT repeat your last reply.',
342
+ `Your previous spoken turn: "${lastAssistant}"`,
343
+ '',
344
+ `Human said: ${humanSaid}`,
345
+ ];
346
+ return this.generateResponse(contextLines.join('\n'));
347
+ }
348
+ }
205
349
  if (!turnContext?.shortAcknowledgement) {
206
350
  return this.generateResponse(humanSaid);
207
351
  }
@@ -284,9 +428,42 @@ ${this.context ? `ADDITIONAL CONTEXT: ${this.context}` : ''}`;
284
428
  if (this.isComplete) {
285
429
  return '';
286
430
  }
431
+ let userInputOverride = null;
432
+ if (isAnotherRequest(humanSaid)) {
433
+ const lastAssistant = [...this.messages].reverse().find((msg) => msg.role === 'assistant')?.content.trim();
434
+ if (lastAssistant) {
435
+ userInputOverride = [
436
+ '[TURN CONTEXT]',
437
+ 'The human asked for another response. Do NOT repeat your last reply.',
438
+ `Your previous spoken turn: "${lastAssistant}"`,
439
+ '',
440
+ `Human said: ${humanSaid}`,
441
+ ].join('\n');
442
+ }
443
+ }
444
+ if (isRepeatRequest(humanSaid)) {
445
+ const lastAssistant = [...this.messages].reverse().find((msg) => msg.role === 'assistant')?.content.trim();
446
+ const repeatResponse = lastAssistant || ConversationAI.REPEAT_FALLBACK_RESPONSE;
447
+ this.messages.push({ role: 'user', content: humanSaid });
448
+ this.messages.push({ role: 'assistant', content: repeatResponse });
449
+ yield repeatResponse;
450
+ return repeatResponse;
451
+ }
452
+ if (isSpeedComplaint(humanSaid)) {
453
+ this.messages.push({ role: 'user', content: humanSaid });
454
+ this.messages.push({ role: 'assistant', content: ConversationAI.SPEED_COMPLAINT_RESPONSE });
455
+ yield ConversationAI.SPEED_COMPLAINT_RESPONSE;
456
+ return ConversationAI.SPEED_COMPLAINT_RESPONSE;
457
+ }
458
+ if (isLikelyIncompleteUtterance(humanSaid)) {
459
+ this.messages.push({ role: 'user', content: humanSaid });
460
+ this.messages.push({ role: 'assistant', content: ConversationAI.INCOMPLETE_UTTERANCE_RESPONSE });
461
+ yield ConversationAI.INCOMPLETE_UTTERANCE_RESPONSE;
462
+ return ConversationAI.INCOMPLETE_UTTERANCE_RESPONSE;
463
+ }
287
464
  let userInput;
288
465
  if (!turnContext?.shortAcknowledgement) {
289
- userInput = humanSaid;
466
+ userInput = userInputOverride ?? humanSaid;
290
467
  }
291
468
  else {
292
469
  const contextLines = [
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-ai.js","sourceRoot":"","sources":["../../../src/lib/call/conversation-ai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation-ai.js","sourceRoot":"","sources":["../../../src/lib/call/conversation-ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type EchoSuppressionDecision = 'overlap' | 'speaking' | 'suppressed' | null;
2
+ export interface EchoSuppressionParams {
3
+ isSpeaking: boolean;
4
+ suppressSttUntilMs: number;
5
+ transcriptEndMs?: number;
6
+ nowMs: number;
7
+ }
8
+ export declare function getEchoSuppressionDecision({ isSpeaking, suppressSttUntilMs, transcriptEndMs, nowMs, }: EchoSuppressionParams): EchoSuppressionDecision;
9
+ //# sourceMappingURL=echo-suppression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echo-suppression.d.ts","sourceRoot":"","sources":["../../../src/lib/call/echo-suppression.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC;AAEnF,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,0BAA0B,CAAC,EACzC,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,KAAK,GACN,EAAE,qBAAqB,GAAG,uBAAuB,CAcjD"}
@@ -0,0 +1,13 @@
1
+ export function getEchoSuppressionDecision({ isSpeaking, suppressSttUntilMs, transcriptEndMs, nowMs, }) {
2
+ if (transcriptEndMs !== undefined && transcriptEndMs <= suppressSttUntilMs) {
3
+ return 'overlap';
4
+ }
5
+ if (isSpeaking) {
6
+ return 'speaking';
7
+ }
8
+ if (nowMs < suppressSttUntilMs) {
9
+ return 'suppressed';
10
+ }
11
+ return null;
12
+ }
13
+ //# sourceMappingURL=echo-suppression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echo-suppression.js","sourceRoot":"","sources":["../../../src/lib/call/echo-suppression.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,0BAA0B,CAAC,EACzC,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,KAAK,GACiB;IACtB,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,IAAI,kBAAkB,EAAE,CAAC;QAC3E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,KAAK,GAAG,kBAAkB,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type EchoSuppressionDecision } from '../echo-suppression.js';
2
+ export interface EchoSuppressionTestCase {
3
+ id: string;
4
+ name: string;
5
+ params: {
6
+ isSpeaking: boolean;
7
+ suppressSttUntilMs: number;
8
+ transcriptEndMs?: number;
9
+ nowMs: number;
10
+ };
11
+ expectedDecision: EchoSuppressionDecision;
12
+ }
13
+ export interface EchoSuppressionTestResult {
14
+ testId: string;
15
+ testName: string;
16
+ passed: boolean;
17
+ decision: EchoSuppressionDecision;
18
+ expectedDecision: EchoSuppressionDecision;
19
+ }
20
+ export declare const ECHO_SUPPRESSION_TEST_CASES: EchoSuppressionTestCase[];
21
+ export declare function runEchoSuppressionTest(testCase: EchoSuppressionTestCase): EchoSuppressionTestResult;
22
+ export declare function runAllEchoSuppressionTests(): {
23
+ passed: number;
24
+ failed: number;
25
+ results: EchoSuppressionTestResult[];
26
+ };
27
+ //# sourceMappingURL=echo-suppression-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echo-suppression-test.d.ts","sourceRoot":"","sources":["../../../../src/lib/call/eval/echo-suppression-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAElG,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,UAAU,EAAE,OAAO,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,gBAAgB,EAAE,uBAAuB,CAAC;CAC3C;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,gBAAgB,EAAE,uBAAuB,CAAC;CAC3C;AAID,eAAO,MAAM,2BAA2B,EAAE,uBAAuB,EAsDhE,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,uBAAuB,GAAG,yBAAyB,CAWnG;AAED,wBAAgB,0BAA0B,IAAI;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,yBAAyB,EAAE,CAAC;CACtC,CAgBA"}
@@ -0,0 +1,85 @@
1
+ import { getEchoSuppressionDecision } from '../echo-suppression.js';
2
+ const BASE_TIME_MS = 1_000_000;
3
+ export const ECHO_SUPPRESSION_TEST_CASES = [
4
+ {
5
+ id: 'ignore-while-speaking',
6
+ name: 'Ignore transcripts while speaking',
7
+ params: {
8
+ isSpeaking: true,
9
+ suppressSttUntilMs: BASE_TIME_MS - 1000,
10
+ nowMs: BASE_TIME_MS,
11
+ },
12
+ expectedDecision: 'speaking',
13
+ },
14
+ {
15
+ id: 'ignore-during-suppression',
16
+ name: 'Ignore transcripts during suppression window',
17
+ params: {
18
+ isSpeaking: false,
19
+ suppressSttUntilMs: BASE_TIME_MS + 500,
20
+ nowMs: BASE_TIME_MS,
21
+ },
22
+ expectedDecision: 'suppressed',
23
+ },
24
+ {
25
+ id: 'ignore-overlap-by-timing',
26
+ name: 'Ignore transcripts that overlap by word timing',
27
+ params: {
28
+ isSpeaking: false,
29
+ suppressSttUntilMs: BASE_TIME_MS + 300,
30
+ transcriptEndMs: BASE_TIME_MS + 100,
31
+ nowMs: BASE_TIME_MS + 600,
32
+ },
33
+ expectedDecision: 'overlap',
34
+ },
35
+ {
36
+ id: 'overlap-takes-precedence',
37
+ name: 'Overlap decision has precedence over speaking/suppression',
38
+ params: {
39
+ isSpeaking: true,
40
+ suppressSttUntilMs: BASE_TIME_MS + 300,
41
+ transcriptEndMs: BASE_TIME_MS + 100,
42
+ nowMs: BASE_TIME_MS + 200,
43
+ },
44
+ expectedDecision: 'overlap',
45
+ },
46
+ {
47
+ id: 'allow-normal-transcript',
48
+ name: 'Allow transcripts outside suppression window',
49
+ params: {
50
+ isSpeaking: false,
51
+ suppressSttUntilMs: BASE_TIME_MS - 100,
52
+ transcriptEndMs: BASE_TIME_MS - 50,
53
+ nowMs: BASE_TIME_MS,
54
+ },
55
+ expectedDecision: null,
56
+ },
57
+ ];
58
+ export function runEchoSuppressionTest(testCase) {
59
+ const decision = getEchoSuppressionDecision(testCase.params);
60
+ const passed = decision === testCase.expectedDecision;
61
+ return {
62
+ testId: testCase.id,
63
+ testName: testCase.name,
64
+ passed,
65
+ decision,
66
+ expectedDecision: testCase.expectedDecision,
67
+ };
68
+ }
69
+ export function runAllEchoSuppressionTests() {
70
+ const results = [];
71
+ let passed = 0;
72
+ let failed = 0;
73
+ for (const testCase of ECHO_SUPPRESSION_TEST_CASES) {
74
+ const result = runEchoSuppressionTest(testCase);
75
+ results.push(result);
76
+ if (result.passed) {
77
+ passed++;
78
+ }
79
+ else {
80
+ failed++;
81
+ }
82
+ }
83
+ return { passed, failed, results };
84
+ }
85
+ //# sourceMappingURL=echo-suppression-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echo-suppression-test.js","sourceRoot":"","sources":["../../../../src/lib/call/eval/echo-suppression-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAgC,MAAM,wBAAwB,CAAC;AAsBlG,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,MAAM,CAAC,MAAM,2BAA2B,GAA8B;IACpE;QACE,EAAE,EAAE,uBAAuB;QAC3B,IAAI,EAAE,mCAAmC;QACzC,MAAM,EAAE;YACN,UAAU,EAAE,IAAI;YAChB,kBAAkB,EAAE,YAAY,GAAG,IAAI;YACvC,KAAK,EAAE,YAAY;SACpB;QACD,gBAAgB,EAAE,UAAU;KAC7B;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,8CAA8C;QACpD,MAAM,EAAE;YACN,UAAU,EAAE,KAAK;YACjB,kBAAkB,EAAE,YAAY,GAAG,GAAG;YACtC,KAAK,EAAE,YAAY;SACpB;QACD,gBAAgB,EAAE,YAAY;KAC/B;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,gDAAgD;QACtD,MAAM,EAAE;YACN,UAAU,EAAE,KAAK;YACjB,kBAAkB,EAAE,YAAY,GAAG,GAAG;YACtC,eAAe,EAAE,YAAY,GAAG,GAAG;YACnC,KAAK,EAAE,YAAY,GAAG,GAAG;SAC1B;QACD,gBAAgB,EAAE,SAAS;KAC5B;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,2DAA2D;QACjE,MAAM,EAAE;YACN,UAAU,EAAE,IAAI;YAChB,kBAAkB,EAAE,YAAY,GAAG,GAAG;YACtC,eAAe,EAAE,YAAY,GAAG,GAAG;YACnC,KAAK,EAAE,YAAY,GAAG,GAAG;SAC1B;QACD,gBAAgB,EAAE,SAAS;KAC5B;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,8CAA8C;QACpD,MAAM,EAAE;YACN,UAAU,EAAE,KAAK;YACjB,kBAAkB,EAAE,YAAY,GAAG,GAAG;YACtC,eAAe,EAAE,YAAY,GAAG,EAAE;YAClC,KAAK,EAAE,YAAY;SACpB;QACD,gBAAgB,EAAE,IAAI;KACvB;CACF,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,QAAiC;IACtE,MAAM,QAAQ,GAAG,0BAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,QAAQ,KAAK,QAAQ,CAAC,gBAAgB,CAAC;IAEtD,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,EAAE;QACnB,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,MAAM;QACN,QAAQ;QACR,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B;IAKxC,MAAM,OAAO,GAAgC,EAAE,CAAC;IAChD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,QAAQ,IAAI,2BAA2B,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC"}
@@ -53,7 +53,7 @@ async function transcribeAudio(pcm, apiKey) {
53
53
  language: 'en-US',
54
54
  punctuate: true,
55
55
  interim_results: false,
56
- endpointing: 500,
56
+ endpointing: 300,
57
57
  encoding: 'linear16',
58
58
  sample_rate: 8000,
59
59
  channels: 1,
@@ -3,7 +3,10 @@
3
3
  */
4
4
  export * from './codec-test.js';
5
5
  export * from './conversation-scripts.js';
6
+ export * from './echo-suppression-test.js';
6
7
  export * from './eval-runner.js';
7
8
  export * from './integration-test-suite.js';
9
+ export * from './streaming-chunk-test.js';
10
+ export * from './transcript-regression-test.js';
8
11
  export * from './turn-taking-test.js';
9
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/call/eval/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/call/eval/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC"}
@@ -3,7 +3,10 @@
3
3
  */
4
4
  export * from './codec-test.js';
5
5
  export * from './conversation-scripts.js';
6
+ export * from './echo-suppression-test.js';
6
7
  export * from './eval-runner.js';
7
8
  export * from './integration-test-suite.js';
9
+ export * from './streaming-chunk-test.js';
10
+ export * from './transcript-regression-test.js';
8
11
  export * from './turn-taking-test.js';
9
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/call/eval/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/call/eval/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC"}
@@ -7,6 +7,8 @@
7
7
  * 3. Conversation flow tests - verify AI behavior
8
8
  * 4. End-to-end pipeline tests - full flow without phone
9
9
  */
10
+ import { type EchoSuppressionTestResult } from './echo-suppression-test.js';
11
+ import { type StreamingChunkTestResult } from './streaming-chunk-test.js';
10
12
  import { type TurnTakingTestResult } from './turn-taking-test.js';
11
13
  export interface IntegrationTestConfig {
12
14
  anthropicApiKey: string;
@@ -30,6 +32,23 @@ export interface TestSuiteResult {
30
32
  passedCount: number;
31
33
  failures: TurnTakingTestResult[];
32
34
  };
35
+ streamingChunks: {
36
+ passed: boolean;
37
+ total: number;
38
+ passedCount: number;
39
+ failures: StreamingChunkTestResult[];
40
+ };
41
+ echoSuppression: {
42
+ passed: boolean;
43
+ total: number;
44
+ passedCount: number;
45
+ failures: EchoSuppressionTestResult[];
46
+ };
47
+ transcriptRegression: {
48
+ passed: boolean;
49
+ tests: number;
50
+ failures: string[];
51
+ };
33
52
  conversationFlow: {
34
53
  passed: boolean;
35
54
  tests: number;
@@ -1 +1 @@
1
- {"version":3,"file":"integration-test-suite.d.ts","sourceRoot":"","sources":["../../../../src/lib/call/eval/integration-test-suite.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAMzF,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE;QACL,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,UAAU,EAAE;QACV,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;KAClC,CAAC;IACF,gBAAgB,EAAE;QAChB,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,YAAY,EAAE,OAAO,CAAC;QACtB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,eAAe,EAAE;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,eAAe,EAAE;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,WAAW,EAAE;QACX,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AA0bD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CA2MrG"}
1
+ {"version":3,"file":"integration-test-suite.d.ts","sourceRoot":"","sources":["../../../../src/lib/call/eval/integration-test-suite.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAA8B,KAAK,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACxG,OAAO,EAA6B,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErG,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAMzF,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE;QACL,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,UAAU,EAAE;QACV,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;KAClC,CAAC;IACF,eAAe,EAAE;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,wBAAwB,EAAE,CAAC;KACtC,CAAC;IACF,eAAe,EAAE;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,yBAAyB,EAAE,CAAC;KACvC,CAAC;IACF,oBAAoB,EAAE;QACpB,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,gBAAgB,EAAE;QAChB,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,YAAY,EAAE,OAAO,CAAC;QACtB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,eAAe,EAAE;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,eAAe,EAAE;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,WAAW,EAAE;QACX,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AA4dD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAsQrG"}
@@ -11,6 +11,9 @@ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
11
11
  import { join } from 'node:path';
12
12
  import { ConversationAI } from '../conversation-ai.js';
13
13
  import { testTTSPipeline } from './codec-test.js';
14
+ import { runAllEchoSuppressionTests } from './echo-suppression-test.js';
15
+ import { runAllStreamingChunkTests } from './streaming-chunk-test.js';
16
+ import { runTranscriptRegressionTests } from './transcript-regression-test.js';
14
17
  import { runAllTurnTakingTests } from './turn-taking-test.js';
15
18
  function countWords(text) {
16
19
  return text.trim().split(/\s+/).filter(Boolean).length;
@@ -57,6 +60,26 @@ async function runTurnTakingTests() {
57
60
  failures,
58
61
  };
59
62
  }
63
+ async function runStreamingChunkTests() {
64
+ const { passed, failed, results } = runAllStreamingChunkTests();
65
+ const failures = results.filter((r) => !r.passed);
66
+ return {
67
+ passed: failed === 0,
68
+ total: passed + failed,
69
+ passedCount: passed,
70
+ failures,
71
+ };
72
+ }
73
+ async function runEchoSuppressionTests() {
74
+ const { passed, failed, results } = runAllEchoSuppressionTests();
75
+ const failures = results.filter((r) => !r.passed);
76
+ return {
77
+ passed: failed === 0,
78
+ total: passed + failed,
79
+ passedCount: passed,
80
+ failures,
81
+ };
82
+ }
60
83
  /**
61
84
  * Test 3: Conversation Flow
62
85
  * Tests AI behavior in various scenarios
@@ -373,6 +396,17 @@ export async function runIntegrationTestSuite(config) {
373
396
  console.log('🔄 Running Turn-Taking Tests...');
374
397
  const turnTakingResult = await runTurnTakingTests();
375
398
  console.log(` ${turnTakingResult.passed ? '✅' : '❌'} ${turnTakingResult.passedCount}/${turnTakingResult.total} passed\n`);
399
+ console.log('🧩 Running Streaming Chunk Tests...');
400
+ const streamingChunkResult = await runStreamingChunkTests();
401
+ console.log(` ${streamingChunkResult.passed ? '✅' : '❌'} ${streamingChunkResult.passedCount}/${streamingChunkResult.total} passed\n`);
402
+ console.log('🔇 Running Echo Suppression Tests...');
403
+ const echoSuppressionResult = await runEchoSuppressionTests();
404
+ console.log(` ${echoSuppressionResult.passed ? '✅' : '❌'} ${echoSuppressionResult.passedCount}/${echoSuppressionResult.total} passed\n`);
405
+ console.log('📝 Running Transcript Regression Tests...');
406
+ const transcriptRegressionResult = await runTranscriptRegressionTests({
407
+ anthropicApiKey: config.anthropicApiKey,
408
+ });
409
+ console.log(` ${transcriptRegressionResult.passed ? '✅' : '❌'} ${transcriptRegressionResult.tests - transcriptRegressionResult.failures.length}/${transcriptRegressionResult.tests} passed\n`);
376
410
  console.log('💬 Running Conversation Flow Tests...');
377
411
  const conversationResult = await runConversationFlowTests(config);
378
412
  console.log(` ${conversationResult.passed ? '✅' : '❌'} ${conversationResult.tests - conversationResult.failures.length}/${conversationResult.tests} passed\n`);
@@ -394,6 +428,9 @@ export async function runIntegrationTestSuite(config) {
394
428
  const duration = Date.now() - startTime;
395
429
  const overallPassed = codecResult.passed &&
396
430
  turnTakingResult.passed &&
431
+ streamingChunkResult.passed &&
432
+ echoSuppressionResult.passed &&
433
+ transcriptRegressionResult.passed &&
397
434
  conversationResult.passed &&
398
435
  disclosureResult.passed &&
399
436
  roleResult.passed &&
@@ -406,6 +443,9 @@ export async function runIntegrationTestSuite(config) {
406
443
  overallPassed,
407
444
  codec: codecResult,
408
445
  turnTaking: turnTakingResult,
446
+ streamingChunks: streamingChunkResult,
447
+ echoSuppression: echoSuppressionResult,
448
+ transcriptRegression: transcriptRegressionResult,
409
449
  conversationFlow: conversationResult,
410
450
  aiDisclosure: disclosureResult,
411
451
  roleConsistency: roleResult,
@@ -424,6 +464,9 @@ export async function runIntegrationTestSuite(config) {
424
464
  console.log('╠════════════════════════════════════════════════════════════╣');
425
465
  console.log(`║ Codec: ${codecResult.passed ? '✅ PASS' : '❌ FAIL'} ║`);
426
466
  console.log(`║ Turn-Taking: ${turnTakingResult.passed ? '✅ PASS' : '❌ FAIL'} ║`);
467
+ console.log(`║ Streaming Chunks:${streamingChunkResult.passed ? '✅ PASS' : '❌ FAIL'} ║`);
468
+ console.log(`║ Echo Suppress: ${echoSuppressionResult.passed ? '✅ PASS' : '❌ FAIL'} ║`);
469
+ console.log(`║ Transcript Reg: ${transcriptRegressionResult.passed ? '✅ PASS' : '❌ FAIL'} ║`);
427
470
  console.log(`║ Conversation: ${conversationResult.passed ? '✅ PASS' : '❌ FAIL'} ║`);
428
471
  console.log(`║ AI Disclosure: ${disclosureResult.passed ? '✅ PASS' : '❌ FAIL'} ║`);
429
472
  console.log(`║ Role Consistency:${roleResult.passed ? '✅ PASS' : '❌ FAIL'} ║`);
@@ -449,6 +492,27 @@ export async function runIntegrationTestSuite(config) {
449
492
  }
450
493
  console.log('');
451
494
  }
495
+ if (!streamingChunkResult.passed) {
496
+ console.log('Streaming chunk failures:');
497
+ for (const f of streamingChunkResult.failures) {
498
+ console.log(` - ${f.testName}: chunk="${f.firstChunk}" (expected "${f.expectedFirstChunk}")`);
499
+ }
500
+ console.log('');
501
+ }
502
+ if (!echoSuppressionResult.passed) {
503
+ console.log('Echo suppression failures:');
504
+ for (const f of echoSuppressionResult.failures) {
505
+ console.log(` - ${f.testName}: decision="${f.decision}" (expected "${f.expectedDecision}")`);
506
+ }
507
+ console.log('');
508
+ }
509
+ if (!transcriptRegressionResult.passed) {
510
+ console.log('Transcript regression failures:');
511
+ for (const f of transcriptRegressionResult.failures) {
512
+ console.log(` - ${f}`);
513
+ }
514
+ console.log('');
515
+ }
452
516
  if (!conversationResult.passed) {
453
517
  console.log('Conversation flow failures:');
454
518
  for (const f of conversationResult.failures) {