callkaro-cli-unofficial 0.8.0 → 0.9.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.
@@ -18,6 +18,13 @@ exports.adminAgentActionCommand = adminAgentActionCommand;
18
18
  exports.adminNumbersCommand = adminNumbersCommand;
19
19
  exports.adminVoiceCacheCommand = adminVoiceCacheCommand;
20
20
  exports.adminApiCommand = adminApiCommand;
21
+ exports.adminBotFailuresCommand = adminBotFailuresCommand;
22
+ exports.adminClientAgentsCommand = adminClientAgentsCommand;
23
+ exports.adminClientAgentVersionsCommand = adminClientAgentVersionsCommand;
24
+ exports.adminContextListCommand = adminContextListCommand;
25
+ exports.adminContextSearchCommand = adminContextSearchCommand;
26
+ exports.adminContextSetCommand = adminContextSetCommand;
27
+ exports.adminContextRemoveCommand = adminContextRemoveCommand;
21
28
  const adminApi_1 = require("../lib/adminApi");
22
29
  const adminAuth_1 = require("../lib/adminAuth");
23
30
  const config_1 = require("../lib/config");
@@ -25,6 +32,7 @@ Object.defineProperty(exports, "getClient", { enumerable: true, get: function ()
25
32
  Object.defineProperty(exports, "activeAccount", { enumerable: true, get: function () { return config_1.activeAccount; } });
26
33
  const ui_1 = require("../lib/ui");
27
34
  const jsonInput_1 = require("./jsonInput");
35
+ const setJson_1 = require("./setJson");
28
36
  const looseJson_1 = require("../lib/looseJson");
29
37
  /** The route segments the path may contain — see `repairPosixPath`. */
30
38
  const PATH_SEGMENTS = ['monitor'];
@@ -518,3 +526,139 @@ async function adminApiCommand(method, path, opts) {
518
526
  (0, ui_1.handleError)(err);
519
527
  }
520
528
  }
529
+ // --- bot failures, client agents ---------------------------------------------
530
+ async function adminBotFailuresCommand(agentId, opts) {
531
+ try {
532
+ const win = defaultWindow();
533
+ const startDate = dateArg(opts.start, '--start', win.startDate);
534
+ const endDate = dateArg(opts.end, '--end', win.endDate);
535
+ const base = { versionId: opts.version, startDate, endDate };
536
+ const limit = Number(opts.limit) || 20;
537
+ const res = opts.api
538
+ ? opts.response
539
+ ? await (0, adminApi_1.adminApi)().botFailedApiResponseCalls(agentId, { response: opts.response, endpoint: opts.endpoint, ...base, limit })
540
+ : await (0, adminApi_1.adminApi)().botFailedApiResponses(agentId, base)
541
+ : opts.response
542
+ ? await (0, adminApi_1.adminApi)().botFailedResponseCalls(agentId, { response: opts.response, ...base, limit })
543
+ : await (0, adminApi_1.adminApi)().botFailedResponses(agentId, base);
544
+ if (opts.json)
545
+ return void console.log(JSON.stringify(res, null, 2));
546
+ if (opts.response) {
547
+ const ids = res?.callIds || res?.calls || res?.data || [];
548
+ if (!ids.length)
549
+ return void (0, ui_1.info)('No matching calls.');
550
+ return (0, ui_1.table)(['CALL ID'], ids.map((c) => [typeof c === 'string' ? c : c.callId || c.call_id || c._id || '']));
551
+ }
552
+ const rows = res?.responses || res?.failures || res?.data || [];
553
+ if (!rows.length)
554
+ return void (0, ui_1.info)('No failed responses in this window.');
555
+ (0, ui_1.table)(['RESPONSE / ENDPOINT', 'CALLS', 'SAMPLE CALL IDS'], rows.map((r) => [
556
+ r.response || r.endpoint || r.name || '',
557
+ r.count ?? r.calls ?? '',
558
+ (r.sampleCallIds || r.callIds || []).slice(0, 3).join(', '),
559
+ ]));
560
+ }
561
+ catch (err) {
562
+ (0, ui_1.handleError)(err);
563
+ }
564
+ }
565
+ async function adminClientAgentsCommand(clientId, opts) {
566
+ try {
567
+ const res = await (0, adminApi_1.adminApi)().clientAgents(clientId);
568
+ const rows = res.agents || [];
569
+ if (opts.json)
570
+ return void console.log(JSON.stringify(rows, null, 2));
571
+ if (!rows.length)
572
+ return void (0, ui_1.info)('No agents for this client.');
573
+ (0, ui_1.table)(['ID', 'NAME', 'STATUS', 'CREATED'], rows.map((a) => [a._id || a.id || '', a.name || '', a.status || '', a.createdAt || '']));
574
+ }
575
+ catch (err) {
576
+ (0, ui_1.handleError)(err);
577
+ }
578
+ }
579
+ async function adminClientAgentVersionsCommand(agentId, opts) {
580
+ try {
581
+ const res = await (0, adminApi_1.adminApi)().clientAgentVersions(agentId);
582
+ const rows = res.versions || [];
583
+ if (opts.json)
584
+ return void console.log(JSON.stringify(rows, null, 2));
585
+ if (!rows.length)
586
+ return void (0, ui_1.info)('No versions for this agent.');
587
+ (0, ui_1.table)(['VERSION ID', 'NAME', 'ACTIVE', 'CREATED'], rows.map((v) => [v._id || v.id || '', v.versionName || v.name || v.version_name || '', v.active ?? v.isActive ?? '', v.createdAt || '']));
588
+ }
589
+ catch (err) {
590
+ (0, ui_1.handleError)(err);
591
+ }
592
+ }
593
+ // --- FDE reference library -----------------------------------------------------
594
+ const tagText = (t) => (Array.isArray(t) ? t.join(', ') : String(t ?? ''));
595
+ async function adminContextListCommand(opts) {
596
+ try {
597
+ const res = await (0, adminApi_1.adminApi)().listAgentContext();
598
+ let rows = Array.isArray(res) ? res : res?.versions || res?.data || res?.results || res?.contexts || [];
599
+ if (opts.search) {
600
+ const q = opts.search.toLowerCase();
601
+ rows = rows.filter((r) => [r.versionId, r.useCase, r.description, tagText(r.tags)].some((f) => String(f ?? '').toLowerCase().includes(q)));
602
+ }
603
+ if (opts.json)
604
+ return void console.log(JSON.stringify(rows, null, 2));
605
+ if (!rows.length)
606
+ return void (0, ui_1.info)('No reference contexts.');
607
+ (0, ui_1.table)(['VERSION ID', 'USE CASE', 'TAGS', 'DESCRIPTION'], rows.map((r) => [r.versionId || '', r.useCase || '', tagText(r.tags), String(r.description || '').slice(0, 80)]));
608
+ }
609
+ catch (err) {
610
+ (0, ui_1.handleError)(err);
611
+ }
612
+ }
613
+ async function adminContextSearchCommand(query, opts) {
614
+ try {
615
+ const res = await (0, adminApi_1.adminApi)().searchAgentContext({
616
+ query,
617
+ topK: opts.topK ? Number(opts.topK) : 3,
618
+ minScore: opts.minScore ? Number(opts.minScore) : 0.5,
619
+ });
620
+ const rows = res?.results || (Array.isArray(res) ? res : []);
621
+ if (opts.json)
622
+ return void console.log(JSON.stringify(res?.results || res, null, 2));
623
+ if (!rows.length)
624
+ return void (0, ui_1.info)('No matches above the score threshold.');
625
+ (0, ui_1.table)(['SCORE', 'VERSION ID', 'USE CASE', 'TAGS', 'DESCRIPTION'], rows.map((r) => [r.score ?? '', r.versionId || '', r.useCase || '', tagText(r.tags), String(r.description || '').slice(0, 80)]));
626
+ }
627
+ catch (err) {
628
+ (0, ui_1.handleError)(err);
629
+ }
630
+ }
631
+ async function adminContextSetCommand(versionId, opts) {
632
+ try {
633
+ const patch = opts.set ? (0, setJson_1.readSetJson)(opts.set) : {};
634
+ const body = {
635
+ versionId,
636
+ description: opts.description ?? patch.description ?? '',
637
+ useCase: opts.useCase ?? patch.useCase ?? '',
638
+ tags: opts.tags ? opts.tags.split(',').map((s) => s.trim()).filter(Boolean) : patch.tags || [],
639
+ ...(patch.metadata ? { metadata: patch.metadata } : {}),
640
+ };
641
+ if (!body.description.trim())
642
+ throw new Error('--description (or description in --set) is required.');
643
+ const res = opts.update ? await (0, adminApi_1.adminApi)().updateAgentContext(versionId, body) : await (0, adminApi_1.adminApi)().createAgentContext(body);
644
+ if (opts.json)
645
+ return void console.log(JSON.stringify(res, null, 2));
646
+ (0, ui_1.success)(`${opts.update ? 'Updated' : 'Added'} reference context ${versionId}.`);
647
+ }
648
+ catch (err) {
649
+ (0, ui_1.handleError)(err);
650
+ }
651
+ }
652
+ async function adminContextRemoveCommand(versionId, opts) {
653
+ try {
654
+ if (!(await (0, ui_1.confirm)(`Remove reference context ${versionId} from FDE index?`, opts.yes)))
655
+ return;
656
+ const res = await (0, adminApi_1.adminApi)().deleteAgentContext(versionId);
657
+ if (opts.json)
658
+ return void console.log(JSON.stringify(res, null, 2));
659
+ (0, ui_1.success)(`Removed reference context ${versionId}.`);
660
+ }
661
+ catch (err) {
662
+ (0, ui_1.handleError)(err);
663
+ }
664
+ }
@@ -12,6 +12,8 @@ exports.agentsRevertCommand = agentsRevertCommand;
12
12
  exports.agentsSaveV2Command = agentsSaveV2Command;
13
13
  exports.agentsDeleteVersionCommand = agentsDeleteVersionCommand;
14
14
  exports.agentsDuplicateCommand = agentsDuplicateCommand;
15
+ exports.agentsSetLanguagesCommand = agentsSetLanguagesCommand;
16
+ exports.agentsPostcallInfoCommand = agentsPostcallInfoCommand;
15
17
  const session_1 = require("../lib/session");
16
18
  const dashboardApi_1 = require("../lib/dashboardApi");
17
19
  const ui_1 = require("../lib/ui");
@@ -379,3 +381,40 @@ async function agentsDuplicateCommand(agentId, opts) {
379
381
  (0, ui_1.handleError)(err);
380
382
  }
381
383
  }
384
+ const csv = (s) => (s || '').split(',').map((x) => x.trim()).filter(Boolean);
385
+ /** `cku agents set-languages <agentId> --languages en,hi --versions v1,v2` */
386
+ async function agentsSetLanguagesCommand(agentId, opts) {
387
+ try {
388
+ const langs = csv(opts.languages);
389
+ const vers = csv(opts.versions);
390
+ if (!langs.length)
391
+ throw new Error('--languages <csv> is required.');
392
+ if (!vers.length)
393
+ throw new Error('--versions <csv> is required.');
394
+ const res = await (0, dashboardApi_1.dashboardApi)().updateAllSwitchableLanguage(agentId, langs, vers);
395
+ if (opts.json)
396
+ return void console.log(JSON.stringify(res, null, 2));
397
+ (0, ui_1.success)(`Set switchable languages [${langs.join(', ')}] on ${vers.length} version(s).`);
398
+ }
399
+ catch (err) {
400
+ (0, ui_1.handleError)(err);
401
+ }
402
+ }
403
+ /** `cku agents postcall-info <agentId>` */
404
+ async function agentsPostcallInfoCommand(agentId, opts) {
405
+ try {
406
+ const res = await (0, dashboardApi_1.dashboardApi)().agentPostcallInfo(agentId);
407
+ if (opts.json)
408
+ return void console.log(JSON.stringify(res, null, 2));
409
+ const vars = res?.postcallVars || [];
410
+ const reasons = res?.dropOffReasons || [];
411
+ (0, ui_1.keyValue)({ agent: agentId, 'post-call variables': vars.length, 'drop-off reasons': reasons.length });
412
+ if (vars.length)
413
+ (0, ui_1.table)(['VARIABLE', 'TYPE'], vars.map((v) => [typeof v === 'string' ? v : v.name || '', typeof v === 'string' ? '' : v.type || '']));
414
+ if (reasons.length)
415
+ (0, ui_1.table)(['DROP-OFF REASON'], reasons.map((r) => [typeof r === 'string' ? r : r.name || r.reason || '']));
416
+ }
417
+ catch (err) {
418
+ (0, ui_1.handleError)(err);
419
+ }
420
+ }
@@ -7,8 +7,12 @@ exports.analyzersAuditStrategiesCommand = analyzersAuditStrategiesCommand;
7
7
  exports.analyzersSummaryCommand = analyzersSummaryCommand;
8
8
  exports.analyzersCallsCommand = analyzersCallsCommand;
9
9
  exports.analyzersCallDetailCommand = analyzersCallDetailCommand;
10
+ exports.analyzersBatchListCommand = analyzersBatchListCommand;
11
+ exports.analyzersBatchCreateCommand = analyzersBatchCreateCommand;
12
+ exports.analyzersBatchCallsCommand = analyzersBatchCallsCommand;
10
13
  const dashboardApi_1 = require("../lib/dashboardApi");
11
14
  const ui_1 = require("../lib/ui");
15
+ const setJson_1 = require("./setJson");
12
16
  const when = (value) => {
13
17
  if (!value)
14
18
  return '';
@@ -227,3 +231,49 @@ async function analyzersCallDetailCommand(id, callId, opts) {
227
231
  (0, ui_1.handleError)(err);
228
232
  }
229
233
  }
234
+ // --- batch analysis runs -----------------------------------------------------
235
+ async function analyzersBatchListCommand(opts) {
236
+ try {
237
+ const res = await (0, dashboardApi_1.dashboardApi)().listBatchAnalyses();
238
+ const rows = res?.data || [];
239
+ if (opts.json)
240
+ return void console.log(JSON.stringify(rows, null, 2));
241
+ if (!rows.length)
242
+ return void (0, ui_1.info)('No batch analyses.');
243
+ (0, ui_1.table)(['ID', 'BATCH NAME', 'ANALYZER', 'STATUS', 'CALLS', 'CREATED'], rows.map((r) => [
244
+ r._id || r.id || '', clip(r.batchName || r.name), clip(r.analyzerName || r.analyzerId),
245
+ r.status || '', r.totalCalls ?? r.callCount ?? '', when(r.createdAt),
246
+ ]));
247
+ }
248
+ catch (err) {
249
+ (0, ui_1.handleError)(err);
250
+ }
251
+ }
252
+ async function analyzersBatchCreateCommand(opts) {
253
+ try {
254
+ const res = await (0, dashboardApi_1.dashboardApi)().createBatchAnalysis((0, setJson_1.readSetJson)(opts.set));
255
+ if (opts.json)
256
+ return void console.log(JSON.stringify(res, null, 2));
257
+ (0, ui_1.success)(`Batch analysis created${res?.data?._id ? `: ${res.data._id}` : ''}.`);
258
+ }
259
+ catch (err) {
260
+ (0, ui_1.handleError)(err);
261
+ }
262
+ }
263
+ async function analyzersBatchCallsCommand(batchId, opts) {
264
+ try {
265
+ const res = await (0, dashboardApi_1.dashboardApi)().batchAnalysisCalls(batchId, {
266
+ page: opts.page ? Number(opts.page) : 1,
267
+ is_export: opts.export,
268
+ });
269
+ if (opts.json)
270
+ return void console.log(JSON.stringify(res, null, 2));
271
+ const rows = res?.data?.calls || res?.calls || (Array.isArray(res?.data) ? res.data : []);
272
+ if (!rows.length)
273
+ return void (0, ui_1.info)('No calls in this batch.');
274
+ (0, ui_1.table)(['CALL ID', 'STATUS', 'SCORE'], rows.map((c) => [c.callId || c.call_id || c._id || '', c.status || '', score(c.score ?? c.overallScore)]));
275
+ }
276
+ catch (err) {
277
+ (0, ui_1.handleError)(err);
278
+ }
279
+ }
@@ -43,6 +43,8 @@ exports.chatAgentsCreateCommand = chatAgentsCreateCommand;
43
43
  exports.chatAgentsUpdateCommand = chatAgentsUpdateCommand;
44
44
  exports.chatAgentsCreateVersionCommand = chatAgentsCreateVersionCommand;
45
45
  exports.chatAgentsPublishCommand = chatAgentsPublishCommand;
46
+ exports.chatAgentsDiffCommand = chatAgentsDiffCommand;
47
+ const dashboardApi_1 = require("../lib/dashboardApi");
46
48
  const session_1 = require("../lib/session");
47
49
  const dashboardAuth_1 = require("../lib/dashboardAuth");
48
50
  const ui_1 = require("../lib/ui");
@@ -249,3 +251,23 @@ async function chatAgentsPublishCommand(agentId, opts) {
249
251
  (0, ui_1.handleError)(err);
250
252
  }
251
253
  }
254
+ /** `cku chat-agents diff <chatAgentId> --versions vA,vB | --commits cA,cB` */
255
+ async function chatAgentsDiffCommand(chatAgentId, opts) {
256
+ try {
257
+ const pair = (s, flag) => {
258
+ const p = (s || '').split(',').map((x) => x.trim()).filter(Boolean);
259
+ if (p.length !== 2)
260
+ throw new Error(`${flag} needs exactly two ids, comma-separated.`);
261
+ return [p[0], p[1]];
262
+ };
263
+ if (!!opts.versions === !!opts.commits)
264
+ throw new Error('Pass exactly one of --versions <vA,vB> or --commits <cA,cB>.');
265
+ const res = opts.versions
266
+ ? await (0, dashboardApi_1.dashboardApi)().compareChatAgentVersions(pair(opts.versions, '--versions'))
267
+ : await (0, dashboardApi_1.dashboardApi)().compareChatAgentCommits(chatAgentId, ...pair(opts.commits, '--commits'));
268
+ console.log(JSON.stringify(res, null, 2));
269
+ }
270
+ catch (err) {
271
+ (0, ui_1.handleError)(err);
272
+ }
273
+ }
@@ -7,6 +7,8 @@ exports.chatAuditCreateCommand = chatAuditCreateCommand;
7
7
  exports.chatAuditUpdateCommand = chatAuditUpdateCommand;
8
8
  exports.chatAuditDeleteCommand = chatAuditDeleteCommand;
9
9
  exports.chatAuditBatchCommand = chatAuditBatchCommand;
10
+ exports.chatAuditReportsCommand = chatAuditReportsCommand;
11
+ const dashboardApi_1 = require("../lib/dashboardApi");
10
12
  const session_1 = require("../lib/session");
11
13
  const ui_1 = require("../lib/ui");
12
14
  const setJson_1 = require("./setJson");
@@ -137,3 +139,21 @@ async function chatAuditBatchCommand(agentId, strategyId, opts) {
137
139
  (0, ui_1.handleError)(err);
138
140
  }
139
141
  }
142
+ /** `cku chat-audit reports [--agent <id>] [--page <n>]` — dashboard session. */
143
+ async function chatAuditReportsCommand(opts) {
144
+ try {
145
+ const res = await (0, dashboardApi_1.dashboardApi)().chatAuditReportBatches({
146
+ agentId: opts.agent,
147
+ page: opts.page ? Number(opts.page) : undefined,
148
+ });
149
+ if (opts.json)
150
+ return void console.log(JSON.stringify(res, null, 2));
151
+ const rows = res?.data?.batches || res?.batches || (Array.isArray(res?.data) ? res.data : []);
152
+ if (!rows.length)
153
+ return void (0, ui_1.info)('No chat audit report batches.');
154
+ (0, ui_1.table)(['ID', 'STATUS', 'CREATED'], rows.map((r) => [r._id || r.id || '', r.status || '', r.createdAt || '']));
155
+ }
156
+ catch (err) {
157
+ (0, ui_1.handleError)(err);
158
+ }
159
+ }
@@ -7,7 +7,13 @@ const jsonInput_1 = require("./jsonInput");
7
7
  const looseJson_1 = require("../lib/looseJson");
8
8
  const METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
9
9
  /** The route segments the path may contain — see `repairPosixPath`. */
10
- const PATH_SEGMENTS = ['auth', 'v1', 'v2', 'v3', 'kpi-manager', 'pending-tasks', 'phone-number'];
10
+ const PATH_SEGMENTS = [
11
+ 'auth', 'v1', 'v2', 'v3', 'kpi-manager', 'pending-tasks', 'phone-number',
12
+ 'analytics', 'dnd-phone-numbers', 'feedback', 'knowledge', 'openai-tools',
13
+ 'schedulecalls', 'agent-folders', 'inbox', 'finetune', 'batchcalls',
14
+ 'team-management', 'verified-phone-numbers', 'compliance', 'integrations',
15
+ 'wa-campaign', 'whatsapp', 'workflows', 'contacts', 'calls', 'utils',
16
+ ];
11
17
  /**
12
18
  * `cku dashboard api <METHOD> <path> [--body <json|@file>] [--query k=v ...]`
13
19
  *
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.foldersListCommand = foldersListCommand;
4
+ exports.foldersCreateCommand = foldersCreateCommand;
5
+ exports.foldersRenameCommand = foldersRenameCommand;
6
+ exports.foldersDeleteCommand = foldersDeleteCommand;
7
+ exports.foldersMoveCommand = foldersMoveCommand;
8
+ const dashboardApi_1 = require("../lib/dashboardApi");
9
+ const ui_1 = require("../lib/ui");
10
+ /** `cku folders` — agent folders, on the dashboard session. */
11
+ async function foldersListCommand(opts) {
12
+ try {
13
+ const res = await (0, dashboardApi_1.dashboardApi)().agentsWithFolders();
14
+ const folders = res?.agentFolders || res?.folders || [];
15
+ const agents = res?.agents || [];
16
+ const rows = folders.map((f) => ({ id: f._id, name: f.name, agents: agents.filter((a) => a.folderId === f._id).length }));
17
+ if (opts.json)
18
+ return void console.log(JSON.stringify(rows, null, 2));
19
+ if (!rows.length)
20
+ return void (0, ui_1.info)('No agent folders.');
21
+ (0, ui_1.table)(['ID', 'NAME', 'AGENTS'], rows.map((r) => [r.id, r.name, r.agents]));
22
+ }
23
+ catch (err) {
24
+ (0, ui_1.handleError)(err);
25
+ }
26
+ }
27
+ async function foldersCreateCommand(name, opts) {
28
+ try {
29
+ const res = await (0, dashboardApi_1.dashboardApi)().createAgentFolder(name.trim());
30
+ if (opts.json)
31
+ return void console.log(JSON.stringify(res, null, 2));
32
+ (0, ui_1.success)(`Created folder "${name.trim()}".`);
33
+ }
34
+ catch (err) {
35
+ (0, ui_1.handleError)(err);
36
+ }
37
+ }
38
+ async function foldersRenameCommand(folderId, name, opts) {
39
+ try {
40
+ const res = await (0, dashboardApi_1.dashboardApi)().renameAgentFolder(folderId, name.trim());
41
+ if (opts.json)
42
+ return void console.log(JSON.stringify(res, null, 2));
43
+ (0, ui_1.success)(`Renamed folder ${folderId} to "${name.trim()}".`);
44
+ }
45
+ catch (err) {
46
+ (0, ui_1.handleError)(err);
47
+ }
48
+ }
49
+ async function foldersDeleteCommand(folderId, opts) {
50
+ try {
51
+ if (!(await (0, ui_1.confirm)(`Delete folder ${folderId}?`, opts.yes)))
52
+ return;
53
+ const res = await (0, dashboardApi_1.dashboardApi)().deleteAgentFolder(folderId);
54
+ if (opts.json)
55
+ return void console.log(JSON.stringify(res, null, 2));
56
+ (0, ui_1.success)(`Deleted folder ${folderId}.`);
57
+ }
58
+ catch (err) {
59
+ (0, ui_1.handleError)(err);
60
+ }
61
+ }
62
+ async function foldersMoveCommand(folderId, opts) {
63
+ try {
64
+ const ids = (opts.agents || '').split(',').map((s) => s.trim()).filter(Boolean);
65
+ if (!ids.length)
66
+ throw new Error('--agents <id,id,...> is required.');
67
+ const res = await (0, dashboardApi_1.dashboardApi)().moveAgentsToFolder(ids, folderId);
68
+ if (opts.json)
69
+ return void console.log(JSON.stringify(res, null, 2));
70
+ (0, ui_1.success)(`Moved ${ids.length} agent(s) to folder ${folderId}.`);
71
+ }
72
+ catch (err) {
73
+ (0, ui_1.handleError)(err);
74
+ }
75
+ }