@vm0/cli 9.122.8 → 9.122.10

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.
@@ -73642,7 +73642,7 @@ if (DSN) {
73642
73642
  init2({
73643
73643
  dsn: DSN,
73644
73644
  environment: process.env.SENTRY_ENVIRONMENT ?? "production",
73645
- release: "9.122.8",
73645
+ release: "9.122.10",
73646
73646
  sendDefaultPii: false,
73647
73647
  tracesSampleRate: 0,
73648
73648
  shutdownTimeout: 500,
@@ -73661,7 +73661,7 @@ if (DSN) {
73661
73661
  }
73662
73662
  });
73663
73663
  setContext("cli", {
73664
- version: "9.122.8",
73664
+ version: "9.122.10",
73665
73665
  command: process.argv.slice(2).join(" ")
73666
73666
  });
73667
73667
  setContext("runtime", {
@@ -108474,6 +108474,78 @@ init_esm_shims();
108474
108474
 
108475
108475
  // ../../packages/core/src/contracts/firewalls.ts
108476
108476
  init_esm_shims();
108477
+
108478
+ // ../../packages/core/src/contracts/segment-parser.ts
108479
+ init_esm_shims();
108480
+ var ERROR_HINT = 'use "{name}", "prefix{name}", "{name}suffix", or "prefix{name}suffix"';
108481
+ function parseSegment(seg) {
108482
+ const openCount = countChar(seg, "{");
108483
+ const closeCount = countChar(seg, "}");
108484
+ if (openCount === 0 && closeCount === 0) {
108485
+ return { kind: "literal", value: seg };
108486
+ }
108487
+ if (openCount !== closeCount) {
108488
+ return {
108489
+ kind: "error",
108490
+ reason: `unbalanced brace in segment "${seg}" \u2014 ${ERROR_HINT}`
108491
+ };
108492
+ }
108493
+ const open1 = seg.indexOf("{");
108494
+ const close1 = seg.indexOf("}");
108495
+ if (close1 < open1) {
108496
+ return {
108497
+ kind: "error",
108498
+ reason: `unbalanced brace in segment "${seg}" \u2014 ${ERROR_HINT}`
108499
+ };
108500
+ }
108501
+ if (openCount >= 2) {
108502
+ const open2 = seg.indexOf("{", close1 + 1);
108503
+ if (close1 + 1 === open2) {
108504
+ return {
108505
+ kind: "error",
108506
+ reason: `adjacent parameters in segment "${seg}" \u2014 only one parameter per segment is allowed; ${ERROR_HINT}`
108507
+ };
108508
+ }
108509
+ return {
108510
+ kind: "error",
108511
+ reason: `literal-separated parameters in segment "${seg}" \u2014 only one parameter per segment is allowed; ${ERROR_HINT}`
108512
+ };
108513
+ }
108514
+ const prefix = seg.slice(0, open1);
108515
+ const content = seg.slice(open1 + 1, close1);
108516
+ const suffix = seg.slice(close1 + 1);
108517
+ if (prefix.includes("{") || prefix.includes("}") || suffix.includes("{") || suffix.includes("}")) {
108518
+ return {
108519
+ kind: "error",
108520
+ reason: `unbalanced brace in segment "${seg}" \u2014 ${ERROR_HINT}`
108521
+ };
108522
+ }
108523
+ let greedy = "";
108524
+ let name = content;
108525
+ if (content.length > 0) {
108526
+ const last = content[content.length - 1];
108527
+ if (last === "+" || last === "*") {
108528
+ greedy = last;
108529
+ name = content.slice(0, -1);
108530
+ }
108531
+ }
108532
+ if (name.length === 0) {
108533
+ return {
108534
+ kind: "error",
108535
+ reason: `empty parameter name in segment "${seg}" \u2014 ${ERROR_HINT}`
108536
+ };
108537
+ }
108538
+ return { kind: "param", prefix, name, suffix, greedy };
108539
+ }
108540
+ function countChar(s, ch) {
108541
+ let n = 0;
108542
+ for (let i = 0; i < s.length; i++) {
108543
+ if (s[i] === ch) n++;
108544
+ }
108545
+ return n;
108546
+ }
108547
+
108548
+ // ../../packages/core/src/contracts/firewalls.ts
108477
108549
  var firewallPermissionSchema = external_exports.object({
108478
108550
  name: external_exports.string(),
108479
108551
  description: external_exports.string().optional(),
@@ -110144,6 +110216,21 @@ var VM0_MODEL_TO_PROVIDER = {
110144
110216
  "claude-opus-4-7": {
110145
110217
  concreteType: "anthropic-api-key",
110146
110218
  vendor: "anthropic"
110219
+ },
110220
+ "kimi-k2.5": {
110221
+ concreteType: "moonshot-api-key",
110222
+ vendor: "moonshot",
110223
+ featureFlag: "vm0KimiModel" /* Vm0KimiModel */
110224
+ },
110225
+ "glm-5.1": {
110226
+ concreteType: "zai-api-key",
110227
+ vendor: "zai",
110228
+ featureFlag: "vm0GlmModel" /* Vm0GlmModel */
110229
+ },
110230
+ "MiniMax-M2.7": {
110231
+ concreteType: "minimax-api-key",
110232
+ vendor: "minimax",
110233
+ featureFlag: "vm0MinimaxModel" /* Vm0MinimaxModel */
110147
110234
  }
110148
110235
  };
110149
110236
  var MODEL_PROVIDER_TYPES = {
@@ -110245,8 +110332,8 @@ var MODEL_PROVIDER_TYPES = {
110245
110332
  API_TIMEOUT_MS: "3000000",
110246
110333
  CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1"
110247
110334
  },
110248
- models: ["MiniMax-M2.1"],
110249
- defaultModel: "MiniMax-M2.1"
110335
+ models: ["MiniMax-M2.7", "MiniMax-M2.1"],
110336
+ defaultModel: "MiniMax-M2.7"
110250
110337
  },
110251
110338
  "deepseek-api-key": {
110252
110339
  framework: "claude-code",
@@ -110284,8 +110371,8 @@ var MODEL_PROVIDER_TYPES = {
110284
110371
  CLAUDE_CODE_SUBAGENT_MODEL: "$model",
110285
110372
  API_TIMEOUT_MS: "3000000"
110286
110373
  },
110287
- models: ["glm-5", "glm-4.7", "glm-4.5-air"],
110288
- defaultModel: "glm-4.7"
110374
+ models: ["glm-5.1", "glm-5", "glm-4.7", "glm-4.5-air"],
110375
+ defaultModel: "glm-5.1"
110289
110376
  },
110290
110377
  "vercel-ai-gateway": {
110291
110378
  framework: "claude-code",
@@ -110721,7 +110808,14 @@ var chatThreadListItemSchema = external_exports.object({
110721
110808
  * Threads whose last message is archived are filtered out server-side.
110722
110809
  */
110723
110810
  isRead: external_exports.boolean(),
110724
- isArchived: external_exports.boolean()
110811
+ isArchived: external_exports.boolean(),
110812
+ /**
110813
+ * True when the thread has at least one non-terminal run
110814
+ * (queued / pending / running). Drives the sidebar running indicator,
110815
+ * which is mutually exclusive with the unread dot and shares the
110816
+ * `ChatThreadReadIndicator` feature switch gate.
110817
+ */
110818
+ running: external_exports.boolean()
110725
110819
  });
110726
110820
  var toolSummaryEntrySchema = external_exports.object({
110727
110821
  kind: external_exports.literal("tool"),
@@ -110915,8 +111009,7 @@ var chatThreadMessagesContract = c11.router({
110915
111009
  }),
110916
111010
  responses: {
110917
111011
  200: external_exports.object({
110918
- messages: external_exports.array(pagedChatMessageSchema),
110919
- hasMore: external_exports.boolean()
111012
+ messages: external_exports.array(pagedChatMessageSchema)
110920
111013
  }),
110921
111014
  401: apiErrorSchema,
110922
111015
  404: apiErrorSchema
@@ -111269,32 +111362,45 @@ var MAX_RESPONSE_SIZE = 128 * 1024;
111269
111362
 
111270
111363
  // ../../packages/core/src/contracts/firewall-rule-matcher.ts
111271
111364
  init_esm_shims();
111272
- var PARAM_SEG = /^\{([^}]+)\}$/;
111365
+ function matchMixedSegment(runtime, prefix, suffix) {
111366
+ if (!runtime.startsWith(prefix)) return null;
111367
+ if (!runtime.endsWith(suffix)) return null;
111368
+ if (runtime.length <= prefix.length + suffix.length) return null;
111369
+ return runtime.slice(prefix.length, runtime.length - suffix.length);
111370
+ }
111273
111371
  function matchFirewallPath(path3, pattern) {
111274
111372
  const pathSegs = path3.split("/").filter(Boolean);
111275
111373
  const patternSegs = pattern.split("/").filter(Boolean);
111276
111374
  const params = {};
111277
111375
  let pi = 0;
111278
111376
  for (const seg of patternSegs) {
111279
- const m = PARAM_SEG.exec(seg);
111280
- if (m) {
111281
- const name = m[1];
111282
- if (name.endsWith("+")) {
111283
- if (pi >= pathSegs.length) return null;
111284
- params[name.slice(0, -1)] = pathSegs.slice(pi).join("/");
111285
- return params;
111286
- }
111287
- if (name.endsWith("*")) {
111288
- params[name.slice(0, -1)] = pathSegs.slice(pi).join("/");
111289
- return params;
111290
- }
111291
- if (pi >= pathSegs.length) return null;
111292
- params[name] = pathSegs[pi];
111377
+ const parsed = parseSegment(seg);
111378
+ if (parsed.kind === "error") return null;
111379
+ if (parsed.kind === "literal") {
111380
+ if (pi >= pathSegs.length || pathSegs[pi] !== parsed.value) return null;
111293
111381
  pi++;
111382
+ continue;
111383
+ }
111384
+ const { name, prefix, suffix, greedy } = parsed;
111385
+ if (greedy === "+") {
111386
+ if (pi >= pathSegs.length) return null;
111387
+ params[name] = pathSegs.slice(pi).join("/");
111388
+ return params;
111389
+ }
111390
+ if (greedy === "*") {
111391
+ params[name] = pathSegs.slice(pi).join("/");
111392
+ return params;
111393
+ }
111394
+ if (pi >= pathSegs.length) return null;
111395
+ const runtime = pathSegs[pi];
111396
+ if (prefix === "" && suffix === "") {
111397
+ params[name] = runtime;
111294
111398
  } else {
111295
- if (pi >= pathSegs.length || pathSegs[pi] !== seg) return null;
111296
- pi++;
111399
+ const captured = matchMixedSegment(runtime, prefix, suffix);
111400
+ if (captured === null) return null;
111401
+ params[name] = captured;
111297
111402
  }
111403
+ pi++;
111298
111404
  }
111299
111405
  if (pi !== pathSegs.length) return null;
111300
111406
  return params;
@@ -111562,20 +111668,26 @@ var zeroAgentResponseSchema = external_exports.object({
111562
111668
  sound: external_exports.string().nullable(),
111563
111669
  avatarUrl: external_exports.string().nullable(),
111564
111670
  permissionPolicies: firewallPoliciesSchema.nullable(),
111565
- customSkills: external_exports.array(external_exports.string()).default([])
111671
+ customSkills: external_exports.array(external_exports.string()).default([]),
111672
+ modelProviderId: external_exports.string().uuid().nullable().default(null),
111673
+ selectedModel: external_exports.string().nullable().default(null)
111566
111674
  });
111567
111675
  var zeroAgentRequestSchema = external_exports.object({
111568
111676
  description: external_exports.string().optional(),
111569
111677
  displayName: external_exports.string().optional(),
111570
111678
  sound: external_exports.string().optional(),
111571
111679
  avatarUrl: external_exports.string().optional(),
111572
- customSkills: external_exports.array(zeroAgentCustomSkillNameSchema).optional()
111680
+ customSkills: external_exports.array(zeroAgentCustomSkillNameSchema).optional(),
111681
+ modelProviderId: external_exports.string().uuid().nullable().optional(),
111682
+ selectedModel: external_exports.string().nullable().optional()
111573
111683
  });
111574
111684
  var zeroAgentMetadataRequestSchema = external_exports.object({
111575
111685
  displayName: external_exports.string().optional(),
111576
111686
  description: external_exports.string().optional(),
111577
111687
  sound: external_exports.string().optional(),
111578
- avatarUrl: external_exports.string().nullable().optional()
111688
+ avatarUrl: external_exports.string().nullable().optional(),
111689
+ modelProviderId: external_exports.string().uuid().nullable().optional(),
111690
+ selectedModel: external_exports.string().nullable().optional()
111579
111691
  });
111580
111692
  var zeroAgentInstructionsResponseSchema = external_exports.object({
111581
111693
  content: external_exports.string().nullable(),
@@ -112682,7 +112794,9 @@ var scheduleResponseSchema = external_exports.object({
112682
112794
  retryStartedAt: external_exports.string().nullable(),
112683
112795
  consecutiveFailures: external_exports.number(),
112684
112796
  createdAt: external_exports.string(),
112685
- updatedAt: external_exports.string()
112797
+ updatedAt: external_exports.string(),
112798
+ modelProviderId: external_exports.string().uuid().nullable().default(null),
112799
+ selectedModel: external_exports.string().nullable().default(null)
112686
112800
  });
112687
112801
  var scheduleListResponseSchema = external_exports.object({
112688
112802
  schedules: external_exports.array(scheduleResponseSchema)
@@ -112702,7 +112816,9 @@ var zeroDeployScheduleRequestSchema = external_exports.object({
112702
112816
  appendSystemPrompt: external_exports.string().optional(),
112703
112817
  volumeVersions: external_exports.record(external_exports.string(), external_exports.string()).optional(),
112704
112818
  agentId: external_exports.string().uuid("Invalid agent ID"),
112705
- enabled: external_exports.boolean().optional()
112819
+ enabled: external_exports.boolean().optional(),
112820
+ modelProviderId: external_exports.string().uuid().nullable().optional(),
112821
+ selectedModel: external_exports.string().nullable().optional()
112706
112822
  }).refine(
112707
112823
  (data) => {
112708
112824
  const triggers = [
@@ -114725,10 +114841,34 @@ var FEATURE_SWITCHES = {
114725
114841
  description: "Enable the Zoom connector (OAuth 2.0) for meetings, past participants, and cloud recordings access",
114726
114842
  enabled: false
114727
114843
  },
114844
+ ["vm0KimiModel" /* Vm0KimiModel */]: {
114845
+ maintainer: "ethan@vm0.ai",
114846
+ description: "Expose Moonshot Kimi K2.5 as a selectable model under the VM0 managed provider",
114847
+ enabled: false,
114848
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
114849
+ },
114850
+ ["vm0GlmModel" /* Vm0GlmModel */]: {
114851
+ maintainer: "ethan@vm0.ai",
114852
+ description: "Expose Z.AI GLM-5.1 as a selectable model under the VM0 managed provider",
114853
+ enabled: false,
114854
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
114855
+ },
114856
+ ["vm0MinimaxModel" /* Vm0MinimaxModel */]: {
114857
+ maintainer: "ethan@vm0.ai",
114858
+ description: "Expose MiniMax M2.7 as a selectable model under the VM0 managed provider",
114859
+ enabled: false,
114860
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
114861
+ },
114728
114862
  ["slackAgentSwitch" /* SlackAgentSwitch */]: {
114729
114863
  maintainer: "yuma@vm0.ai",
114730
114864
  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`.",
114731
114865
  enabled: false
114866
+ },
114867
+ ["modelProviderSelection" /* ModelProviderSelection */]: {
114868
+ maintainer: "ethan@vm0.ai",
114869
+ 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.",
114870
+ enabled: false,
114871
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
114732
114872
  }
114733
114873
  };
114734
114874
  function isFeatureEnabled(key, ctx) {
@@ -117199,4 +117339,4 @@ undici/lib/web/fetch/body.js:
117199
117339
  undici/lib/web/websocket/frame.js:
117200
117340
  (*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
117201
117341
  */
117202
- //# sourceMappingURL=chunk-4TLRYOVY.js.map
117342
+ //# sourceMappingURL=chunk-GMBF7S6J.js.map