@bland-ai/cli 0.1.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 (126) hide show
  1. package/dist/commands/agent.d.ts +3 -0
  2. package/dist/commands/agent.d.ts.map +1 -0
  3. package/dist/commands/agent.js +143 -0
  4. package/dist/commands/agent.js.map +1 -0
  5. package/dist/commands/alarm.d.ts +3 -0
  6. package/dist/commands/alarm.d.ts.map +1 -0
  7. package/dist/commands/alarm.js +92 -0
  8. package/dist/commands/alarm.js.map +1 -0
  9. package/dist/commands/audio.d.ts +3 -0
  10. package/dist/commands/audio.d.ts.map +1 -0
  11. package/dist/commands/audio.js +77 -0
  12. package/dist/commands/audio.js.map +1 -0
  13. package/dist/commands/auth.d.ts +3 -0
  14. package/dist/commands/auth.d.ts.map +1 -0
  15. package/dist/commands/auth.js +199 -0
  16. package/dist/commands/auth.js.map +1 -0
  17. package/dist/commands/batch.d.ts +3 -0
  18. package/dist/commands/batch.d.ts.map +1 -0
  19. package/dist/commands/batch.js +108 -0
  20. package/dist/commands/batch.js.map +1 -0
  21. package/dist/commands/call.d.ts +3 -0
  22. package/dist/commands/call.d.ts.map +1 -0
  23. package/dist/commands/call.js +348 -0
  24. package/dist/commands/call.js.map +1 -0
  25. package/dist/commands/eval.d.ts +3 -0
  26. package/dist/commands/eval.d.ts.map +1 -0
  27. package/dist/commands/eval.js +66 -0
  28. package/dist/commands/eval.js.map +1 -0
  29. package/dist/commands/guard.d.ts +3 -0
  30. package/dist/commands/guard.d.ts.map +1 -0
  31. package/dist/commands/guard.js +100 -0
  32. package/dist/commands/guard.js.map +1 -0
  33. package/dist/commands/knowledge.d.ts +3 -0
  34. package/dist/commands/knowledge.d.ts.map +1 -0
  35. package/dist/commands/knowledge.js +136 -0
  36. package/dist/commands/knowledge.js.map +1 -0
  37. package/dist/commands/listen.d.ts +3 -0
  38. package/dist/commands/listen.d.ts.map +1 -0
  39. package/dist/commands/listen.js +98 -0
  40. package/dist/commands/listen.js.map +1 -0
  41. package/dist/commands/mcp.d.ts +3 -0
  42. package/dist/commands/mcp.d.ts.map +1 -0
  43. package/dist/commands/mcp.js +22 -0
  44. package/dist/commands/mcp.js.map +1 -0
  45. package/dist/commands/number.d.ts +3 -0
  46. package/dist/commands/number.d.ts.map +1 -0
  47. package/dist/commands/number.js +225 -0
  48. package/dist/commands/number.js.map +1 -0
  49. package/dist/commands/pathway.d.ts +3 -0
  50. package/dist/commands/pathway.d.ts.map +1 -0
  51. package/dist/commands/pathway.js +977 -0
  52. package/dist/commands/pathway.js.map +1 -0
  53. package/dist/commands/persona.d.ts +3 -0
  54. package/dist/commands/persona.d.ts.map +1 -0
  55. package/dist/commands/persona.js +234 -0
  56. package/dist/commands/persona.js.map +1 -0
  57. package/dist/commands/release.d.ts +3 -0
  58. package/dist/commands/release.d.ts.map +1 -0
  59. package/dist/commands/release.js +67 -0
  60. package/dist/commands/release.js.map +1 -0
  61. package/dist/commands/secret.d.ts +3 -0
  62. package/dist/commands/secret.d.ts.map +1 -0
  63. package/dist/commands/secret.js +57 -0
  64. package/dist/commands/secret.js.map +1 -0
  65. package/dist/commands/sip.d.ts +3 -0
  66. package/dist/commands/sip.d.ts.map +1 -0
  67. package/dist/commands/sip.js +45 -0
  68. package/dist/commands/sip.js.map +1 -0
  69. package/dist/commands/sms.d.ts +3 -0
  70. package/dist/commands/sms.d.ts.map +1 -0
  71. package/dist/commands/sms.js +83 -0
  72. package/dist/commands/sms.js.map +1 -0
  73. package/dist/commands/tool.d.ts +3 -0
  74. package/dist/commands/tool.d.ts.map +1 -0
  75. package/dist/commands/tool.js +200 -0
  76. package/dist/commands/tool.js.map +1 -0
  77. package/dist/commands/voice.d.ts +3 -0
  78. package/dist/commands/voice.d.ts.map +1 -0
  79. package/dist/commands/voice.js +95 -0
  80. package/dist/commands/voice.js.map +1 -0
  81. package/dist/commands/widget.d.ts +3 -0
  82. package/dist/commands/widget.d.ts.map +1 -0
  83. package/dist/commands/widget.js +77 -0
  84. package/dist/commands/widget.js.map +1 -0
  85. package/dist/index.d.ts +3 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +52 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/lib/api.d.ts +17 -0
  90. package/dist/lib/api.d.ts.map +1 -0
  91. package/dist/lib/api.js +89 -0
  92. package/dist/lib/api.js.map +1 -0
  93. package/dist/lib/config.d.ts +16 -0
  94. package/dist/lib/config.d.ts.map +1 -0
  95. package/dist/lib/config.js +117 -0
  96. package/dist/lib/config.js.map +1 -0
  97. package/dist/lib/errors.d.ts +15 -0
  98. package/dist/lib/errors.d.ts.map +1 -0
  99. package/dist/lib/errors.js +43 -0
  100. package/dist/lib/errors.js.map +1 -0
  101. package/dist/lib/output.d.ts +30 -0
  102. package/dist/lib/output.d.ts.map +1 -0
  103. package/dist/lib/output.js +131 -0
  104. package/dist/lib/output.js.map +1 -0
  105. package/dist/lib/pathway-file.d.ts +31 -0
  106. package/dist/lib/pathway-file.d.ts.map +1 -0
  107. package/dist/lib/pathway-file.js +236 -0
  108. package/dist/lib/pathway-file.js.map +1 -0
  109. package/dist/mcp/server.d.ts +2 -0
  110. package/dist/mcp/server.d.ts.map +1 -0
  111. package/dist/mcp/server.js +375 -0
  112. package/dist/mcp/server.js.map +1 -0
  113. package/dist/types/api.d.ts +302 -0
  114. package/dist/types/api.d.ts.map +1 -0
  115. package/dist/types/api.js +2 -0
  116. package/dist/types/api.js.map +1 -0
  117. package/dist/types/config.d.ts +14 -0
  118. package/dist/types/config.d.ts.map +1 -0
  119. package/dist/types/config.js +2 -0
  120. package/dist/types/config.js.map +1 -0
  121. package/dist/types/pathway.d.ts +55 -0
  122. package/dist/types/pathway.d.ts.map +1 -0
  123. package/dist/types/pathway.js +2 -0
  124. package/dist/types/pathway.js.map +1 -0
  125. package/package.json +51 -0
  126. package/templates/pathway.yaml +30 -0
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAgentCommand(program: Command): void;
3
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiH3D"}
@@ -0,0 +1,143 @@
1
+ import { 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 registerAgentCommand(program) {
8
+ const agent = program
9
+ .command("agent")
10
+ .description("Manage web agents");
11
+ agent.command("list")
12
+ .description("List agents")
13
+ .option("--json", "Output as JSON")
14
+ .action(async (opts) => {
15
+ try {
16
+ const spinner = ora("Fetching agents...").start();
17
+ const agents = await api.get("/v1/agents");
18
+ spinner.stop();
19
+ if (opts.json) {
20
+ output.json(agents);
21
+ return;
22
+ }
23
+ output.table((agents || []).map((a) => ({
24
+ ...a,
25
+ voice_display: a.voice || chalk.dim("default"),
26
+ model_display: a.model || "base",
27
+ })), [
28
+ { key: "agent_id", header: "ID", width: 38 },
29
+ { key: "voice_display", header: "Voice", width: 12 },
30
+ { key: "model_display", header: "Model", width: 8 },
31
+ { key: "language", header: "Lang", width: 6 },
32
+ ]);
33
+ }
34
+ catch (err) {
35
+ handleError(err);
36
+ }
37
+ });
38
+ agent.command("get")
39
+ .description("Get agent details")
40
+ .argument("<id>", "Agent ID")
41
+ .option("--json", "Output as JSON")
42
+ .action(async (id, opts) => {
43
+ try {
44
+ const spinner = ora("Fetching agent...").start();
45
+ const a = await api.get(`/v1/agents/${id}`);
46
+ spinner.stop();
47
+ if (opts.json) {
48
+ output.json(a);
49
+ return;
50
+ }
51
+ output.detail([
52
+ ["ID", a.agent_id],
53
+ ["Voice", a.voice || "default"],
54
+ ["Model", a.model || "base"],
55
+ ["Language", a.language || "ENG"],
56
+ ["Pathway", a.pathway_id || "—"],
57
+ ["Webhook", a.webhook || "—"],
58
+ ]);
59
+ if (a.prompt) {
60
+ output.header("Prompt");
61
+ console.log(` ${a.prompt}`);
62
+ }
63
+ }
64
+ catch (err) {
65
+ handleError(err);
66
+ }
67
+ });
68
+ agent.command("create")
69
+ .description("Create a new agent")
70
+ .option("--prompt <text>", "Agent prompt")
71
+ .option("--voice <voice>", "Voice")
72
+ .option("--pathway <id>", "Pathway ID")
73
+ .option("--model <model>", "Model: base or turbo")
74
+ .option("--json", "Output as JSON")
75
+ .action(async (opts) => {
76
+ try {
77
+ const body = {};
78
+ if (opts.prompt)
79
+ body.prompt = opts.prompt;
80
+ else {
81
+ const prompt = await input({ message: "Agent prompt:" });
82
+ body.prompt = prompt;
83
+ }
84
+ if (opts.voice)
85
+ body.voice = opts.voice;
86
+ if (opts.pathway)
87
+ body.pathway_id = opts.pathway;
88
+ if (opts.model)
89
+ body.model = opts.model;
90
+ const spinner = ora("Creating agent...").start();
91
+ const result = await api.post("/v1/agents", body);
92
+ spinner.succeed(`Agent created ${chalk.dim(`(${result.agent_id})`)}`);
93
+ if (opts.json)
94
+ output.json(result);
95
+ }
96
+ catch (err) {
97
+ handleError(err);
98
+ }
99
+ });
100
+ agent.command("update")
101
+ .description("Update an agent")
102
+ .argument("<id>", "Agent ID")
103
+ .option("--prompt <text>", "New prompt")
104
+ .option("--voice <voice>", "New voice")
105
+ .option("--pathway <id>", "New pathway")
106
+ .option("--json", "Output as JSON")
107
+ .action(async (id, opts) => {
108
+ try {
109
+ const body = {};
110
+ if (opts.prompt)
111
+ body.prompt = opts.prompt;
112
+ if (opts.voice)
113
+ body.voice = opts.voice;
114
+ if (opts.pathway)
115
+ body.pathway_id = opts.pathway;
116
+ const spinner = ora("Updating...").start();
117
+ const result = await api.post(`/v1/agents/${id}`, body);
118
+ spinner.succeed("Agent updated.");
119
+ if (opts.json)
120
+ output.json(result);
121
+ }
122
+ catch (err) {
123
+ handleError(err);
124
+ }
125
+ });
126
+ agent.command("delete")
127
+ .description("Delete an agent")
128
+ .argument("<id>", "Agent ID")
129
+ .action(async (id) => {
130
+ try {
131
+ const proceed = await confirm({ message: `Delete agent ${id}?` });
132
+ if (!proceed)
133
+ return;
134
+ const spinner = ora("Deleting...").start();
135
+ await api.delete(`/v1/agents/${id}`);
136
+ spinner.succeed("Agent deleted.");
137
+ }
138
+ catch (err) {
139
+ handleError(err);
140
+ }
141
+ });
142
+ }
143
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAlarmCommand(program: Command): void;
3
+ //# sourceMappingURL=alarm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarm.d.ts","sourceRoot":"","sources":["../../src/commands/alarm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4E3D"}
@@ -0,0 +1,92 @@
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 registerAlarmCommand(program) {
8
+ const alarm = program.command("alarm").description("Manage monitoring alarms");
9
+ alarm.command("list")
10
+ .description("List alarms")
11
+ .option("--json", "Output as JSON")
12
+ .action(async (opts) => {
13
+ try {
14
+ const spinner = ora("Fetching...").start();
15
+ const alarms = await api.get("/v1/alarms");
16
+ spinner.stop();
17
+ if (opts.json) {
18
+ output.json(alarms);
19
+ return;
20
+ }
21
+ output.table((alarms || []).map((a) => ({
22
+ ...a,
23
+ enabled_display: a.enabled ? chalk.green("enabled") : chalk.dim("disabled"),
24
+ })), [
25
+ { key: "id", header: "ID", width: 38 },
26
+ { key: "metric_type", header: "Metric", width: 15 },
27
+ { key: "threshold", header: "Threshold", width: 10 },
28
+ { key: "enabled_display", header: "Status", width: 10 },
29
+ ]);
30
+ }
31
+ catch (err) {
32
+ handleError(err);
33
+ }
34
+ });
35
+ alarm.command("create")
36
+ .description("Create an alarm")
37
+ .option("--metric <type>", "Metric: latency, api_errors, call_length")
38
+ .option("--threshold <n>", "Threshold value")
39
+ .option("--webhook <url>", "Webhook URL for notifications")
40
+ .option("--email <addr>", "Email for notifications")
41
+ .option("--sms <number>", "SMS number for notifications")
42
+ .option("--json", "Output as JSON")
43
+ .action(async (opts) => {
44
+ try {
45
+ const body = {};
46
+ body.metric_type = opts.metric || await select({
47
+ message: "Metric to monitor:",
48
+ choices: [
49
+ { name: "Latency", value: "latency" },
50
+ { name: "API Errors", value: "api_errors" },
51
+ { name: "Call Length", value: "call_length" },
52
+ ],
53
+ });
54
+ const threshold = opts.threshold || await input({
55
+ message: "Threshold (0.5=sensitive, 1.0=normal, 2.0=relaxed):",
56
+ default: "1.0",
57
+ });
58
+ body.threshold = parseFloat(threshold);
59
+ if (opts.webhook)
60
+ body.webhook_config = { url: opts.webhook };
61
+ if (opts.email)
62
+ body.email_addresses = [opts.email];
63
+ if (opts.sms)
64
+ body.sms_numbers = [opts.sms];
65
+ const spinner = ora("Creating alarm...").start();
66
+ const result = await api.post("/v1/alarms", body);
67
+ spinner.succeed(`Alarm created ${chalk.dim(`(${result.id})`)}`);
68
+ if (opts.json)
69
+ output.json(result);
70
+ }
71
+ catch (err) {
72
+ handleError(err);
73
+ }
74
+ });
75
+ alarm.command("delete")
76
+ .description("Delete an alarm")
77
+ .argument("<id>", "Alarm ID")
78
+ .action(async (id) => {
79
+ try {
80
+ const proceed = await confirm({ message: `Delete alarm ${id}?` });
81
+ if (!proceed)
82
+ return;
83
+ const spinner = ora("Deleting...").start();
84
+ await api.delete(`/v1/alarms/${id}`);
85
+ spinner.succeed("Alarm deleted.");
86
+ }
87
+ catch (err) {
88
+ handleError(err);
89
+ }
90
+ });
91
+ }
92
+ //# sourceMappingURL=alarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarm.js","sourceRoot":"","sources":["../../src/commands/alarm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAudioCommand(program: Command): void;
3
+ //# sourceMappingURL=audio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/commands/audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE3D"}
@@ -0,0 +1,77 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import * as fs from "fs";
4
+ import { request } from "../lib/api.js";
5
+ import * as output from "../lib/output.js";
6
+ import { handleError } from "../lib/errors.js";
7
+ export function registerAudioCommand(program) {
8
+ const audio = program.command("audio").description("Generate and analyze audio");
9
+ audio.command("generate")
10
+ .description("Generate TTS audio from text")
11
+ .argument("<text>", "Text to convert to speech")
12
+ .option("--voice <voice>", "Voice to use", "nat")
13
+ .option("-o, --output <file>", "Output file path")
14
+ .option("--json", "Output as JSON")
15
+ .action(async (text, opts) => {
16
+ try {
17
+ const spinner = ora("Generating audio...").start();
18
+ const result = await request("/v1/speak", {
19
+ method: "POST",
20
+ body: { text, voice: opts.voice },
21
+ });
22
+ spinner.stop();
23
+ const audioUrl = result.url || result.audio_url;
24
+ if (opts.json) {
25
+ output.json(result);
26
+ return;
27
+ }
28
+ if (opts.output && audioUrl) {
29
+ const response = await fetch(audioUrl);
30
+ const buffer = Buffer.from(await response.arrayBuffer());
31
+ fs.writeFileSync(opts.output, buffer);
32
+ output.success(`Audio saved to ${opts.output}`);
33
+ }
34
+ else if (audioUrl) {
35
+ output.success("Audio generated.");
36
+ console.log(` ${audioUrl}`);
37
+ }
38
+ else {
39
+ output.success("Audio generated.");
40
+ }
41
+ }
42
+ catch (err) {
43
+ handleError(err);
44
+ }
45
+ });
46
+ audio.command("analyze")
47
+ .description("Analyze an audio file")
48
+ .argument("<file>", "Audio file path")
49
+ .option("--transcribe", "Include transcription")
50
+ .option("--json", "Output as JSON")
51
+ .action(async (file, opts) => {
52
+ try {
53
+ if (!fs.existsSync(file)) {
54
+ console.error(chalk.red(`File not found: ${file}`));
55
+ process.exit(1);
56
+ }
57
+ const spinner = ora("Analyzing audio...").start();
58
+ const result = await request("/v1/audio/analyze", {
59
+ method: "POST",
60
+ body: {
61
+ file_path: file,
62
+ transcribe: opts.transcribe,
63
+ },
64
+ });
65
+ spinner.stop();
66
+ if (opts.json) {
67
+ output.json(result);
68
+ return;
69
+ }
70
+ output.json(result);
71
+ }
72
+ catch (err) {
73
+ handleError(err);
74
+ }
75
+ });
76
+ }
77
+ //# sourceMappingURL=audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/commands/audio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAuthCommand(program: Command): void;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6N1D"}
@@ -0,0 +1,199 @@
1
+ import { input, select, confirm } from "@inquirer/prompts";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import { api } from "../lib/api.js";
5
+ import { saveApiKey, getProfiles, getCurrentProfileName, switchProfile, deleteProfile, clearAuth, isAuthenticated, } from "../lib/config.js";
6
+ import * as output from "../lib/output.js";
7
+ import { handleError } from "../lib/errors.js";
8
+ export function registerAuthCommand(program) {
9
+ const auth = program
10
+ .command("auth")
11
+ .description("Manage authentication and API keys");
12
+ // ── bland auth login ──
13
+ auth
14
+ .command("login")
15
+ .description("Authenticate with Bland AI")
16
+ .option("-k, --key <key>", "API key (skip interactive prompt)")
17
+ .option("-p, --profile <name>", "Profile name", "default")
18
+ .option("--base-url <url>", "Custom API base URL")
19
+ .action(async (opts) => {
20
+ try {
21
+ let apiKey = opts.key;
22
+ if (!apiKey) {
23
+ console.log();
24
+ console.log(chalk.bold("Authenticate with Bland AI"));
25
+ console.log(chalk.dim("Get your API key from https://app.bland.ai/dashboard/settings"));
26
+ console.log();
27
+ apiKey = await input({
28
+ message: "Enter your API key:",
29
+ validate: (val) => val.trim().length > 0 || "API key is required",
30
+ });
31
+ }
32
+ const spinner = ora("Verifying API key...").start();
33
+ // Save temporarily to test
34
+ saveApiKey(apiKey.trim(), opts.profile, opts.baseUrl);
35
+ try {
36
+ const account = await api.get("/v1/me");
37
+ spinner.succeed("Authenticated successfully");
38
+ console.log();
39
+ output.detail([
40
+ ["Profile", opts.profile],
41
+ ["Status", account.status],
42
+ ["Balance", `$${account.billing.current_balance.toFixed(2)}`],
43
+ ["Total Calls", account.total_calls],
44
+ ]);
45
+ }
46
+ catch (err) {
47
+ spinner.fail("Invalid API key");
48
+ clearAuth();
49
+ throw err;
50
+ }
51
+ }
52
+ catch (err) {
53
+ handleError(err);
54
+ }
55
+ });
56
+ // ── bland auth logout ──
57
+ auth
58
+ .command("logout")
59
+ .description("Clear stored credentials")
60
+ .option("-p, --profile <name>", "Specific profile to remove")
61
+ .option("-a, --all", "Remove all profiles")
62
+ .action(async (opts) => {
63
+ try {
64
+ if (opts.all) {
65
+ const yes = await confirm({
66
+ message: "Remove all stored credentials?",
67
+ });
68
+ if (yes) {
69
+ clearAuth();
70
+ output.success("All credentials removed.");
71
+ }
72
+ }
73
+ else if (opts.profile) {
74
+ deleteProfile(opts.profile);
75
+ output.success(`Profile "${opts.profile}" removed.`);
76
+ }
77
+ else {
78
+ const current = getCurrentProfileName();
79
+ deleteProfile(current);
80
+ output.success(`Profile "${current}" removed.`);
81
+ }
82
+ }
83
+ catch (err) {
84
+ handleError(err);
85
+ }
86
+ });
87
+ // ── bland auth whoami ──
88
+ auth
89
+ .command("whoami")
90
+ .description("Show current account info")
91
+ .option("--json", "Output as JSON")
92
+ .action(async (opts) => {
93
+ try {
94
+ if (!isAuthenticated()) {
95
+ console.log(chalk.yellow("Not authenticated. Run `bland auth login` to get started."));
96
+ return;
97
+ }
98
+ const spinner = ora("Fetching account info...").start();
99
+ const account = await api.get("/v1/me");
100
+ spinner.stop();
101
+ if (opts.json) {
102
+ output.json({
103
+ profile: getCurrentProfileName(),
104
+ ...account,
105
+ });
106
+ return;
107
+ }
108
+ console.log();
109
+ output.detail([
110
+ ["Profile", getCurrentProfileName()],
111
+ ["Status", account.status],
112
+ ["Balance", `$${account.billing.current_balance.toFixed(2)}`],
113
+ [
114
+ "Auto-Refill",
115
+ account.billing.refill_to
116
+ ? `$${account.billing.refill_to}`
117
+ : "disabled",
118
+ ],
119
+ ["Total Calls", account.total_calls],
120
+ ]);
121
+ }
122
+ catch (err) {
123
+ handleError(err);
124
+ }
125
+ });
126
+ // ── bland auth switch ──
127
+ auth
128
+ .command("switch")
129
+ .description("Switch between stored profiles")
130
+ .argument("[profile]", "Profile name to switch to")
131
+ .action(async (profileArg) => {
132
+ try {
133
+ const profiles = getProfiles();
134
+ const profileNames = Object.keys(profiles);
135
+ if (profileNames.length === 0) {
136
+ console.log(chalk.yellow("No profiles found. Run `bland auth login` to create one."));
137
+ return;
138
+ }
139
+ let target = profileArg;
140
+ if (!target) {
141
+ const current = getCurrentProfileName();
142
+ target = await select({
143
+ message: "Select profile:",
144
+ choices: profileNames.map((name) => ({
145
+ name: name === current ? `${name} ${chalk.dim("(current)")}` : name,
146
+ value: name,
147
+ })),
148
+ });
149
+ }
150
+ switchProfile(target);
151
+ output.success(`Switched to profile "${target}"`);
152
+ // Show account info for the switched profile
153
+ const spinner = ora("Verifying...").start();
154
+ try {
155
+ const account = await api.get("/v1/me");
156
+ spinner.stop();
157
+ output.detail([
158
+ ["Status", account.status],
159
+ ["Balance", `$${account.billing.current_balance.toFixed(2)}`],
160
+ ]);
161
+ }
162
+ catch {
163
+ spinner.warn("Could not verify profile. The API key may be invalid.");
164
+ }
165
+ }
166
+ catch (err) {
167
+ handleError(err);
168
+ }
169
+ });
170
+ // ── bland auth profiles ──
171
+ auth
172
+ .command("profiles")
173
+ .description("List all stored profiles")
174
+ .action(() => {
175
+ try {
176
+ const profiles = getProfiles();
177
+ const current = getCurrentProfileName();
178
+ const names = Object.keys(profiles);
179
+ if (names.length === 0) {
180
+ console.log(chalk.dim(" No profiles. Run `bland auth login` to create one."));
181
+ return;
182
+ }
183
+ console.log();
184
+ for (const name of names) {
185
+ const isCurrent = name === current;
186
+ const prefix = isCurrent ? chalk.green("▸") : " ";
187
+ const label = isCurrent ? chalk.bold(name) : name;
188
+ const url = chalk.dim(profiles[name].base_url);
189
+ const key = chalk.dim(profiles[name].api_key.slice(0, 8) + "...");
190
+ console.log(` ${prefix} ${label} ${key} ${url}`);
191
+ }
192
+ console.log();
193
+ }
194
+ catch (err) {
195
+ handleError(err);
196
+ }
197
+ });
198
+ }
199
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerBatchCommand(program: Command): void;
3
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../src/commands/batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiF3D"}