@vm0/cli 9.122.8 → 9.122.9

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.9",
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.9",
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(),
@@ -110721,7 +110793,14 @@ var chatThreadListItemSchema = external_exports.object({
110721
110793
  * Threads whose last message is archived are filtered out server-side.
110722
110794
  */
110723
110795
  isRead: external_exports.boolean(),
110724
- isArchived: external_exports.boolean()
110796
+ isArchived: external_exports.boolean(),
110797
+ /**
110798
+ * True when the thread has at least one non-terminal run
110799
+ * (queued / pending / running). Drives the sidebar running indicator,
110800
+ * which is mutually exclusive with the unread dot and shares the
110801
+ * `ChatThreadReadIndicator` feature switch gate.
110802
+ */
110803
+ running: external_exports.boolean()
110725
110804
  });
110726
110805
  var toolSummaryEntrySchema = external_exports.object({
110727
110806
  kind: external_exports.literal("tool"),
@@ -110915,8 +110994,7 @@ var chatThreadMessagesContract = c11.router({
110915
110994
  }),
110916
110995
  responses: {
110917
110996
  200: external_exports.object({
110918
- messages: external_exports.array(pagedChatMessageSchema),
110919
- hasMore: external_exports.boolean()
110997
+ messages: external_exports.array(pagedChatMessageSchema)
110920
110998
  }),
110921
110999
  401: apiErrorSchema,
110922
111000
  404: apiErrorSchema
@@ -111269,32 +111347,45 @@ var MAX_RESPONSE_SIZE = 128 * 1024;
111269
111347
 
111270
111348
  // ../../packages/core/src/contracts/firewall-rule-matcher.ts
111271
111349
  init_esm_shims();
111272
- var PARAM_SEG = /^\{([^}]+)\}$/;
111350
+ function matchMixedSegment(runtime, prefix, suffix) {
111351
+ if (!runtime.startsWith(prefix)) return null;
111352
+ if (!runtime.endsWith(suffix)) return null;
111353
+ if (runtime.length <= prefix.length + suffix.length) return null;
111354
+ return runtime.slice(prefix.length, runtime.length - suffix.length);
111355
+ }
111273
111356
  function matchFirewallPath(path3, pattern) {
111274
111357
  const pathSegs = path3.split("/").filter(Boolean);
111275
111358
  const patternSegs = pattern.split("/").filter(Boolean);
111276
111359
  const params = {};
111277
111360
  let pi = 0;
111278
111361
  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];
111362
+ const parsed = parseSegment(seg);
111363
+ if (parsed.kind === "error") return null;
111364
+ if (parsed.kind === "literal") {
111365
+ if (pi >= pathSegs.length || pathSegs[pi] !== parsed.value) return null;
111293
111366
  pi++;
111367
+ continue;
111368
+ }
111369
+ const { name, prefix, suffix, greedy } = parsed;
111370
+ if (greedy === "+") {
111371
+ if (pi >= pathSegs.length) return null;
111372
+ params[name] = pathSegs.slice(pi).join("/");
111373
+ return params;
111374
+ }
111375
+ if (greedy === "*") {
111376
+ params[name] = pathSegs.slice(pi).join("/");
111377
+ return params;
111378
+ }
111379
+ if (pi >= pathSegs.length) return null;
111380
+ const runtime = pathSegs[pi];
111381
+ if (prefix === "" && suffix === "") {
111382
+ params[name] = runtime;
111294
111383
  } else {
111295
- if (pi >= pathSegs.length || pathSegs[pi] !== seg) return null;
111296
- pi++;
111384
+ const captured = matchMixedSegment(runtime, prefix, suffix);
111385
+ if (captured === null) return null;
111386
+ params[name] = captured;
111297
111387
  }
111388
+ pi++;
111298
111389
  }
111299
111390
  if (pi !== pathSegs.length) return null;
111300
111391
  return params;
@@ -111562,20 +111653,26 @@ var zeroAgentResponseSchema = external_exports.object({
111562
111653
  sound: external_exports.string().nullable(),
111563
111654
  avatarUrl: external_exports.string().nullable(),
111564
111655
  permissionPolicies: firewallPoliciesSchema.nullable(),
111565
- customSkills: external_exports.array(external_exports.string()).default([])
111656
+ customSkills: external_exports.array(external_exports.string()).default([]),
111657
+ modelProviderId: external_exports.string().uuid().nullable().default(null),
111658
+ selectedModel: external_exports.string().nullable().default(null)
111566
111659
  });
111567
111660
  var zeroAgentRequestSchema = external_exports.object({
111568
111661
  description: external_exports.string().optional(),
111569
111662
  displayName: external_exports.string().optional(),
111570
111663
  sound: external_exports.string().optional(),
111571
111664
  avatarUrl: external_exports.string().optional(),
111572
- customSkills: external_exports.array(zeroAgentCustomSkillNameSchema).optional()
111665
+ customSkills: external_exports.array(zeroAgentCustomSkillNameSchema).optional(),
111666
+ modelProviderId: external_exports.string().uuid().nullable().optional(),
111667
+ selectedModel: external_exports.string().nullable().optional()
111573
111668
  });
111574
111669
  var zeroAgentMetadataRequestSchema = external_exports.object({
111575
111670
  displayName: external_exports.string().optional(),
111576
111671
  description: external_exports.string().optional(),
111577
111672
  sound: external_exports.string().optional(),
111578
- avatarUrl: external_exports.string().nullable().optional()
111673
+ avatarUrl: external_exports.string().nullable().optional(),
111674
+ modelProviderId: external_exports.string().uuid().nullable().optional(),
111675
+ selectedModel: external_exports.string().nullable().optional()
111579
111676
  });
111580
111677
  var zeroAgentInstructionsResponseSchema = external_exports.object({
111581
111678
  content: external_exports.string().nullable(),
@@ -112682,7 +112779,9 @@ var scheduleResponseSchema = external_exports.object({
112682
112779
  retryStartedAt: external_exports.string().nullable(),
112683
112780
  consecutiveFailures: external_exports.number(),
112684
112781
  createdAt: external_exports.string(),
112685
- updatedAt: external_exports.string()
112782
+ updatedAt: external_exports.string(),
112783
+ modelProviderId: external_exports.string().uuid().nullable().default(null),
112784
+ selectedModel: external_exports.string().nullable().default(null)
112686
112785
  });
112687
112786
  var scheduleListResponseSchema = external_exports.object({
112688
112787
  schedules: external_exports.array(scheduleResponseSchema)
@@ -112702,7 +112801,9 @@ var zeroDeployScheduleRequestSchema = external_exports.object({
112702
112801
  appendSystemPrompt: external_exports.string().optional(),
112703
112802
  volumeVersions: external_exports.record(external_exports.string(), external_exports.string()).optional(),
112704
112803
  agentId: external_exports.string().uuid("Invalid agent ID"),
112705
- enabled: external_exports.boolean().optional()
112804
+ enabled: external_exports.boolean().optional(),
112805
+ modelProviderId: external_exports.string().uuid().nullable().optional(),
112806
+ selectedModel: external_exports.string().nullable().optional()
112706
112807
  }).refine(
112707
112808
  (data) => {
112708
112809
  const triggers = [
@@ -114729,6 +114830,12 @@ var FEATURE_SWITCHES = {
114729
114830
  maintainer: "yuma@vm0.ai",
114730
114831
  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
114832
  enabled: false
114833
+ },
114834
+ ["modelProviderSelection" /* ModelProviderSelection */]: {
114835
+ maintainer: "ethan@vm0.ai",
114836
+ 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.",
114837
+ enabled: false,
114838
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
114732
114839
  }
114733
114840
  };
114734
114841
  function isFeatureEnabled(key, ctx) {
@@ -117199,4 +117306,4 @@ undici/lib/web/fetch/body.js:
117199
117306
  undici/lib/web/websocket/frame.js:
117200
117307
  (*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
117201
117308
  */
117202
- //# sourceMappingURL=chunk-4TLRYOVY.js.map
117309
+ //# sourceMappingURL=chunk-4PF2QGDE.js.map