@vm0/cli 9.131.5 → 9.132.1

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.
package/index.js CHANGED
@@ -62,7 +62,7 @@ import {
62
62
  source_default,
63
63
  volumeConfigSchema,
64
64
  withErrorHandler
65
- } from "./chunk-Y4LOXQJP.js";
65
+ } from "./chunk-ZKOPXRWA.js";
66
66
  import {
67
67
  __commonJS,
68
68
  __require,
@@ -7771,7 +7771,7 @@ function getConfigPath() {
7771
7771
  return join(homedir(), ".vm0", "config.json");
7772
7772
  }
7773
7773
  var infoCommand = new Command().name("info").description("Display environment and debug information").action(async () => {
7774
- console.log(source_default.bold(`VM0 CLI v${"9.131.5"}`));
7774
+ console.log(source_default.bold(`VM0 CLI v${"9.132.1"}`));
7775
7775
  console.log();
7776
7776
  const config = await loadConfig();
7777
7777
  const hasEnvToken = !!process.env.VM0_TOKEN;
@@ -11711,7 +11711,7 @@ var composeCommand = new Command().name("compose").description("Create or update
11711
11711
  options.autoUpdate = false;
11712
11712
  }
11713
11713
  if (options.autoUpdate !== false) {
11714
- await startSilentUpgrade("9.131.5");
11714
+ await startSilentUpgrade("9.132.1");
11715
11715
  }
11716
11716
  try {
11717
11717
  let result;
@@ -11803,7 +11803,7 @@ var mainRunCommand = new Command().name("run").description("Run an agent").argum
11803
11803
  withErrorHandler(
11804
11804
  async (identifier, prompt, options) => {
11805
11805
  if (options.autoUpdate !== false) {
11806
- await startSilentUpgrade("9.131.5");
11806
+ await startSilentUpgrade("9.132.1");
11807
11807
  }
11808
11808
  const { name, version } = parseIdentifier(identifier);
11809
11809
  let composeId;
@@ -13576,13 +13576,13 @@ var upgradeCommand = new Command().name("upgrade").description("Upgrade vm0 CLI
13576
13576
  if (latestVersion === null) {
13577
13577
  throw new Error("Could not check for updates. Please try again later.");
13578
13578
  }
13579
- if (latestVersion === "9.131.5") {
13580
- console.log(source_default.green(`\u2713 Already up to date (${"9.131.5"})`));
13579
+ if (latestVersion === "9.132.1") {
13580
+ console.log(source_default.green(`\u2713 Already up to date (${"9.132.1"})`));
13581
13581
  return;
13582
13582
  }
13583
13583
  console.log(
13584
13584
  source_default.yellow(
13585
- `Current version: ${"9.131.5"} -> Latest version: ${latestVersion}`
13585
+ `Current version: ${"9.132.1"} -> Latest version: ${latestVersion}`
13586
13586
  )
13587
13587
  );
13588
13588
  console.log();
@@ -13609,7 +13609,7 @@ var upgradeCommand = new Command().name("upgrade").description("Upgrade vm0 CLI
13609
13609
  const success = await performUpgrade(packageManager);
13610
13610
  if (success) {
13611
13611
  console.log(
13612
- source_default.green(`\u2713 Upgraded from ${"9.131.5"} to ${latestVersion}`)
13612
+ source_default.green(`\u2713 Upgraded from ${"9.132.1"} to ${latestVersion}`)
13613
13613
  );
13614
13614
  return;
13615
13615
  }
@@ -13676,7 +13676,7 @@ var whoamiCommand = new Command().name("whoami").description("Show current ident
13676
13676
 
13677
13677
  // src/index.ts
13678
13678
  var program = new Command();
13679
- program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.131.5");
13679
+ program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.132.1");
13680
13680
  program.addCommand(authCommand);
13681
13681
  program.addCommand(infoCommand);
13682
13682
  program.addCommand(composeCommand);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vm0/cli",
3
- "version": "9.131.5",
3
+ "version": "9.132.1",
4
4
  "description": "CLI application",
5
5
  "repository": {
6
6
  "type": "git",
package/zero.js CHANGED
@@ -13,7 +13,6 @@ import {
13
13
  completeSlackFileUpload,
14
14
  configureGlobalProxyFromEnv,
15
15
  connectorTypeSchema,
16
- createPhoneCall,
17
16
  createSkill,
18
17
  createZeroAgent,
19
18
  createZeroRun,
@@ -42,7 +41,6 @@ import {
42
41
  getDefaultAuthMethod,
43
42
  getDefaultModel,
44
43
  getModels,
45
- getPhoneCallDetail,
46
44
  getSecretsForAuthMethod,
47
45
  getSelectableProviderTypes,
48
46
  getSkill,
@@ -64,7 +62,6 @@ import {
64
62
  isInteractive,
65
63
  isUUID,
66
64
  leaveZeroOrg,
67
- listPhoneCalls,
68
65
  listSkills,
69
66
  listZeroAgents,
70
67
  listZeroConnectors,
@@ -115,7 +112,7 @@ import {
115
112
  upsertZeroOrgModelProvider,
116
113
  withErrorHandler,
117
114
  zeroAgentCustomSkillNameSchema
118
- } from "./chunk-Y4LOXQJP.js";
115
+ } from "./chunk-ZKOPXRWA.js";
119
116
  import {
120
117
  __toESM,
121
118
  init_esm_shims
@@ -4008,27 +4005,6 @@ var agentmailFirewall = {
4008
4005
  ]
4009
4006
  };
4010
4007
 
4011
- // ../../packages/core/src/firewalls/agentphone.generated.ts
4012
- init_esm_shims();
4013
- var agentphoneFirewall = {
4014
- name: "agentphone",
4015
- description: "AgentPhone API",
4016
- placeholders: {
4017
- AGENTPHONE_TOKEN: "ap_test_c0ffee5afe10ca1c0ffee5afe10ca1c"
4018
- },
4019
- apis: [
4020
- {
4021
- base: "https://api.agentphone.to",
4022
- auth: {
4023
- headers: {
4024
- Authorization: "Bearer ${{ secrets.AGENTPHONE_TOKEN }}"
4025
- }
4026
- },
4027
- permissions: []
4028
- }
4029
- ]
4030
- };
4031
-
4032
4008
  // ../../packages/core/src/firewalls/amplitude.generated.ts
4033
4009
  init_esm_shims();
4034
4010
  var amplitudeFirewall = {
@@ -4824,6 +4800,27 @@ var browserbaseFirewall = {
4824
4800
  ]
4825
4801
  };
4826
4802
 
4803
+ // ../../packages/core/src/firewalls/browser-use.generated.ts
4804
+ init_esm_shims();
4805
+ var browserUseFirewall = {
4806
+ name: "browser-use",
4807
+ description: "Browser Use",
4808
+ placeholders: {
4809
+ BROWSER_USE_TOKEN: "bu_CoffeeSafeLocalCoffeeSafeLocalCoffee"
4810
+ },
4811
+ apis: [
4812
+ {
4813
+ base: "https://api.browser-use.com",
4814
+ auth: {
4815
+ headers: {
4816
+ "X-Browser-Use-API-Key": "${{ secrets.BROWSER_USE_TOKEN }}"
4817
+ }
4818
+ },
4819
+ permissions: []
4820
+ }
4821
+ ]
4822
+ };
4823
+
4827
4824
  // ../../packages/core/src/firewalls/browserless.generated.ts
4828
4825
  init_esm_shims();
4829
4826
  var browserlessFirewall = {
@@ -13238,7 +13235,6 @@ var zoomFirewall = {
13238
13235
  // ../../packages/core/src/firewalls/index.ts
13239
13236
  var CONNECTOR_FIREWALLS = {
13240
13237
  agentmail: agentmailFirewall,
13241
- agentphone: agentphoneFirewall,
13242
13238
  amplitude: amplitudeFirewall,
13243
13239
  "anthropic-managed-agents": anthropicManagedAgentsFirewall,
13244
13240
  ahrefs: ahrefsFirewall,
@@ -13255,6 +13251,7 @@ var CONNECTOR_FIREWALLS = {
13255
13251
  brevo: brevoFirewall,
13256
13252
  "bright-data": brightDataFirewall,
13257
13253
  browserbase: browserbaseFirewall,
13254
+ "browser-use": browserUseFirewall,
13258
13255
  browserless: browserlessFirewall,
13259
13256
  buffer: bufferFirewall,
13260
13257
  "cal-com": calComFirewall,
@@ -13935,11 +13932,6 @@ var FEATURE_SWITCHES = {
13935
13932
  description: "Show audit log links in Slack messages",
13936
13933
  enabled: false
13937
13934
  },
13938
- ["phoneIntegration" /* PhoneIntegration */]: {
13939
- maintainer: "ethan@vm0.ai",
13940
- description: "Show the Phone page for voice call integration",
13941
- enabled: false
13942
- },
13943
13935
  ["audioInput" /* AudioInput */]: {
13944
13936
  maintainer: "lancy@vm0.ai",
13945
13937
  description: "Enable voice input (microphone + STT) in chat \u2014 gates the mic button and the /api/zero/voice-io/stt route",
@@ -14030,7 +14022,12 @@ var FEATURE_SWITCHES = {
14030
14022
  },
14031
14023
  ["trinity" /* Trinity */]: {
14032
14024
  maintainer: "ethan@vm0.ai",
14033
- description: "Embed the candidate voice-chat mic toggle + voice-mode layout into the agent chat page. Gates the mic launcher, composer swap, and status/subtitle/task-card UI.",
14025
+ description: "Embed the voice-chat mic toggle + voice-mode layout into the agent chat page. Gates the mic launcher, composer swap, and status/subtitle/task-card UI.",
14026
+ enabled: false
14027
+ },
14028
+ ["zapierConnector" /* ZapierConnector */]: {
14029
+ maintainer: "ethan@vm0.ai",
14030
+ description: "Enable the Zapier connector. When disabled, Zapier is hidden from the connectors list and cannot be connected.",
14034
14031
  enabled: false
14035
14032
  }
14036
14033
  };
@@ -14119,9 +14116,10 @@ var listCommand6 = new Command().name("list").alias("ls").description("List all
14119
14116
  const allTypesRaw = Object.keys(CONNECTOR_TYPES);
14120
14117
  const allTypes = [];
14121
14118
  for (const type of allTypesRaw) {
14122
- const flag = CONNECTOR_TYPES[type].featureFlag;
14123
- const hasApiToken = "api-token" in CONNECTOR_TYPES[type].authMethods;
14124
- if (flag && !isFeatureEnabled(flag, { orgId }) && !hasApiToken) {
14119
+ const config = CONNECTOR_TYPES[type];
14120
+ const flag = config.featureFlag;
14121
+ const hasApiToken = "api-token" in config.authMethods;
14122
+ if (flag && !isFeatureEnabled(flag, { orgId }) && (!hasApiToken || config.strictFeatureFlag)) {
14125
14123
  continue;
14126
14124
  }
14127
14125
  allTypes.push(type);
@@ -14200,7 +14198,7 @@ var searchCommand = new Command().name("search").description("Search connectors
14200
14198
  const config = CONNECTOR_TYPES[type];
14201
14199
  const flag = config.featureFlag;
14202
14200
  const hasApiToken = "api-token" in config.authMethods;
14203
- return !flag || isFeatureEnabled(flag, { orgId }) || hasApiToken;
14201
+ return !flag || isFeatureEnabled(flag, { orgId }) || hasApiToken && !config.strictFeatureFlag;
14204
14202
  };
14205
14203
  const { results, total } = searchConnectors(
14206
14204
  trimmed,
@@ -18715,191 +18713,6 @@ Examples:
18715
18713
  );
18716
18714
  var zeroComputerUseCommand = new Command().name("computer-use").description("Remote desktop control for cloud agents").addCommand(hostCommand).addCommand(clientCommand);
18717
18715
 
18718
- // src/commands/zero/phone/index.ts
18719
- init_esm_shims();
18720
-
18721
- // src/commands/zero/phone/call.ts
18722
- init_esm_shims();
18723
- import * as fs from "fs";
18724
-
18725
- // src/commands/zero/phone/format.ts
18726
- init_esm_shims();
18727
- function printTranscript(transcript) {
18728
- if (!transcript || transcript.length === 0) {
18729
- console.log(" (no transcript)");
18730
- return;
18731
- }
18732
- for (const entry of transcript) {
18733
- console.log(` ${source_default.dim(`[${entry.role}]`)} ${entry.text}`);
18734
- }
18735
- }
18736
- function printCallInfo(call, callId) {
18737
- console.log(` ${"Call ID:".padEnd(16)}${source_default.cyan(call.id ?? callId)}`);
18738
- console.log(` ${"From:".padEnd(16)}${call.fromNumber}`);
18739
- console.log(` ${"To:".padEnd(16)}${call.toNumber}`);
18740
- console.log(` ${"Status:".padEnd(16)}${call.status}`);
18741
- console.log(
18742
- ` ${"Duration:".padEnd(16)}${call.durationSeconds != null ? `${call.durationSeconds}s` : "N/A"}`
18743
- );
18744
- console.log(` ${"Started:".padEnd(16)}${call.startedAt ?? ""}`);
18745
- }
18746
-
18747
- // src/commands/zero/phone/call.ts
18748
- var POLL_INTERVAL_MS = 1e4;
18749
- var POLL_TIMEOUT_MS = 15 * 60 * 1e3;
18750
- var delay = {
18751
- ms: (ms) => {
18752
- return new Promise((resolve) => {
18753
- setTimeout(resolve, ms);
18754
- });
18755
- }
18756
- };
18757
- var TERMINAL_STATUSES = /* @__PURE__ */ new Set([
18758
- "completed",
18759
- "ended",
18760
- "failed",
18761
- "no-answer",
18762
- "busy",
18763
- "cancelled"
18764
- ]);
18765
- function isErrnoException(err) {
18766
- return err instanceof Error && "code" in err;
18767
- }
18768
- var callCommand = new Command().name("call").description("Initiate an outbound phone call").argument(
18769
- "<to-number>",
18770
- "Phone number to call (E.164 format, e.g. +14155551234)"
18771
- ).addOption(
18772
- new Option(
18773
- "--mode <mode>",
18774
- "onhold: wait for call to complete and return transcript. fire-and-forget: initiate and return immediately."
18775
- ).choices(["onhold", "fire-and-forget"]).makeOptionMandatory()
18776
- ).option(
18777
- "--system-prompt-file <path>",
18778
- "File that defines the agent's persona and task context for this call"
18779
- ).action(
18780
- withErrorHandler(
18781
- async (toNumber, options) => {
18782
- if (!/^\+[1-9]\d{1,14}$/.test(toNumber)) {
18783
- console.error(
18784
- source_default.red(
18785
- "Invalid phone number format. Use E.164 (e.g. +14155551234)"
18786
- )
18787
- );
18788
- process.exit(1);
18789
- }
18790
- let systemPrompt;
18791
- if (options.systemPromptFile) {
18792
- try {
18793
- systemPrompt = fs.readFileSync(options.systemPromptFile, "utf-8");
18794
- } catch (err) {
18795
- if (isErrnoException(err) && err.code === "ENOENT") {
18796
- console.error(
18797
- source_default.red(`File not found: ${options.systemPromptFile}`)
18798
- );
18799
- process.exit(1);
18800
- }
18801
- throw err;
18802
- }
18803
- }
18804
- const result = await createPhoneCall({
18805
- toNumber,
18806
- systemPrompt,
18807
- mode: options.mode
18808
- });
18809
- console.log(source_default.green("Call initiated"));
18810
- console.log(` ${"Call ID:".padEnd(12)}${source_default.cyan(result.callId)}`);
18811
- console.log(` ${"Status:".padEnd(12)}${result.status}`);
18812
- if (options.mode === "fire-and-forget") {
18813
- return;
18814
- }
18815
- console.log();
18816
- console.log(
18817
- source_default.dim("Waiting for call to complete (polling every 10s)...")
18818
- );
18819
- const startTime = Date.now();
18820
- while (Date.now() - startTime < POLL_TIMEOUT_MS) {
18821
- await delay.ms(POLL_INTERVAL_MS);
18822
- const detail = await getPhoneCallDetail(result.callId);
18823
- const status = detail.call.status;
18824
- const elapsed = Math.round((Date.now() - startTime) / 1e3);
18825
- if (TERMINAL_STATUSES.has(status)) {
18826
- console.log();
18827
- console.log(source_default.bold("Call Detail"));
18828
- console.log();
18829
- printCallInfo(detail.call, result.callId);
18830
- console.log();
18831
- console.log(source_default.bold("Transcript"));
18832
- console.log();
18833
- printTranscript(detail.transcript);
18834
- if (status === "failed") {
18835
- process.exit(1);
18836
- }
18837
- return;
18838
- }
18839
- console.log(source_default.dim(` [${elapsed}s] status: ${status}`));
18840
- }
18841
- console.error(source_default.red("\nCall timed out after 15 minutes"));
18842
- process.exit(1);
18843
- }
18844
- )
18845
- );
18846
-
18847
- // src/commands/zero/phone/record.ts
18848
- init_esm_shims();
18849
- async function showCallDetail(callId) {
18850
- const result = await getPhoneCallDetail(callId);
18851
- console.log(source_default.bold("Call Detail"));
18852
- console.log();
18853
- printCallInfo(result.call, callId);
18854
- console.log();
18855
- console.log(source_default.bold("Transcript"));
18856
- console.log();
18857
- printTranscript(result.transcript);
18858
- }
18859
- async function showCallList(limit) {
18860
- const result = await listPhoneCalls({ limit });
18861
- if (result.data.length === 0) {
18862
- console.log(source_default.dim("No phone calls found"));
18863
- return;
18864
- }
18865
- console.log(source_default.bold("Recent Calls"));
18866
- console.log();
18867
- for (const call of result.data) {
18868
- const id = call.id;
18869
- const from = call.fromNumber;
18870
- const to = call.toNumber;
18871
- const status = call.status;
18872
- const duration = call.durationSeconds;
18873
- const snippet = call.lastTranscriptSnippet ?? "";
18874
- console.log(` ${source_default.cyan(id)}`);
18875
- console.log(
18876
- ` ${from} \u2192 ${to} ${source_default.dim(status)}${duration != null ? ` ${duration}s` : ""}`
18877
- );
18878
- if (snippet) {
18879
- console.log(` ${source_default.dim(snippet.slice(0, 80))}`);
18880
- }
18881
- console.log();
18882
- }
18883
- console.log(
18884
- source_default.dim(`Showing ${result.data.length} of ${result.total} call(s)`)
18885
- );
18886
- }
18887
- var recordCommand = new Command().name("record").description("View phone call history and transcripts").argument("[call-id]", "Call ID to view details (omit to list recent calls)").option("-n, --limit <number>", "Number of calls to show", "10").action(
18888
- withErrorHandler(
18889
- async (callId, options) => {
18890
- if (callId) {
18891
- await showCallDetail(callId);
18892
- } else {
18893
- const limit = parseInt(options.limit, 10) || 10;
18894
- await showCallList(limit);
18895
- }
18896
- }
18897
- )
18898
- );
18899
-
18900
- // src/commands/zero/phone/index.ts
18901
- var zeroPhoneCommand = new Command().name("phone").description("Make and manage phone calls").addCommand(callCommand).addCommand(recordCommand);
18902
-
18903
18716
  // src/commands/zero/web/index.ts
18904
18717
  init_esm_shims();
18905
18718
 
@@ -18996,7 +18809,6 @@ var COMMAND_CAPABILITY_MAP = {
18996
18809
  whoami: null,
18997
18810
  "developer-support": null,
18998
18811
  "computer-use": "computer-use:write",
18999
- phone: "phone:write",
19000
18812
  web: null
19001
18813
  };
19002
18814
  var DEFAULT_COMMANDS = [
@@ -19017,7 +18829,6 @@ var DEFAULT_COMMANDS = [
19017
18829
  zeroSkillCommand,
19018
18830
  zeroDeveloperSupportCommand,
19019
18831
  zeroComputerUseCommand,
19020
- zeroPhoneCommand,
19021
18832
  zeroWebCommand
19022
18833
  ];
19023
18834
  function shouldHideCommand(name, payload) {
@@ -19037,7 +18848,7 @@ function registerZeroCommands(prog, commands) {
19037
18848
  var program = new Command();
19038
18849
  program.name("zero").description(
19039
18850
  "Zero CLI \u2014 interact with the zero platform from inside the sandbox"
19040
- ).version("9.131.5").addHelpText(
18851
+ ).version("9.132.1").addHelpText(
19041
18852
  "after",
19042
18853
  `
19043
18854
  Examples: