agentdial 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/CHANGELOG.md +20 -0
- package/LICENSE +21 -0
- package/README.md +310 -0
- package/dist/adapters/discord.d.ts +24 -0
- package/dist/adapters/discord.d.ts.map +1 -0
- package/dist/adapters/discord.js +129 -0
- package/dist/adapters/discord.js.map +1 -0
- package/dist/adapters/email.d.ts +38 -0
- package/dist/adapters/email.d.ts.map +1 -0
- package/dist/adapters/email.js +187 -0
- package/dist/adapters/email.js.map +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +36 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/slack.d.ts +27 -0
- package/dist/adapters/slack.d.ts.map +1 -0
- package/dist/adapters/slack.js +173 -0
- package/dist/adapters/slack.js.map +1 -0
- package/dist/adapters/telegram.d.ts +28 -0
- package/dist/adapters/telegram.d.ts.map +1 -0
- package/dist/adapters/telegram.js +155 -0
- package/dist/adapters/telegram.js.map +1 -0
- package/dist/adapters/twilio-sms.d.ts +36 -0
- package/dist/adapters/twilio-sms.d.ts.map +1 -0
- package/dist/adapters/twilio-sms.js +187 -0
- package/dist/adapters/twilio-sms.js.map +1 -0
- package/dist/adapters/twilio-whatsapp.d.ts +37 -0
- package/dist/adapters/twilio-whatsapp.d.ts.map +1 -0
- package/dist/adapters/twilio-whatsapp.js +188 -0
- package/dist/adapters/twilio-whatsapp.js.map +1 -0
- package/dist/adapters/types.d.ts +349 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +82 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/voice.d.ts +54 -0
- package/dist/adapters/voice.d.ts.map +1 -0
- package/dist/adapters/voice.js +250 -0
- package/dist/adapters/voice.js.map +1 -0
- package/dist/commands/channels.d.ts +5 -0
- package/dist/commands/channels.d.ts.map +1 -0
- package/dist/commands/channels.js +188 -0
- package/dist/commands/channels.js.map +1 -0
- package/dist/commands/mcp-serve.d.ts +14 -0
- package/dist/commands/mcp-serve.d.ts.map +1 -0
- package/dist/commands/mcp-serve.js +479 -0
- package/dist/commands/mcp-serve.js.map +1 -0
- package/dist/commands/serve.d.ts +6 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +128 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/setup.d.ts +4 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +174 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +4 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +86 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test.d.ts +5 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +48 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/voice.d.ts +6 -0
- package/dist/commands/voice.d.ts.map +1 -0
- package/dist/commands/voice.js +192 -0
- package/dist/commands/voice.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +119 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +7 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +36 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +13 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +52 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/credentials.d.ts +7 -0
- package/dist/lib/credentials.d.ts.map +1 -0
- package/dist/lib/credentials.js +61 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/gateway.d.ts +27 -0
- package/dist/lib/gateway.d.ts.map +1 -0
- package/dist/lib/gateway.js +103 -0
- package/dist/lib/gateway.js.map +1 -0
- package/dist/lib/identity.d.ts +5 -0
- package/dist/lib/identity.d.ts.map +1 -0
- package/dist/lib/identity.js +36 -0
- package/dist/lib/identity.js.map +1 -0
- package/dist/lib/ui.d.ts +12 -0
- package/dist/lib/ui.d.ts.map +1 -0
- package/dist/lib/ui.js +91 -0
- package/dist/lib/ui.js.map +1 -0
- package/package.json +95 -0
- package/templates/IDENTITY.md +59 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { getCredential } from "../lib/credentials.js";
|
|
2
|
+
export const VOICE_PROVIDERS = [
|
|
3
|
+
{
|
|
4
|
+
id: "openai-realtime",
|
|
5
|
+
name: "OpenAI Realtime API",
|
|
6
|
+
cost: "$0.06-0.24/min",
|
|
7
|
+
description: "Full duplex, GPT-4o voice",
|
|
8
|
+
credentialKeys: ["openai_api_key"],
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
id: "elevenlabs",
|
|
12
|
+
name: "ElevenLabs",
|
|
13
|
+
cost: "$0.01-0.05/min",
|
|
14
|
+
description: "Best voices, ultra-low latency, voice cloning",
|
|
15
|
+
credentialKeys: ["elevenlabs_api_key"],
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: "deepgram",
|
|
19
|
+
name: "Deepgram",
|
|
20
|
+
cost: "$0.006/min",
|
|
21
|
+
description: "Cheapest STT, fast transcription",
|
|
22
|
+
credentialKeys: ["deepgram_api_key"],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "vapi",
|
|
26
|
+
name: "Vapi.ai",
|
|
27
|
+
cost: "$0.05/min",
|
|
28
|
+
description: "Managed solution, all-inclusive",
|
|
29
|
+
credentialKeys: ["vapi_api_key"],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: "livekit",
|
|
33
|
+
name: "LiveKit Agents",
|
|
34
|
+
cost: "free (self-hosted)",
|
|
35
|
+
description: "Open source, WebRTC",
|
|
36
|
+
credentialKeys: ["livekit_url", "livekit_api_key", "livekit_api_secret"],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: "custom",
|
|
40
|
+
name: "Custom",
|
|
41
|
+
cost: "varies",
|
|
42
|
+
description: "Bring your own STT/TTS pipeline",
|
|
43
|
+
credentialKeys: ["custom_endpoint"],
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
function basicAuth(sid, token) {
|
|
47
|
+
return `Basic ${Buffer.from(`${sid}:${token}`).toString("base64")}`;
|
|
48
|
+
}
|
|
49
|
+
async function twilioFetch(sid, token, path, options = {}) {
|
|
50
|
+
const url = `https://api.twilio.com/2010-04-01/Accounts/${sid}${path}`;
|
|
51
|
+
const res = await fetch(url, {
|
|
52
|
+
...options,
|
|
53
|
+
headers: {
|
|
54
|
+
Authorization: basicAuth(sid, token),
|
|
55
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
56
|
+
...options.headers,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
if (!res.ok) {
|
|
60
|
+
const text = await res.text();
|
|
61
|
+
throw new Error(`Twilio API ${res.status}: ${text}`);
|
|
62
|
+
}
|
|
63
|
+
return res.json();
|
|
64
|
+
}
|
|
65
|
+
function escapeXml(text) {
|
|
66
|
+
return text
|
|
67
|
+
.replace(/&/g, "&")
|
|
68
|
+
.replace(/</g, "<")
|
|
69
|
+
.replace(/>/g, ">");
|
|
70
|
+
}
|
|
71
|
+
// ── Voice Adapter ──
|
|
72
|
+
export class VoiceAdapter {
|
|
73
|
+
name = "voice";
|
|
74
|
+
displayName = "Voice (Twilio)";
|
|
75
|
+
free = false;
|
|
76
|
+
cost = "$0.014/min + provider";
|
|
77
|
+
setupTime = "5 min";
|
|
78
|
+
accountSid = "";
|
|
79
|
+
authToken = "";
|
|
80
|
+
phoneNumber = "";
|
|
81
|
+
webhookUrl = "";
|
|
82
|
+
voiceProvider = "openai-realtime";
|
|
83
|
+
messageHandler = null;
|
|
84
|
+
connected = false;
|
|
85
|
+
lastMessageTs = null;
|
|
86
|
+
async setup(config) {
|
|
87
|
+
// Voice shares Twilio creds — check voice first, fall back to sms
|
|
88
|
+
this.accountSid =
|
|
89
|
+
config.credentials?.account_sid ??
|
|
90
|
+
(await getCredential("voice", "account_sid")) ??
|
|
91
|
+
(await getCredential("sms", "account_sid")) ??
|
|
92
|
+
"";
|
|
93
|
+
this.authToken =
|
|
94
|
+
config.credentials?.auth_token ??
|
|
95
|
+
(await getCredential("voice", "auth_token")) ??
|
|
96
|
+
(await getCredential("sms", "auth_token")) ??
|
|
97
|
+
"";
|
|
98
|
+
this.phoneNumber =
|
|
99
|
+
config.credentials?.phone_number ??
|
|
100
|
+
(await getCredential("voice", "phone_number")) ??
|
|
101
|
+
(await getCredential("sms", "phone_number")) ??
|
|
102
|
+
"";
|
|
103
|
+
this.webhookUrl = config.webhookUrl ?? "";
|
|
104
|
+
// Load voice provider preference
|
|
105
|
+
const provider = await getCredential("voice", "voice_provider");
|
|
106
|
+
if (provider && isValidProvider(provider)) {
|
|
107
|
+
this.voiceProvider = provider;
|
|
108
|
+
}
|
|
109
|
+
if (!this.accountSid || !this.authToken || !this.phoneNumber) {
|
|
110
|
+
throw new Error("Voice requires Twilio accountSid, authToken, and phoneNumber. " +
|
|
111
|
+
"Run `agentdial voice setup` or configure SMS first.");
|
|
112
|
+
}
|
|
113
|
+
// Validate Twilio credentials
|
|
114
|
+
await twilioFetch(this.accountSid, this.authToken, ".json");
|
|
115
|
+
}
|
|
116
|
+
async connect() {
|
|
117
|
+
// Register the voice webhook URL on the Twilio phone number
|
|
118
|
+
if (this.webhookUrl) {
|
|
119
|
+
try {
|
|
120
|
+
const listRes = await twilioFetch(this.accountSid, this.authToken, `/IncomingPhoneNumbers.json?PhoneNumber=${encodeURIComponent(this.phoneNumber)}`);
|
|
121
|
+
// In production, update the VoiceUrl on the phone number resource
|
|
122
|
+
void listRes;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Non-fatal — webhook can be configured manually in Twilio console
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
this.connected = true;
|
|
129
|
+
}
|
|
130
|
+
async disconnect() {
|
|
131
|
+
this.connected = false;
|
|
132
|
+
}
|
|
133
|
+
async send(_to, _response) {
|
|
134
|
+
// Voice is synchronous (call-based). Outbound calls use a different flow.
|
|
135
|
+
// For outbound TTS, initiate a call via Twilio REST API:
|
|
136
|
+
// POST /Calls.json with Url pointing to TwiML that plays the message.
|
|
137
|
+
// Left as a no-op here; the real response path is handleWebhook -> TwiML.
|
|
138
|
+
}
|
|
139
|
+
onMessage(handler) {
|
|
140
|
+
this.messageHandler = handler;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Handle incoming Twilio voice webhook.
|
|
144
|
+
* Returns TwiML that gathers speech, sends it to the agent, and speaks the response.
|
|
145
|
+
*/
|
|
146
|
+
async handleWebhook(payload) {
|
|
147
|
+
this.lastMessageTs = Date.now();
|
|
148
|
+
// Initial call — no speech yet, greet and gather
|
|
149
|
+
if (!payload.SpeechResult) {
|
|
150
|
+
return buildGatherTwiml(this.webhookUrl, "Hello! How can I help you today?");
|
|
151
|
+
}
|
|
152
|
+
// Speech recognized — route through the agent
|
|
153
|
+
const msg = {
|
|
154
|
+
id: payload.CallSid,
|
|
155
|
+
channel: "voice",
|
|
156
|
+
from: payload.From,
|
|
157
|
+
text: payload.SpeechResult,
|
|
158
|
+
timestamp: Date.now(),
|
|
159
|
+
metadata: {
|
|
160
|
+
callSid: payload.CallSid,
|
|
161
|
+
confidence: payload.Confidence,
|
|
162
|
+
direction: payload.Direction,
|
|
163
|
+
voiceProvider: this.voiceProvider,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
if (!this.messageHandler) {
|
|
167
|
+
return buildSayTwiml("No agent is connected. Please try again later.");
|
|
168
|
+
}
|
|
169
|
+
const response = await this.messageHandler(msg);
|
|
170
|
+
// Speak the agent response, then gather more speech
|
|
171
|
+
return buildGatherTwiml(this.webhookUrl, response.text);
|
|
172
|
+
}
|
|
173
|
+
async test() {
|
|
174
|
+
try {
|
|
175
|
+
await twilioFetch(this.accountSid, this.authToken, ".json");
|
|
176
|
+
// Verify voice provider credentials exist
|
|
177
|
+
const providerMeta = VOICE_PROVIDERS.find((p) => p.id === this.voiceProvider);
|
|
178
|
+
if (providerMeta) {
|
|
179
|
+
for (const key of providerMeta.credentialKeys) {
|
|
180
|
+
const val = await getCredential("voice", key);
|
|
181
|
+
if (!val) {
|
|
182
|
+
return {
|
|
183
|
+
ok: false,
|
|
184
|
+
error: `Missing voice provider credential: ${key}`,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return { ok: true };
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
return {
|
|
193
|
+
ok: false,
|
|
194
|
+
error: err instanceof Error ? err.message : "Unknown error",
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async status() {
|
|
199
|
+
const start = Date.now();
|
|
200
|
+
try {
|
|
201
|
+
await twilioFetch(this.accountSid, this.authToken, ".json");
|
|
202
|
+
return {
|
|
203
|
+
channel: "voice",
|
|
204
|
+
connected: this.connected,
|
|
205
|
+
latencyMs: Date.now() - start,
|
|
206
|
+
lastMessage: this.lastMessageTs,
|
|
207
|
+
error: null,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
return {
|
|
212
|
+
channel: "voice",
|
|
213
|
+
connected: false,
|
|
214
|
+
latencyMs: Date.now() - start,
|
|
215
|
+
lastMessage: this.lastMessageTs,
|
|
216
|
+
error: err instanceof Error ? err.message : "Unknown error",
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/** Current voice provider selection */
|
|
221
|
+
getProvider() {
|
|
222
|
+
return this.voiceProvider;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// ── TwiML Builders ──
|
|
226
|
+
function buildGatherTwiml(webhookUrl, sayText) {
|
|
227
|
+
const action = webhookUrl ? ` action="${escapeXml(webhookUrl)}"` : "";
|
|
228
|
+
return [
|
|
229
|
+
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
230
|
+
"<Response>",
|
|
231
|
+
` <Gather input="speech" speechTimeout="auto"${action} method="POST">`,
|
|
232
|
+
` <Say voice="Polly.Joanna">${escapeXml(sayText)}</Say>`,
|
|
233
|
+
" </Gather>",
|
|
234
|
+
' <Say voice="Polly.Joanna">I didn\'t hear anything. Goodbye.</Say>',
|
|
235
|
+
"</Response>",
|
|
236
|
+
].join("\n");
|
|
237
|
+
}
|
|
238
|
+
function buildSayTwiml(text) {
|
|
239
|
+
return [
|
|
240
|
+
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
241
|
+
"<Response>",
|
|
242
|
+
` <Say voice="Polly.Joanna">${escapeXml(text)}</Say>`,
|
|
243
|
+
"</Response>",
|
|
244
|
+
].join("\n");
|
|
245
|
+
}
|
|
246
|
+
// ── Helpers ──
|
|
247
|
+
function isValidProvider(value) {
|
|
248
|
+
return VOICE_PROVIDERS.some((p) => p.id === value);
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=voice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice.js","sourceRoot":"","sources":["../../src/adapters/voice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function cmdChannelAdd(rawChannel: string): Promise<void>;
|
|
2
|
+
export declare function cmdChannelRemove(rawChannel: string): Promise<void>;
|
|
3
|
+
export declare function cmdChannelList(): Promise<void>;
|
|
4
|
+
export declare function cmdChannelTest(rawChannel?: string): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=channels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/commands/channels.ts"],"names":[],"mappings":"AA4BA,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCrE;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBpD;AAED,wBAAsB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGvE"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { ChannelTypeSchema } from "../adapters/types.js";
|
|
3
|
+
import { saveCredential, listCredentials, listConfiguredChannels, } from "../lib/credentials.js";
|
|
4
|
+
import { loadConfig, updateConfig } from "../lib/config.js";
|
|
5
|
+
import { hasAdapter, getAdapter } from "../adapters/index.js";
|
|
6
|
+
import { success, error, info, warn, heading, table } from "../lib/ui.js";
|
|
7
|
+
import { SUPPORTED_CHANNELS, FREE_CHANNELS, CHANNEL_DISPLAY_NAMES, CHANNEL_SETUP_TIMES, } from "../lib/constants.js";
|
|
8
|
+
function validateChannel(channel) {
|
|
9
|
+
const result = ChannelTypeSchema.safeParse(channel);
|
|
10
|
+
if (!result.success) {
|
|
11
|
+
error(`Unknown channel: ${channel}`);
|
|
12
|
+
info(`Supported: ${SUPPORTED_CHANNELS.join(", ")}`);
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
return result.data;
|
|
16
|
+
}
|
|
17
|
+
export async function cmdChannelAdd(rawChannel) {
|
|
18
|
+
const channel = validateChannel(rawChannel);
|
|
19
|
+
heading(`Add Channel: ${CHANNEL_DISPLAY_NAMES[channel] ?? channel}`);
|
|
20
|
+
const isFree = FREE_CHANNELS.has(channel);
|
|
21
|
+
info(`Setup time: ${CHANNEL_SETUP_TIMES[channel] ?? "unknown"}`);
|
|
22
|
+
info(`Cost: ${isFree ? chalk.green("Free") : chalk.yellow("Requires paid API")}`);
|
|
23
|
+
const requiredCreds = getRequiredCredentials(channel);
|
|
24
|
+
if (requiredCreds.length > 0) {
|
|
25
|
+
info(`Required credentials: ${requiredCreds.join(", ")}`);
|
|
26
|
+
warn("Set credentials with environment variables or `agentdial channels add`.");
|
|
27
|
+
for (const key of requiredCreds) {
|
|
28
|
+
const envKey = `AGENTDIAL_${channel.toUpperCase()}_${key.toUpperCase()}`;
|
|
29
|
+
const value = process.env[envKey];
|
|
30
|
+
if (value) {
|
|
31
|
+
await saveCredential(channel, key, value);
|
|
32
|
+
success(`Loaded ${key} from ${envKey}`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
warn(`Missing: ${envKey} — set this before connecting.`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const config = await loadConfig();
|
|
40
|
+
const channels = config.channels ?? {};
|
|
41
|
+
channels[channel] = {
|
|
42
|
+
channel,
|
|
43
|
+
enabled: true,
|
|
44
|
+
};
|
|
45
|
+
await updateConfig({ channels });
|
|
46
|
+
success(`Channel ${channel} added and enabled.`);
|
|
47
|
+
}
|
|
48
|
+
export async function cmdChannelRemove(rawChannel) {
|
|
49
|
+
const channel = validateChannel(rawChannel);
|
|
50
|
+
const config = await loadConfig();
|
|
51
|
+
const channels = config.channels ?? {};
|
|
52
|
+
if (!channels[channel]) {
|
|
53
|
+
warn(`Channel ${channel} is not configured.`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
channels[channel] = { ...channels[channel], channel, enabled: false };
|
|
57
|
+
await updateConfig({ channels });
|
|
58
|
+
success(`Channel ${channel} disabled.`);
|
|
59
|
+
}
|
|
60
|
+
export async function cmdChannelList() {
|
|
61
|
+
heading("Configured Channels");
|
|
62
|
+
const configured = await listConfiguredChannels();
|
|
63
|
+
const config = await loadConfig();
|
|
64
|
+
const channelConfigs = config.channels ?? {};
|
|
65
|
+
const rows = SUPPORTED_CHANNELS.map((ch) => {
|
|
66
|
+
const isConfigured = configured.includes(ch);
|
|
67
|
+
const isEnabled = channelConfigs[ch]?.enabled ?? false;
|
|
68
|
+
const isFree = FREE_CHANNELS.has(ch);
|
|
69
|
+
return {
|
|
70
|
+
Channel: CHANNEL_DISPLAY_NAMES[ch] ?? ch,
|
|
71
|
+
Status: isEnabled
|
|
72
|
+
? chalk.green("enabled")
|
|
73
|
+
: isConfigured
|
|
74
|
+
? chalk.yellow("disabled")
|
|
75
|
+
: chalk.dim("not configured"),
|
|
76
|
+
Cost: isFree ? chalk.green("free") : chalk.dim("paid"),
|
|
77
|
+
Setup: CHANNEL_SETUP_TIMES[ch] ?? "—",
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
table(["Channel", "Status", "Cost", "Setup"], rows);
|
|
81
|
+
}
|
|
82
|
+
export async function cmdChannelTest(rawChannel) {
|
|
83
|
+
if (rawChannel) {
|
|
84
|
+
const channel = validateChannel(rawChannel);
|
|
85
|
+
heading(`Testing: ${CHANNEL_DISPLAY_NAMES[channel] ?? channel}`);
|
|
86
|
+
const creds = await listCredentials(channel);
|
|
87
|
+
if (creds.length === 0) {
|
|
88
|
+
error("No credentials configured. Run `agentdial channels add` first.");
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (!hasAdapter(channel)) {
|
|
92
|
+
warn(`No adapter available for ${channel}. Credentials found: ${creds.join(", ")}`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const adapter = getAdapter(channel);
|
|
96
|
+
try {
|
|
97
|
+
await adapter.setup({ channel, enabled: true });
|
|
98
|
+
const result = await adapter.test();
|
|
99
|
+
if (result.ok) {
|
|
100
|
+
success(`${CHANNEL_DISPLAY_NAMES[channel] ?? channel}: connected`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
error(`${CHANNEL_DISPLAY_NAMES[channel] ?? channel}: ${result.error ?? "test failed"}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
error(`${CHANNEL_DISPLAY_NAMES[channel] ?? channel}: ${err instanceof Error ? err.message : "unknown error"}`);
|
|
108
|
+
}
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
heading("Testing All Channels");
|
|
112
|
+
const configured = await listConfiguredChannels();
|
|
113
|
+
if (configured.length === 0) {
|
|
114
|
+
warn("No channels configured. Run `agentdial channels add <channel>` first.");
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const rows = [];
|
|
118
|
+
for (const ch of configured) {
|
|
119
|
+
const displayName = CHANNEL_DISPLAY_NAMES[ch] ?? ch;
|
|
120
|
+
const creds = await listCredentials(ch);
|
|
121
|
+
if (creds.length === 0) {
|
|
122
|
+
rows.push({
|
|
123
|
+
Channel: displayName,
|
|
124
|
+
Status: chalk.yellow("no creds"),
|
|
125
|
+
Details: "Run `agentdial channels add`",
|
|
126
|
+
});
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
if (!hasAdapter(ch)) {
|
|
130
|
+
rows.push({
|
|
131
|
+
Channel: displayName,
|
|
132
|
+
Status: chalk.dim("no adapter"),
|
|
133
|
+
Details: `${String(creds.length)} credentials stored`,
|
|
134
|
+
});
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const adapter = getAdapter(ch);
|
|
138
|
+
try {
|
|
139
|
+
await adapter.setup({ channel: ch, enabled: true });
|
|
140
|
+
const result = await adapter.test();
|
|
141
|
+
if (result.ok) {
|
|
142
|
+
rows.push({
|
|
143
|
+
Channel: displayName,
|
|
144
|
+
Status: chalk.green("ok"),
|
|
145
|
+
Details: "Connected",
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
rows.push({
|
|
150
|
+
Channel: displayName,
|
|
151
|
+
Status: chalk.red("fail"),
|
|
152
|
+
Details: result.error ?? "test failed",
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
rows.push({
|
|
158
|
+
Channel: displayName,
|
|
159
|
+
Status: chalk.red("error"),
|
|
160
|
+
Details: err instanceof Error ? err.message : "unknown",
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
table(["Channel", "Status", "Details"], rows);
|
|
165
|
+
}
|
|
166
|
+
function getRequiredCredentials(channel) {
|
|
167
|
+
switch (channel) {
|
|
168
|
+
case "telegram":
|
|
169
|
+
return ["bot_token"];
|
|
170
|
+
case "discord":
|
|
171
|
+
return ["bot_token", "application_id"];
|
|
172
|
+
case "slack":
|
|
173
|
+
return ["bot_token", "app_token", "signing_secret"];
|
|
174
|
+
case "sms":
|
|
175
|
+
case "whatsapp":
|
|
176
|
+
case "voice":
|
|
177
|
+
return ["account_sid", "auth_token", "phone_number"];
|
|
178
|
+
case "email":
|
|
179
|
+
return ["api_key", "from_email"];
|
|
180
|
+
case "teams":
|
|
181
|
+
return ["app_id", "app_password"];
|
|
182
|
+
case "messenger":
|
|
183
|
+
return ["page_token", "verify_token", "app_secret"];
|
|
184
|
+
case "web":
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=channels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/commands/channels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* AgentDial MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Exposes agentdial operations as MCP tools so Claude Code sessions
|
|
6
|
+
* can manage agent identity, channels, and the gateway programmatically.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* claude mcp add agentdial -- npx agentdial mcp-serve
|
|
10
|
+
* OR
|
|
11
|
+
* node dist/commands/mcp-serve.js
|
|
12
|
+
*/
|
|
13
|
+
export declare function cmdMcpServe(): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=mcp-serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-serve.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-serve.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAimBH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAOjD"}
|