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.
- package/LICENSE +21 -0
- package/README.md +533 -0
- package/dist/constants.d.ts +25 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +51 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/agent-schemas.d.ts +147 -0
- package/dist/schemas/agent-schemas.d.ts.map +1 -0
- package/dist/schemas/agent-schemas.js +145 -0
- package/dist/schemas/agent-schemas.js.map +1 -0
- package/dist/schemas/batch-calling-schemas.d.ts +170 -0
- package/dist/schemas/batch-calling-schemas.d.ts.map +1 -0
- package/dist/schemas/batch-calling-schemas.js +77 -0
- package/dist/schemas/batch-calling-schemas.js.map +1 -0
- package/dist/schemas/common-schemas.d.ts +54 -0
- package/dist/schemas/common-schemas.d.ts.map +1 -0
- package/dist/schemas/common-schemas.js +72 -0
- package/dist/schemas/common-schemas.js.map +1 -0
- package/dist/schemas/conversation-schemas.d.ts +72 -0
- package/dist/schemas/conversation-schemas.d.ts.map +1 -0
- package/dist/schemas/conversation-schemas.js +30 -0
- package/dist/schemas/conversation-schemas.js.map +1 -0
- package/dist/schemas/outbound-schemas.d.ts +115 -0
- package/dist/schemas/outbound-schemas.d.ts.map +1 -0
- package/dist/schemas/outbound-schemas.js +61 -0
- package/dist/schemas/outbound-schemas.js.map +1 -0
- package/dist/schemas/phone-number-schemas.d.ts +168 -0
- package/dist/schemas/phone-number-schemas.d.ts.map +1 -0
- package/dist/schemas/phone-number-schemas.js +116 -0
- package/dist/schemas/phone-number-schemas.js.map +1 -0
- package/dist/schemas/tool-schemas.d.ts +208 -0
- package/dist/schemas/tool-schemas.d.ts.map +1 -0
- package/dist/schemas/tool-schemas.js +131 -0
- package/dist/schemas/tool-schemas.js.map +1 -0
- package/dist/services/elevenlabs-api.d.ts +37 -0
- package/dist/services/elevenlabs-api.d.ts.map +1 -0
- package/dist/services/elevenlabs-api.js +78 -0
- package/dist/services/elevenlabs-api.js.map +1 -0
- package/dist/services/formatters.d.ts +76 -0
- package/dist/services/formatters.d.ts.map +1 -0
- package/dist/services/formatters.js +475 -0
- package/dist/services/formatters.js.map +1 -0
- package/dist/tools/agent-tools.d.ts +228 -0
- package/dist/tools/agent-tools.d.ts.map +1 -0
- package/dist/tools/agent-tools.js +369 -0
- package/dist/tools/agent-tools.js.map +1 -0
- package/dist/tools/batch-calling-tools.d.ts +183 -0
- package/dist/tools/batch-calling-tools.d.ts.map +1 -0
- package/dist/tools/batch-calling-tools.js +203 -0
- package/dist/tools/batch-calling-tools.js.map +1 -0
- package/dist/tools/conversation-tools.d.ts +103 -0
- package/dist/tools/conversation-tools.d.ts.map +1 -0
- package/dist/tools/conversation-tools.js +140 -0
- package/dist/tools/conversation-tools.js.map +1 -0
- package/dist/tools/knowledge-tools.d.ts +75 -0
- package/dist/tools/knowledge-tools.d.ts.map +1 -0
- package/dist/tools/knowledge-tools.js +63 -0
- package/dist/tools/knowledge-tools.js.map +1 -0
- package/dist/tools/outbound-tools.d.ts +44 -0
- package/dist/tools/outbound-tools.d.ts.map +1 -0
- package/dist/tools/outbound-tools.js +84 -0
- package/dist/tools/outbound-tools.js.map +1 -0
- package/dist/tools/phone-number-tools.d.ts +215 -0
- package/dist/tools/phone-number-tools.d.ts.map +1 -0
- package/dist/tools/phone-number-tools.js +295 -0
- package/dist/tools/phone-number-tools.js.map +1 -0
- package/dist/tools/tool-tools.d.ts +165 -0
- package/dist/tools/tool-tools.d.ts.map +1 -0
- package/dist/tools/tool-tools.js +166 -0
- package/dist/tools/tool-tools.js.map +1 -0
- package/dist/tools/utility-tools.d.ts +76 -0
- package/dist/tools/utility-tools.d.ts.map +1 -0
- package/dist/tools/utility-tools.js +121 -0
- package/dist/tools/utility-tools.js.map +1 -0
- package/dist/types.d.ts +282 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/error-handlers.d.ts +29 -0
- package/dist/utils/error-handlers.d.ts.map +1 -0
- package/dist/utils/error-handlers.js +90 -0
- package/dist/utils/error-handlers.js.map +1 -0
- package/dist/utils/truncation.d.ts +41 -0
- package/dist/utils/truncation.d.ts.map +1 -0
- package/dist/utils/truncation.js +78 -0
- package/dist/utils/truncation.js.map +1 -0
- 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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"}
|