retell-sync-cli 3.3.0 → 3.5.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/dist/cli.js +29 -8
  2. package/package.json +1 -1
  3. package/.todo +0 -1
package/dist/cli.js CHANGED
@@ -113746,6 +113746,7 @@ var agentFieldDocs = {
113746
113746
  fallback_voice_ids: "Fallback voices when primary TTS provider has outages. Must be from different providers.",
113747
113747
  interruption_sensitivity: "How sensitive to user interruptions [0,1]. Lower = harder to interrupt. Default 1. Set to 0 to never interrupt.",
113748
113748
  language: "Language/dialect for speech recognition. Default en-US. Use 'multi' for multilingual.",
113749
+ llm_websocket_url: "Websocket URL for custom LLM. Only applies to agents with custom-llm response engine type.",
113749
113750
  max_call_duration_ms: "Max call length in ms. Min 60000 (1 min), max 7200000 (2 hours). Default 3600000 (1 hour).",
113750
113751
  normalize_for_speech: "Normalize numbers, currency, dates to spoken form for consistent synthesis.",
113751
113752
  opt_in_signed_url: "Enable signed URLs for public logs/recordings with security signatures that expire after 24 hours.",
@@ -113760,7 +113761,6 @@ var agentFieldDocs = {
113760
113761
  signed_url_expiration_ms: "Signed URL expiration time in ms. Only applies when opt_in_signed_url is true. Default 86400000 (24 hours).",
113761
113762
  stt_mode: "Speech-to-text mode. Options: fast, accurate. Default fast.",
113762
113763
  user_dtmf_options: "DTMF options for user input.",
113763
- version_title: "Title for this version of the agent.",
113764
113764
  vocab_specialization: "Vocabulary set for transcription. Options: general, medical. Default general. English only.",
113765
113765
  voice_id: "Unique voice ID. Find available voices in Dashboard.",
113766
113766
  voice_model: "Voice model for selected voice. Only elevenlab voices have model selections.",
@@ -134737,7 +134737,12 @@ function canonicalizeFromApi({
134737
134737
  const requiredConversationFlows = t3(latestAgents, t9((a7) => conversationFlows.find((cf3) => a7.response_engine.type === "conversation-flow" && a7.response_engine.conversation_flow_id === cf3.conversation_flow_id && a7.response_engine.version === cf3.version && a7.is_published === cf3.is_published)), n3(e4));
134738
134738
  const requiredLLMs = t3(latestAgents, t9((a7) => llms.find((llm) => a7.response_engine.type === "retell-llm" && a7.response_engine.llm_id === llm.llm_id && a7.response_engine.version === llm.version && a7.is_published === llm.is_published)), n3(e4));
134739
134739
  return {
134740
- voiceAgents: latestAgents.map(({ agent_id: _id, version: version2, ...rest }) => n9({ ...rest, _id, _version: version2 ?? 0 }, [
134740
+ voiceAgents: latestAgents.map(({
134741
+ agent_id: _id,
134742
+ version: version2,
134743
+ version_title: _versionTitle,
134744
+ ...rest
134745
+ }) => n9({ ...rest, _id, _version: version2 ?? 0 }, [
134741
134746
  "last_modification_timestamp",
134742
134747
  "is_published"
134743
134748
  ])),
@@ -134851,10 +134856,11 @@ async function serializeState(state, {
134851
134856
  const hash2 = agent._id.slice(-FILE_HASH_LENGTH);
134852
134857
  const agentDirName = `${toSnakeCase(agentName)}_${hash2}`;
134853
134858
  const agentDirPath = path15.join(agentsDir, agentDirName);
134859
+ const responseEngineForMeta = agent.response_engine.type === "custom-llm" ? { type: "custom-llm" } : agent.response_engine;
134854
134860
  files[path15.join(agentDirPath, ".agent.json")] = await writeJson({
134855
134861
  id: agent._id,
134856
134862
  version: agent._version,
134857
- response_engine: agent.response_engine
134863
+ response_engine: responseEngineForMeta
134858
134864
  });
134859
134865
  const {
134860
134866
  _id: _agentId,
@@ -134862,6 +134868,9 @@ async function serializeState(state, {
134862
134868
  response_engine: _responseEngine,
134863
134869
  ...agentConfig
134864
134870
  } = agent;
134871
+ if (agent.response_engine.type === "custom-llm") {
134872
+ agentConfig.llm_websocket_url = agent.response_engine.llm_websocket_url;
134873
+ }
134865
134874
  if (agent.response_engine.type === "retell-llm") {
134866
134875
  const llm = llmMap.get(agent.response_engine.llm_id);
134867
134876
  if (llm) {
@@ -134944,6 +134953,9 @@ async function canonicalizeFromFiles(files) {
134944
134953
  type: zod_default.literal("conversation-flow"),
134945
134954
  conversation_flow_id: zod_default.string(),
134946
134955
  version: zod_default.number().optional()
134956
+ }),
134957
+ zod_default.object({
134958
+ type: zod_default.literal("custom-llm")
134947
134959
  })
134948
134960
  ])
134949
134961
  }));
@@ -134971,14 +134983,13 @@ async function canonicalizeFromFiles(files) {
134971
134983
  return content;
134972
134984
  };
134973
134985
  await resolveFilePlaceholders(agentConfig, resolveFileContent);
134974
- const responseEngineVersion = agentMeta.response_engine.version ?? 0;
134975
134986
  if (agentMeta.response_engine.type === "retell-llm") {
134976
134987
  const llmResult = findConfigFile("llm");
134977
134988
  if (llmResult) {
134978
134989
  const llmConfig = await llmResult.reader(llmResult.content, zod_default.looseObject({}));
134979
134990
  await resolveFilePlaceholders(llmConfig, resolveFileContent);
134980
134991
  llmConfig._id = agentMeta.response_engine.llm_id;
134981
- llmConfig._version = responseEngineVersion;
134992
+ llmConfig._version = agentMeta.response_engine.version ?? 0;
134982
134993
  llms.push(llmConfig);
134983
134994
  }
134984
134995
  } else if (agentMeta.response_engine.type === "conversation-flow") {
@@ -134987,13 +134998,23 @@ async function canonicalizeFromFiles(files) {
134987
134998
  const flowConfig = await flowResult.reader(flowResult.content, zod_default.looseObject({}));
134988
134999
  await resolveFilePlaceholders(flowConfig, resolveFileContent);
134989
135000
  flowConfig._id = agentMeta.response_engine.conversation_flow_id;
134990
- flowConfig._version = responseEngineVersion;
135001
+ flowConfig._version = agentMeta.response_engine.version ?? 0;
134991
135002
  conversationFlows.push(flowConfig);
134992
135003
  }
134993
135004
  }
135005
+ delete agentConfig.version_title;
134994
135006
  agentConfig._id = agentMeta.id;
134995
135007
  agentConfig._version = agentMeta.version;
134996
- agentConfig.response_engine = agentMeta.response_engine;
135008
+ if (agentMeta.response_engine.type === "custom-llm") {
135009
+ const llmWebsocketUrl = agentConfig.llm_websocket_url;
135010
+ delete agentConfig.llm_websocket_url;
135011
+ agentConfig.response_engine = {
135012
+ type: "custom-llm",
135013
+ llm_websocket_url: llmWebsocketUrl ?? ""
135014
+ };
135015
+ } else {
135016
+ agentConfig.response_engine = agentMeta.response_engine;
135017
+ }
134997
135018
  voiceAgents.push(agentConfig);
134998
135019
  }
134999
135020
  return {
@@ -135491,7 +135512,7 @@ async function deploy({
135491
135512
  const {
135492
135513
  _id,
135493
135514
  _version,
135494
- response_engine: _10,
135515
+ response_engine: _responseEngine,
135495
135516
  ...updateData
135496
135517
  } = change.current;
135497
135518
  await retell.agent.update(_id, updateData);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "retell-sync-cli",
3
- "version": "3.3.0",
3
+ "version": "3.5.0",
4
4
  "description": "CLI tool for syncing Retell AI agents between local filesystem and API",
5
5
  "keywords": [
6
6
  "agents",
package/.todo DELETED
@@ -1 +0,0 @@
1
- - [ ] Make `deploy --publish` command update phone number to new agent version