@framers/agentos 0.1.75 → 0.1.77

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 (152) hide show
  1. package/README.md +148 -38
  2. package/dist/api/agent.d.ts +13 -3
  3. package/dist/api/agent.d.ts.map +1 -1
  4. package/dist/api/agent.js +1 -0
  5. package/dist/api/agent.js.map +1 -1
  6. package/dist/api/generateImage.d.ts +11 -2
  7. package/dist/api/generateImage.d.ts.map +1 -1
  8. package/dist/api/generateImage.js +2 -2
  9. package/dist/api/generateImage.js.map +1 -1
  10. package/dist/api/generateText.d.ts +13 -3
  11. package/dist/api/generateText.d.ts.map +1 -1
  12. package/dist/api/generateText.js +2 -2
  13. package/dist/api/generateText.js.map +1 -1
  14. package/dist/api/model.d.ts +53 -0
  15. package/dist/api/model.d.ts.map +1 -1
  16. package/dist/api/model.js +58 -0
  17. package/dist/api/model.js.map +1 -1
  18. package/dist/api/provider-defaults.d.ts +40 -0
  19. package/dist/api/provider-defaults.d.ts.map +1 -0
  20. package/dist/api/provider-defaults.js +73 -0
  21. package/dist/api/provider-defaults.js.map +1 -0
  22. package/dist/api/streamText.js +2 -2
  23. package/dist/api/streamText.js.map +1 -1
  24. package/dist/core/agency/AgentCommunicationBus.d.ts +1 -0
  25. package/dist/core/agency/AgentCommunicationBus.d.ts.map +1 -1
  26. package/dist/core/agency/AgentCommunicationBus.js +62 -8
  27. package/dist/core/agency/AgentCommunicationBus.js.map +1 -1
  28. package/dist/core/agency/IAgentCommunicationBus.d.ts +1 -1
  29. package/dist/core/agency/IAgentCommunicationBus.d.ts.map +1 -1
  30. package/dist/orchestration/runtime/LoopController.d.ts +10 -10
  31. package/dist/orchestration/runtime/LoopController.d.ts.map +1 -1
  32. package/dist/orchestration/runtime/LoopController.js +1 -1
  33. package/dist/orchestration/runtime/LoopController.js.map +1 -1
  34. package/dist/orchestration/runtime/index.d.ts +1 -1
  35. package/dist/orchestration/runtime/index.d.ts.map +1 -1
  36. package/dist/orchestration/runtime/index.js.map +1 -1
  37. package/dist/speech/FallbackProxy.d.ts +104 -0
  38. package/dist/speech/FallbackProxy.d.ts.map +1 -0
  39. package/dist/speech/FallbackProxy.js +151 -0
  40. package/dist/speech/FallbackProxy.js.map +1 -0
  41. package/dist/speech/SpeechProviderResolver.d.ts +103 -0
  42. package/dist/speech/SpeechProviderResolver.d.ts.map +1 -0
  43. package/dist/speech/SpeechProviderResolver.js +256 -0
  44. package/dist/speech/SpeechProviderResolver.js.map +1 -0
  45. package/dist/speech/SpeechRuntime.d.ts +23 -1
  46. package/dist/speech/SpeechRuntime.d.ts.map +1 -1
  47. package/dist/speech/SpeechRuntime.js +82 -8
  48. package/dist/speech/SpeechRuntime.js.map +1 -1
  49. package/dist/speech/index.d.ts +6 -0
  50. package/dist/speech/index.d.ts.map +1 -1
  51. package/dist/speech/index.js +6 -0
  52. package/dist/speech/index.js.map +1 -1
  53. package/dist/speech/providerCatalog.d.ts.map +1 -1
  54. package/dist/speech/providerCatalog.js +15 -1
  55. package/dist/speech/providerCatalog.js.map +1 -1
  56. package/dist/speech/providers/AssemblyAISTTProvider.d.ts +49 -0
  57. package/dist/speech/providers/AssemblyAISTTProvider.d.ts.map +1 -0
  58. package/dist/speech/providers/AssemblyAISTTProvider.js +151 -0
  59. package/dist/speech/providers/AssemblyAISTTProvider.js.map +1 -0
  60. package/dist/speech/providers/AzureSpeechSTTProvider.d.ts +48 -0
  61. package/dist/speech/providers/AzureSpeechSTTProvider.d.ts.map +1 -0
  62. package/dist/speech/providers/AzureSpeechSTTProvider.js +90 -0
  63. package/dist/speech/providers/AzureSpeechSTTProvider.js.map +1 -0
  64. package/dist/speech/providers/AzureSpeechTTSProvider.d.ts +60 -0
  65. package/dist/speech/providers/AzureSpeechTTSProvider.d.ts.map +1 -0
  66. package/dist/speech/providers/AzureSpeechTTSProvider.js +127 -0
  67. package/dist/speech/providers/AzureSpeechTTSProvider.js.map +1 -0
  68. package/dist/speech/providers/DeepgramBatchSTTProvider.d.ts +55 -0
  69. package/dist/speech/providers/DeepgramBatchSTTProvider.d.ts.map +1 -0
  70. package/dist/speech/providers/DeepgramBatchSTTProvider.js +102 -0
  71. package/dist/speech/providers/DeepgramBatchSTTProvider.js.map +1 -0
  72. package/dist/speech/types.d.ts +35 -0
  73. package/dist/speech/types.d.ts.map +1 -1
  74. package/dist/voice/CallManager.d.ts +1 -1
  75. package/dist/voice/CallManager.d.ts.map +1 -1
  76. package/dist/voice/CallManager.js +9 -0
  77. package/dist/voice/CallManager.js.map +1 -1
  78. package/dist/voice/MediaStreamParser.d.ts +83 -0
  79. package/dist/voice/MediaStreamParser.d.ts.map +1 -0
  80. package/dist/voice/MediaStreamParser.js +2 -0
  81. package/dist/voice/MediaStreamParser.js.map +1 -0
  82. package/dist/voice/TelephonyStreamTransport.d.ts +112 -0
  83. package/dist/voice/TelephonyStreamTransport.d.ts.map +1 -0
  84. package/dist/voice/TelephonyStreamTransport.js +208 -0
  85. package/dist/voice/TelephonyStreamTransport.js.map +1 -0
  86. package/dist/voice/index.d.ts +10 -0
  87. package/dist/voice/index.d.ts.map +1 -1
  88. package/dist/voice/index.js +11 -0
  89. package/dist/voice/index.js.map +1 -1
  90. package/dist/voice/parsers/PlivoMediaStreamParser.d.ts +43 -0
  91. package/dist/voice/parsers/PlivoMediaStreamParser.d.ts.map +1 -0
  92. package/dist/voice/parsers/PlivoMediaStreamParser.js +92 -0
  93. package/dist/voice/parsers/PlivoMediaStreamParser.js.map +1 -0
  94. package/dist/voice/parsers/TelnyxMediaStreamParser.d.ts +51 -0
  95. package/dist/voice/parsers/TelnyxMediaStreamParser.d.ts.map +1 -0
  96. package/dist/voice/parsers/TelnyxMediaStreamParser.js +103 -0
  97. package/dist/voice/parsers/TelnyxMediaStreamParser.js.map +1 -0
  98. package/dist/voice/parsers/TwilioMediaStreamParser.d.ts +50 -0
  99. package/dist/voice/parsers/TwilioMediaStreamParser.d.ts.map +1 -0
  100. package/dist/voice/parsers/TwilioMediaStreamParser.js +144 -0
  101. package/dist/voice/parsers/TwilioMediaStreamParser.js.map +1 -0
  102. package/dist/voice/providers/plivo.d.ts +77 -0
  103. package/dist/voice/providers/plivo.d.ts.map +1 -0
  104. package/dist/voice/providers/plivo.js +180 -0
  105. package/dist/voice/providers/plivo.js.map +1 -0
  106. package/dist/voice/providers/telnyx.d.ts +93 -0
  107. package/dist/voice/providers/telnyx.d.ts.map +1 -0
  108. package/dist/voice/providers/telnyx.js +193 -0
  109. package/dist/voice/providers/telnyx.js.map +1 -0
  110. package/dist/voice/providers/twilio.d.ts +79 -0
  111. package/dist/voice/providers/twilio.d.ts.map +1 -0
  112. package/dist/voice/providers/twilio.js +191 -0
  113. package/dist/voice/providers/twilio.js.map +1 -0
  114. package/dist/voice/twiml.d.ts +69 -0
  115. package/dist/voice/twiml.d.ts.map +1 -0
  116. package/dist/voice/twiml.js +92 -0
  117. package/dist/voice/twiml.js.map +1 -0
  118. package/dist/voice/types.d.ts +9 -1
  119. package/dist/voice/types.d.ts.map +1 -1
  120. package/dist/voice-pipeline/AcousticEndpointDetector.d.ts +90 -0
  121. package/dist/voice-pipeline/AcousticEndpointDetector.d.ts.map +1 -0
  122. package/dist/voice-pipeline/AcousticEndpointDetector.js +123 -0
  123. package/dist/voice-pipeline/AcousticEndpointDetector.js.map +1 -0
  124. package/dist/voice-pipeline/HardCutBargeinHandler.d.ts +67 -0
  125. package/dist/voice-pipeline/HardCutBargeinHandler.d.ts.map +1 -0
  126. package/dist/voice-pipeline/HardCutBargeinHandler.js +55 -0
  127. package/dist/voice-pipeline/HardCutBargeinHandler.js.map +1 -0
  128. package/dist/voice-pipeline/HeuristicEndpointDetector.d.ts +128 -0
  129. package/dist/voice-pipeline/HeuristicEndpointDetector.d.ts.map +1 -0
  130. package/dist/voice-pipeline/HeuristicEndpointDetector.js +240 -0
  131. package/dist/voice-pipeline/HeuristicEndpointDetector.js.map +1 -0
  132. package/dist/voice-pipeline/SoftFadeBargeinHandler.d.ts +96 -0
  133. package/dist/voice-pipeline/SoftFadeBargeinHandler.d.ts.map +1 -0
  134. package/dist/voice-pipeline/SoftFadeBargeinHandler.js +69 -0
  135. package/dist/voice-pipeline/SoftFadeBargeinHandler.js.map +1 -0
  136. package/dist/voice-pipeline/VoicePipelineOrchestrator.d.ts +122 -0
  137. package/dist/voice-pipeline/VoicePipelineOrchestrator.d.ts.map +1 -0
  138. package/dist/voice-pipeline/VoicePipelineOrchestrator.js +317 -0
  139. package/dist/voice-pipeline/VoicePipelineOrchestrator.js.map +1 -0
  140. package/dist/voice-pipeline/WebSocketStreamTransport.d.ts +148 -0
  141. package/dist/voice-pipeline/WebSocketStreamTransport.d.ts.map +1 -0
  142. package/dist/voice-pipeline/WebSocketStreamTransport.js +207 -0
  143. package/dist/voice-pipeline/WebSocketStreamTransport.js.map +1 -0
  144. package/dist/voice-pipeline/index.d.ts +13 -0
  145. package/dist/voice-pipeline/index.d.ts.map +1 -0
  146. package/dist/voice-pipeline/index.js +13 -0
  147. package/dist/voice-pipeline/index.js.map +1 -0
  148. package/dist/voice-pipeline/types.d.ts +905 -0
  149. package/dist/voice-pipeline/types.d.ts.map +1 -0
  150. package/dist/voice-pipeline/types.js +23 -0
  151. package/dist/voice-pipeline/types.js.map +1 -0
  152. package/package.json +6 -1
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Parses the Plivo Audio Stream WebSocket protocol.
3
+ *
4
+ * Plivo sends JSON-encoded messages for stream lifecycle events (`start`,
5
+ * `stop`) and audio chunks (`media`). The audio payload is base64-encoded
6
+ * mu-law PCM, delivered in a `payload` field inside the `media` object.
7
+ *
8
+ * Outgoing audio is wrapped in a `playAudio` JSON envelope, which is the
9
+ * format Plivo expects when the server streams audio back to the caller.
10
+ * No explicit connection acknowledgment is required after the handshake.
11
+ *
12
+ * @see {@link https://www.plivo.com/docs/voice/xml/stream}
13
+ */
14
+ export class PlivoMediaStreamParser {
15
+ /**
16
+ * Parse a raw WebSocket frame from Plivo's audio stream.
17
+ *
18
+ * Supported Plivo event types:
19
+ * - `start` — stream established; `stream_id` maps to `streamSid`,
20
+ * `call_uuid` maps to `callSid`.
21
+ * - `media` — audio chunk; `media.payload` contains base64-encoded mu-law.
22
+ * - `stop` — stream ended.
23
+ *
24
+ * @param data - Raw WebSocket frame payload (JSON string or Buffer from Plivo).
25
+ * @returns Normalised {@link MediaStreamIncoming} event, or `null` for
26
+ * unknown event types or malformed messages.
27
+ */
28
+ parseIncoming(data) {
29
+ const raw = typeof data === 'string' ? data : data.toString('utf8');
30
+ let msg;
31
+ try {
32
+ msg = JSON.parse(raw);
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ const event = msg['event'];
38
+ const streamSid = msg['stream_id'];
39
+ if (!event || !streamSid) {
40
+ return null;
41
+ }
42
+ switch (event) {
43
+ case 'start': {
44
+ const callSid = msg['call_uuid'] ?? '';
45
+ const result = {
46
+ type: 'start',
47
+ streamSid,
48
+ callSid,
49
+ };
50
+ return result;
51
+ }
52
+ case 'media': {
53
+ const media = msg['media'];
54
+ if (!media)
55
+ return null;
56
+ const payloadB64 = media['payload'];
57
+ if (!payloadB64)
58
+ return null;
59
+ const result = {
60
+ type: 'audio',
61
+ payload: Buffer.from(payloadB64, 'base64'),
62
+ streamSid,
63
+ };
64
+ return result;
65
+ }
66
+ case 'stop': {
67
+ const result = { type: 'stop', streamSid };
68
+ return result;
69
+ }
70
+ default:
71
+ return null;
72
+ }
73
+ }
74
+ /**
75
+ * Encode mu-law audio for transmission back to Plivo.
76
+ *
77
+ * Plivo requires audio to be base64-encoded and wrapped in a `playAudio`
78
+ * JSON envelope.
79
+ *
80
+ * @param audio - Raw mu-law PCM bytes to send to the caller.
81
+ * @param _streamSid - Unused by Plivo's `playAudio` format (accepted for
82
+ * interface parity with other parsers).
83
+ * @returns JSON string conforming to the Plivo `playAudio` envelope.
84
+ */
85
+ formatOutgoing(audio, _streamSid) {
86
+ return JSON.stringify({
87
+ event: 'playAudio',
88
+ media: { payload: audio.toString('base64') },
89
+ });
90
+ }
91
+ }
92
+ //# sourceMappingURL=PlivoMediaStreamParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlivoMediaStreamParser.js","sourceRoot":"","sources":["../../../src/voice/parsers/PlivoMediaStreamParser.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,sBAAsB;IACjC;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,IAAqB;QACjC,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,GAA4B,CAAC;QACjC,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAuB,CAAC;QACjD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAuB,CAAC;QAEzD,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,OAAO,GAAI,GAAG,CAAC,WAAW,CAAwB,IAAI,EAAE,CAAC;gBAC/D,MAAM,MAAM,GAAwB;oBAClC,IAAI,EAAE,OAAO;oBACb,SAAS;oBACT,OAAO;iBACR,CAAC;gBACF,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAwC,CAAC;gBAClE,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBAExB,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAuB,CAAC;gBAC1D,IAAI,CAAC,UAAU;oBAAE,OAAO,IAAI,CAAC;gBAE7B,MAAM,MAAM,GAAwB;oBAClC,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;oBAC1C,SAAS;iBACV,CAAC;gBACF,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC;YAED;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,cAAc,CAAC,KAAa,EAAE,UAAkB;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;SAC7C,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,51 @@
1
+ import type { MediaStreamParser, MediaStreamIncoming } from '../MediaStreamParser.js';
2
+ /**
3
+ * Parses the Telnyx media stream WebSocket protocol.
4
+ *
5
+ * Telnyx sends JSON-encoded messages for stream lifecycle events (`start`,
6
+ * `stop`) and audio chunks (`media`). Unlike Twilio, Telnyx does NOT deliver
7
+ * DTMF events over the media stream WebSocket — those arrive as HTTP webhooks
8
+ * to a separate endpoint and must be handled outside this parser.
9
+ *
10
+ * Outgoing audio is sent as a **raw binary Buffer** (mu-law PCM bytes without
11
+ * any JSON envelope) because Telnyx accepts unframed binary WebSocket frames
12
+ * directly. No explicit connection acknowledgment is needed after the
13
+ * handshake.
14
+ *
15
+ * @see {@link https://developers.telnyx.com/docs/voice/media-streaming}
16
+ */
17
+ export declare class TelnyxMediaStreamParser implements MediaStreamParser {
18
+ /**
19
+ * Parse a raw WebSocket frame from Telnyx's media stream.
20
+ *
21
+ * Supported Telnyx event types:
22
+ * - `start` — stream established; `stream_id` maps to `streamSid`,
23
+ * `call_control_id` maps to `callSid`.
24
+ * - `media` — audio chunk; `chunk` field contains base64-encoded mu-law
25
+ * bytes; only `inbound` track frames are returned.
26
+ * - `stop` — stream ended.
27
+ *
28
+ * @param data - Raw WebSocket frame payload (JSON string or Buffer from Telnyx).
29
+ * @returns Normalised {@link MediaStreamIncoming} event, or `null` for
30
+ * outbound audio tracks, unknown event types, or malformed messages.
31
+ */
32
+ parseIncoming(data: Buffer | string): MediaStreamIncoming | null;
33
+ /**
34
+ * Encode mu-law audio for transmission back to Telnyx.
35
+ *
36
+ * Telnyx accepts raw binary WebSocket frames; no JSON wrapping is applied.
37
+ *
38
+ * @param audio - Raw mu-law PCM bytes to send to the caller.
39
+ * @param _streamSid - Unused by Telnyx binary framing (accepted for interface
40
+ * parity with other parsers).
41
+ * @returns The audio Buffer unchanged, ready to send as a binary WS frame.
42
+ */
43
+ formatOutgoing(audio: Buffer, _streamSid: string): Buffer;
44
+ /**
45
+ * No explicit connection acknowledgment is required by Telnyx.
46
+ *
47
+ * @returns Always `null`.
48
+ */
49
+ formatConnected(_streamSid: string): null;
50
+ }
51
+ //# sourceMappingURL=TelnyxMediaStreamParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelnyxMediaStreamParser.d.ts","sourceRoot":"","sources":["../../../src/voice/parsers/TelnyxMediaStreamParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEtF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAyDhE;;;;;;;;;OASG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAIzD;;;;OAIG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAG1C"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Parses the Telnyx media stream WebSocket protocol.
3
+ *
4
+ * Telnyx sends JSON-encoded messages for stream lifecycle events (`start`,
5
+ * `stop`) and audio chunks (`media`). Unlike Twilio, Telnyx does NOT deliver
6
+ * DTMF events over the media stream WebSocket — those arrive as HTTP webhooks
7
+ * to a separate endpoint and must be handled outside this parser.
8
+ *
9
+ * Outgoing audio is sent as a **raw binary Buffer** (mu-law PCM bytes without
10
+ * any JSON envelope) because Telnyx accepts unframed binary WebSocket frames
11
+ * directly. No explicit connection acknowledgment is needed after the
12
+ * handshake.
13
+ *
14
+ * @see {@link https://developers.telnyx.com/docs/voice/media-streaming}
15
+ */
16
+ export class TelnyxMediaStreamParser {
17
+ /**
18
+ * Parse a raw WebSocket frame from Telnyx's media stream.
19
+ *
20
+ * Supported Telnyx event types:
21
+ * - `start` — stream established; `stream_id` maps to `streamSid`,
22
+ * `call_control_id` maps to `callSid`.
23
+ * - `media` — audio chunk; `chunk` field contains base64-encoded mu-law
24
+ * bytes; only `inbound` track frames are returned.
25
+ * - `stop` — stream ended.
26
+ *
27
+ * @param data - Raw WebSocket frame payload (JSON string or Buffer from Telnyx).
28
+ * @returns Normalised {@link MediaStreamIncoming} event, or `null` for
29
+ * outbound audio tracks, unknown event types, or malformed messages.
30
+ */
31
+ parseIncoming(data) {
32
+ const raw = typeof data === 'string' ? data : data.toString('utf8');
33
+ let msg;
34
+ try {
35
+ msg = JSON.parse(raw);
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ const event = msg['event'];
41
+ const streamSid = msg['stream_id'];
42
+ if (!event || !streamSid) {
43
+ return null;
44
+ }
45
+ switch (event) {
46
+ case 'start': {
47
+ const callSid = msg['call_control_id'] ?? '';
48
+ const result = {
49
+ type: 'start',
50
+ streamSid,
51
+ callSid,
52
+ };
53
+ return result;
54
+ }
55
+ case 'media': {
56
+ const media = msg['media'];
57
+ if (!media)
58
+ return null;
59
+ // Ignore outbound audio echoes from Telnyx.
60
+ const track = media['track'];
61
+ if (track === 'outbound')
62
+ return null;
63
+ const chunk = media['chunk'];
64
+ if (!chunk)
65
+ return null;
66
+ const result = {
67
+ type: 'audio',
68
+ payload: Buffer.from(chunk, 'base64'),
69
+ streamSid,
70
+ };
71
+ return result;
72
+ }
73
+ case 'stop': {
74
+ const result = { type: 'stop', streamSid };
75
+ return result;
76
+ }
77
+ default:
78
+ return null;
79
+ }
80
+ }
81
+ /**
82
+ * Encode mu-law audio for transmission back to Telnyx.
83
+ *
84
+ * Telnyx accepts raw binary WebSocket frames; no JSON wrapping is applied.
85
+ *
86
+ * @param audio - Raw mu-law PCM bytes to send to the caller.
87
+ * @param _streamSid - Unused by Telnyx binary framing (accepted for interface
88
+ * parity with other parsers).
89
+ * @returns The audio Buffer unchanged, ready to send as a binary WS frame.
90
+ */
91
+ formatOutgoing(audio, _streamSid) {
92
+ return audio;
93
+ }
94
+ /**
95
+ * No explicit connection acknowledgment is required by Telnyx.
96
+ *
97
+ * @returns Always `null`.
98
+ */
99
+ formatConnected(_streamSid) {
100
+ return null;
101
+ }
102
+ }
103
+ //# sourceMappingURL=TelnyxMediaStreamParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelnyxMediaStreamParser.js","sourceRoot":"","sources":["../../../src/voice/parsers/TelnyxMediaStreamParser.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,uBAAuB;IAClC;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,IAAqB;QACjC,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,GAA4B,CAAC;QACjC,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAuB,CAAC;QACjD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAuB,CAAC;QAEzD,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,OAAO,GAAI,GAAG,CAAC,iBAAiB,CAAwB,IAAI,EAAE,CAAC;gBACrE,MAAM,MAAM,GAAwB;oBAClC,IAAI,EAAE,OAAO;oBACb,SAAS;oBACT,OAAO;iBACR,CAAC;gBACF,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAwC,CAAC;gBAClE,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBAExB,4CAA4C;gBAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAuB,CAAC;gBACnD,IAAI,KAAK,KAAK,UAAU;oBAAE,OAAO,IAAI,CAAC;gBAEtC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAuB,CAAC;gBACnD,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBAExB,MAAM,MAAM,GAAwB;oBAClC,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;oBACrC,SAAS;iBACV,CAAC;gBACF,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC;YAED;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,cAAc,CAAC,KAAa,EAAE,UAAkB;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ import type { MediaStreamParser, MediaStreamIncoming } from '../MediaStreamParser.js';
2
+ /**
3
+ * Parses the Twilio `<Connect><Stream>` WebSocket media stream protocol.
4
+ *
5
+ * Twilio sends all messages as JSON-encoded strings. Outbound audio is
6
+ * wrapped in the same JSON envelope so Twilio can associate it with the
7
+ * correct stream. An explicit `connected` acknowledgment is sent once
8
+ * immediately after the WebSocket handshake to signal that the listener is
9
+ * ready to receive media.
10
+ *
11
+ * @see {@link https://www.twilio.com/docs/voice/twiml/stream}
12
+ */
13
+ export declare class TwilioMediaStreamParser implements MediaStreamParser {
14
+ /**
15
+ * Parse a raw WebSocket frame from Twilio's media stream.
16
+ *
17
+ * Supported Twilio event types:
18
+ * - `start` — stream established, includes callSid
19
+ * - `media` — audio chunk (inbound track only; outbound chunks are ignored)
20
+ * - `dtmf` — DTMF keypress detected
21
+ * - `stop` — stream ended
22
+ * - `mark` — named synchronisation marker
23
+ *
24
+ * @param data - Raw WebSocket frame payload (always a JSON string from Twilio).
25
+ * @returns Normalised {@link MediaStreamIncoming} event, or `null` for
26
+ * outbound audio tracks, unknown event types, or malformed messages.
27
+ */
28
+ parseIncoming(data: Buffer | string): MediaStreamIncoming | null;
29
+ /**
30
+ * Encode mu-law audio for transmission back to the Twilio stream.
31
+ *
32
+ * Twilio requires base64-encoded audio wrapped in a JSON `media` envelope
33
+ * so it can route the audio to the correct stream.
34
+ *
35
+ * @param audio - Raw mu-law PCM bytes to send to the caller.
36
+ * @param streamSid - The stream identifier to include in the envelope.
37
+ * @returns JSON string conforming to the Twilio media-out envelope format.
38
+ */
39
+ formatOutgoing(audio: Buffer, streamSid: string): string;
40
+ /**
41
+ * Generate the initial `connected` acknowledgment expected by Twilio
42
+ * immediately after the WebSocket connection is established.
43
+ *
44
+ * @param _streamSid - Unused — Twilio does not require the stream ID in the
45
+ * `connected` message, but the parameter is accepted for interface parity.
46
+ * @returns JSON string with the `connected` envelope.
47
+ */
48
+ formatConnected(_streamSid: string): string;
49
+ }
50
+ //# sourceMappingURL=TwilioMediaStreamParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TwilioMediaStreamParser.d.ts","sourceRoot":"","sources":["../../../src/voice/parsers/TwilioMediaStreamParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEtF;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,GAAG,IAAI;IA+FhE;;;;;;;;;OASG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAQxD;;;;;;;OAOG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;CAO5C"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Parses the Twilio `<Connect><Stream>` WebSocket media stream protocol.
3
+ *
4
+ * Twilio sends all messages as JSON-encoded strings. Outbound audio is
5
+ * wrapped in the same JSON envelope so Twilio can associate it with the
6
+ * correct stream. An explicit `connected` acknowledgment is sent once
7
+ * immediately after the WebSocket handshake to signal that the listener is
8
+ * ready to receive media.
9
+ *
10
+ * @see {@link https://www.twilio.com/docs/voice/twiml/stream}
11
+ */
12
+ export class TwilioMediaStreamParser {
13
+ /**
14
+ * Parse a raw WebSocket frame from Twilio's media stream.
15
+ *
16
+ * Supported Twilio event types:
17
+ * - `start` — stream established, includes callSid
18
+ * - `media` — audio chunk (inbound track only; outbound chunks are ignored)
19
+ * - `dtmf` — DTMF keypress detected
20
+ * - `stop` — stream ended
21
+ * - `mark` — named synchronisation marker
22
+ *
23
+ * @param data - Raw WebSocket frame payload (always a JSON string from Twilio).
24
+ * @returns Normalised {@link MediaStreamIncoming} event, or `null` for
25
+ * outbound audio tracks, unknown event types, or malformed messages.
26
+ */
27
+ parseIncoming(data) {
28
+ const raw = typeof data === 'string' ? data : data.toString('utf8');
29
+ let msg;
30
+ try {
31
+ msg = JSON.parse(raw);
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ const event = msg['event'];
37
+ const streamSid = msg['streamSid'];
38
+ if (!event || !streamSid) {
39
+ return null;
40
+ }
41
+ switch (event) {
42
+ case 'start': {
43
+ const startPayload = msg['start'];
44
+ const callSid = startPayload?.['callSid'] ?? '';
45
+ const result = {
46
+ type: 'start',
47
+ streamSid,
48
+ callSid,
49
+ metadata: startPayload,
50
+ };
51
+ return result;
52
+ }
53
+ case 'media': {
54
+ const media = msg['media'];
55
+ if (!media)
56
+ return null;
57
+ // Only process inbound audio — outbound echoes must be discarded.
58
+ const track = media['track'];
59
+ if (track === 'outbound')
60
+ return null;
61
+ const payloadB64 = media['payload'];
62
+ if (!payloadB64)
63
+ return null;
64
+ const sequenceNumber = typeof msg['sequenceNumber'] === 'number'
65
+ ? msg['sequenceNumber']
66
+ : undefined;
67
+ const result = {
68
+ type: 'audio',
69
+ payload: Buffer.from(payloadB64, 'base64'),
70
+ streamSid,
71
+ ...(sequenceNumber !== undefined ? { sequenceNumber } : {}),
72
+ };
73
+ return result;
74
+ }
75
+ case 'dtmf': {
76
+ const dtmf = msg['dtmf'];
77
+ if (!dtmf)
78
+ return null;
79
+ const digit = dtmf['digit'];
80
+ if (!digit)
81
+ return null;
82
+ const duration = typeof dtmf['duration'] === 'number'
83
+ ? dtmf['duration']
84
+ : undefined;
85
+ const result = {
86
+ type: 'dtmf',
87
+ digit,
88
+ streamSid,
89
+ ...(duration !== undefined ? { durationMs: duration } : {}),
90
+ };
91
+ return result;
92
+ }
93
+ case 'stop': {
94
+ const result = { type: 'stop', streamSid };
95
+ return result;
96
+ }
97
+ case 'mark': {
98
+ const mark = msg['mark'];
99
+ if (!mark)
100
+ return null;
101
+ const name = mark['name'];
102
+ if (!name)
103
+ return null;
104
+ const result = { type: 'mark', name, streamSid };
105
+ return result;
106
+ }
107
+ default:
108
+ return null;
109
+ }
110
+ }
111
+ /**
112
+ * Encode mu-law audio for transmission back to the Twilio stream.
113
+ *
114
+ * Twilio requires base64-encoded audio wrapped in a JSON `media` envelope
115
+ * so it can route the audio to the correct stream.
116
+ *
117
+ * @param audio - Raw mu-law PCM bytes to send to the caller.
118
+ * @param streamSid - The stream identifier to include in the envelope.
119
+ * @returns JSON string conforming to the Twilio media-out envelope format.
120
+ */
121
+ formatOutgoing(audio, streamSid) {
122
+ return JSON.stringify({
123
+ event: 'media',
124
+ streamSid,
125
+ media: { payload: audio.toString('base64') },
126
+ });
127
+ }
128
+ /**
129
+ * Generate the initial `connected` acknowledgment expected by Twilio
130
+ * immediately after the WebSocket connection is established.
131
+ *
132
+ * @param _streamSid - Unused — Twilio does not require the stream ID in the
133
+ * `connected` message, but the parameter is accepted for interface parity.
134
+ * @returns JSON string with the `connected` envelope.
135
+ */
136
+ formatConnected(_streamSid) {
137
+ return JSON.stringify({
138
+ event: 'connected',
139
+ protocol: 'Call',
140
+ version: '1.0.0',
141
+ });
142
+ }
143
+ }
144
+ //# sourceMappingURL=TwilioMediaStreamParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TwilioMediaStreamParser.js","sourceRoot":"","sources":["../../../src/voice/parsers/TwilioMediaStreamParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @fileoverview Plivo telephony provider for AgentOS voice calls.
3
+ *
4
+ * Implements {@link IVoiceCallProvider} using the Plivo Voice REST API v1.
5
+ * Webhook verification uses HMAC-SHA256 with the v3 signature scheme.
6
+ *
7
+ * @module @framers/agentos/voice/providers/plivo
8
+ */
9
+ import type { IVoiceCallProvider, InitiateCallInput, InitiateCallResult, HangupCallInput, PlayTtsInput } from '../IVoiceCallProvider.js';
10
+ import type { WebhookContext, WebhookVerificationResult, WebhookParseResult } from '../types.js';
11
+ /** Configuration for {@link PlivoVoiceProvider}. */
12
+ export interface PlivoVoiceProviderConfig {
13
+ /** Plivo Auth ID (account identifier). */
14
+ authId: string;
15
+ /** Plivo Auth Token. */
16
+ authToken: string;
17
+ /**
18
+ * Optional fetch override — inject a mock in tests.
19
+ * Defaults to the global `fetch`.
20
+ */
21
+ fetchImpl?: typeof fetch;
22
+ }
23
+ /**
24
+ * Plivo voice call provider.
25
+ *
26
+ * Uses the Plivo REST API v1 for outbound call control and HMAC-SHA256
27
+ * for inbound webhook signature verification (v3 signature scheme).
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const provider = new PlivoVoiceProvider({
32
+ * authId: process.env.PLIVO_AUTH_ID!,
33
+ * authToken: process.env.PLIVO_AUTH_TOKEN!,
34
+ * });
35
+ * ```
36
+ */
37
+ export declare class PlivoVoiceProvider implements IVoiceCallProvider {
38
+ readonly name: "plivo";
39
+ private readonly config;
40
+ private readonly baseUrl;
41
+ private readonly authHeader;
42
+ private readonly fetch;
43
+ constructor(config: PlivoVoiceProviderConfig);
44
+ /**
45
+ * Verify an incoming Plivo webhook request using HMAC-SHA256 (v3 scheme).
46
+ *
47
+ * Plivo signs the concatenation of the full request URL and the nonce
48
+ * header value. The resulting base64-encoded digest is compared against
49
+ * the `x-plivo-signature-v3` header.
50
+ */
51
+ verifyWebhook(ctx: WebhookContext): WebhookVerificationResult;
52
+ /**
53
+ * Parse a Plivo webhook body into normalized {@link NormalizedCallEvent}s.
54
+ *
55
+ * Supports both URL-encoded and JSON request bodies. Maps `CallStatus`
56
+ * parameter values to call lifecycle events.
57
+ */
58
+ parseWebhookEvent(ctx: WebhookContext): WebhookParseResult;
59
+ /**
60
+ * Initiate an outbound call via the Plivo Call API.
61
+ *
62
+ * POSTs a JSON body to `/Account/{authId}/Call/` with the caller, callee,
63
+ * and answer URL. Returns the `request_uuid` as the provider call ID.
64
+ */
65
+ initiateCall(input: InitiateCallInput): Promise<InitiateCallResult>;
66
+ /**
67
+ * Hang up an active call using the Plivo Call DELETE endpoint.
68
+ */
69
+ hangupCall(input: HangupCallInput): Promise<void>;
70
+ /**
71
+ * Speak text into a live call using the Plivo Speak API.
72
+ *
73
+ * Defaults to `WOMAN` voice and `en-US` language when not specified.
74
+ */
75
+ playTts(input: PlayTtsInput): Promise<void>;
76
+ }
77
+ //# sourceMappingURL=plivo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plivo.d.ts","sourceRoot":"","sources":["../../../src/voice/providers/plivo.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAMrB,oDAAoD;AACpD,MAAM,WAAW,wBAAwB;IACvC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAMD;;;;;;;;;;;;;GAaG;AACH,qBAAa,kBAAmB,YAAW,kBAAkB;IAC3D,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,MAAM,EAAE,wBAAwB;IAU5C;;;;;;OAMG;IACH,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,yBAAyB;IAkB7D;;;;;OAKG;IACH,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,kBAAkB;IA8D1D;;;;;OAKG;IACG,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0BzE;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvD;;;;OAIG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBlD"}