retell-cli 1.6.0 → 1.7.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 (3) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/index.js +205 -93
  3. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -5,6 +5,25 @@ All notable changes to the Retell AI CLI will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.7.0] - 2026-04-30
9
+
10
+ ### Added
11
+
12
+ - `calls stop <call_id>` — stop an ongoing call via `client.call.stop`.
13
+ - `exports list` — list export requests with `--limit`, `--pagination-key`, `--sort-order`, and `--fields`.
14
+ - `playground complete <agent_id>` — run stateless playground completions with JSON or `@path` messages, optional dynamic variables, tool mocks, state/node/component context, agent version, and field filtering.
15
+
16
+ ### Changed
17
+
18
+ - Bumped the minimum Node.js engine from `>=18.0.0` to `>=18.10.0` to match the current Retell SDK requirement.
19
+ - Bumped `retell-sdk` from `^5.12.0` to `^5.18.0`.
20
+ - Migrated test API helpers from direct `fetch` calls to SDK-backed `client.tests.*` wrappers while preserving existing command output shapes.
21
+
22
+ ### Fixed
23
+
24
+ - `exports list --limit` now rejects non-positive and fractional values before calling the SDK.
25
+ - `playground complete --fields` now ignores empty field tokens and returns the full response when no valid field paths remain.
26
+
8
27
  ## [1.6.0] - 2026-04-16
9
28
 
10
29
  Bulk addition of CLI surface for Retell SDK resources that were previously unwrapped or partially wrapped. Bumped `retell-sdk` dependency to `^5.12.0`.
package/dist/index.js CHANGED
@@ -49,6 +49,7 @@ var ConfigError = class extends Error {
49
49
  this.code = code;
50
50
  this.name = "ConfigError";
51
51
  }
52
+ code;
52
53
  };
53
54
  function getConfigPath() {
54
55
  return (0, import_path.join)(process.cwd(), CONFIG_FILE_NAME);
@@ -2915,105 +2916,62 @@ async function importToolsCommand(agentId, options) {
2915
2916
  }
2916
2917
 
2917
2918
  // src/services/test-api.ts
2918
- var BASE_URL = "https://api.retellai.com";
2919
- async function apiRequest(method, path, body) {
2920
- const config = getConfig();
2921
- const response = await fetch(`${BASE_URL}${path}`, {
2922
- method,
2923
- headers: {
2924
- Authorization: `Bearer ${config.apiKey}`,
2925
- "Content-Type": "application/json"
2926
- },
2927
- body: body ? JSON.stringify(body) : void 0
2928
- });
2929
- if (!response.ok) {
2930
- const errorBody = await response.text();
2931
- let errorMessage = `API error: ${response.status} ${response.statusText}`;
2932
- try {
2933
- const errorJson = JSON.parse(errorBody);
2934
- if (errorJson.message) {
2935
- errorMessage = errorJson.message;
2936
- } else if (errorJson.error) {
2937
- errorMessage = errorJson.error;
2938
- }
2939
- } catch {
2940
- if (errorBody) {
2941
- errorMessage = errorBody;
2942
- }
2943
- }
2944
- throw new Error(errorMessage);
2945
- }
2946
- const text = await response.text();
2947
- if (!text) {
2948
- return {};
2949
- }
2950
- return JSON.parse(text);
2951
- }
2952
2919
  async function listTestCaseDefinitions(responseEngine) {
2953
- const params = new URLSearchParams();
2954
- if (responseEngine.type === "retell-llm") {
2955
- params.set("type", "retell-llm");
2956
- params.set("llm_id", responseEngine.llm_id);
2957
- } else {
2958
- params.set("type", "conversation-flow");
2959
- params.set("conversation_flow_id", responseEngine.conversation_flow_id);
2960
- }
2961
- return apiRequest(
2962
- "GET",
2963
- `/list-test-case-definitions?${params.toString()}`
2920
+ const client = getRetellClient();
2921
+ return await client.tests.listTestCaseDefinitions(
2922
+ responseEngine
2964
2923
  );
2965
2924
  }
2966
2925
  async function getTestCaseDefinition(testCaseDefinitionId) {
2967
- return apiRequest(
2968
- "GET",
2969
- `/get-test-case-definition/${testCaseDefinitionId}`
2926
+ const client = getRetellClient();
2927
+ return await client.tests.getTestCaseDefinition(
2928
+ testCaseDefinitionId
2970
2929
  );
2971
2930
  }
2972
2931
  async function createTestCaseDefinition(params) {
2973
- return apiRequest(
2974
- "POST",
2975
- "/create-test-case-definition",
2932
+ const client = getRetellClient();
2933
+ return await client.tests.createTestCaseDefinition(
2976
2934
  params
2977
2935
  );
2978
2936
  }
2979
2937
  async function updateTestCaseDefinition(testCaseDefinitionId, params) {
2980
- return apiRequest(
2981
- "PUT",
2982
- `/update-test-case-definition/${testCaseDefinitionId}`,
2938
+ const client = getRetellClient();
2939
+ return await client.tests.updateTestCaseDefinition(
2940
+ testCaseDefinitionId,
2983
2941
  params
2984
2942
  );
2985
2943
  }
2986
2944
  async function deleteTestCaseDefinition(testCaseDefinitionId) {
2987
- await apiRequest(
2988
- "DELETE",
2989
- `/delete-test-case-definition/${testCaseDefinitionId}`
2990
- );
2945
+ const client = getRetellClient();
2946
+ await client.tests.deleteTestCaseDefinition(testCaseDefinitionId);
2991
2947
  }
2992
2948
  async function listBatchTests(responseEngine) {
2993
- const params = new URLSearchParams();
2994
- if (responseEngine.type === "retell-llm") {
2995
- params.set("type", "retell-llm");
2996
- params.set("llm_id", responseEngine.llm_id);
2997
- } else {
2998
- params.set("type", "conversation-flow");
2999
- params.set("conversation_flow_id", responseEngine.conversation_flow_id);
3000
- }
3001
- return apiRequest(
3002
- "GET",
3003
- `/list-batch-tests?${params.toString()}`
2949
+ const client = getRetellClient();
2950
+ return await client.tests.listBatchTests(
2951
+ responseEngine
3004
2952
  );
3005
2953
  }
3006
2954
  async function getBatchTest(batchJobId) {
3007
- return apiRequest("GET", `/get-batch-test/${batchJobId}`);
2955
+ const client = getRetellClient();
2956
+ return await client.tests.getBatchTest(
2957
+ batchJobId
2958
+ );
3008
2959
  }
3009
2960
  async function createBatchTest(params) {
3010
- return apiRequest("POST", "/create-batch-test", params);
2961
+ const client = getRetellClient();
2962
+ return await client.tests.createBatchTest(
2963
+ params
2964
+ );
3011
2965
  }
3012
2966
  async function listTestRuns(batchJobId) {
3013
- return apiRequest("GET", `/list-test-runs/${batchJobId}`);
2967
+ const client = getRetellClient();
2968
+ return await client.tests.listTestRuns(
2969
+ batchJobId
2970
+ );
3014
2971
  }
3015
2972
  async function getTestRun(testRunId) {
3016
- return apiRequest("GET", `/get-test-run/${testRunId}`);
2973
+ const client = getRetellClient();
2974
+ return await client.tests.getTestRun(testRunId);
3017
2975
  }
3018
2976
 
3019
2977
  // src/commands/tests/cases/list.ts
@@ -4439,6 +4397,21 @@ async function deleteCallCommand(callId) {
4439
4397
  }
4440
4398
  }
4441
4399
 
4400
+ // src/commands/calls/stop.ts
4401
+ async function stopCallCommand(callId) {
4402
+ try {
4403
+ const client = getRetellClient();
4404
+ await client.call.stop(callId);
4405
+ outputJson({
4406
+ message: "Call stopped successfully",
4407
+ call_id: callId,
4408
+ operation: "stop"
4409
+ });
4410
+ } catch (error) {
4411
+ handleSdkError(error);
4412
+ }
4413
+ }
4414
+
4442
4415
  // src/commands/batch-calls/create.ts
4443
4416
  async function createBatchCallCommand(options) {
4444
4417
  try {
@@ -4487,6 +4460,44 @@ function throwValidation9(message) {
4487
4460
  throw err;
4488
4461
  }
4489
4462
 
4463
+ // src/commands/export-requests/list.ts
4464
+ var SORT_ORDERS = ["ascending", "descending"];
4465
+ async function listExportRequestsCommand(options = {}) {
4466
+ try {
4467
+ const query = {};
4468
+ if (options.limit !== void 0) {
4469
+ const limit = parseNumericFlag(options.limit, "--limit");
4470
+ if (!Number.isInteger(limit) || limit < 1) {
4471
+ throwValidation10("--limit must be a positive integer");
4472
+ }
4473
+ query.limit = limit;
4474
+ }
4475
+ if (options.paginationKey) query.pagination_key = options.paginationKey;
4476
+ if (options.sortOrder !== void 0) {
4477
+ if (!SORT_ORDERS.includes(options.sortOrder)) {
4478
+ throwValidation10(
4479
+ `--sort-order must be one of: ${SORT_ORDERS.join(", ")}`
4480
+ );
4481
+ }
4482
+ query.sort_order = options.sortOrder;
4483
+ }
4484
+ const client = getRetellClient();
4485
+ const exportRequests = await client.exportRequest.list(query);
4486
+ const output = options.fields ? filterFields(
4487
+ exportRequests,
4488
+ options.fields.split(",").map((f) => f.trim())
4489
+ ) : exportRequests;
4490
+ outputJson(output);
4491
+ } catch (error) {
4492
+ handleSdkError(error);
4493
+ }
4494
+ }
4495
+ function throwValidation10(message) {
4496
+ const err = new Error(message);
4497
+ err.name = "ValidationError";
4498
+ throw err;
4499
+ }
4500
+
4490
4501
  // src/commands/llms/list.ts
4491
4502
  async function listLlmsCommand(options = {}) {
4492
4503
  try {
@@ -4545,7 +4556,7 @@ async function createLlmCommand(options = {}) {
4545
4556
  options.beginMessage !== void 0 && "--begin-message"
4546
4557
  ].filter(Boolean);
4547
4558
  if (simpleFlags.length > 0) {
4548
- throwValidation10(
4559
+ throwValidation11(
4549
4560
  `--file is mutually exclusive with ${simpleFlags.join(", ")}. Put all fields in the JSON body.`
4550
4561
  );
4551
4562
  }
@@ -4563,7 +4574,7 @@ async function createLlmCommand(options = {}) {
4563
4574
  params.s2s_model = options.s2sModel;
4564
4575
  if (options.startSpeaker) {
4565
4576
  if (!["user", "agent"].includes(options.startSpeaker))
4566
- throwValidation10("--start-speaker must be 'user' or 'agent'");
4577
+ throwValidation11("--start-speaker must be 'user' or 'agent'");
4567
4578
  params.start_speaker = options.startSpeaker;
4568
4579
  }
4569
4580
  if (options.beginMessage !== void 0)
@@ -4580,7 +4591,7 @@ async function createLlmCommand(options = {}) {
4580
4591
  handleSdkError(error);
4581
4592
  }
4582
4593
  }
4583
- function throwValidation10(message) {
4594
+ function throwValidation11(message) {
4584
4595
  const err = new Error(message);
4585
4596
  err.name = "ValidationError";
4586
4597
  throw err;
@@ -4668,7 +4679,7 @@ var VALID_PROVIDERS2 = [
4668
4679
  async function addVoiceResourceCommand(options) {
4669
4680
  try {
4670
4681
  if (options.voiceProvider && !VALID_PROVIDERS2.includes(options.voiceProvider)) {
4671
- throwValidation11(
4682
+ throwValidation12(
4672
4683
  `--voice-provider must be one of: ${VALID_PROVIDERS2.join(", ")}`
4673
4684
  );
4674
4685
  }
@@ -4693,7 +4704,7 @@ async function addVoiceResourceCommand(options) {
4693
4704
  handleSdkError(error);
4694
4705
  }
4695
4706
  }
4696
- function throwValidation11(message) {
4707
+ function throwValidation12(message) {
4697
4708
  const err = new Error(message);
4698
4709
  err.name = "ValidationError";
4699
4710
  throw err;
@@ -4711,17 +4722,17 @@ var VALID_PROVIDERS3 = [
4711
4722
  async function cloneVoiceCommand(options) {
4712
4723
  try {
4713
4724
  if (!VALID_PROVIDERS3.includes(options.voiceProvider)) {
4714
- throwValidation12(
4725
+ throwValidation13(
4715
4726
  `--voice-provider must be one of: ${VALID_PROVIDERS3.join(", ")}`
4716
4727
  );
4717
4728
  }
4718
4729
  const files = options.file ?? [];
4719
4730
  if (files.length === 0) {
4720
- throwValidation12("at least one --file is required");
4731
+ throwValidation13("at least one --file is required");
4721
4732
  }
4722
4733
  for (const path of files) {
4723
4734
  if (!(0, import_fs18.existsSync)(path)) {
4724
- throwValidation12(`--file: not found: ${path}`);
4735
+ throwValidation13(`--file: not found: ${path}`);
4725
4736
  }
4726
4737
  }
4727
4738
  const params = {
@@ -4740,7 +4751,7 @@ async function cloneVoiceCommand(options) {
4740
4751
  handleSdkError(error);
4741
4752
  }
4742
4753
  }
4743
- function throwValidation12(message) {
4754
+ function throwValidation13(message) {
4744
4755
  const err = new Error(message);
4745
4756
  err.name = "ValidationError";
4746
4757
  throw err;
@@ -4756,7 +4767,7 @@ var VALID_PROVIDERS4 = [
4756
4767
  async function searchVoicesCommand(options) {
4757
4768
  try {
4758
4769
  if (options.voiceProvider && !VALID_PROVIDERS4.includes(options.voiceProvider)) {
4759
- throwValidation13(
4770
+ throwValidation14(
4760
4771
  `--voice-provider must be one of: ${VALID_PROVIDERS4.join(", ")}`
4761
4772
  );
4762
4773
  }
@@ -4777,7 +4788,7 @@ async function searchVoicesCommand(options) {
4777
4788
  handleSdkError(error);
4778
4789
  }
4779
4790
  }
4780
- function throwValidation13(message) {
4791
+ function throwValidation14(message) {
4781
4792
  const err = new Error(message);
4782
4793
  err.name = "ValidationError";
4783
4794
  throw err;
@@ -4837,7 +4848,7 @@ async function listChatsCommand(options = {}) {
4837
4848
  if (options.paginationKey) query.pagination_key = options.paginationKey;
4838
4849
  if (options.sortOrder) {
4839
4850
  if (!["ascending", "descending"].includes(options.sortOrder))
4840
- throwValidation14("--sort-order must be 'ascending' or 'descending'");
4851
+ throwValidation15("--sort-order must be 'ascending' or 'descending'");
4841
4852
  query.sort_order = options.sortOrder;
4842
4853
  }
4843
4854
  const client = getRetellClient();
@@ -4851,7 +4862,7 @@ async function listChatsCommand(options = {}) {
4851
4862
  handleSdkError(error);
4852
4863
  }
4853
4864
  }
4854
- function throwValidation14(message) {
4865
+ function throwValidation15(message) {
4855
4866
  const err = new Error(message);
4856
4867
  err.name = "ValidationError";
4857
4868
  throw err;
@@ -4872,14 +4883,14 @@ async function updateChatCommand(chatId, options) {
4872
4883
  params.override_dynamic_variables = dv;
4873
4884
  if (options.dataStorageSetting) {
4874
4885
  if (!DATA_STORAGE_SETTINGS2.includes(options.dataStorageSetting)) {
4875
- throwValidation15(
4886
+ throwValidation16(
4876
4887
  `--data-storage-setting must be one of: ${DATA_STORAGE_SETTINGS2.join(", ")}`
4877
4888
  );
4878
4889
  }
4879
4890
  params.data_storage_setting = options.dataStorageSetting;
4880
4891
  }
4881
4892
  if (Object.keys(params).length === 0) {
4882
- throwValidation15(
4893
+ throwValidation16(
4883
4894
  "No mutation flags provided. Pass at least one of --metadata, --custom-attributes, --dynamic-variables, --data-storage-setting."
4884
4895
  );
4885
4896
  }
@@ -4894,7 +4905,7 @@ async function updateChatCommand(chatId, options) {
4894
4905
  handleSdkError(error);
4895
4906
  }
4896
4907
  }
4897
- function throwValidation15(message) {
4908
+ function throwValidation16(message) {
4898
4909
  const err = new Error(message);
4899
4910
  err.name = "ValidationError";
4900
4911
  throw err;
@@ -4977,7 +4988,7 @@ async function createChatAgentCommand(options = {}) {
4977
4988
  options.customLlm !== void 0 && "--custom-llm"
4978
4989
  ].filter(Boolean);
4979
4990
  if (simpleFlags.length > 0) {
4980
- throwValidation16(
4991
+ throwValidation17(
4981
4992
  `--file is mutually exclusive with ${simpleFlags.join(", ")}. Put all fields in the JSON body.`
4982
4993
  );
4983
4994
  }
@@ -4992,12 +5003,12 @@ async function createChatAgentCommand(options = {}) {
4992
5003
  options.customLlm
4993
5004
  ].filter(Boolean).length;
4994
5005
  if (engineCount === 0) {
4995
- throwValidation16(
5006
+ throwValidation17(
4996
5007
  "Must specify one of: --llm-id, --flow-id, or --custom-llm (or use --file)"
4997
5008
  );
4998
5009
  }
4999
5010
  if (engineCount > 1) {
5000
- throwValidation16(
5011
+ throwValidation17(
5001
5012
  "Only one of --llm-id, --flow-id, or --custom-llm can be specified"
5002
5013
  );
5003
5014
  }
@@ -5029,7 +5040,7 @@ async function createChatAgentCommand(options = {}) {
5029
5040
  handleSdkError(error);
5030
5041
  }
5031
5042
  }
5032
- function throwValidation16(message) {
5043
+ function throwValidation17(message) {
5033
5044
  const err = new Error(message);
5034
5045
  err.name = "ValidationError";
5035
5046
  throw err;
@@ -5277,6 +5288,75 @@ async function agentMcpToolsCommand(agentId, options) {
5277
5288
  }
5278
5289
  }
5279
5290
 
5291
+ // src/commands/playground/complete.ts
5292
+ async function playgroundCompleteCommand(agentId, options) {
5293
+ try {
5294
+ const params = {
5295
+ messages: parseJsonArray(options.messages, "--messages")
5296
+ };
5297
+ const dynamicVariables = loadJsonArg(
5298
+ options.dynamicVariables,
5299
+ "--dynamic-variables"
5300
+ );
5301
+ if (dynamicVariables !== void 0) {
5302
+ params.dynamic_variables = parseJsonObject(
5303
+ dynamicVariables,
5304
+ "--dynamic-variables"
5305
+ );
5306
+ }
5307
+ const toolMocks = loadJsonArg(options.toolMocks, "--tool-mocks");
5308
+ if (toolMocks !== void 0) {
5309
+ params.tool_mocks = parseJsonArray(toolMocks, "--tool-mocks");
5310
+ }
5311
+ if (options.currentState !== void 0) {
5312
+ params.current_state = requireNonEmpty(
5313
+ options.currentState,
5314
+ "--current-state"
5315
+ );
5316
+ }
5317
+ if (options.currentNodeId !== void 0) {
5318
+ params.current_node_id = requireNonEmpty(
5319
+ options.currentNodeId,
5320
+ "--current-node-id"
5321
+ );
5322
+ }
5323
+ if (options.componentId !== void 0) {
5324
+ params.component_id = requireNonEmpty(options.componentId, "--component-id");
5325
+ }
5326
+ if (options.version !== void 0) {
5327
+ params.version = parseNumericFlag(options.version, "--version");
5328
+ }
5329
+ const client = getRetellClient();
5330
+ const result = await client.playground.completion(
5331
+ requireNonEmpty(agentId, "<agent_id>"),
5332
+ params
5333
+ );
5334
+ const selectedFields = options.fields ? options.fields.split(",").map((f) => f.trim()).filter((f) => f.length > 0) : [];
5335
+ const output = selectedFields.length > 0 ? filterFields(result, selectedFields) : result;
5336
+ outputJson(output);
5337
+ } catch (error) {
5338
+ handleSdkError(error);
5339
+ }
5340
+ }
5341
+ function parseJsonArray(value, flagName) {
5342
+ const parsed = typeof value === "string" ? loadJsonArg(value, flagName) : value;
5343
+ if (!Array.isArray(parsed)) {
5344
+ throwValidation18(`${flagName} must be a JSON array`);
5345
+ }
5346
+ return parsed;
5347
+ }
5348
+ function parseJsonObject(value, flagName) {
5349
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
5350
+ throwValidation18(`${flagName} must be a JSON object`);
5351
+ }
5352
+ return value;
5353
+ }
5354
+ function throwValidation18(message) {
5355
+ const err = new Error(message);
5356
+ err.name = "ValidationError";
5357
+ throw err;
5358
+ }
5359
+
5280
5360
  // src/index.ts
5281
5361
  var packageJson = JSON.parse(
5282
5362
  (0, import_fs19.readFileSync)((0, import_path6.join)(__dirname, "../package.json"), "utf-8")
@@ -6287,9 +6367,24 @@ calls.command("update <call_id>").description("Update metadata and storage setti
6287
6367
  ).option("--fields <fields>", "Comma-separated list of fields to return").action(async (callId, options) => {
6288
6368
  await updateCallCommand(callId, options);
6289
6369
  });
6370
+ calls.command("stop <call_id>").description("Stop an ongoing call").action(async (callId) => {
6371
+ await stopCallCommand(callId);
6372
+ });
6290
6373
  calls.command("delete <call_id>").description("Delete a call and its associated data").action(async (callId) => {
6291
6374
  await deleteCallCommand(callId);
6292
6375
  });
6376
+ var exportsCommand = program.command("exports").description("Manage export requests");
6377
+ exportsCommand.command("list").description("List export requests").option("--limit <number>", "Maximum number of export requests to return").option("--pagination-key <key>", "Pagination key for the next page").option("--sort-order <order>", "ascending or descending").option("--fields <fields>", "Comma-separated list of fields to return").addHelpText(
6378
+ "after",
6379
+ `
6380
+ Examples:
6381
+ $ retell exports list
6382
+ $ retell exports list --limit 20 --sort-order descending
6383
+ $ retell exports list --fields items.0.export_request_id,pagination_key
6384
+ `
6385
+ ).action(async (options) => {
6386
+ await listExportRequestsCommand(options);
6387
+ });
6293
6388
  var batchCalls = program.command("batch-calls").description("Schedule bulk outbound calls");
6294
6389
  batchCalls.command("create").description("Create a new batch call").requiredOption("--from-number <number>", "Caller number in E.164 format").requiredOption(
6295
6390
  "--tasks <path>",
@@ -6415,6 +6510,23 @@ chats.command("sms").description("Create an SMS-backed chat session").requiredOp
6415
6510
  chats.command("end <chat_id>").description("End an active chat session").action(async (chatId) => {
6416
6511
  await endChatCommand(chatId);
6417
6512
  });
6513
+ var playground = program.command("playground").description("Run stateless playground completions");
6514
+ playground.command("complete <agent_id>").description("Run a stateless playground completion").requiredOption(
6515
+ "--messages <json>",
6516
+ "Conversation history as inline JSON array or @path"
6517
+ ).option(
6518
+ "--dynamic-variables <json>",
6519
+ "Inline JSON object or @path for dynamic variables"
6520
+ ).option("--tool-mocks <json>", "Inline JSON array or @path for tool mocks").option("--current-state <name>", "Current Retell-LLM state").option("--current-node-id <id>", "Current conversation-flow node id").option("--component-id <id>", "Conversation-flow component id").option("--version <number>", "Agent version to use").option("--fields <fields>", "Comma-separated list of fields to return").addHelpText(
6521
+ "after",
6522
+ `
6523
+ Examples:
6524
+ $ retell playground complete agent_abc --messages '[{"role":"user","content":"Hi"}]'
6525
+ $ retell playground complete agent_abc --messages @messages.json --dynamic-variables '{"name":"Ada"}'
6526
+ `
6527
+ ).action(async (agentId, options) => {
6528
+ await playgroundCompleteCommand(agentId, options);
6529
+ });
6418
6530
  var chatAgents = program.command("chat-agents").description("Manage chat agents (text/SMS mode)");
6419
6531
  chatAgents.command("list").description("List chat agents").option("-l, --limit <n>", "Maximum number to return").option("--pagination-key <key>", "Chat agent id to start from").option(
6420
6532
  "--pagination-key-version <n>",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "retell-cli",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "Community CLI for Retell AI - efficient access to transcripts, agents, and prompts for AI assistants without MCP overhead",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -48,13 +48,13 @@
48
48
  },
49
49
  "homepage": "https://github.com/awccom/retell-cli#readme",
50
50
  "engines": {
51
- "node": ">=18.0.0"
51
+ "node": ">=18.10.0"
52
52
  },
53
53
  "dependencies": {
54
54
  "commander": "^14.0.0",
55
55
  "dotenv": "^17.0.0",
56
56
  "microdiff": "^1.5.0",
57
- "retell-sdk": "^5.12.0",
57
+ "retell-sdk": "^5.18.0",
58
58
  "zod": "^3.25.0"
59
59
  },
60
60
  "devDependencies": {