bland-cli 0.1.2

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 (127) hide show
  1. package/README.md +516 -0
  2. package/dist/commands/agent.d.ts +3 -0
  3. package/dist/commands/agent.d.ts.map +1 -0
  4. package/dist/commands/agent.js +144 -0
  5. package/dist/commands/agent.js.map +1 -0
  6. package/dist/commands/alarm.d.ts +3 -0
  7. package/dist/commands/alarm.d.ts.map +1 -0
  8. package/dist/commands/alarm.js +93 -0
  9. package/dist/commands/alarm.js.map +1 -0
  10. package/dist/commands/audio.d.ts +3 -0
  11. package/dist/commands/audio.d.ts.map +1 -0
  12. package/dist/commands/audio.js +77 -0
  13. package/dist/commands/audio.js.map +1 -0
  14. package/dist/commands/auth.d.ts +3 -0
  15. package/dist/commands/auth.d.ts.map +1 -0
  16. package/dist/commands/auth.js +199 -0
  17. package/dist/commands/auth.js.map +1 -0
  18. package/dist/commands/batch.d.ts +3 -0
  19. package/dist/commands/batch.d.ts.map +1 -0
  20. package/dist/commands/batch.js +96 -0
  21. package/dist/commands/batch.js.map +1 -0
  22. package/dist/commands/call.d.ts +3 -0
  23. package/dist/commands/call.d.ts.map +1 -0
  24. package/dist/commands/call.js +348 -0
  25. package/dist/commands/call.js.map +1 -0
  26. package/dist/commands/eval.d.ts +3 -0
  27. package/dist/commands/eval.d.ts.map +1 -0
  28. package/dist/commands/eval.js +67 -0
  29. package/dist/commands/eval.js.map +1 -0
  30. package/dist/commands/guard.d.ts +3 -0
  31. package/dist/commands/guard.d.ts.map +1 -0
  32. package/dist/commands/guard.js +100 -0
  33. package/dist/commands/guard.js.map +1 -0
  34. package/dist/commands/knowledge.d.ts +3 -0
  35. package/dist/commands/knowledge.d.ts.map +1 -0
  36. package/dist/commands/knowledge.js +137 -0
  37. package/dist/commands/knowledge.js.map +1 -0
  38. package/dist/commands/listen.d.ts +3 -0
  39. package/dist/commands/listen.d.ts.map +1 -0
  40. package/dist/commands/listen.js +98 -0
  41. package/dist/commands/listen.js.map +1 -0
  42. package/dist/commands/mcp.d.ts +3 -0
  43. package/dist/commands/mcp.d.ts.map +1 -0
  44. package/dist/commands/mcp.js +22 -0
  45. package/dist/commands/mcp.js.map +1 -0
  46. package/dist/commands/number.d.ts +3 -0
  47. package/dist/commands/number.d.ts.map +1 -0
  48. package/dist/commands/number.js +225 -0
  49. package/dist/commands/number.js.map +1 -0
  50. package/dist/commands/pathway.d.ts +3 -0
  51. package/dist/commands/pathway.d.ts.map +1 -0
  52. package/dist/commands/pathway.js +1003 -0
  53. package/dist/commands/pathway.js.map +1 -0
  54. package/dist/commands/persona.d.ts +3 -0
  55. package/dist/commands/persona.d.ts.map +1 -0
  56. package/dist/commands/persona.js +236 -0
  57. package/dist/commands/persona.js.map +1 -0
  58. package/dist/commands/release.d.ts +3 -0
  59. package/dist/commands/release.d.ts.map +1 -0
  60. package/dist/commands/release.js +68 -0
  61. package/dist/commands/release.js.map +1 -0
  62. package/dist/commands/secret.d.ts +3 -0
  63. package/dist/commands/secret.d.ts.map +1 -0
  64. package/dist/commands/secret.js +62 -0
  65. package/dist/commands/secret.js.map +1 -0
  66. package/dist/commands/sip.d.ts +3 -0
  67. package/dist/commands/sip.d.ts.map +1 -0
  68. package/dist/commands/sip.js +45 -0
  69. package/dist/commands/sip.js.map +1 -0
  70. package/dist/commands/sms.d.ts +3 -0
  71. package/dist/commands/sms.d.ts.map +1 -0
  72. package/dist/commands/sms.js +84 -0
  73. package/dist/commands/sms.js.map +1 -0
  74. package/dist/commands/tool.d.ts +3 -0
  75. package/dist/commands/tool.d.ts.map +1 -0
  76. package/dist/commands/tool.js +201 -0
  77. package/dist/commands/tool.js.map +1 -0
  78. package/dist/commands/voice.d.ts +3 -0
  79. package/dist/commands/voice.d.ts.map +1 -0
  80. package/dist/commands/voice.js +93 -0
  81. package/dist/commands/voice.js.map +1 -0
  82. package/dist/commands/widget.d.ts +3 -0
  83. package/dist/commands/widget.d.ts.map +1 -0
  84. package/dist/commands/widget.js +78 -0
  85. package/dist/commands/widget.js.map +1 -0
  86. package/dist/index.d.ts +3 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +52 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/lib/api.d.ts +23 -0
  91. package/dist/lib/api.d.ts.map +1 -0
  92. package/dist/lib/api.js +105 -0
  93. package/dist/lib/api.js.map +1 -0
  94. package/dist/lib/config.d.ts +16 -0
  95. package/dist/lib/config.d.ts.map +1 -0
  96. package/dist/lib/config.js +117 -0
  97. package/dist/lib/config.js.map +1 -0
  98. package/dist/lib/errors.d.ts +15 -0
  99. package/dist/lib/errors.d.ts.map +1 -0
  100. package/dist/lib/errors.js +43 -0
  101. package/dist/lib/errors.js.map +1 -0
  102. package/dist/lib/output.d.ts +30 -0
  103. package/dist/lib/output.d.ts.map +1 -0
  104. package/dist/lib/output.js +131 -0
  105. package/dist/lib/output.js.map +1 -0
  106. package/dist/lib/pathway-file.d.ts +33 -0
  107. package/dist/lib/pathway-file.d.ts.map +1 -0
  108. package/dist/lib/pathway-file.js +271 -0
  109. package/dist/lib/pathway-file.js.map +1 -0
  110. package/dist/mcp/server.d.ts +2 -0
  111. package/dist/mcp/server.d.ts.map +1 -0
  112. package/dist/mcp/server.js +375 -0
  113. package/dist/mcp/server.js.map +1 -0
  114. package/dist/types/api.d.ts +302 -0
  115. package/dist/types/api.d.ts.map +1 -0
  116. package/dist/types/api.js +2 -0
  117. package/dist/types/api.js.map +1 -0
  118. package/dist/types/config.d.ts +14 -0
  119. package/dist/types/config.d.ts.map +1 -0
  120. package/dist/types/config.js +2 -0
  121. package/dist/types/config.js.map +1 -0
  122. package/dist/types/pathway.d.ts +55 -0
  123. package/dist/types/pathway.d.ts.map +1 -0
  124. package/dist/types/pathway.js +2 -0
  125. package/dist/types/pathway.js.map +1 -0
  126. package/package.json +51 -0
  127. package/templates/pathway.yaml +30 -0
@@ -0,0 +1,137 @@
1
+ import { input } from "@inquirer/prompts";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import * as fs from "fs";
5
+ import { api, extractArray } from "../lib/api.js";
6
+ import * as output from "../lib/output.js";
7
+ import { handleError } from "../lib/errors.js";
8
+ export function registerKnowledgeCommand(program) {
9
+ const kb = program
10
+ .command("knowledge")
11
+ .alias("kb")
12
+ .description("Manage knowledge bases");
13
+ kb.command("list")
14
+ .description("List knowledge bases")
15
+ .option("--json", "Output as JSON")
16
+ .action(async (opts) => {
17
+ try {
18
+ const spinner = ora("Fetching...").start();
19
+ const raw = await api.get("/v1/knowledge");
20
+ spinner.stop();
21
+ const kbs = extractArray(raw);
22
+ if (opts.json) {
23
+ output.json(kbs);
24
+ return;
25
+ }
26
+ output.table(kbs.map((k) => ({
27
+ ...k,
28
+ status_display: k.status === "COMPLETED" ? chalk.green(k.status) :
29
+ k.status === "PROCESSING" ? chalk.yellow(k.status) : chalk.red(k.status),
30
+ date: output.formatDate(k.created_at),
31
+ })), [
32
+ { key: "id", header: "ID", width: 38 },
33
+ { key: "name", header: "Name", width: 25 },
34
+ { key: "type", header: "Type", width: 15 },
35
+ { key: "status_display", header: "Status", width: 12 },
36
+ { key: "date", header: "Created", width: 20 },
37
+ ]);
38
+ }
39
+ catch (err) {
40
+ handleError(err);
41
+ }
42
+ });
43
+ kb.command("create")
44
+ .description("Create a knowledge base")
45
+ .argument("<name>", "Knowledge base name")
46
+ .option("--description <text>", "Description")
47
+ .option("--json", "Output as JSON")
48
+ .action(async (name, opts) => {
49
+ try {
50
+ const spinner = ora("Creating...").start();
51
+ const result = await api.post("/v1/knowledge", {
52
+ name,
53
+ description: opts.description,
54
+ });
55
+ spinner.succeed(`Knowledge base "${name}" created ${chalk.dim(`(${result.id})`)}`);
56
+ if (opts.json)
57
+ output.json(result);
58
+ }
59
+ catch (err) {
60
+ handleError(err);
61
+ }
62
+ });
63
+ kb.command("scrape")
64
+ .description("Scrape URLs into a knowledge base")
65
+ .argument("<name>", "Knowledge base name")
66
+ .option("--urls <urls>", "Comma-separated URLs")
67
+ .option("--file <path>", "File with URLs (one per line)")
68
+ .option("--json", "Output as JSON")
69
+ .action(async (name, opts) => {
70
+ try {
71
+ let urls = [];
72
+ if (opts.urls) {
73
+ urls = opts.urls.split(",").map((u) => u.trim());
74
+ }
75
+ else if (opts.file) {
76
+ const content = fs.readFileSync(opts.file, "utf-8");
77
+ urls = content.split("\n").map((u) => u.trim()).filter(Boolean);
78
+ }
79
+ else {
80
+ const raw = await input({ message: "URLs (comma-separated):" });
81
+ urls = raw.split(",").map((u) => u.trim());
82
+ }
83
+ const spinner = ora(`Scraping ${urls.length} URL(s)...`).start();
84
+ const result = await api.post("/v1/knowledge/learn", {
85
+ type: "web",
86
+ name,
87
+ urls,
88
+ });
89
+ spinner.succeed(`Scraping started ${chalk.dim(`(${result.id})`)}`);
90
+ if (opts.json)
91
+ output.json(result);
92
+ }
93
+ catch (err) {
94
+ handleError(err);
95
+ }
96
+ });
97
+ kb.command("delete")
98
+ .description("Delete a knowledge base")
99
+ .argument("<id>", "Knowledge base ID")
100
+ .action(async (id) => {
101
+ try {
102
+ const spinner = ora("Deleting...").start();
103
+ await api.delete(`/v1/knowledge/${id}`);
104
+ spinner.succeed("Knowledge base deleted.");
105
+ }
106
+ catch (err) {
107
+ handleError(err);
108
+ }
109
+ });
110
+ kb.command("status")
111
+ .description("Check processing status")
112
+ .argument("<id>", "Knowledge base ID")
113
+ .option("--json", "Output as JSON")
114
+ .action(async (id, opts) => {
115
+ try {
116
+ const spinner = ora("Checking...").start();
117
+ const kb_ = await api.get(`/v1/knowledge/${id}`);
118
+ spinner.stop();
119
+ if (opts.json) {
120
+ output.json(kb_);
121
+ return;
122
+ }
123
+ const color = kb_.status === "COMPLETED" ? chalk.green :
124
+ kb_.status === "PROCESSING" ? chalk.yellow : chalk.red;
125
+ output.detail([
126
+ ["ID", kb_.id],
127
+ ["Name", kb_.name],
128
+ ["Status", color(kb_.status)],
129
+ ["Type", kb_.type],
130
+ ]);
131
+ }
132
+ catch (err) {
133
+ handleError(err);
134
+ }
135
+ });
136
+ }
137
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/commands/knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerListenCommand(program: Command): void;
3
+ //# sourceMappingURL=listen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.d.ts","sourceRoot":"","sources":["../../src/commands/listen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwH5D"}
@@ -0,0 +1,98 @@
1
+ import chalk from "chalk";
2
+ import * as http from "http";
3
+ import { handleError } from "../lib/errors.js";
4
+ export function registerListenCommand(program) {
5
+ program
6
+ .command("listen")
7
+ .description("Forward Bland webhooks to local development server")
8
+ .option("--forward-to <url>", "Local URL to forward webhooks to", "http://localhost:3000/webhook")
9
+ .option("--port <n>", "Port to listen on", "4000")
10
+ .option("--events <types>", "Filter event types (comma-separated)")
11
+ .action(async (opts) => {
12
+ try {
13
+ const port = parseInt(opts.port, 10);
14
+ const forwardTo = opts.forwardTo;
15
+ const eventFilter = opts.events
16
+ ? new Set(opts.events.split(",").map((e) => e.trim()))
17
+ : null;
18
+ console.log();
19
+ console.log(chalk.bold("Bland Webhook Listener"));
20
+ console.log(chalk.dim("─".repeat(40)));
21
+ console.log(` ${chalk.bold("Listening on:")} http://localhost:${port}`);
22
+ console.log(` ${chalk.bold("Forwarding to:")} ${forwardTo}`);
23
+ if (eventFilter) {
24
+ console.log(` ${chalk.bold("Events:")} ${[...eventFilter].join(", ")}`);
25
+ }
26
+ console.log(chalk.dim("─".repeat(40)));
27
+ console.log();
28
+ console.log(chalk.dim(" Set your Bland webhook URL to the public URL of this listener."));
29
+ console.log(chalk.dim(" Use ngrok or similar to expose this port publicly."));
30
+ console.log(chalk.dim(" Press Ctrl+C to stop."));
31
+ console.log();
32
+ const server = http.createServer(async (req, res) => {
33
+ if (req.method !== "POST") {
34
+ res.writeHead(200, { "Content-Type": "text/plain" });
35
+ res.end("Bland webhook listener is running.");
36
+ return;
37
+ }
38
+ let body = "";
39
+ req.on("data", (chunk) => { body += chunk; });
40
+ req.on("end", async () => {
41
+ const ts = new Date().toLocaleTimeString();
42
+ let payload = null;
43
+ try {
44
+ payload = JSON.parse(body);
45
+ }
46
+ catch {
47
+ console.log(`${chalk.dim(`[${ts}]`)} ${chalk.yellow("Received non-JSON payload")}`);
48
+ }
49
+ // Event filtering
50
+ if (eventFilter && payload) {
51
+ const eventType = (payload.event || payload.type || "unknown");
52
+ if (!eventFilter.has(eventType)) {
53
+ res.writeHead(200);
54
+ res.end("filtered");
55
+ return;
56
+ }
57
+ }
58
+ const eventType = payload
59
+ ? (payload.event || payload.type || "webhook")
60
+ : "webhook";
61
+ const callId = payload?.call_id || "";
62
+ console.log(`${chalk.dim(`[${ts}]`)} ${chalk.cyan(eventType)} ${callId ? chalk.dim(`(${callId})`) : ""}`);
63
+ // Forward to local server
64
+ try {
65
+ const forwardUrl = new URL(forwardTo);
66
+ const forwardRes = await fetch(forwardUrl.toString(), {
67
+ method: "POST",
68
+ headers: {
69
+ "Content-Type": "application/json",
70
+ ...Object.fromEntries(Object.entries(req.headers).filter(([k]) => k.startsWith("x-") || k === "user-agent")),
71
+ },
72
+ body,
73
+ });
74
+ const statusColor = forwardRes.status >= 200 && forwardRes.status < 300
75
+ ? chalk.green
76
+ : chalk.red;
77
+ console.log(` ${chalk.dim("→")} ${forwardTo} ${statusColor(`[${forwardRes.status}]`)}`);
78
+ }
79
+ catch (err) {
80
+ console.log(` ${chalk.dim("→")} ${forwardTo} ${chalk.red(`[ERROR: ${err instanceof Error ? err.message : "Connection failed"}]`)}`);
81
+ }
82
+ res.writeHead(200, { "Content-Type": "application/json" });
83
+ res.end(JSON.stringify({ received: true }));
84
+ });
85
+ });
86
+ server.listen(port, () => {
87
+ console.log(chalk.green(` Listening on port ${port}...`));
88
+ console.log();
89
+ });
90
+ // Keep alive
91
+ await new Promise(() => { });
92
+ }
93
+ catch (err) {
94
+ handleError(err);
95
+ }
96
+ });
97
+ }
98
+ //# sourceMappingURL=listen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/commands/listen.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,oBAAoB,EAAE,kCAAkC,EAAE,+BAA+B,CAAC;SACjG,MAAM,CAAC,YAAY,EAAE,mBAAmB,EAAE,MAAM,CAAC;SACjD,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM;gBAC7B,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,CAAC,CAAC,IAAI,CAAC;YAET,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;YAC9D,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,kEAAkE,CACnE,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAClE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;gBAClD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;oBACrD,GAAG,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;oBAC9C,OAAO;gBACT,CAAC;gBAED,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;oBACvB,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;oBAC3C,IAAI,OAAO,GAAmC,IAAI,CAAC;oBAEnD,IAAI,CAAC;wBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7B,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;oBACtF,CAAC;oBAED,kBAAkB;oBAClB,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;wBAC3B,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,SAAS,CAAW,CAAC;wBACzE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;4BAChC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;4BACnB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;4BACpB,OAAO;wBACT,CAAC;oBACH,CAAC;oBAED,MAAM,SAAS,GAAG,OAAO;wBACvB,CAAC,CAAE,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,SAAS,CAAY;wBAC1D,CAAC,CAAC,SAAS,CAAC;oBACd,MAAM,MAAM,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;oBAEtC,OAAO,CAAC,GAAG,CACT,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7F,CAAC;oBAEF,0BAA0B;oBAC1B,IAAI,CAAC;wBACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;wBACtC,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE;4BACpD,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE;gCACP,cAAc,EAAE,kBAAkB;gCAClC,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAChC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,CACrB,CACxB;6BACF;4BACD,IAAI;yBACL,CAAC,CAAC;wBAEH,MAAM,WAAW,GACf,UAAU,CAAC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG;4BACjD,CAAC,CAAC,KAAK,CAAC,KAAK;4BACb,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;wBAChB,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,WAAW,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAC5E,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,GAAG,CAAC,EAAE,CACxH,CAAC;oBACJ,CAAC;oBAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;oBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;gBACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,IAAI,KAAK,CAAC,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,aAAa;YACb,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerMcpCommand(program: Command): void;
3
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoBzD"}
@@ -0,0 +1,22 @@
1
+ import chalk from "chalk";
2
+ import { handleError } from "../lib/errors.js";
3
+ import { startMcpServer } from "../mcp/server.js";
4
+ export function registerMcpCommand(program) {
5
+ program
6
+ .command("mcp")
7
+ .description("Start MCP server for AI coding tool integration")
8
+ .option("--transport <type>", "Transport: stdio or sse", "stdio")
9
+ .option("--port <n>", "Port for SSE transport", "3100")
10
+ .action(async (opts) => {
11
+ try {
12
+ if (opts.transport === "sse") {
13
+ console.error(chalk.dim(`Starting MCP server on port ${opts.port} (SSE transport)...`));
14
+ }
15
+ await startMcpServer(opts.transport, parseInt(opts.port, 10));
16
+ }
17
+ catch (err) {
18
+ handleError(err);
19
+ }
20
+ });
21
+ }
22
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,OAAO,CAAC;SAChE,MAAM,CAAC,YAAY,EAAE,wBAAwB,EAAE,MAAM,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;gBAC7B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,+BAA+B,IAAI,CAAC,IAAI,qBAAqB,CAC9D,CACF,CAAC;YACJ,CAAC;YACD,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerNumberCommand(program: Command): void;
3
+ //# sourceMappingURL=number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/commands/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+P5D"}
@@ -0,0 +1,225 @@
1
+ import { select, input, confirm } from "@inquirer/prompts";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import { api } from "../lib/api.js";
5
+ import * as output from "../lib/output.js";
6
+ import { handleError } from "../lib/errors.js";
7
+ export function registerNumberCommand(program) {
8
+ const number = program
9
+ .command("number")
10
+ .description("Manage phone numbers");
11
+ // ── bland number list ──
12
+ number
13
+ .command("list")
14
+ .description("List owned phone numbers")
15
+ .option("--json", "Output as JSON")
16
+ .action(async (opts) => {
17
+ try {
18
+ const spinner = ora("Fetching numbers...").start();
19
+ const result = await api.get("/v1/inbound");
20
+ spinner.stop();
21
+ const numbers = result.inbound_numbers || result.phone_numbers || [];
22
+ if (opts.json) {
23
+ output.json(numbers);
24
+ return;
25
+ }
26
+ if (numbers.length === 0) {
27
+ console.log(chalk.dim(" No numbers found. Run `bland number buy` to get one."));
28
+ return;
29
+ }
30
+ output.table(numbers.map((n) => ({
31
+ ...n,
32
+ display_number: output.formatPhone(n.phone_number),
33
+ pathway: n.pathway_id
34
+ ? output.truncate(n.pathway_id, 20)
35
+ : chalk.dim("—"),
36
+ persona: n.persona_id
37
+ ? output.truncate(n.persona_id, 20)
38
+ : chalk.dim("—"),
39
+ })), [
40
+ { key: "display_number", header: "Number", width: 20 },
41
+ { key: "area_code", header: "Area", width: 6 },
42
+ { key: "country_code", header: "CC", width: 4 },
43
+ { key: "pathway", header: "Pathway", width: 22 },
44
+ { key: "persona", header: "Persona", width: 22 },
45
+ ]);
46
+ }
47
+ catch (err) {
48
+ handleError(err);
49
+ }
50
+ });
51
+ // ── bland number buy ──
52
+ number
53
+ .command("buy")
54
+ .description("Purchase a new phone number")
55
+ .option("-a, --area-code <code>", "Preferred area code")
56
+ .option("-c, --country <code>", "Country code", "US")
57
+ .option("-n, --count <n>", "Number of numbers to buy", "1")
58
+ .option("--json", "Output as JSON")
59
+ .action(async (opts) => {
60
+ try {
61
+ let areaCode = opts.areaCode;
62
+ const count = parseInt(opts.count, 10);
63
+ if (!areaCode) {
64
+ areaCode = await input({
65
+ message: "Preferred area code (or leave blank for any):",
66
+ });
67
+ }
68
+ const proceed = await confirm({
69
+ message: `Purchase ${count} phone number(s)${areaCode ? ` with area code ${areaCode}` : ""}?`,
70
+ });
71
+ if (!proceed) {
72
+ console.log(chalk.dim(" Cancelled."));
73
+ return;
74
+ }
75
+ const spinner = ora("Purchasing number(s)...").start();
76
+ const body = {
77
+ country_code: opts.country,
78
+ };
79
+ if (areaCode)
80
+ body.area_code = areaCode;
81
+ const results = [];
82
+ for (let i = 0; i < count; i++) {
83
+ const result = await api.post("/v1/inbound/purchase", body);
84
+ results.push(result);
85
+ }
86
+ spinner.succeed(`Purchased ${results.length} number(s)`);
87
+ if (opts.json) {
88
+ output.json(results);
89
+ return;
90
+ }
91
+ for (const r of results) {
92
+ console.log(` ${chalk.green("✓")} ${output.formatPhone(r.phone_number)}`);
93
+ }
94
+ }
95
+ catch (err) {
96
+ handleError(err);
97
+ }
98
+ });
99
+ // ── bland number release ──
100
+ number
101
+ .command("release")
102
+ .description("Release a phone number")
103
+ .argument("<number>", "Phone number to release")
104
+ .action(async (phoneNumber) => {
105
+ try {
106
+ const proceed = await confirm({
107
+ message: `Release ${output.formatPhone(phoneNumber)}? This cannot be undone.`,
108
+ });
109
+ if (!proceed) {
110
+ console.log(chalk.dim(" Cancelled."));
111
+ return;
112
+ }
113
+ const spinner = ora("Releasing number...").start();
114
+ await api.delete(`/v1/inbound/${encodeURIComponent(phoneNumber)}`);
115
+ spinner.succeed(`Released ${output.formatPhone(phoneNumber)}`);
116
+ }
117
+ catch (err) {
118
+ handleError(err);
119
+ }
120
+ });
121
+ // ── bland number update ──
122
+ number
123
+ .command("update")
124
+ .description("Update phone number configuration")
125
+ .argument("<number>", "Phone number to update")
126
+ .option("--pathway <id>", "Set inbound pathway ID")
127
+ .option("--persona <id>", "Set persona ID")
128
+ .option("--webhook <url>", "Set webhook URL")
129
+ .option("--prompt <text>", "Set inbound prompt")
130
+ .option("--voice <voice>", "Set voice")
131
+ .option("--json", "Output as JSON")
132
+ .action(async (phoneNumber, opts) => {
133
+ try {
134
+ const body = {};
135
+ if (opts.pathway)
136
+ body.pathway_id = opts.pathway;
137
+ if (opts.persona)
138
+ body.persona_id = opts.persona;
139
+ if (opts.webhook)
140
+ body.webhook = opts.webhook;
141
+ if (opts.prompt)
142
+ body.prompt = opts.prompt;
143
+ if (opts.voice)
144
+ body.voice = opts.voice;
145
+ if (Object.keys(body).length === 0) {
146
+ console.log(chalk.yellow(" No options specified. Use --pathway, --persona, --webhook, --prompt, or --voice."));
147
+ return;
148
+ }
149
+ const spinner = ora("Updating number...").start();
150
+ const result = await api.post(`/v1/inbound/${encodeURIComponent(phoneNumber)}`, body);
151
+ spinner.succeed(`Updated ${output.formatPhone(phoneNumber)}`);
152
+ if (opts.json) {
153
+ output.json(result);
154
+ }
155
+ }
156
+ catch (err) {
157
+ handleError(err);
158
+ }
159
+ });
160
+ // ── bland number configure ──
161
+ number
162
+ .command("configure")
163
+ .description("Interactively configure a phone number")
164
+ .argument("<number>", "Phone number to configure")
165
+ .action(async (phoneNumber) => {
166
+ try {
167
+ const action = await select({
168
+ message: `Configure ${output.formatPhone(phoneNumber)}:`,
169
+ choices: [
170
+ {
171
+ name: "Set inbound pathway",
172
+ value: "pathway",
173
+ },
174
+ {
175
+ name: "Set persona",
176
+ value: "persona",
177
+ },
178
+ {
179
+ name: "Set webhook URL",
180
+ value: "webhook",
181
+ },
182
+ {
183
+ name: "Set inbound prompt",
184
+ value: "prompt",
185
+ },
186
+ {
187
+ name: "Set voice",
188
+ value: "voice",
189
+ },
190
+ ],
191
+ });
192
+ const body = {};
193
+ let value;
194
+ switch (action) {
195
+ case "pathway":
196
+ value = await input({ message: "Pathway ID:" });
197
+ body.pathway_id = value;
198
+ break;
199
+ case "persona":
200
+ value = await input({ message: "Persona ID:" });
201
+ body.persona_id = value;
202
+ break;
203
+ case "webhook":
204
+ value = await input({ message: "Webhook URL:" });
205
+ body.webhook = value;
206
+ break;
207
+ case "prompt":
208
+ value = await input({ message: "Inbound prompt:" });
209
+ body.prompt = value;
210
+ break;
211
+ case "voice":
212
+ value = await input({ message: "Voice:" });
213
+ body.voice = value;
214
+ break;
215
+ }
216
+ const spinner = ora("Updating...").start();
217
+ await api.post(`/v1/inbound/${encodeURIComponent(phoneNumber)}`, body);
218
+ spinner.succeed(`Updated ${output.formatPhone(phoneNumber)}`);
219
+ }
220
+ catch (err) {
221
+ handleError(err);
222
+ }
223
+ });
224
+ }
225
+ //# sourceMappingURL=number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/commands/number.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerPathwayCommand(program: Command): void;
3
+ //# sourceMappingURL=pathway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathway.d.ts","sourceRoot":"","sources":["../../src/commands/pathway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiuC7D"}