elevenlabs-voice-agent-mcp 1.0.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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +533 -0
  3. package/dist/constants.d.ts +25 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +51 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/index.d.ts +8 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +93 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/schemas/agent-schemas.d.ts +147 -0
  12. package/dist/schemas/agent-schemas.d.ts.map +1 -0
  13. package/dist/schemas/agent-schemas.js +145 -0
  14. package/dist/schemas/agent-schemas.js.map +1 -0
  15. package/dist/schemas/batch-calling-schemas.d.ts +170 -0
  16. package/dist/schemas/batch-calling-schemas.d.ts.map +1 -0
  17. package/dist/schemas/batch-calling-schemas.js +77 -0
  18. package/dist/schemas/batch-calling-schemas.js.map +1 -0
  19. package/dist/schemas/common-schemas.d.ts +54 -0
  20. package/dist/schemas/common-schemas.d.ts.map +1 -0
  21. package/dist/schemas/common-schemas.js +72 -0
  22. package/dist/schemas/common-schemas.js.map +1 -0
  23. package/dist/schemas/conversation-schemas.d.ts +72 -0
  24. package/dist/schemas/conversation-schemas.d.ts.map +1 -0
  25. package/dist/schemas/conversation-schemas.js +30 -0
  26. package/dist/schemas/conversation-schemas.js.map +1 -0
  27. package/dist/schemas/outbound-schemas.d.ts +115 -0
  28. package/dist/schemas/outbound-schemas.d.ts.map +1 -0
  29. package/dist/schemas/outbound-schemas.js +61 -0
  30. package/dist/schemas/outbound-schemas.js.map +1 -0
  31. package/dist/schemas/phone-number-schemas.d.ts +168 -0
  32. package/dist/schemas/phone-number-schemas.d.ts.map +1 -0
  33. package/dist/schemas/phone-number-schemas.js +116 -0
  34. package/dist/schemas/phone-number-schemas.js.map +1 -0
  35. package/dist/schemas/tool-schemas.d.ts +208 -0
  36. package/dist/schemas/tool-schemas.d.ts.map +1 -0
  37. package/dist/schemas/tool-schemas.js +131 -0
  38. package/dist/schemas/tool-schemas.js.map +1 -0
  39. package/dist/services/elevenlabs-api.d.ts +37 -0
  40. package/dist/services/elevenlabs-api.d.ts.map +1 -0
  41. package/dist/services/elevenlabs-api.js +78 -0
  42. package/dist/services/elevenlabs-api.js.map +1 -0
  43. package/dist/services/formatters.d.ts +76 -0
  44. package/dist/services/formatters.d.ts.map +1 -0
  45. package/dist/services/formatters.js +475 -0
  46. package/dist/services/formatters.js.map +1 -0
  47. package/dist/tools/agent-tools.d.ts +228 -0
  48. package/dist/tools/agent-tools.d.ts.map +1 -0
  49. package/dist/tools/agent-tools.js +369 -0
  50. package/dist/tools/agent-tools.js.map +1 -0
  51. package/dist/tools/batch-calling-tools.d.ts +183 -0
  52. package/dist/tools/batch-calling-tools.d.ts.map +1 -0
  53. package/dist/tools/batch-calling-tools.js +203 -0
  54. package/dist/tools/batch-calling-tools.js.map +1 -0
  55. package/dist/tools/conversation-tools.d.ts +103 -0
  56. package/dist/tools/conversation-tools.d.ts.map +1 -0
  57. package/dist/tools/conversation-tools.js +140 -0
  58. package/dist/tools/conversation-tools.js.map +1 -0
  59. package/dist/tools/knowledge-tools.d.ts +75 -0
  60. package/dist/tools/knowledge-tools.d.ts.map +1 -0
  61. package/dist/tools/knowledge-tools.js +63 -0
  62. package/dist/tools/knowledge-tools.js.map +1 -0
  63. package/dist/tools/outbound-tools.d.ts +44 -0
  64. package/dist/tools/outbound-tools.d.ts.map +1 -0
  65. package/dist/tools/outbound-tools.js +84 -0
  66. package/dist/tools/outbound-tools.js.map +1 -0
  67. package/dist/tools/phone-number-tools.d.ts +215 -0
  68. package/dist/tools/phone-number-tools.d.ts.map +1 -0
  69. package/dist/tools/phone-number-tools.js +295 -0
  70. package/dist/tools/phone-number-tools.js.map +1 -0
  71. package/dist/tools/tool-tools.d.ts +165 -0
  72. package/dist/tools/tool-tools.d.ts.map +1 -0
  73. package/dist/tools/tool-tools.js +166 -0
  74. package/dist/tools/tool-tools.js.map +1 -0
  75. package/dist/tools/utility-tools.d.ts +76 -0
  76. package/dist/tools/utility-tools.d.ts.map +1 -0
  77. package/dist/tools/utility-tools.js +121 -0
  78. package/dist/tools/utility-tools.js.map +1 -0
  79. package/dist/types.d.ts +282 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +12 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/utils/error-handlers.d.ts +29 -0
  84. package/dist/utils/error-handlers.d.ts.map +1 -0
  85. package/dist/utils/error-handlers.js +90 -0
  86. package/dist/utils/error-handlers.js.map +1 -0
  87. package/dist/utils/truncation.d.ts +41 -0
  88. package/dist/utils/truncation.d.ts.map +1 -0
  89. package/dist/utils/truncation.js +78 -0
  90. package/dist/utils/truncation.js.map +1 -0
  91. package/package.json +61 -0
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Response formatting utilities
3
+ *
4
+ * Converts API responses to human-readable Markdown or structured JSON format.
5
+ * Provides consistent formatting across all MCP tools.
6
+ */
7
+ import { Agent, ConversationMetadata, ToolConfig, Voice, ResponseFormat, OutboundCallResponse, BatchCallResponse, BatchCallDetailedResponse, WorkspaceBatchCallsResponse, PhoneNumber, ImportPhoneNumberResponse } from "../types.js";
8
+ /**
9
+ * Formats an agent in Markdown format
10
+ */
11
+ export declare function formatAgentMarkdown(agent: Agent): string;
12
+ /**
13
+ * Formats a list of agents in Markdown format
14
+ */
15
+ export declare function formatAgentListMarkdown(agents: Agent[], total: number, offset: number, hasMore: boolean): string;
16
+ /**
17
+ * Formats a conversation in Markdown format
18
+ */
19
+ export declare function formatConversationMarkdown(conversation: ConversationMetadata): string;
20
+ /**
21
+ * Formats a list of conversations in Markdown format
22
+ */
23
+ export declare function formatConversationListMarkdown(conversations: ConversationMetadata[], total: number, offset: number, hasMore: boolean): string;
24
+ /**
25
+ * Formats a tool configuration in Markdown format
26
+ */
27
+ export declare function formatToolMarkdown(tool: ToolConfig): string;
28
+ /**
29
+ * Formats a list of tools in Markdown format
30
+ */
31
+ export declare function formatToolListMarkdown(tools: ToolConfig[]): string;
32
+ /**
33
+ * Formats a list of voices in Markdown format
34
+ */
35
+ export declare function formatVoiceListMarkdown(voices: Voice[]): string;
36
+ /**
37
+ * Formats widget embed code
38
+ */
39
+ export declare function formatWidgetCode(agentId: string, color?: string, avatarUrl?: string): string;
40
+ /**
41
+ * Formats an outbound call response in Markdown format
42
+ */
43
+ export declare function formatOutboundCallMarkdown(response: OutboundCallResponse): string;
44
+ /**
45
+ * Formats a batch call response in Markdown format
46
+ */
47
+ export declare function formatBatchCallMarkdown(batch: BatchCallResponse): string;
48
+ /**
49
+ * Formats a batch call list in Markdown format
50
+ */
51
+ export declare function formatBatchCallListMarkdown(response: WorkspaceBatchCallsResponse): string;
52
+ /**
53
+ * Formats detailed batch call information with recipient statuses
54
+ */
55
+ export declare function formatBatchCallDetailMarkdown(batch: BatchCallDetailedResponse): string;
56
+ /**
57
+ * Formats a list of phone numbers in Markdown format
58
+ */
59
+ export declare function formatPhoneNumberListMarkdown(phoneNumbers: PhoneNumber[]): string;
60
+ /**
61
+ * Formats a single phone number in Markdown format
62
+ */
63
+ export declare function formatPhoneNumberMarkdown(phone: PhoneNumber): string;
64
+ /**
65
+ * Formats phone number import response in Markdown format
66
+ */
67
+ export declare function formatPhoneNumberImportMarkdown(response: ImportPhoneNumberResponse): string;
68
+ /**
69
+ * Formats any response as JSON
70
+ */
71
+ export declare function formatAsJSON(data: unknown): string;
72
+ /**
73
+ * Main formatting function that routes to appropriate formatter
74
+ */
75
+ export declare function formatResponse(data: unknown, format: ResponseFormat, type: "agent" | "agent_list" | "conversation" | "conversation_list" | "tool" | "tool_list" | "voice_list" | "widget" | "outbound_call" | "batch_call" | "batch_call_list" | "batch_call_detail" | "phone_number_list" | "phone_number" | "phone_number_import" | "generic"): string;
76
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/services/formatters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,EACL,oBAAoB,EACpB,UAAU,EACV,KAAK,EACL,cAAc,EAEd,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,EACzB,2BAA2B,EAC3B,WAAW,EACX,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAuDxD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,MAAM,CAsBR;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,oBAAoB,GAAG,MAAM,CAgDrF;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,oBAAoB,EAAE,EACrC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,MAAM,CA0BR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAuB3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAoBlE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAmC/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAuB5F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAkBjF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAwBxE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,2BAA2B,GAAG,MAAM,CAuBzF;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,yBAAyB,GAAG,MAAM,CA2CtF;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CA6BjF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAgCpE;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,yBAAyB,GAAG,MAAM,CAS3F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,cAAc,GAAG,mBAAmB,GAAG,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,eAAe,GAAG,YAAY,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,cAAc,GAAG,qBAAqB,GAAG,SAAS,GACzQ,MAAM,CAsER"}
@@ -0,0 +1,475 @@
1
+ /**
2
+ * Response formatting utilities
3
+ *
4
+ * Converts API responses to human-readable Markdown or structured JSON format.
5
+ * Provides consistent formatting across all MCP tools.
6
+ */
7
+ import { ResponseFormat } from "../types.js";
8
+ import { truncateIfNeeded, formatJSON, truncateMiddle } from "../utils/truncation.js";
9
+ /**
10
+ * Formats an agent in Markdown format
11
+ */
12
+ export function formatAgentMarkdown(agent) {
13
+ const config = agent.conversation_config;
14
+ const prompt = config.agent.prompt;
15
+ let markdown = `# Agent: ${agent.name} (${agent.agent_id})\n\n`;
16
+ markdown += `**Created**: ${new Date(agent.created_at).toISOString()}\n\n`;
17
+ // Configuration section
18
+ markdown += `## Configuration\n`;
19
+ markdown += `- **LLM**: ${prompt.llm}\n`;
20
+ markdown += `- **Voice ID**: ${config.tts.voice_id}\n`;
21
+ markdown += `- **Voice Model**: ${config.tts.model_id}\n`;
22
+ markdown += `- **Language**: ${config.agent.language}\n`;
23
+ if (prompt.temperature !== undefined) {
24
+ markdown += `- **Temperature**: ${prompt.temperature}\n`;
25
+ }
26
+ if (config.agent.first_message) {
27
+ markdown += `- **First Message**: "${config.agent.first_message}"\n`;
28
+ }
29
+ markdown += `\n`;
30
+ // Prompt section
31
+ markdown += `## System Prompt\n\`\`\`\n${prompt.prompt}\n\`\`\`\n\n`;
32
+ // Tools section
33
+ if (prompt.tools && prompt.tools.length > 0) {
34
+ markdown += `## Tools (${prompt.tools.length})\n`;
35
+ prompt.tools.forEach((tool, idx) => {
36
+ markdown += `${idx + 1}. **${tool.name}** - ${tool.description}\n`;
37
+ });
38
+ markdown += `\n`;
39
+ }
40
+ // Knowledge Base section
41
+ if (prompt.knowledge_base && prompt.knowledge_base.length > 0) {
42
+ markdown += `## Knowledge Base (${prompt.knowledge_base.length} documents)\n`;
43
+ markdown += `Documents have been added to the agent's knowledge base.\n\n`;
44
+ }
45
+ // Widget section
46
+ if (agent.platform_settings?.widget) {
47
+ markdown += `## Widget Settings\n`;
48
+ if (agent.platform_settings.widget.color) {
49
+ markdown += `- **Color**: ${agent.platform_settings.widget.color}\n`;
50
+ }
51
+ if (agent.platform_settings.widget.avatar_url) {
52
+ markdown += `- **Avatar**: ${agent.platform_settings.widget.avatar_url}\n`;
53
+ }
54
+ markdown += `\n`;
55
+ }
56
+ return markdown;
57
+ }
58
+ /**
59
+ * Formats a list of agents in Markdown format
60
+ */
61
+ export function formatAgentListMarkdown(agents, total, offset, hasMore) {
62
+ let markdown = `# Agents (${agents.length} of ${total})\n\n`;
63
+ if (agents.length === 0) {
64
+ return markdown + "No agents found.\n";
65
+ }
66
+ agents.forEach((agent, idx) => {
67
+ const num = offset + idx + 1;
68
+ markdown += `## ${num}. ${agent.name}\n`;
69
+ markdown += `- **ID**: ${agent.agent_id}\n`;
70
+ markdown += `- **LLM**: ${agent.conversation_config.agent.prompt.llm}\n`;
71
+ markdown += `- **Language**: ${agent.conversation_config.agent.language}\n`;
72
+ markdown += `- **Created**: ${new Date(agent.created_at).toISOString()}\n\n`;
73
+ });
74
+ if (hasMore) {
75
+ const nextOffset = offset + agents.length;
76
+ markdown += `\n**More agents available.** Use \`offset=${nextOffset}\` to see the next page.\n`;
77
+ }
78
+ return truncateIfNeeded(markdown, `Use offset=${offset + agents.length} to continue`);
79
+ }
80
+ /**
81
+ * Formats a conversation in Markdown format
82
+ */
83
+ export function formatConversationMarkdown(conversation) {
84
+ let markdown = `# Conversation: ${conversation.conversation_id}\n\n`;
85
+ markdown += `- **Agent ID**: ${conversation.agent_id}\n`;
86
+ markdown += `- **Status**: ${conversation.status}\n`;
87
+ markdown += `- **Started**: ${new Date(conversation.started_at).toISOString()}\n`;
88
+ if (conversation.ended_at) {
89
+ markdown += `- **Ended**: ${new Date(conversation.ended_at).toISOString()}\n`;
90
+ }
91
+ if (conversation.duration_seconds !== undefined) {
92
+ markdown += `- **Duration**: ${conversation.duration_seconds}s\n`;
93
+ }
94
+ markdown += `\n`;
95
+ // Transcript
96
+ if (conversation.transcript && conversation.transcript.length > 0) {
97
+ markdown += `## Transcript (${conversation.transcript.length} messages)\n\n`;
98
+ conversation.transcript.forEach((entry, idx) => {
99
+ const time = new Date(entry.timestamp).toLocaleTimeString();
100
+ markdown += `**[${time}] ${entry.role.toUpperCase()}**: ${entry.message}\n`;
101
+ if (entry.tool_calls && entry.tool_calls.length > 0) {
102
+ markdown += ` *Tool calls: ${entry.tool_calls.map(t => t.tool_name).join(", ")}*\n`;
103
+ }
104
+ markdown += `\n`;
105
+ });
106
+ }
107
+ // Analysis
108
+ if (conversation.analysis) {
109
+ markdown += `## Analysis\n`;
110
+ if (conversation.analysis.user_sentiment) {
111
+ markdown += `- **User Sentiment**: ${conversation.analysis.user_sentiment}\n`;
112
+ }
113
+ if (conversation.analysis.agent_performance !== undefined) {
114
+ markdown += `- **Agent Performance**: ${conversation.analysis.agent_performance}/10\n`;
115
+ }
116
+ if (conversation.analysis.key_topics && conversation.analysis.key_topics.length > 0) {
117
+ markdown += `- **Key Topics**: ${conversation.analysis.key_topics.join(", ")}\n`;
118
+ }
119
+ markdown += `\n`;
120
+ }
121
+ return truncateIfNeeded(markdown);
122
+ }
123
+ /**
124
+ * Formats a list of conversations in Markdown format
125
+ */
126
+ export function formatConversationListMarkdown(conversations, total, offset, hasMore) {
127
+ let markdown = `# Conversations (${conversations.length} of ${total})\n\n`;
128
+ if (conversations.length === 0) {
129
+ return markdown + "No conversations found.\n";
130
+ }
131
+ conversations.forEach((conv, idx) => {
132
+ const num = offset + idx + 1;
133
+ markdown += `## ${num}. ${conv.conversation_id}\n`;
134
+ markdown += `- **Status**: ${conv.status}\n`;
135
+ markdown += `- **Started**: ${new Date(conv.started_at).toISOString()}\n`;
136
+ if (conv.duration_seconds !== undefined) {
137
+ markdown += `- **Duration**: ${conv.duration_seconds}s\n`;
138
+ }
139
+ markdown += `\n`;
140
+ });
141
+ if (hasMore) {
142
+ const nextOffset = offset + conversations.length;
143
+ markdown += `\n**More conversations available.** Use \`offset=${nextOffset}\` to see the next page.\n`;
144
+ }
145
+ return truncateIfNeeded(markdown, `Use offset=${offset + conversations.length} to continue`);
146
+ }
147
+ /**
148
+ * Formats a tool configuration in Markdown format
149
+ */
150
+ export function formatToolMarkdown(tool) {
151
+ let markdown = `# Tool: ${tool.name}\n\n`;
152
+ markdown += `**Type**: ${tool.type}\n`;
153
+ markdown += `**Description**: ${tool.description}\n\n`;
154
+ if (tool.url) {
155
+ markdown += `**URL**: ${tool.url}\n`;
156
+ markdown += `**Method**: ${tool.method || "POST"}\n\n`;
157
+ }
158
+ if (tool.parameters && tool.parameters.length > 0) {
159
+ markdown += `## Parameters\n\n`;
160
+ tool.parameters.forEach((param) => {
161
+ markdown += `- **${param.name}** (${param.type})${param.required ? " *required*" : ""}\n`;
162
+ markdown += ` ${param.description}\n`;
163
+ if (param.enum) {
164
+ markdown += ` Options: ${param.enum.join(", ")}\n`;
165
+ }
166
+ markdown += `\n`;
167
+ });
168
+ }
169
+ return markdown;
170
+ }
171
+ /**
172
+ * Formats a list of tools in Markdown format
173
+ */
174
+ export function formatToolListMarkdown(tools) {
175
+ if (tools.length === 0) {
176
+ return "# Tools\n\nNo tools configured for this agent.\n";
177
+ }
178
+ let markdown = `# Tools (${tools.length})\n\n`;
179
+ tools.forEach((tool, idx) => {
180
+ markdown += `## ${idx + 1}. ${tool.name}\n`;
181
+ markdown += `- **Type**: ${tool.type}\n`;
182
+ markdown += `- **Description**: ${tool.description}\n`;
183
+ if (tool.url) {
184
+ markdown += `- **URL**: ${truncateMiddle(tool.url, 80)}\n`;
185
+ }
186
+ markdown += `\n`;
187
+ });
188
+ return truncateIfNeeded(markdown);
189
+ }
190
+ /**
191
+ * Formats a list of voices in Markdown format
192
+ */
193
+ export function formatVoiceListMarkdown(voices) {
194
+ if (voices.length === 0) {
195
+ return "# Voices\n\nNo voices found matching the criteria.\n";
196
+ }
197
+ let markdown = `# Voices (${voices.length})\n\n`;
198
+ voices.forEach((voice, idx) => {
199
+ markdown += `## ${idx + 1}. ${voice.name}\n`;
200
+ markdown += `- **ID**: ${voice.voice_id}\n`;
201
+ if (voice.labels?.gender) {
202
+ markdown += `- **Gender**: ${voice.labels.gender}\n`;
203
+ }
204
+ if (voice.labels?.age) {
205
+ markdown += `- **Age**: ${voice.labels.age}\n`;
206
+ }
207
+ if (voice.labels?.accent) {
208
+ markdown += `- **Accent**: ${voice.labels.accent}\n`;
209
+ }
210
+ if (voice.description) {
211
+ markdown += `- **Description**: ${voice.description}\n`;
212
+ }
213
+ if (voice.preview_url) {
214
+ markdown += `- **Preview**: ${voice.preview_url}\n`;
215
+ }
216
+ markdown += `\n`;
217
+ });
218
+ return truncateIfNeeded(markdown);
219
+ }
220
+ /**
221
+ * Formats widget embed code
222
+ */
223
+ export function formatWidgetCode(agentId, color, avatarUrl) {
224
+ let markdown = `# Widget Embed Code\n\n`;
225
+ markdown += `Add this HTML to your website to embed the voice agent:\n\n`;
226
+ markdown += `\`\`\`html\n`;
227
+ markdown += `<script>\n`;
228
+ markdown += ` window.elevenLabsConfig = {\n`;
229
+ markdown += ` agentId: "${agentId}",\n`;
230
+ if (color) {
231
+ markdown += ` color: "${color}",\n`;
232
+ }
233
+ if (avatarUrl) {
234
+ markdown += ` avatarUrl: "${avatarUrl}",\n`;
235
+ }
236
+ markdown += ` };\n`;
237
+ markdown += `</script>\n`;
238
+ markdown += `<script src="https://elevenlabs.io/convai-widget/index.js" async></script>\n`;
239
+ markdown += `\`\`\`\n\n`;
240
+ markdown += `The widget will appear as a floating button on your page.\n`;
241
+ return markdown;
242
+ }
243
+ /**
244
+ * Formats an outbound call response in Markdown format
245
+ */
246
+ export function formatOutboundCallMarkdown(response) {
247
+ let markdown = `# Outbound Call ${response.success ? "Initiated" : "Failed"}\n\n`;
248
+ markdown += `**Status**: ${response.success ? "✓ Success" : "✗ Failed"}\n`;
249
+ markdown += `**Message**: ${response.message}\n`;
250
+ if (response.conversation_id) {
251
+ markdown += `**Conversation ID**: ${response.conversation_id}\n`;
252
+ }
253
+ if (response.callSid) {
254
+ markdown += `**Twilio Call SID**: ${response.callSid}\n`;
255
+ }
256
+ if (response.success) {
257
+ markdown += `\nThe call has been initiated. Use the conversation ID to track and retrieve the conversation transcript.\n`;
258
+ }
259
+ return markdown;
260
+ }
261
+ /**
262
+ * Formats a batch call response in Markdown format
263
+ */
264
+ export function formatBatchCallMarkdown(batch) {
265
+ let markdown = `# Batch Call: ${batch.name}\n\n`;
266
+ markdown += `**Batch ID**: ${batch.id}\n`;
267
+ markdown += `**Status**: ${batch.status}\n`;
268
+ markdown += `**Agent**: ${batch.agent_name} (${batch.agent_id})\n`;
269
+ if (batch.phone_number_id) {
270
+ markdown += `**Phone Number ID**: ${batch.phone_number_id}\n`;
271
+ }
272
+ if (batch.phone_provider) {
273
+ markdown += `**Provider**: ${batch.phone_provider}\n`;
274
+ }
275
+ markdown += `\n## Timing\n`;
276
+ markdown += `- **Created**: ${new Date(batch.created_at_unix * 1000).toISOString()}\n`;
277
+ markdown += `- **Scheduled**: ${new Date(batch.scheduled_time_unix * 1000).toISOString()}\n`;
278
+ markdown += `- **Last Updated**: ${new Date(batch.last_updated_at_unix * 1000).toISOString()}\n`;
279
+ markdown += `\n## Call Statistics\n`;
280
+ markdown += `- **Calls Dispatched**: ${batch.total_calls_dispatched}\n`;
281
+ markdown += `- **Calls Scheduled**: ${batch.total_calls_scheduled}\n`;
282
+ return markdown;
283
+ }
284
+ /**
285
+ * Formats a batch call list in Markdown format
286
+ */
287
+ export function formatBatchCallListMarkdown(response) {
288
+ const batches = response.batch_calls;
289
+ if (batches.length === 0) {
290
+ return "# Batch Calls\n\nNo batch calling jobs found.\n";
291
+ }
292
+ let markdown = `# Batch Calls (${batches.length})\n\n`;
293
+ batches.forEach((batch, idx) => {
294
+ markdown += `## ${idx + 1}. ${batch.name}\n`;
295
+ markdown += `- **Batch ID**: ${batch.id}\n`;
296
+ markdown += `- **Status**: ${batch.status}\n`;
297
+ markdown += `- **Agent**: ${batch.agent_name}\n`;
298
+ markdown += `- **Dispatched/Scheduled**: ${batch.total_calls_dispatched}/${batch.total_calls_scheduled}\n`;
299
+ markdown += `- **Created**: ${new Date(batch.created_at_unix * 1000).toISOString()}\n\n`;
300
+ });
301
+ if (response.has_more) {
302
+ markdown += `\n**More batches available.** Use \`last_doc="${response.next_doc}"\` to see the next page.\n`;
303
+ }
304
+ return truncateIfNeeded(markdown, response.has_more ? `Use last_doc="${response.next_doc}" to continue` : undefined);
305
+ }
306
+ /**
307
+ * Formats detailed batch call information with recipient statuses
308
+ */
309
+ export function formatBatchCallDetailMarkdown(batch) {
310
+ let markdown = formatBatchCallMarkdown(batch);
311
+ if (batch.recipients && batch.recipients.length > 0) {
312
+ markdown += `\n## Recipients (${batch.recipients.length})\n\n`;
313
+ // Group recipients by status
314
+ const statusGroups = {};
315
+ batch.recipients.forEach(recipient => {
316
+ if (!statusGroups[recipient.status]) {
317
+ statusGroups[recipient.status] = [];
318
+ }
319
+ statusGroups[recipient.status].push(recipient);
320
+ });
321
+ // Show summary
322
+ markdown += `**Status Summary**:\n`;
323
+ Object.entries(statusGroups).forEach(([status, recipients]) => {
324
+ markdown += `- ${status}: ${recipients.length}\n`;
325
+ });
326
+ markdown += `\n`;
327
+ // Show first 20 recipients
328
+ const displayLimit = 20;
329
+ batch.recipients.slice(0, displayLimit).forEach((recipient, idx) => {
330
+ markdown += `### ${idx + 1}. `;
331
+ if (recipient.phone_number) {
332
+ markdown += `${recipient.phone_number}`;
333
+ }
334
+ else if (recipient.whatsapp_user_id) {
335
+ markdown += `WhatsApp: ${recipient.whatsapp_user_id}`;
336
+ }
337
+ markdown += `\n`;
338
+ markdown += `- **Status**: ${recipient.status}\n`;
339
+ markdown += `- **Conversation ID**: ${recipient.conversation_id}\n`;
340
+ markdown += `- **Updated**: ${new Date(recipient.updated_at_unix * 1000).toISOString()}\n\n`;
341
+ });
342
+ if (batch.recipients.length > displayLimit) {
343
+ markdown += `\n*Showing ${displayLimit} of ${batch.recipients.length} recipients. Use JSON format for complete list.*\n`;
344
+ }
345
+ }
346
+ return truncateIfNeeded(markdown);
347
+ }
348
+ /**
349
+ * Formats a list of phone numbers in Markdown format
350
+ */
351
+ export function formatPhoneNumberListMarkdown(phoneNumbers) {
352
+ if (phoneNumbers.length === 0) {
353
+ return "# Phone Numbers\n\nNo phone numbers found.\n";
354
+ }
355
+ let markdown = `# Phone Numbers (${phoneNumbers.length})\n\n`;
356
+ phoneNumbers.forEach((phone, idx) => {
357
+ markdown += `## ${idx + 1}. ${phone.label}\n`;
358
+ markdown += `- **Number**: ${phone.phone_number}\n`;
359
+ markdown += `- **ID**: ${phone.phone_number_id}\n`;
360
+ markdown += `- **Provider**: ${phone.provider}\n`;
361
+ markdown += `- **Inbound**: ${phone.supports_inbound ? "✓" : "✗"}\n`;
362
+ markdown += `- **Outbound**: ${phone.supports_outbound ? "✓" : "✗"}\n`;
363
+ if (phone.assigned_agent) {
364
+ markdown += `- **Assigned Agent**: ${phone.assigned_agent.agent_name} (${phone.assigned_agent.agent_id})\n`;
365
+ }
366
+ else {
367
+ markdown += `- **Assigned Agent**: None\n`;
368
+ }
369
+ if (phone.provider === "sip_trunk") {
370
+ markdown += `- **LiveKit Stack**: ${phone.livekit_stack}\n`;
371
+ }
372
+ markdown += `\n`;
373
+ });
374
+ return truncateIfNeeded(markdown);
375
+ }
376
+ /**
377
+ * Formats a single phone number in Markdown format
378
+ */
379
+ export function formatPhoneNumberMarkdown(phone) {
380
+ let markdown = `# Phone Number: ${phone.label}\n\n`;
381
+ markdown += `**Number**: ${phone.phone_number}\n`;
382
+ markdown += `**ID**: ${phone.phone_number_id}\n`;
383
+ markdown += `**Provider**: ${phone.provider}\n\n`;
384
+ markdown += `## Capabilities\n`;
385
+ markdown += `- **Inbound Calls**: ${phone.supports_inbound ? "Enabled" : "Disabled"}\n`;
386
+ markdown += `- **Outbound Calls**: ${phone.supports_outbound ? "Enabled" : "Disabled"}\n\n`;
387
+ if (phone.assigned_agent) {
388
+ markdown += `## Assigned Agent\n`;
389
+ markdown += `- **Name**: ${phone.assigned_agent.agent_name}\n`;
390
+ markdown += `- **ID**: ${phone.assigned_agent.agent_id}\n\n`;
391
+ }
392
+ else {
393
+ markdown += `## Assigned Agent\n`;
394
+ markdown += `No agent currently assigned to this phone number.\n\n`;
395
+ }
396
+ if (phone.provider === "sip_trunk") {
397
+ markdown += `## SIP Trunk Configuration\n`;
398
+ markdown += `- **LiveKit Stack**: ${phone.livekit_stack}\n`;
399
+ if (phone.inbound_trunk) {
400
+ markdown += `- **Inbound Trunk**: Configured\n`;
401
+ }
402
+ if (phone.outbound_trunk) {
403
+ markdown += `- **Outbound Trunk**: Configured\n`;
404
+ }
405
+ markdown += `\n`;
406
+ }
407
+ return markdown;
408
+ }
409
+ /**
410
+ * Formats phone number import response in Markdown format
411
+ */
412
+ export function formatPhoneNumberImportMarkdown(response) {
413
+ let markdown = `# Phone Number Imported Successfully\n\n`;
414
+ markdown += `**Phone Number ID**: ${response.phone_number_id}\n\n`;
415
+ markdown += `The phone number has been successfully imported and is ready to use.\n\n`;
416
+ markdown += `**Next Steps**:\n`;
417
+ markdown += `1. Assign an agent to this phone number using \`elevenlabs_update_phone_number\`\n`;
418
+ markdown += `2. Start making outbound calls with \`elevenlabs_start_outbound_call\`\n`;
419
+ return markdown;
420
+ }
421
+ /**
422
+ * Formats any response as JSON
423
+ */
424
+ export function formatAsJSON(data) {
425
+ return formatJSON(data);
426
+ }
427
+ /**
428
+ * Main formatting function that routes to appropriate formatter
429
+ */
430
+ export function formatResponse(data, format, type) {
431
+ if (format === ResponseFormat.JSON) {
432
+ return formatAsJSON(data);
433
+ }
434
+ // Markdown formatting based on type
435
+ switch (type) {
436
+ case "agent":
437
+ return formatAgentMarkdown(data);
438
+ case "agent_list": {
439
+ const paginated = data;
440
+ return formatAgentListMarkdown(paginated.items, paginated.total, paginated.offset, paginated.has_more);
441
+ }
442
+ case "conversation":
443
+ return formatConversationMarkdown(data);
444
+ case "conversation_list": {
445
+ const paginated = data;
446
+ return formatConversationListMarkdown(paginated.items, paginated.total, paginated.offset, paginated.has_more);
447
+ }
448
+ case "tool":
449
+ return formatToolMarkdown(data);
450
+ case "tool_list":
451
+ return formatToolListMarkdown(data);
452
+ case "voice_list":
453
+ return formatVoiceListMarkdown(data);
454
+ case "widget":
455
+ return data; // Already formatted by formatWidgetCode
456
+ case "outbound_call":
457
+ return formatOutboundCallMarkdown(data);
458
+ case "batch_call":
459
+ return formatBatchCallMarkdown(data);
460
+ case "batch_call_list":
461
+ return formatBatchCallListMarkdown(data);
462
+ case "batch_call_detail":
463
+ return formatBatchCallDetailMarkdown(data);
464
+ case "phone_number_list":
465
+ return formatPhoneNumberListMarkdown(data);
466
+ case "phone_number":
467
+ return formatPhoneNumberMarkdown(data);
468
+ case "phone_number_import":
469
+ return formatPhoneNumberImportMarkdown(data);
470
+ case "generic":
471
+ default:
472
+ return formatAsJSON(data);
473
+ }
474
+ }
475
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/services/formatters.ts"],"names":[],"mappings":"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"}