@vm0/cli 9.132.0 → 9.132.2

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-3OOH3FG4.js";
65
+ } from "./chunk-SRDBBQRJ.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.132.0"}`));
7774
+ console.log(source_default.bold(`VM0 CLI v${"9.132.2"}`));
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.132.0");
11714
+ await startSilentUpgrade("9.132.2");
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.132.0");
11806
+ await startSilentUpgrade("9.132.2");
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.132.0") {
13580
- console.log(source_default.green(`\u2713 Already up to date (${"9.132.0"})`));
13579
+ if (latestVersion === "9.132.2") {
13580
+ console.log(source_default.green(`\u2713 Already up to date (${"9.132.2"})`));
13581
13581
  return;
13582
13582
  }
13583
13583
  console.log(
13584
13584
  source_default.yellow(
13585
- `Current version: ${"9.132.0"} -> Latest version: ${latestVersion}`
13585
+ `Current version: ${"9.132.2"} -> 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.132.0"} to ${latestVersion}`)
13612
+ source_default.green(`\u2713 Upgraded from ${"9.132.2"} 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.132.0");
13679
+ program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.132.2");
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.132.0",
3
+ "version": "9.132.2",
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-3OOH3FG4.js";
115
+ } from "./chunk-SRDBBQRJ.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,
@@ -13895,11 +13892,6 @@ var FEATURE_SWITCHES = {
13895
13892
  description: "Show the data export option in account menu",
13896
13893
  enabled: false
13897
13894
  },
13898
- ["showSystemPrompt" /* ShowSystemPrompt */]: {
13899
- maintainer: "ethan@vm0.ai",
13900
- description: "Show the appended system prompt in activity detail steps",
13901
- enabled: false
13902
- },
13903
13895
  ["usageAnalytics" /* UsageAnalytics */]: {
13904
13896
  maintainer: "ethan@vm0.ai",
13905
13897
  description: "Show admin-only daily credits chart and per-run records on Usage page",
@@ -13910,14 +13902,9 @@ var FEATURE_SWITCHES = {
13910
13902
  description: "Show the selected model name in activity details",
13911
13903
  enabled: false
13912
13904
  },
13913
- ["activityLogList" /* ActivityLogList */]: {
13914
- maintainer: "ethan@vm0.ai",
13915
- description: "Show the Activities list page and breadcrumb navigation",
13916
- enabled: false
13917
- },
13918
13905
  ["zeroDebug" /* ZeroDebug */]: {
13919
13906
  maintainer: "ethan@vm0.ai",
13920
- description: "Reveal debug tabs in activity pages and Debug preferences",
13907
+ description: "Reveal activity debug surfaces, activity log navigation, appended system prompts, and Debug preferences",
13921
13908
  enabled: false
13922
13909
  },
13923
13910
  ["computerUse" /* ComputerUse */]: {
@@ -13935,15 +13922,10 @@ var FEATURE_SWITCHES = {
13935
13922
  description: "Show audit log links in Slack messages",
13936
13923
  enabled: false
13937
13924
  },
13938
- ["phoneIntegration" /* PhoneIntegration */]: {
13939
- maintainer: "ethan@vm0.ai",
13940
- description: "Show the Phone page for voice call integration",
13941
- enabled: false
13942
- },
13943
13925
  ["audioInput" /* AudioInput */]: {
13944
13926
  maintainer: "lancy@vm0.ai",
13945
13927
  description: "Enable voice input (microphone + STT) in chat \u2014 gates the mic button and the /api/zero/voice-io/stt route",
13946
- enabled: false
13928
+ enabled: true
13947
13929
  },
13948
13930
  ["audioOutput" /* AudioOutput */]: {
13949
13931
  maintainer: "lancy@vm0.ai",
@@ -13955,11 +13937,6 @@ var FEATURE_SWITCHES = {
13955
13937
  description: "Enable automatic skill creation in agent prompts",
13956
13938
  enabled: false
13957
13939
  },
13958
- ["scheduleRunHistory" /* ScheduleRunHistory */]: {
13959
- maintainer: "linghan@vm0.ai",
13960
- description: "Show Run History tab on schedules page and Chat-from-schedule button on activity detail",
13961
- enabled: false
13962
- },
13963
13940
  ["testOauthConnector" /* TestOauthConnector */]: {
13964
13941
  maintainer: "liangyou@vm0.ai",
13965
13942
  description: "Enable the test-oauth connector, a synthetic OAuth 2.0 provider used only for automated tests. Off in prod.",
@@ -14000,12 +13977,6 @@ var FEATURE_SWITCHES = {
14000
13977
  description: "Gate the custom /settings/api-keys UI for issuing personal access tokens used by the /api/v1 public surface. When disabled, the settings page redirects to / and the sidebar menu item is hidden. The backend /api/v1 verification does NOT consult this flag \u2014 previously issued PATs continue to work.",
14001
13978
  enabled: false
14002
13979
  },
14003
- ["slackAgentSwitch" /* SlackAgentSwitch */]: {
14004
- maintainer: "yuma@vm0.ai",
14005
- description: "Per-user agent override in the org-aware Slack app. When enabled for an org, members can choose which agent replies to their Slack mentions / DMs via `/zero switch` (opens an agent picker modal) or the Switch button on the App Home tab. The help text for `/zero help` also lists the switch subcommand. Selecting an alternate agent persists a row in `slack_user_agent_preferences` so the preference follows the user across every Slack workspace joined under the same org, and subsequent mention / DM replies from a non-default agent carry a `Sent via <agent>` footer so it's clear which agent produced the reply. When gated off, the modal, slash subcommand, App Home button, and help line are hidden AND any existing DB preferences are ignored at read time \u2014 every user falls back to the org default agent with no footer. Staff-only during the rollout window defined by `enabledOrgIdHashes`.",
14006
- enabled: false,
14007
- enabledOrgIdHashes: STAFF_ORG_ID_HASHES
14008
- },
14009
13980
  ["modelProviderSelection" /* ModelProviderSelection */]: {
14010
13981
  maintainer: "ethan@vm0.ai",
14011
13982
  description: "Show the model provider + model picker on the agent profile page and schedule dialog. Allows per-agent and per-schedule model selection, overriding the org default. Staff-only during initial rollout.",
@@ -14017,6 +13988,12 @@ var FEATURE_SWITCHES = {
14017
13988
  description: "Replace the per-agent chat list with a unified Chats view that includes threads from every agent in the user's org (sub-agents included). Gates the sidebar + /chats title/placeholder/aria-label swaps, the per-row agent avatar render, and the unscoped request shape. New-chat creation still uses the current-agent fallback.",
14018
13989
  enabled: false
14019
13990
  },
13991
+ ["connectorCategories" /* ConnectorCategories */]: {
13992
+ maintainer: "ethan@vm0.ai",
13993
+ description: "Show category sections and the hover-reveal outline menu on the Connectors settings page. Staff-only during rollout.",
13994
+ enabled: false,
13995
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
13996
+ },
14020
13997
  ["vm0DeepseekModel" /* Vm0DeepseekModel */]: {
14021
13998
  maintainer: "ethan@vm0.ai",
14022
13999
  description: "Enable the DeepSeek-V3.2 (deepseek-chat) VM0 managed model",
@@ -18721,191 +18698,6 @@ Examples:
18721
18698
  );
18722
18699
  var zeroComputerUseCommand = new Command().name("computer-use").description("Remote desktop control for cloud agents").addCommand(hostCommand).addCommand(clientCommand);
18723
18700
 
18724
- // src/commands/zero/phone/index.ts
18725
- init_esm_shims();
18726
-
18727
- // src/commands/zero/phone/call.ts
18728
- init_esm_shims();
18729
- import * as fs from "fs";
18730
-
18731
- // src/commands/zero/phone/format.ts
18732
- init_esm_shims();
18733
- function printTranscript(transcript) {
18734
- if (!transcript || transcript.length === 0) {
18735
- console.log(" (no transcript)");
18736
- return;
18737
- }
18738
- for (const entry of transcript) {
18739
- console.log(` ${source_default.dim(`[${entry.role}]`)} ${entry.text}`);
18740
- }
18741
- }
18742
- function printCallInfo(call, callId) {
18743
- console.log(` ${"Call ID:".padEnd(16)}${source_default.cyan(call.id ?? callId)}`);
18744
- console.log(` ${"From:".padEnd(16)}${call.fromNumber}`);
18745
- console.log(` ${"To:".padEnd(16)}${call.toNumber}`);
18746
- console.log(` ${"Status:".padEnd(16)}${call.status}`);
18747
- console.log(
18748
- ` ${"Duration:".padEnd(16)}${call.durationSeconds != null ? `${call.durationSeconds}s` : "N/A"}`
18749
- );
18750
- console.log(` ${"Started:".padEnd(16)}${call.startedAt ?? ""}`);
18751
- }
18752
-
18753
- // src/commands/zero/phone/call.ts
18754
- var POLL_INTERVAL_MS = 1e4;
18755
- var POLL_TIMEOUT_MS = 15 * 60 * 1e3;
18756
- var delay = {
18757
- ms: (ms) => {
18758
- return new Promise((resolve) => {
18759
- setTimeout(resolve, ms);
18760
- });
18761
- }
18762
- };
18763
- var TERMINAL_STATUSES = /* @__PURE__ */ new Set([
18764
- "completed",
18765
- "ended",
18766
- "failed",
18767
- "no-answer",
18768
- "busy",
18769
- "cancelled"
18770
- ]);
18771
- function isErrnoException(err) {
18772
- return err instanceof Error && "code" in err;
18773
- }
18774
- var callCommand = new Command().name("call").description("Initiate an outbound phone call").argument(
18775
- "<to-number>",
18776
- "Phone number to call (E.164 format, e.g. +14155551234)"
18777
- ).addOption(
18778
- new Option(
18779
- "--mode <mode>",
18780
- "onhold: wait for call to complete and return transcript. fire-and-forget: initiate and return immediately."
18781
- ).choices(["onhold", "fire-and-forget"]).makeOptionMandatory()
18782
- ).option(
18783
- "--system-prompt-file <path>",
18784
- "File that defines the agent's persona and task context for this call"
18785
- ).action(
18786
- withErrorHandler(
18787
- async (toNumber, options) => {
18788
- if (!/^\+[1-9]\d{1,14}$/.test(toNumber)) {
18789
- console.error(
18790
- source_default.red(
18791
- "Invalid phone number format. Use E.164 (e.g. +14155551234)"
18792
- )
18793
- );
18794
- process.exit(1);
18795
- }
18796
- let systemPrompt;
18797
- if (options.systemPromptFile) {
18798
- try {
18799
- systemPrompt = fs.readFileSync(options.systemPromptFile, "utf-8");
18800
- } catch (err) {
18801
- if (isErrnoException(err) && err.code === "ENOENT") {
18802
- console.error(
18803
- source_default.red(`File not found: ${options.systemPromptFile}`)
18804
- );
18805
- process.exit(1);
18806
- }
18807
- throw err;
18808
- }
18809
- }
18810
- const result = await createPhoneCall({
18811
- toNumber,
18812
- systemPrompt,
18813
- mode: options.mode
18814
- });
18815
- console.log(source_default.green("Call initiated"));
18816
- console.log(` ${"Call ID:".padEnd(12)}${source_default.cyan(result.callId)}`);
18817
- console.log(` ${"Status:".padEnd(12)}${result.status}`);
18818
- if (options.mode === "fire-and-forget") {
18819
- return;
18820
- }
18821
- console.log();
18822
- console.log(
18823
- source_default.dim("Waiting for call to complete (polling every 10s)...")
18824
- );
18825
- const startTime = Date.now();
18826
- while (Date.now() - startTime < POLL_TIMEOUT_MS) {
18827
- await delay.ms(POLL_INTERVAL_MS);
18828
- const detail = await getPhoneCallDetail(result.callId);
18829
- const status = detail.call.status;
18830
- const elapsed = Math.round((Date.now() - startTime) / 1e3);
18831
- if (TERMINAL_STATUSES.has(status)) {
18832
- console.log();
18833
- console.log(source_default.bold("Call Detail"));
18834
- console.log();
18835
- printCallInfo(detail.call, result.callId);
18836
- console.log();
18837
- console.log(source_default.bold("Transcript"));
18838
- console.log();
18839
- printTranscript(detail.transcript);
18840
- if (status === "failed") {
18841
- process.exit(1);
18842
- }
18843
- return;
18844
- }
18845
- console.log(source_default.dim(` [${elapsed}s] status: ${status}`));
18846
- }
18847
- console.error(source_default.red("\nCall timed out after 15 minutes"));
18848
- process.exit(1);
18849
- }
18850
- )
18851
- );
18852
-
18853
- // src/commands/zero/phone/record.ts
18854
- init_esm_shims();
18855
- async function showCallDetail(callId) {
18856
- const result = await getPhoneCallDetail(callId);
18857
- console.log(source_default.bold("Call Detail"));
18858
- console.log();
18859
- printCallInfo(result.call, callId);
18860
- console.log();
18861
- console.log(source_default.bold("Transcript"));
18862
- console.log();
18863
- printTranscript(result.transcript);
18864
- }
18865
- async function showCallList(limit) {
18866
- const result = await listPhoneCalls({ limit });
18867
- if (result.data.length === 0) {
18868
- console.log(source_default.dim("No phone calls found"));
18869
- return;
18870
- }
18871
- console.log(source_default.bold("Recent Calls"));
18872
- console.log();
18873
- for (const call of result.data) {
18874
- const id = call.id;
18875
- const from = call.fromNumber;
18876
- const to = call.toNumber;
18877
- const status = call.status;
18878
- const duration = call.durationSeconds;
18879
- const snippet = call.lastTranscriptSnippet ?? "";
18880
- console.log(` ${source_default.cyan(id)}`);
18881
- console.log(
18882
- ` ${from} \u2192 ${to} ${source_default.dim(status)}${duration != null ? ` ${duration}s` : ""}`
18883
- );
18884
- if (snippet) {
18885
- console.log(` ${source_default.dim(snippet.slice(0, 80))}`);
18886
- }
18887
- console.log();
18888
- }
18889
- console.log(
18890
- source_default.dim(`Showing ${result.data.length} of ${result.total} call(s)`)
18891
- );
18892
- }
18893
- 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(
18894
- withErrorHandler(
18895
- async (callId, options) => {
18896
- if (callId) {
18897
- await showCallDetail(callId);
18898
- } else {
18899
- const limit = parseInt(options.limit, 10) || 10;
18900
- await showCallList(limit);
18901
- }
18902
- }
18903
- )
18904
- );
18905
-
18906
- // src/commands/zero/phone/index.ts
18907
- var zeroPhoneCommand = new Command().name("phone").description("Make and manage phone calls").addCommand(callCommand).addCommand(recordCommand);
18908
-
18909
18701
  // src/commands/zero/web/index.ts
18910
18702
  init_esm_shims();
18911
18703
 
@@ -19002,7 +18794,6 @@ var COMMAND_CAPABILITY_MAP = {
19002
18794
  whoami: null,
19003
18795
  "developer-support": null,
19004
18796
  "computer-use": "computer-use:write",
19005
- phone: "phone:write",
19006
18797
  web: null
19007
18798
  };
19008
18799
  var DEFAULT_COMMANDS = [
@@ -19023,7 +18814,6 @@ var DEFAULT_COMMANDS = [
19023
18814
  zeroSkillCommand,
19024
18815
  zeroDeveloperSupportCommand,
19025
18816
  zeroComputerUseCommand,
19026
- zeroPhoneCommand,
19027
18817
  zeroWebCommand
19028
18818
  ];
19029
18819
  function shouldHideCommand(name, payload) {
@@ -19043,7 +18833,7 @@ function registerZeroCommands(prog, commands) {
19043
18833
  var program = new Command();
19044
18834
  program.name("zero").description(
19045
18835
  "Zero CLI \u2014 interact with the zero platform from inside the sandbox"
19046
- ).version("9.132.0").addHelpText(
18836
+ ).version("9.132.2").addHelpText(
19047
18837
  "after",
19048
18838
  `
19049
18839
  Examples: