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.
Files changed (97) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +310 -0
  4. package/dist/adapters/discord.d.ts +24 -0
  5. package/dist/adapters/discord.d.ts.map +1 -0
  6. package/dist/adapters/discord.js +129 -0
  7. package/dist/adapters/discord.js.map +1 -0
  8. package/dist/adapters/email.d.ts +38 -0
  9. package/dist/adapters/email.d.ts.map +1 -0
  10. package/dist/adapters/email.js +187 -0
  11. package/dist/adapters/email.js.map +1 -0
  12. package/dist/adapters/index.d.ts +12 -0
  13. package/dist/adapters/index.d.ts.map +1 -0
  14. package/dist/adapters/index.js +36 -0
  15. package/dist/adapters/index.js.map +1 -0
  16. package/dist/adapters/slack.d.ts +27 -0
  17. package/dist/adapters/slack.d.ts.map +1 -0
  18. package/dist/adapters/slack.js +173 -0
  19. package/dist/adapters/slack.js.map +1 -0
  20. package/dist/adapters/telegram.d.ts +28 -0
  21. package/dist/adapters/telegram.d.ts.map +1 -0
  22. package/dist/adapters/telegram.js +155 -0
  23. package/dist/adapters/telegram.js.map +1 -0
  24. package/dist/adapters/twilio-sms.d.ts +36 -0
  25. package/dist/adapters/twilio-sms.d.ts.map +1 -0
  26. package/dist/adapters/twilio-sms.js +187 -0
  27. package/dist/adapters/twilio-sms.js.map +1 -0
  28. package/dist/adapters/twilio-whatsapp.d.ts +37 -0
  29. package/dist/adapters/twilio-whatsapp.d.ts.map +1 -0
  30. package/dist/adapters/twilio-whatsapp.js +188 -0
  31. package/dist/adapters/twilio-whatsapp.js.map +1 -0
  32. package/dist/adapters/types.d.ts +349 -0
  33. package/dist/adapters/types.d.ts.map +1 -0
  34. package/dist/adapters/types.js +82 -0
  35. package/dist/adapters/types.js.map +1 -0
  36. package/dist/adapters/voice.d.ts +54 -0
  37. package/dist/adapters/voice.d.ts.map +1 -0
  38. package/dist/adapters/voice.js +250 -0
  39. package/dist/adapters/voice.js.map +1 -0
  40. package/dist/commands/channels.d.ts +5 -0
  41. package/dist/commands/channels.d.ts.map +1 -0
  42. package/dist/commands/channels.js +188 -0
  43. package/dist/commands/channels.js.map +1 -0
  44. package/dist/commands/mcp-serve.d.ts +14 -0
  45. package/dist/commands/mcp-serve.d.ts.map +1 -0
  46. package/dist/commands/mcp-serve.js +479 -0
  47. package/dist/commands/mcp-serve.js.map +1 -0
  48. package/dist/commands/serve.d.ts +6 -0
  49. package/dist/commands/serve.d.ts.map +1 -0
  50. package/dist/commands/serve.js +128 -0
  51. package/dist/commands/serve.js.map +1 -0
  52. package/dist/commands/setup.d.ts +4 -0
  53. package/dist/commands/setup.d.ts.map +1 -0
  54. package/dist/commands/setup.js +174 -0
  55. package/dist/commands/setup.js.map +1 -0
  56. package/dist/commands/status.d.ts +4 -0
  57. package/dist/commands/status.d.ts.map +1 -0
  58. package/dist/commands/status.js +86 -0
  59. package/dist/commands/status.js.map +1 -0
  60. package/dist/commands/test.d.ts +5 -0
  61. package/dist/commands/test.d.ts.map +1 -0
  62. package/dist/commands/test.js +48 -0
  63. package/dist/commands/test.js.map +1 -0
  64. package/dist/commands/voice.d.ts +6 -0
  65. package/dist/commands/voice.d.ts.map +1 -0
  66. package/dist/commands/voice.js +192 -0
  67. package/dist/commands/voice.js.map +1 -0
  68. package/dist/index.d.ts +3 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +119 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/lib/config.d.ts +7 -0
  73. package/dist/lib/config.d.ts.map +1 -0
  74. package/dist/lib/config.js +36 -0
  75. package/dist/lib/config.js.map +1 -0
  76. package/dist/lib/constants.d.ts +13 -0
  77. package/dist/lib/constants.d.ts.map +1 -0
  78. package/dist/lib/constants.js +52 -0
  79. package/dist/lib/constants.js.map +1 -0
  80. package/dist/lib/credentials.d.ts +7 -0
  81. package/dist/lib/credentials.d.ts.map +1 -0
  82. package/dist/lib/credentials.js +61 -0
  83. package/dist/lib/credentials.js.map +1 -0
  84. package/dist/lib/gateway.d.ts +27 -0
  85. package/dist/lib/gateway.d.ts.map +1 -0
  86. package/dist/lib/gateway.js +103 -0
  87. package/dist/lib/gateway.js.map +1 -0
  88. package/dist/lib/identity.d.ts +5 -0
  89. package/dist/lib/identity.d.ts.map +1 -0
  90. package/dist/lib/identity.js +36 -0
  91. package/dist/lib/identity.js.map +1 -0
  92. package/dist/lib/ui.d.ts +12 -0
  93. package/dist/lib/ui.d.ts.map +1 -0
  94. package/dist/lib/ui.js +91 -0
  95. package/dist/lib/ui.js.map +1 -0
  96. package/package.json +95 -0
  97. package/templates/IDENTITY.md +59 -0
@@ -0,0 +1,174 @@
1
+ import { resolve } from "node:path";
2
+ import { createInterface } from "node:readline/promises";
3
+ import { stdin, stdout } from "node:process";
4
+ import { parseIdentity, writeIdentity } from "../lib/identity.js";
5
+ import { ensureConfigDir, saveConfig } from "../lib/config.js";
6
+ import { saveCredential } from "../lib/credentials.js";
7
+ import { banner, success, info, error, heading, box } from "../lib/ui.js";
8
+ import { DEFAULT_IDENTITY_FILE, CHANNEL_DISPLAY_NAMES, } from "../lib/constants.js";
9
+ import { AgentDialConfigSchema } from "../adapters/types.js";
10
+ import { existsSync } from "node:fs";
11
+ const TWILIO_CREDS = [
12
+ { key: "account_sid", prompt: "Paste your Twilio Account SID:" },
13
+ { key: "auth_token", prompt: "Paste your Twilio Auth Token:", secret: true },
14
+ { key: "phone_number", prompt: "Paste your Twilio Phone Number:" },
15
+ ];
16
+ /* prettier-ignore */
17
+ const CHANNEL_MENU = [
18
+ // Free channels
19
+ { key: "telegram", display: "Telegram Bot", free: true, cost: "free", time: "2 min", credentials: [{ key: "bot_token", prompt: "Paste your Bot Token from @BotFather:", secret: true }] },
20
+ { key: "discord", display: "Discord Bot", free: true, cost: "free", time: "3 min", credentials: [{ key: "bot_token", prompt: "Paste your Bot Token from Discord Developer Portal:", secret: true }] },
21
+ { key: "web", display: "Web Widget", free: true, cost: "free", time: "1 min", credentials: [] },
22
+ // Paid channels
23
+ { key: "sms", display: "SMS (Twilio)", free: false, cost: "$1.15/mo", time: "5 min", credentials: TWILIO_CREDS },
24
+ { key: "whatsapp", display: "WhatsApp (Twilio)", free: false, cost: "$5/mo via Twilio", time: "10 min", credentials: TWILIO_CREDS },
25
+ { key: "email", display: "Email (SendGrid)", free: false, cost: "free tier: 100/day", time: "3 min", credentials: [{ key: "api_key", prompt: "Paste your SendGrid API Key:", secret: true }, { key: "from_email", prompt: "Sender email address:" }] },
26
+ { key: "voice", display: "Voice (Twilio)", free: false, cost: "$0.05/min", time: "5 min", credentials: TWILIO_CREDS },
27
+ { key: "slack", display: "Slack App", free: false, cost: "free tier", time: "5 min", credentials: [{ key: "bot_token", prompt: "Paste your Slack Bot Token (xoxb-...):", secret: true }, { key: "app_token", prompt: "Paste your Slack App Token (xapp-...):", secret: true }] },
28
+ { key: "teams", display: "Microsoft Teams", free: false, cost: "free", time: "10 min", credentials: [{ key: "app_id", prompt: "Paste your Teams App ID:" }, { key: "app_password", prompt: "Paste your Teams App Password:", secret: true }], comingSoon: true },
29
+ { key: "messenger", display: "Facebook Messenger", free: false, cost: "free", time: "10 min", credentials: [{ key: "page_token", prompt: "Paste your Page Access Token:", secret: true }, { key: "verify_token", prompt: "Choose a Verify Token string:" }], comingSoon: true },
30
+ ];
31
+ // ── Helpers ──
32
+ async function ask(rl, prompt, fallback) {
33
+ const suffix = fallback ? ` (${fallback})` : "";
34
+ const answer = (await rl.question(` ${prompt}${suffix} `)).trim();
35
+ return answer || fallback || "";
36
+ }
37
+ function formatChannelLine(idx, ch) {
38
+ const num = String(idx + 1).padStart(2);
39
+ if (ch.comingSoon) {
40
+ return ` ${num}) ${ch.display.padEnd(22)} (Coming Soon)`;
41
+ }
42
+ const cost = ch.free ? "free" : ch.cost;
43
+ return ` ${num}) ${ch.display.padEnd(22)} (${cost}, ${ch.time} setup)`;
44
+ }
45
+ // ── Main ──
46
+ export async function cmdSetup(opts) {
47
+ banner();
48
+ heading("Interactive Setup");
49
+ await ensureConfigDir();
50
+ const identityPath = resolve(opts.file ?? DEFAULT_IDENTITY_FILE);
51
+ let existingIdentity = null;
52
+ if (existsSync(identityPath)) {
53
+ try {
54
+ existingIdentity = await parseIdentity(identityPath);
55
+ info(`Found existing identity: ${existingIdentity.name}`);
56
+ }
57
+ catch {
58
+ // Corrupt file — we'll overwrite it
59
+ }
60
+ }
61
+ const rl = createInterface({ input: stdin, output: stdout });
62
+ try {
63
+ // ── Step 1: Agent basics ──
64
+ heading("1/4 Agent Identity");
65
+ const name = await ask(rl, "What's your agent's name?", existingIdentity?.name ?? "Spark");
66
+ if (!name) {
67
+ error("Agent name is required.");
68
+ return;
69
+ }
70
+ const tagline = await ask(rl, "What does your agent do? (tagline)", existingIdentity?.tagline ?? "An AI assistant");
71
+ const agentUrl = await ask(rl, "Where is your agent's backend? (URL)", existingIdentity?.agent_url ?? "http://localhost:3000/api/chat");
72
+ // ── Step 2: Channel selection ──
73
+ heading("2/4 Select Channels");
74
+ console.log("");
75
+ console.log(" FREE CHANNELS:");
76
+ const freeChannels = CHANNEL_MENU.filter((c) => c.free);
77
+ const paidChannels = CHANNEL_MENU.filter((c) => !c.free);
78
+ for (let i = 0; i < freeChannels.length; i++) {
79
+ console.log(formatChannelLine(i, freeChannels[i]));
80
+ }
81
+ console.log("");
82
+ console.log(" PAID CHANNELS:");
83
+ for (let i = 0; i < paidChannels.length; i++) {
84
+ console.log(formatChannelLine(freeChannels.length + i, paidChannels[i]));
85
+ }
86
+ console.log("");
87
+ const allOrdered = [...freeChannels, ...paidChannels];
88
+ const selectionRaw = await ask(rl, "Enter channel numbers, comma-separated (e.g. 1,2,5):", "1");
89
+ const selectedIndices = selectionRaw
90
+ .split(",")
91
+ .map((s) => parseInt(s.trim(), 10) - 1)
92
+ .filter((n) => !isNaN(n) && n >= 0 && n < allOrdered.length);
93
+ const selectedChannels = [...new Set(selectedIndices)]
94
+ .map((i) => allOrdered[i])
95
+ .filter((ch) => {
96
+ if (ch.comingSoon) {
97
+ info(` ${ch.display} is coming soon — skipped.`);
98
+ return false;
99
+ }
100
+ return true;
101
+ });
102
+ if (selectedChannels.length === 0) {
103
+ info("No channels selected. You can add them later with `agentdial channels add`.");
104
+ }
105
+ else {
106
+ success(`Selected: ${selectedChannels.map((c) => c.display).join(", ")}`);
107
+ }
108
+ // ── Step 3: Channel credentials ──
109
+ const channelsWithCreds = selectedChannels.filter((c) => c.credentials.length > 0);
110
+ if (channelsWithCreds.length > 0) {
111
+ heading("3/4 Channel Credentials");
112
+ info("Credentials are stored locally in ~/.agentdial/credentials/");
113
+ console.log("");
114
+ for (const channel of channelsWithCreds) {
115
+ console.log(` ${CHANNEL_DISPLAY_NAMES[channel.key] ?? channel.display}:`);
116
+ for (const cred of channel.credentials) {
117
+ const value = await ask(rl, cred.prompt);
118
+ if (value) {
119
+ await saveCredential(channel.key, cred.key, value);
120
+ }
121
+ else {
122
+ info(` Skipped ${cred.key} — set it later with \`agentdial channels add ${channel.key}\``);
123
+ }
124
+ }
125
+ console.log("");
126
+ }
127
+ }
128
+ else {
129
+ heading("3/4 Channel Credentials");
130
+ info("No credentials needed for selected channels.");
131
+ }
132
+ // ── Step 4: Generate identity + config ──
133
+ heading("4/4 Saving Configuration");
134
+ const channelsMap = {};
135
+ for (const ch of selectedChannels) {
136
+ channelsMap[ch.key] = { enabled: true };
137
+ }
138
+ const identity = {
139
+ name,
140
+ tagline: tagline || undefined,
141
+ version: existingIdentity?.version ?? "1.0.0",
142
+ agent_url: agentUrl || undefined,
143
+ channels: channelsMap,
144
+ };
145
+ await writeIdentity(identityPath, identity);
146
+ success(`IDENTITY.md written to ${identityPath}`);
147
+ const config = AgentDialConfigSchema.parse({
148
+ identityFile: identityPath,
149
+ agentUrl: agentUrl || undefined,
150
+ });
151
+ await saveConfig(config);
152
+ success("Config saved to ~/.agentdial/config.json");
153
+ // ── Summary ──
154
+ console.log("");
155
+ const enabledNames = selectedChannels.map((c) => c.display);
156
+ const channelLine = enabledNames.length > 0
157
+ ? `${enabledNames.length} channels enabled: ${enabledNames.join(", ")}`
158
+ : "No channels enabled yet";
159
+ box("Setup Complete", [
160
+ `Agent "${name}" configured!`,
161
+ channelLine,
162
+ `IDENTITY.md created at ${identityPath}`,
163
+ "",
164
+ "Next steps:",
165
+ " agentdial test -- send a test message",
166
+ " agentdial serve -- start the gateway",
167
+ " agentdial status -- view your identity",
168
+ ].join("\n"));
169
+ }
170
+ finally {
171
+ rl.close();
172
+ }
173
+ }
174
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function cmdStatus(opts: {
2
+ json?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AA+BA,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFvE"}
@@ -0,0 +1,86 @@
1
+ import chalk from "chalk";
2
+ import { loadConfig } from "../lib/config.js";
3
+ import { listConfiguredChannels, listCredentials } from "../lib/credentials.js";
4
+ import { parseIdentity } from "../lib/identity.js";
5
+ import { banner, heading, table, info, success, warn, } from "../lib/ui.js";
6
+ import { CHANNEL_DISPLAY_NAMES, FREE_CHANNELS, } from "../lib/constants.js";
7
+ import { existsSync } from "node:fs";
8
+ import { resolve } from "node:path";
9
+ export async function cmdStatus(opts) {
10
+ const config = await loadConfig();
11
+ const identityPath = resolve(config.identityFile);
12
+ const configured = await listConfiguredChannels();
13
+ // Identity
14
+ let identityStatus = null;
15
+ if (existsSync(identityPath)) {
16
+ try {
17
+ const identity = await parseIdentity(identityPath);
18
+ const enabledCount = Object.values(identity.channels ?? {}).filter((c) => c.enabled).length;
19
+ identityStatus = {
20
+ name: identity.name,
21
+ version: identity.version,
22
+ channels: enabledCount,
23
+ };
24
+ }
25
+ catch {
26
+ identityStatus = null;
27
+ }
28
+ }
29
+ // Channels
30
+ const channelStatuses = [];
31
+ for (const ch of configured) {
32
+ const creds = await listCredentials(ch);
33
+ const chConfig = config.channels?.[ch];
34
+ channelStatuses.push({
35
+ name: ch,
36
+ enabled: chConfig?.enabled ?? false,
37
+ credentials: creds.length,
38
+ });
39
+ }
40
+ const output = {
41
+ identity: identityStatus,
42
+ channels: channelStatuses,
43
+ gateway: {
44
+ configured: !!config.agentUrl,
45
+ port: config.gatewayPort,
46
+ agentUrl: config.agentUrl ?? null,
47
+ },
48
+ };
49
+ if (opts.json) {
50
+ console.log(JSON.stringify(output, null, 2));
51
+ return;
52
+ }
53
+ banner();
54
+ heading("Identity");
55
+ if (identityStatus) {
56
+ success(`${identityStatus.name} v${identityStatus.version}`);
57
+ info(`${String(identityStatus.channels)} channels enabled in IDENTITY.md`);
58
+ }
59
+ else {
60
+ warn("No IDENTITY.md found. Run `agentdial setup` to create one.");
61
+ }
62
+ heading("Channels");
63
+ if (channelStatuses.length === 0) {
64
+ info("No channels configured.");
65
+ }
66
+ else {
67
+ const rows = channelStatuses.map((ch) => ({
68
+ Channel: CHANNEL_DISPLAY_NAMES[ch.name] ?? ch.name,
69
+ Status: ch.enabled ? chalk.green("enabled") : chalk.yellow("disabled"),
70
+ Credentials: ch.credentials > 0
71
+ ? chalk.green(`${String(ch.credentials)} keys`)
72
+ : chalk.red("none"),
73
+ Cost: FREE_CHANNELS.has(ch.name) ? "free" : "paid",
74
+ }));
75
+ table(["Channel", "Status", "Credentials", "Cost"], rows);
76
+ }
77
+ heading("Gateway");
78
+ if (config.agentUrl) {
79
+ success(`Agent URL: ${config.agentUrl}`);
80
+ }
81
+ else {
82
+ warn("No agent URL configured.");
83
+ }
84
+ info(`Port: ${String(config.gatewayPort)}`);
85
+ }
86
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function cmdTest(opts: {
2
+ channel?: string;
3
+ message: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAOA,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDhB"}
@@ -0,0 +1,48 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { loadConfig } from "../lib/config.js";
3
+ import { routeMessage } from "../lib/gateway.js";
4
+ import { heading, success, error, info, warn } from "../lib/ui.js";
5
+ import { ChannelTypeSchema } from "../adapters/types.js";
6
+ export async function cmdTest(opts) {
7
+ heading("Gateway Test");
8
+ const config = await loadConfig();
9
+ if (!config.agentUrl) {
10
+ error("No agent URL configured.");
11
+ info("Set it with: agentdial serve --agent-url <url>");
12
+ info("Or add agent_url to your IDENTITY.md frontmatter.");
13
+ return;
14
+ }
15
+ const channel = opts.channel ? ChannelTypeSchema.parse(opts.channel) : "web";
16
+ const testMessage = {
17
+ id: randomUUID(),
18
+ channel,
19
+ from: "agentdial-test",
20
+ text: opts.message,
21
+ timestamp: Date.now(),
22
+ };
23
+ info(`Sending to ${config.agentUrl}...`);
24
+ info(`Channel: ${channel}`);
25
+ info(`Message: "${opts.message}"`);
26
+ try {
27
+ const response = await routeMessage(testMessage, config.agentUrl);
28
+ success("Agent responded:");
29
+ console.log("");
30
+ console.log(` ${response.text}`);
31
+ if (response.cards && response.cards.length > 0) {
32
+ info(`${String(response.cards.length)} card(s) attached`);
33
+ }
34
+ if (response.actions && response.actions.length > 0) {
35
+ info(`${String(response.actions.length)} action(s) attached`);
36
+ }
37
+ console.log("");
38
+ }
39
+ catch (err) {
40
+ const msg = err instanceof Error ? err.message : String(err);
41
+ error(`Test failed: ${msg}`);
42
+ if (msg.includes("ECONNREFUSED")) {
43
+ warn("Is your agent backend running?");
44
+ info(`Expected at: ${config.agentUrl}`);
45
+ }
46
+ }
47
+ }
48
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAG7B;IACC,OAAO,CAAC,cAAc,CAAC,CAAC;IAExB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAClC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QACvD,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE7E,MAAM,WAAW,GAAmB;QAClC,EAAE,EAAE,UAAU,EAAE;QAChB,OAAO;QACP,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,IAAI,CAAC,OAAO;QAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;IAEF,IAAI,CAAC,cAAc,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;IAC5B,IAAI,CAAC,aAAa,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAElC,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;QAE7B,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YACvC,IAAI,CAAC,gBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function cmdVoiceSetup(): Promise<void>;
2
+ export declare function cmdVoiceTest(opts: {
3
+ number?: string;
4
+ }): Promise<void>;
5
+ export declare function cmdVoiceStatus(): Promise<void>;
6
+ //# sourceMappingURL=voice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../src/commands/voice.ts"],"names":[],"mappings":"AAwBA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAiHnD;AAID,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D3E;AAID,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBpD"}
@@ -0,0 +1,192 @@
1
+ import { createInterface } from "node:readline/promises";
2
+ import { stdin, stdout } from "node:process";
3
+ import { saveCredential, getCredential, listCredentials, } from "../lib/credentials.js";
4
+ import { success, error, info, warn, heading, box } from "../lib/ui.js";
5
+ import { VOICE_PROVIDERS } from "../adapters/voice.js";
6
+ // ── Helpers ──
7
+ async function ask(rl, prompt, fallback) {
8
+ const suffix = fallback ? ` (${fallback})` : "";
9
+ const answer = (await rl.question(` ${prompt}${suffix} `)).trim();
10
+ return answer || fallback || "";
11
+ }
12
+ // ── Voice Setup ──
13
+ export async function cmdVoiceSetup() {
14
+ heading("Voice Channel Setup");
15
+ const rl = createInterface({ input: stdin, output: stdout });
16
+ try {
17
+ // Step 1: Check for existing Twilio creds (reuse from SMS/WhatsApp)
18
+ heading("1/3 Twilio Credentials");
19
+ let sid = await getCredential("voice", "account_sid");
20
+ let token = await getCredential("voice", "auth_token");
21
+ let phone = await getCredential("voice", "phone_number");
22
+ // Fall back to SMS credentials
23
+ if (!sid)
24
+ sid = await getCredential("sms", "accountSid");
25
+ if (!token)
26
+ token = await getCredential("sms", "authToken");
27
+ if (!phone)
28
+ phone = await getCredential("sms", "phoneNumber");
29
+ if (sid && token && phone) {
30
+ success(`Twilio credentials found (SID: ${sid.slice(0, 8)}...)`);
31
+ success(`Phone: ${phone}`);
32
+ info("Reusing existing Twilio credentials for voice.");
33
+ }
34
+ else {
35
+ info("No existing Twilio credentials found.");
36
+ info("Enter your Twilio credentials (twilio.com/console):");
37
+ console.log("");
38
+ sid = await ask(rl, "Account SID:");
39
+ token = await ask(rl, "Auth Token:");
40
+ phone = await ask(rl, "Phone Number (e.g. +1234567890):");
41
+ if (!sid || !token || !phone) {
42
+ error("All three Twilio credentials are required.");
43
+ return;
44
+ }
45
+ }
46
+ await saveCredential("voice", "account_sid", sid);
47
+ await saveCredential("voice", "auth_token", token);
48
+ await saveCredential("voice", "phone_number", phone);
49
+ success("Twilio credentials saved for voice channel.");
50
+ // Step 2: Select voice provider
51
+ heading("2/3 Voice Provider");
52
+ console.log("");
53
+ console.log(" Select a speech-to-speech provider:");
54
+ console.log("");
55
+ for (let i = 0; i < VOICE_PROVIDERS.length; i++) {
56
+ const p = VOICE_PROVIDERS[i];
57
+ const num = String(i + 1).padStart(2);
58
+ const cost = `(${p.cost})`.padEnd(22);
59
+ console.log(` ${num}) ${p.name.padEnd(22)} ${cost} ${p.description}`);
60
+ }
61
+ console.log("");
62
+ const currentProvider = await getCredential("voice", "voice_provider");
63
+ const defaultNum = currentProvider
64
+ ? String(VOICE_PROVIDERS.findIndex((p) => p.id === currentProvider) + 1)
65
+ : "1";
66
+ const choice = await ask(rl, "Enter number:", defaultNum);
67
+ const idx = parseInt(choice, 10) - 1;
68
+ if (isNaN(idx) || idx < 0 || idx >= VOICE_PROVIDERS.length) {
69
+ error("Invalid selection.");
70
+ return;
71
+ }
72
+ const selected = VOICE_PROVIDERS[idx];
73
+ await saveCredential("voice", "voice_provider", selected.id);
74
+ success(`Voice provider: ${selected.name}`);
75
+ // Step 3: Provider-specific credentials
76
+ heading("3/3 Provider Credentials");
77
+ if (selected.credentialKeys.length === 0) {
78
+ info("No additional credentials needed for this provider.");
79
+ }
80
+ else {
81
+ for (const key of selected.credentialKeys) {
82
+ const existing = await getCredential("voice", key);
83
+ const prompt = `${key}:`;
84
+ const value = await ask(rl, prompt, existing ?? undefined);
85
+ if (value) {
86
+ await saveCredential("voice", key, value);
87
+ success(`Saved ${key}`);
88
+ }
89
+ else {
90
+ warn(`Skipped ${key} -- set later with \`agentdial voice setup\``);
91
+ }
92
+ }
93
+ }
94
+ // Summary
95
+ console.log("");
96
+ box("Voice Setup Complete", [
97
+ `Twilio: ${phone}`,
98
+ `Provider: ${selected.name} (${selected.cost})`,
99
+ "",
100
+ "Webhook URL for Twilio console:",
101
+ " https://YOUR_DOMAIN/api/voice/webhook",
102
+ "",
103
+ "Next steps:",
104
+ " agentdial voice test -- validate credentials",
105
+ " agentdial voice status -- view configuration",
106
+ " agentdial serve -- start the gateway",
107
+ ].join("\n"));
108
+ }
109
+ finally {
110
+ rl.close();
111
+ }
112
+ }
113
+ // ── Voice Test ──
114
+ export async function cmdVoiceTest(opts) {
115
+ heading("Voice Channel Test");
116
+ const sid = await getCredential("voice", "account_sid");
117
+ const token = await getCredential("voice", "auth_token");
118
+ const phone = await getCredential("voice", "phone_number");
119
+ const provider = await getCredential("voice", "voice_provider");
120
+ if (!sid || !token || !phone) {
121
+ error("Voice not configured. Run `agentdial voice setup` first.");
122
+ return;
123
+ }
124
+ // Validate Twilio credentials
125
+ info("Checking Twilio credentials...");
126
+ try {
127
+ const url = `https://api.twilio.com/2010-04-01/Accounts/${sid}.json`;
128
+ const res = await fetch(url, {
129
+ headers: {
130
+ Authorization: `Basic ${Buffer.from(`${sid}:${token}`).toString("base64")}`,
131
+ },
132
+ });
133
+ if (!res.ok) {
134
+ error(`Twilio auth failed: HTTP ${res.status}`);
135
+ return;
136
+ }
137
+ success("Twilio credentials valid");
138
+ }
139
+ catch (err) {
140
+ error(`Twilio connection failed: ${err instanceof Error ? err.message : "Unknown"}`);
141
+ return;
142
+ }
143
+ // Validate voice provider credentials
144
+ const providerMeta = VOICE_PROVIDERS.find((p) => p.id === provider);
145
+ if (providerMeta) {
146
+ info(`Checking ${providerMeta.name} credentials...`);
147
+ let allPresent = true;
148
+ for (const key of providerMeta.credentialKeys) {
149
+ const val = await getCredential("voice", key);
150
+ if (val) {
151
+ success(`${key}: present`);
152
+ }
153
+ else {
154
+ warn(`${key}: missing`);
155
+ allPresent = false;
156
+ }
157
+ }
158
+ if (!allPresent) {
159
+ warn("Some provider credentials missing. Run `agentdial voice setup`.");
160
+ }
161
+ }
162
+ success("Voice pipeline validation complete.");
163
+ info(`Phone: ${phone}`);
164
+ info(`Provider: ${providerMeta?.name ?? provider ?? "not set"}`);
165
+ if (opts.number) {
166
+ info(`To make a test call to ${opts.number}, start the gateway first:`);
167
+ info(" agentdial serve");
168
+ }
169
+ }
170
+ // ── Voice Status ──
171
+ export async function cmdVoiceStatus() {
172
+ heading("Voice Channel Status");
173
+ const sid = await getCredential("voice", "account_sid");
174
+ const phone = await getCredential("voice", "phone_number");
175
+ const provider = await getCredential("voice", "voice_provider");
176
+ const keys = await listCredentials("voice");
177
+ if (!sid) {
178
+ warn("Voice not configured. Run `agentdial voice setup`.");
179
+ return;
180
+ }
181
+ success(`Twilio SID: ${sid.slice(0, 8)}...`);
182
+ success(`Phone: ${phone ?? "not set"}`);
183
+ const providerMeta = VOICE_PROVIDERS.find((p) => p.id === provider);
184
+ if (providerMeta) {
185
+ success(`Provider: ${providerMeta.name} (${providerMeta.cost})`);
186
+ }
187
+ else {
188
+ warn("Provider: not configured");
189
+ }
190
+ info(`Stored credential keys: ${keys.join(", ")}`);
191
+ }
192
+ //# sourceMappingURL=voice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.js","sourceRoot":"","sources":["../../src/commands/voice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}