@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,108 @@
1
+ import { confirm } from "@inquirer/prompts";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import * as fs from "fs";
5
+ import { api } from "../lib/api.js";
6
+ import * as output from "../lib/output.js";
7
+ import { handleError } from "../lib/errors.js";
8
+ export function registerBatchCommand(program) {
9
+ const batch = program
10
+ .command("batch")
11
+ .description("Manage batch call campaigns");
12
+ batch.command("create")
13
+ .description("Create a batch campaign")
14
+ .option("--file <path>", "Contacts CSV file")
15
+ .option("--pathway <id>", "Pathway ID")
16
+ .option("--from <number>", "From number")
17
+ .option("--task <prompt>", "Agent prompt")
18
+ .option("--voice <voice>", "Voice")
19
+ .option("--max-concurrent <n>", "Max concurrent calls")
20
+ .option("--json", "Output as JSON")
21
+ .action(async (opts) => {
22
+ try {
23
+ const body = {};
24
+ if (opts.file) {
25
+ const content = fs.readFileSync(opts.file, "utf-8");
26
+ const lines = content.split("\n").filter(Boolean);
27
+ // Simple CSV: each line is a phone number (or first column)
28
+ const phoneNumbers = lines.slice(1).map((line) => {
29
+ const parts = line.split(",");
30
+ return parts[0].trim().replace(/"/g, "");
31
+ });
32
+ body.phone_numbers = phoneNumbers;
33
+ }
34
+ if (opts.pathway)
35
+ body.pathway_id = opts.pathway;
36
+ if (opts.from)
37
+ body.from = opts.from;
38
+ if (opts.task)
39
+ body.task = opts.task;
40
+ if (opts.voice)
41
+ body.voice = opts.voice;
42
+ if (opts.maxConcurrent)
43
+ body.max_concurrent = parseInt(opts.maxConcurrent, 10);
44
+ const spinner = ora("Creating batch...").start();
45
+ const result = await api.post("/v1/batches", body);
46
+ spinner.succeed(`Batch created ${chalk.dim(`(${result.batch_id})`)} — ${result.total || 0} calls queued`);
47
+ if (opts.json)
48
+ output.json(result);
49
+ }
50
+ catch (err) {
51
+ handleError(err);
52
+ }
53
+ });
54
+ batch.command("list")
55
+ .description("List batch campaigns")
56
+ .option("--json", "Output as JSON")
57
+ .action(async (opts) => {
58
+ try {
59
+ const spinner = ora("Fetching batches...").start();
60
+ const batches = await api.get("/v2/batches");
61
+ spinner.stop();
62
+ if (opts.json) {
63
+ output.json(batches);
64
+ return;
65
+ }
66
+ output.json(batches);
67
+ }
68
+ catch (err) {
69
+ handleError(err);
70
+ }
71
+ });
72
+ batch.command("get")
73
+ .description("Get batch details")
74
+ .argument("<id>", "Batch ID")
75
+ .option("--json", "Output as JSON")
76
+ .action(async (id, opts) => {
77
+ try {
78
+ const spinner = ora("Fetching batch...").start();
79
+ const result = await api.get(`/v2/batches/${id}`);
80
+ spinner.stop();
81
+ if (opts.json) {
82
+ output.json(result);
83
+ return;
84
+ }
85
+ output.json(result);
86
+ }
87
+ catch (err) {
88
+ handleError(err);
89
+ }
90
+ });
91
+ batch.command("stop")
92
+ .description("Stop a running batch")
93
+ .argument("<id>", "Batch ID")
94
+ .action(async (id) => {
95
+ try {
96
+ const proceed = await confirm({ message: `Stop batch ${id}?` });
97
+ if (!proceed)
98
+ return;
99
+ const spinner = ora("Stopping batch...").start();
100
+ await api.post(`/v2/batches/${id}/stop`, {});
101
+ spinner.succeed("Batch stopped.");
102
+ }
103
+ catch (err) {
104
+ handleError(err);
105
+ }
106
+ });
107
+ }
108
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/commands/batch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerCallCommand(program: Command): void;
3
+ //# sourceMappingURL=call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyV1D"}
@@ -0,0 +1,348 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { api } from "../lib/api.js";
4
+ import * as output from "../lib/output.js";
5
+ import { handleError } from "../lib/errors.js";
6
+ export function registerCallCommand(program) {
7
+ const call = program
8
+ .command("call")
9
+ .description("Make and manage phone calls");
10
+ // ── bland call send ──
11
+ call
12
+ .command("send")
13
+ .description("Make an outbound call")
14
+ .argument("<number>", "Phone number to call")
15
+ .option("--from <number>", "From phone number")
16
+ .option("--task <prompt>", "Task/prompt for the agent")
17
+ .option("--pathway <id>", "Pathway ID to use")
18
+ .option("--persona <id>", "Persona ID to use")
19
+ .option("--voice <voice>", "Voice to use")
20
+ .option("--first-sentence <text>", "Opening sentence")
21
+ .option("--model <model>", "Model: base or turbo", "base")
22
+ .option("--max-duration <mins>", "Max duration in minutes", "30")
23
+ .option("--webhook <url>", "Webhook URL for call completion")
24
+ .option("--wait", "Wait for call to complete and stream transcript")
25
+ .option("--request-data <json>", "Variables to inject (JSON)")
26
+ .option("--record", "Enable call recording")
27
+ .option("--transfer <number>", "Transfer number")
28
+ .option("--json", "Output as JSON")
29
+ .action(async (number, opts) => {
30
+ try {
31
+ const body = {
32
+ phone_number: number,
33
+ };
34
+ if (opts.from)
35
+ body.from = opts.from;
36
+ if (opts.task)
37
+ body.task = opts.task;
38
+ if (opts.pathway)
39
+ body.pathway_id = opts.pathway;
40
+ if (opts.persona)
41
+ body.persona_id = opts.persona;
42
+ if (opts.voice)
43
+ body.voice = opts.voice;
44
+ if (opts.firstSentence)
45
+ body.first_sentence = opts.firstSentence;
46
+ if (opts.model)
47
+ body.model = opts.model;
48
+ if (opts.maxDuration)
49
+ body.max_duration = parseInt(opts.maxDuration, 10);
50
+ if (opts.webhook)
51
+ body.webhook = opts.webhook;
52
+ if (opts.record)
53
+ body.record = true;
54
+ if (opts.transfer)
55
+ body.transfer_phone_number = opts.transfer;
56
+ if (opts.requestData) {
57
+ try {
58
+ body.request_data = JSON.parse(opts.requestData);
59
+ }
60
+ catch {
61
+ console.error(chalk.red("Error: --request-data must be valid JSON"));
62
+ process.exit(1);
63
+ }
64
+ }
65
+ const spinner = ora(`Calling ${output.formatPhone(number)}...`).start();
66
+ const result = await api.post("/v1/calls", body);
67
+ spinner.succeed(`Call initiated ${chalk.dim(`(${result.call_id})`)}`);
68
+ if (opts.json) {
69
+ output.json(result);
70
+ return;
71
+ }
72
+ if (opts.wait) {
73
+ await waitForCall(result.call_id);
74
+ }
75
+ }
76
+ catch (err) {
77
+ handleError(err);
78
+ }
79
+ });
80
+ // ── bland call list ──
81
+ call
82
+ .command("list")
83
+ .description("List recent calls")
84
+ .option("--from <date>", "Start date (YYYY-MM-DD)")
85
+ .option("--to <date>", "End date (YYYY-MM-DD)")
86
+ .option("--limit <n>", "Max results", "20")
87
+ .option("--status <status>", "Filter: completed, active, failed")
88
+ .option("--inbound", "Only inbound calls")
89
+ .option("--batch <id>", "Filter by batch ID")
90
+ .option("--ascending", "Sort ascending")
91
+ .option("--json", "Output as JSON")
92
+ .action(async (opts) => {
93
+ try {
94
+ const spinner = ora("Fetching calls...").start();
95
+ const query = {
96
+ limit: parseInt(opts.limit, 10),
97
+ };
98
+ if (opts.from)
99
+ query.start_date = opts.from;
100
+ if (opts.to)
101
+ query.end_date = opts.to;
102
+ if (opts.status === "completed")
103
+ query.completed = true;
104
+ if (opts.status === "active")
105
+ query.completed = false;
106
+ if (opts.inbound)
107
+ query.inbound = true;
108
+ if (opts.batch)
109
+ query.batch_id = opts.batch;
110
+ if (opts.ascending)
111
+ query.ascending = true;
112
+ const result = await api.get("/v1/calls", query);
113
+ spinner.stop();
114
+ if (opts.json) {
115
+ output.json(result);
116
+ return;
117
+ }
118
+ console.log(chalk.dim(` Showing ${result.calls?.length || 0} of ${result.total_count || 0} calls`));
119
+ console.log();
120
+ output.table((result.calls || []).map((c) => ({
121
+ ...c,
122
+ direction: c.inbound ? "inbound" : "outbound",
123
+ duration: c.call_length
124
+ ? output.formatDuration(c.call_length * 60)
125
+ : "—",
126
+ date: output.formatDate(c.created_at),
127
+ status: c.completed
128
+ ? chalk.green("completed")
129
+ : c.error_message
130
+ ? chalk.red("error")
131
+ : chalk.yellow("active"),
132
+ })), [
133
+ { key: "call_id", header: "ID", width: 38 },
134
+ { key: "direction", header: "Dir", width: 9 },
135
+ { key: "to", header: "To", width: 16, format: (v) => output.formatPhone(v) },
136
+ { key: "from", header: "From", width: 16, format: (v) => output.formatPhone(v) },
137
+ { key: "duration", header: "Duration", width: 10 },
138
+ { key: "status", header: "Status", width: 12 },
139
+ { key: "date", header: "Date", width: 20 },
140
+ ]);
141
+ }
142
+ catch (err) {
143
+ handleError(err);
144
+ }
145
+ });
146
+ // ── bland call get ──
147
+ call
148
+ .command("get")
149
+ .description("Get call details and transcript")
150
+ .argument("<call_id>", "Call ID")
151
+ .option("--json", "Output as JSON")
152
+ .action(async (callId, opts) => {
153
+ try {
154
+ const spinner = ora("Fetching call details...").start();
155
+ const detail_ = await api.get(`/v1/calls/${callId}`);
156
+ spinner.stop();
157
+ if (opts.json) {
158
+ output.json(detail_);
159
+ return;
160
+ }
161
+ console.log();
162
+ output.detail([
163
+ ["Call ID", detail_.call_id],
164
+ ["Status", detail_.completed ? "completed" : "active"],
165
+ ["From", output.formatPhone(detail_.from)],
166
+ ["To", output.formatPhone(detail_.to)],
167
+ [
168
+ "Duration",
169
+ detail_.call_length
170
+ ? output.formatDuration(detail_.call_length * 60)
171
+ : "—",
172
+ ],
173
+ ["Created", output.formatDate(detail_.created_at)],
174
+ ["Answered By", detail_.answered_by || "—"],
175
+ ["Recording", detail_.recording_url || "—"],
176
+ ]);
177
+ if (detail_.variables && Object.keys(detail_.variables).length > 0) {
178
+ output.header("Variables");
179
+ output.detail(Object.entries(detail_.variables).map(([k, v]) => [
180
+ k,
181
+ v,
182
+ ]));
183
+ }
184
+ if (detail_.concatenated_transcript) {
185
+ output.header("Transcript");
186
+ console.log();
187
+ console.log(detail_.concatenated_transcript);
188
+ }
189
+ else if (detail_.transcripts && detail_.transcripts.length > 0) {
190
+ output.header("Transcript");
191
+ console.log();
192
+ for (const t of detail_.transcripts) {
193
+ const speaker = t.user === "assistant"
194
+ ? chalk.cyan("Agent")
195
+ : chalk.green("Human");
196
+ console.log(` ${speaker}: ${t.text}`);
197
+ }
198
+ }
199
+ if (detail_.summary) {
200
+ output.header("Summary");
201
+ console.log(` ${detail_.summary}`);
202
+ }
203
+ }
204
+ catch (err) {
205
+ handleError(err);
206
+ }
207
+ });
208
+ // ── bland call stop ──
209
+ call
210
+ .command("stop")
211
+ .description("Stop an active call")
212
+ .argument("<call_id>", "Call ID")
213
+ .action(async (callId) => {
214
+ try {
215
+ const spinner = ora("Stopping call...").start();
216
+ await api.post(`/v1/calls/${callId}/stop`);
217
+ spinner.succeed(`Call ${callId} stopped.`);
218
+ }
219
+ catch (err) {
220
+ handleError(err);
221
+ }
222
+ });
223
+ // ── bland call events ──
224
+ call
225
+ .command("events")
226
+ .description("View call events")
227
+ .argument("<call_id>", "Call ID")
228
+ .option("--json", "Output as JSON")
229
+ .action(async (callId, opts) => {
230
+ try {
231
+ const spinner = ora("Fetching events...").start();
232
+ const events = await api.get(`/v1/calls/${callId}/events`);
233
+ spinner.stop();
234
+ if (opts.json) {
235
+ output.json(events);
236
+ return;
237
+ }
238
+ if (!events || events.length === 0) {
239
+ console.log(chalk.dim(" No events found."));
240
+ return;
241
+ }
242
+ for (const event of events) {
243
+ const color = event.category === "error"
244
+ ? chalk.red
245
+ : event.category === "performance"
246
+ ? chalk.yellow
247
+ : chalk.dim;
248
+ const ts = event.timestamp
249
+ ? chalk.dim(new Date(event.timestamp).toLocaleTimeString())
250
+ : "";
251
+ console.log(` ${ts} ${color(`[${event.category}]`)} ${event.message}`);
252
+ }
253
+ }
254
+ catch (err) {
255
+ handleError(err);
256
+ }
257
+ });
258
+ // ── bland call recording ──
259
+ call
260
+ .command("recording")
261
+ .description("Get call recording URL")
262
+ .argument("<call_id>", "Call ID")
263
+ .option("--json", "Output as JSON")
264
+ .action(async (callId, opts) => {
265
+ try {
266
+ const spinner = ora("Fetching recording...").start();
267
+ const detail_ = await api.get(`/v1/calls/${callId}`);
268
+ spinner.stop();
269
+ if (opts.json) {
270
+ output.json({ recording_url: detail_.recording_url });
271
+ return;
272
+ }
273
+ if (detail_.recording_url) {
274
+ console.log();
275
+ console.log(` ${chalk.bold("Recording URL:")}`);
276
+ console.log(` ${detail_.recording_url}`);
277
+ }
278
+ else {
279
+ console.log(chalk.dim(" No recording available for this call."));
280
+ }
281
+ }
282
+ catch (err) {
283
+ handleError(err);
284
+ }
285
+ });
286
+ // ── bland call analyze ──
287
+ call
288
+ .command("analyze")
289
+ .description("Run analysis on a completed call")
290
+ .argument("<call_id>", "Call ID")
291
+ .option("--schema <id>", "Citation schema ID")
292
+ .option("--json", "Output as JSON")
293
+ .action(async (callId, opts) => {
294
+ try {
295
+ const spinner = ora("Analyzing call...").start();
296
+ const body = { call_id: callId };
297
+ if (opts.schema)
298
+ body.schema_id = opts.schema;
299
+ const result = await api.post("/v1/calls/analyze", body);
300
+ spinner.stop();
301
+ if (opts.json) {
302
+ output.json(result);
303
+ return;
304
+ }
305
+ output.header("Analysis Results");
306
+ output.detail(Object.entries(result).map(([k, v]) => [k, v]));
307
+ }
308
+ catch (err) {
309
+ handleError(err);
310
+ }
311
+ });
312
+ }
313
+ /** Poll for call completion and stream transcript */
314
+ async function waitForCall(callId) {
315
+ console.log();
316
+ console.log(chalk.dim(" Waiting for call to complete... (Ctrl+C to stop)"));
317
+ console.log();
318
+ let lastTranscriptLen = 0;
319
+ const poll = async () => {
320
+ while (true) {
321
+ await new Promise((resolve) => setTimeout(resolve, 2000));
322
+ try {
323
+ const detail = await api.get(`/v1/calls/${callId}`);
324
+ // Print new transcript lines
325
+ if (detail.transcripts && detail.transcripts.length > lastTranscriptLen) {
326
+ const newEntries = detail.transcripts.slice(lastTranscriptLen);
327
+ for (const t of newEntries) {
328
+ const speaker = t.user === "assistant"
329
+ ? chalk.cyan("Agent")
330
+ : chalk.green("Human");
331
+ console.log(` ${speaker}: ${t.text}`);
332
+ }
333
+ lastTranscriptLen = detail.transcripts.length;
334
+ }
335
+ if (detail.completed) {
336
+ console.log();
337
+ output.success(`Call completed ${detail.call_length ? `(${output.formatDuration(detail.call_length * 60)})` : ""}`);
338
+ return;
339
+ }
340
+ }
341
+ catch {
342
+ // Ignore polling errors, retry
343
+ }
344
+ }
345
+ };
346
+ await poll();
347
+ }
348
+ //# sourceMappingURL=call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerEvalCommand(program: Command): void;
3
+ //# sourceMappingURL=eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/commands/eval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8C1D"}
@@ -0,0 +1,66 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { api } from "../lib/api.js";
4
+ import * as output from "../lib/output.js";
5
+ import { handleError } from "../lib/errors.js";
6
+ export function registerEvalCommand(program) {
7
+ const ev = program.command("eval").description("Run and manage evaluations");
8
+ ev.command("run")
9
+ .description("Run an evaluation on a pathway")
10
+ .argument("<pathway_id>", "Pathway ID")
11
+ .option("--count <n>", "Number of eval runs", "1")
12
+ .option("--json", "Output as JSON")
13
+ .action(async (pathwayId, opts) => {
14
+ try {
15
+ const spinner = ora("Starting evaluation...").start();
16
+ const result = await api.post("/v1/evals", {
17
+ pathway_id: pathwayId,
18
+ count: parseInt(opts.count, 10),
19
+ });
20
+ spinner.succeed(`Evaluation started ${chalk.dim(`(${result.id})`)}`);
21
+ if (opts.json)
22
+ output.json(result);
23
+ }
24
+ catch (err) {
25
+ handleError(err);
26
+ }
27
+ });
28
+ ev.command("list")
29
+ .description("List evaluations")
30
+ .option("--json", "Output as JSON")
31
+ .action(async (opts) => {
32
+ try {
33
+ const spinner = ora("Fetching...").start();
34
+ const evals = await api.get("/v1/evals");
35
+ spinner.stop();
36
+ if (opts.json) {
37
+ output.json(evals);
38
+ return;
39
+ }
40
+ output.json(evals);
41
+ }
42
+ catch (err) {
43
+ handleError(err);
44
+ }
45
+ });
46
+ ev.command("get")
47
+ .description("Get evaluation results")
48
+ .argument("<id>", "Evaluation ID")
49
+ .option("--json", "Output as JSON")
50
+ .action(async (id, opts) => {
51
+ try {
52
+ const spinner = ora("Fetching...").start();
53
+ const result = await api.get(`/v1/evals/${id}`);
54
+ spinner.stop();
55
+ if (opts.json) {
56
+ output.json(result);
57
+ return;
58
+ }
59
+ output.json(result);
60
+ }
61
+ catch (err) {
62
+ handleError(err);
63
+ }
64
+ });
65
+ }
66
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/commands/eval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerGuardCommand(program: Command): void;
3
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/commands/guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwF3D"}