@vm0/cli 9.145.4 → 9.145.6

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.
@@ -74083,7 +74083,7 @@ if (DSN) {
74083
74083
  init2({
74084
74084
  dsn: DSN,
74085
74085
  environment: process.env.SENTRY_ENVIRONMENT ?? "production",
74086
- release: "9.145.4",
74086
+ release: "9.145.6",
74087
74087
  sendDefaultPii: false,
74088
74088
  tracesSampleRate: 0,
74089
74089
  shutdownTimeout: 500,
@@ -74102,7 +74102,7 @@ if (DSN) {
74102
74102
  }
74103
74103
  });
74104
74104
  setContext("cli", {
74105
- version: "9.145.4",
74105
+ version: "9.145.6",
74106
74106
  command: process.argv.slice(2).join(" ")
74107
74107
  });
74108
74108
  setContext("runtime", {
@@ -100940,6 +100940,10 @@ var orgDefaultAgentContract = c8.router({
100940
100940
 
100941
100941
  // ../../packages/api-contracts/src/contracts/runs.ts
100942
100942
  var c9 = initContract();
100943
+ var MAX_EVENT_SEQUENCE_NUMBER = 2147483647;
100944
+ var eventSequenceNumberSchema = external_exports.number().int().nonnegative().max(MAX_EVENT_SEQUENCE_NUMBER);
100945
+ var eventSequenceCursorSchema = external_exports.number().int().min(-1).max(MAX_EVENT_SEQUENCE_NUMBER);
100946
+ var eventSequenceCursorQuerySchema = external_exports.coerce.number().int().min(-1).max(MAX_EVENT_SEQUENCE_NUMBER);
100943
100947
  var ALL_RUN_STATUSES = [
100944
100948
  "queued",
100945
100949
  "pending",
@@ -101030,7 +101034,7 @@ var getRunResponseSchema = external_exports.object({
101030
101034
  completedAt: external_exports.string().optional()
101031
101035
  });
101032
101036
  var runEventSchema = external_exports.object({
101033
- sequenceNumber: external_exports.number(),
101037
+ sequenceNumber: eventSequenceNumberSchema,
101034
101038
  eventType: external_exports.string(),
101035
101039
  eventData: external_exports.unknown(),
101036
101040
  createdAt: external_exports.string()
@@ -101046,12 +101050,13 @@ var runResultSchema = external_exports.object({
101046
101050
  var runStateSchema = external_exports.object({
101047
101051
  status: runStatusSchema,
101048
101052
  result: runResultSchema.optional(),
101049
- error: external_exports.string().optional()
101053
+ error: external_exports.string().optional(),
101054
+ lastEventSequence: eventSequenceNumberSchema.optional()
101050
101055
  });
101051
101056
  var eventsResponseSchema = external_exports.object({
101052
101057
  events: external_exports.array(runEventSchema),
101053
101058
  hasMore: external_exports.boolean(),
101054
- nextSequence: external_exports.number(),
101059
+ nextSequence: eventSequenceCursorSchema,
101055
101060
  run: runStateSchema,
101056
101061
  framework: external_exports.string()
101057
101062
  });
@@ -101179,11 +101184,12 @@ var runEventsContract = c9.router({
101179
101184
  id: external_exports.uuid("Run ID must be a valid UUID")
101180
101185
  }),
101181
101186
  query: external_exports.object({
101182
- since: external_exports.coerce.number().default(-1),
101183
- limit: external_exports.coerce.number().default(100)
101187
+ since: eventSequenceCursorQuerySchema.default(-1),
101188
+ limit: external_exports.coerce.number().int().min(1).max(100).default(100)
101184
101189
  }),
101185
101190
  responses: {
101186
101191
  200: eventsResponseSchema,
101192
+ 400: apiErrorSchema,
101187
101193
  401: apiErrorSchema,
101188
101194
  404: apiErrorSchema
101189
101195
  },
@@ -101695,7 +101701,7 @@ var sandboxReuseResultSchema = external_exports.enum([
101695
101701
  ]);
101696
101702
  var agentEventSchema = external_exports.object({
101697
101703
  type: external_exports.string(),
101698
- sequenceNumber: external_exports.number().int().nonnegative()
101704
+ sequenceNumber: eventSequenceNumberSchema
101699
101705
  }).passthrough();
101700
101706
  var artifactSnapshotsSchema = external_exports.array(
101701
101707
  external_exports.object({
@@ -101747,7 +101753,7 @@ var webhookCompleteContract = c11.router({
101747
101753
  runId: external_exports.string().min(1, "runId is required"),
101748
101754
  exitCode: external_exports.number(),
101749
101755
  error: external_exports.string().optional(),
101750
- lastEventSequence: external_exports.number().int().nonnegative().optional(),
101756
+ lastEventSequence: eventSequenceNumberSchema.optional(),
101751
101757
  // Sandbox id the run executed against. Optional because a run that fails
101752
101758
  // before VM creation has no sandbox. Persisted to agent_runs.sandbox_id;
101753
101759
  // the 255-char cap matches the DB column (defense in depth).
@@ -103230,6 +103236,8 @@ var chatThreadDetailSchema = external_exports.object({
103230
103236
  * and org defaults) for the next run. Optional for back-compat.
103231
103237
  */
103232
103238
  modelProviderId: external_exports.string().nullable().optional(),
103239
+ modelProviderType: modelProviderTypeSchema.nullable().optional(),
103240
+ modelProviderCredentialScope: modelProviderCredentialScopeSchema.nullable().optional(),
103233
103241
  selectedModel: external_exports.string().nullable().optional(),
103234
103242
  /**
103235
103243
  * ISO timestamp at which the user manually renamed this thread. Null/undefined
@@ -119828,24 +119836,12 @@ var voiceChatTaskSchema = external_exports.object({
119828
119836
  startedAt: external_exports.string().nullable(),
119829
119837
  finishedAt: external_exports.string().nullable()
119830
119838
  });
119831
- var legacyTokenResponseSchema = external_exports.object({
119839
+ var tokenResponseSchema = external_exports.object({
119832
119840
  client_secret: external_exports.object({
119833
119841
  value: external_exports.string(),
119834
119842
  expires_at: external_exports.number()
119835
119843
  })
119836
119844
  });
119837
- var relayBootstrapResponseSchema = external_exports.object({
119838
- relayUrl: external_exports.url(),
119839
- relayToken: external_exports.string(),
119840
- expiresAt: external_exports.number(),
119841
- sessionId: external_exports.uuid(),
119842
- transport: external_exports.enum(["websocket"]),
119843
- minimumCreditsRequired: external_exports.number().int().nonnegative().optional()
119844
- });
119845
- var tokenResponseSchema = external_exports.union([
119846
- legacyTokenResponseSchema,
119847
- relayBootstrapResponseSchema
119848
- ]);
119849
119845
  var createSessionBodySchema = external_exports.object({ agentId: external_exports.uuid() });
119850
119846
  var appendItemBodySchema = external_exports.object({
119851
119847
  role: voiceChatItemRoleSchema,
@@ -119990,7 +119986,7 @@ var zeroVoiceChatContract = c54.router({
119990
119986
  500: apiErrorSchema,
119991
119987
  503: apiErrorSchema
119992
119988
  },
119993
- summary: "Mint a voice-chat token. Returns either the legacy OpenAI client_secret or, when VoiceChatRealtimeBilling is ON, a VM0 relay bootstrap (relayUrl + HMAC relayToken)."
119989
+ summary: "Mint an ephemeral OpenAI realtime token for voice-chat"
119994
119990
  }
119995
119991
  });
119996
119992
 
@@ -120575,7 +120571,8 @@ var FEATURE_SWITCHES = {
120575
120571
  ["queueMessage" /* QueueMessage */]: {
120576
120572
  maintainer: "linghan@vm0.ai",
120577
120573
  description: "Allow keyboard sends during an active chat thread run to append the draft to that thread's pending message queue.",
120578
- enabled: false
120574
+ enabled: false,
120575
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
120579
120576
  },
120580
120577
  ["chatThreadPin" /* ChatThreadPin */]: {
120581
120578
  maintainer: "ethan@vm0.ai",
@@ -120655,9 +120652,8 @@ var FEATURE_SWITCHES = {
120655
120652
  },
120656
120653
  ["modelFirstModelProvider" /* ModelFirstModelProvider */]: {
120657
120654
  maintainer: "lancy@vm0.ai",
120658
- description: "Gate the model-first model provider selection foundation. When off, all provider-first resolver, UI, CLI, and legacy model provider defaults remain unchanged. When on, follow-up work can use org model policies, canonical models, and member-scoped OAuth credentials.",
120659
- enabled: false,
120660
- enabledOrgIdHashes: STAFF_ORG_ID_HASHES
120655
+ description: "Gate the model-first model provider selection foundation. When off, all provider-first resolver, UI, CLI, and legacy model provider defaults remain unchanged. When on, follow-up work can use org model policies, canonical models, and member-scoped OAuth credentials. Default-off for every org, including staff; per-user toggle via Lab.",
120656
+ enabled: false
120661
120657
  },
120662
120658
  ["voiceChatRealtimeBilling" /* VoiceChatRealtimeBilling */]: {
120663
120659
  maintainer: "lancy@vm0.ai",
@@ -121725,57 +121721,164 @@ function renderRunCreated(response) {
121725
121721
  });
121726
121722
  }
121727
121723
  }
121724
+ var TERMINAL_RUN_STATUSES = [
121725
+ "completed",
121726
+ "failed",
121727
+ "timeout",
121728
+ "cancelled"
121729
+ ];
121730
+ var POLL_INTERVAL_MS = 1e3;
121731
+ var TERMINAL_DRAIN_POLL_INTERVAL_MS = 500;
121732
+ var TERMINAL_DRAIN_IDLE_MS = 1e3;
121733
+ var TERMINAL_DRAIN_MAX_MS = 3e3;
121734
+ function isTerminalRunState(run) {
121735
+ return TERMINAL_RUN_STATUSES.includes(run.status);
121736
+ }
121737
+ function shouldDrainNextEventPage(response, madeSequenceProgress) {
121738
+ return response.hasMore && response.events.length > 0 && madeSequenceProgress;
121739
+ }
121740
+ function isBlockedBySequenceGap(response, madeSequenceProgress) {
121741
+ return response.hasMore && !madeSequenceProgress;
121742
+ }
121743
+ function hasTerminalWatermark(run) {
121744
+ return run.lastEventSequence !== void 0;
121745
+ }
121746
+ function hasReachedTerminalWatermark(run, nextSequence) {
121747
+ return run.lastEventSequence !== void 0 && nextSequence >= run.lastEventSequence;
121748
+ }
121749
+ function shouldCompleteTerminalDrain(terminalSeenAt, lastTerminalProgressAt, blockedByGap) {
121750
+ const now = Date.now();
121751
+ const terminalElapsedMs = now - terminalSeenAt;
121752
+ const terminalIdleMs = now - lastTerminalProgressAt;
121753
+ return terminalElapsedMs >= TERMINAL_DRAIN_MAX_MS || !blockedByGap && terminalIdleMs >= TERMINAL_DRAIN_IDLE_MS;
121754
+ }
121755
+ function updateTerminalDrainState(state, run, madeSequenceProgress, now) {
121756
+ if (isTerminalRunState(run)) {
121757
+ if (!state.runState) {
121758
+ state.seenAt = now;
121759
+ state.lastProgressAt = now;
121760
+ } else if (madeSequenceProgress) {
121761
+ state.lastProgressAt = now;
121762
+ }
121763
+ state.runState = run;
121764
+ return;
121765
+ }
121766
+ if (state.runState && madeSequenceProgress) {
121767
+ state.lastProgressAt = now;
121768
+ }
121769
+ }
121770
+ function isBlockedByTerminalWatermark(run, nextSequence) {
121771
+ return hasTerminalWatermark(run) && !hasReachedTerminalWatermark(run, nextSequence);
121772
+ }
121773
+ function shouldReturnTerminalRunResult(state, response, nextSequence, madeSequenceProgress, seenResultEvent) {
121774
+ const run = state.runState;
121775
+ if (!run) {
121776
+ return false;
121777
+ }
121778
+ if (!hasTerminalWatermark(run) && run.status !== "completed") {
121779
+ if (run.status === "timeout" && shouldDrainNextEventPage(response, madeSequenceProgress)) {
121780
+ return false;
121781
+ }
121782
+ return true;
121783
+ }
121784
+ if (!hasTerminalWatermark(run) && seenResultEvent) {
121785
+ return true;
121786
+ }
121787
+ return shouldCompleteTerminalDrain(
121788
+ state.seenAt,
121789
+ state.lastProgressAt,
121790
+ isBlockedBySequenceGap(response, madeSequenceProgress) || isBlockedByTerminalWatermark(run, nextSequence)
121791
+ );
121792
+ }
121793
+ function renderTerminalRunResult(runId, run) {
121794
+ if (run.status === "completed") {
121795
+ EventRenderer.renderRunCompleted(run.result);
121796
+ return {
121797
+ succeeded: true,
121798
+ runId,
121799
+ sessionId: run.result?.agentSessionId,
121800
+ checkpointId: run.result?.checkpointId
121801
+ };
121802
+ }
121803
+ if (run.status === "failed") {
121804
+ EventRenderer.renderRunFailed(run.error, runId);
121805
+ return { succeeded: false, runId };
121806
+ }
121807
+ if (run.status === "timeout") {
121808
+ console.error(source_default.red("\n\u2717 Run timed out"));
121809
+ console.error(
121810
+ source_default.dim(` (use "vm0 logs ${runId} --system" to view system logs)`)
121811
+ );
121812
+ return { succeeded: false, runId };
121813
+ }
121814
+ console.error(source_default.yellow("\n\u2717 Run cancelled"));
121815
+ return { succeeded: false, runId };
121816
+ }
121817
+ function sleep(ms) {
121818
+ return new Promise((resolve2) => {
121819
+ return setTimeout(resolve2, ms);
121820
+ });
121821
+ }
121728
121822
  async function pollEvents(runId, options) {
121729
121823
  const renderer = new EventRenderer({ verbose: options?.verbose });
121730
121824
  let nextSequence = -1;
121731
- let complete = false;
121732
- let result = { succeeded: true, runId };
121733
- const pollIntervalMs = 1e3;
121734
- while (!complete) {
121825
+ const terminalDrain = {
121826
+ seenAt: 0,
121827
+ lastProgressAt: 0
121828
+ };
121829
+ let seenResultEvent = false;
121830
+ for (; ; ) {
121831
+ const previousSequence = nextSequence;
121735
121832
  const response = await getEvents(runId, {
121736
121833
  since: nextSequence
121737
121834
  });
121738
- for (const event of response.events) {
121739
- const eventData = event.eventData;
121740
- const parsed = parseEvent(eventData, response.framework);
121741
- if (parsed) {
121742
- renderer.render(parsed);
121743
- }
121744
- }
121745
- nextSequence = response.nextSequence;
121746
- const runStatus = response.run.status;
121747
- if (runStatus === "completed") {
121748
- complete = true;
121749
- EventRenderer.renderRunCompleted(response.run.result);
121750
- result = {
121751
- succeeded: true,
121752
- runId,
121753
- sessionId: response.run.result?.agentSessionId,
121754
- checkpointId: response.run.result?.checkpointId
121755
- };
121756
- } else if (runStatus === "failed") {
121757
- complete = true;
121758
- EventRenderer.renderRunFailed(response.run.error, runId);
121759
- result = { succeeded: false, runId };
121760
- } else if (runStatus === "timeout") {
121761
- complete = true;
121762
- console.error(source_default.red("\n\u2717 Run timed out"));
121763
- console.error(
121764
- source_default.dim(` (use "vm0 logs ${runId} --system" to view system logs)`)
121765
- );
121766
- result = { succeeded: false, runId };
121767
- } else if (runStatus === "cancelled") {
121768
- complete = true;
121769
- console.error(source_default.yellow("\n\u2717 Run cancelled"));
121770
- result = { succeeded: false, runId };
121771
- }
121772
- if (!complete) {
121773
- await new Promise((resolve2) => {
121774
- return setTimeout(resolve2, pollIntervalMs);
121775
- });
121835
+ const now = Date.now();
121836
+ const madeSequenceProgress = response.nextSequence > previousSequence;
121837
+ let pageHasResultEvent = false;
121838
+ if (madeSequenceProgress) {
121839
+ for (const event of response.events) {
121840
+ const eventData = event.eventData;
121841
+ const parsed = parseEvent(eventData, response.framework);
121842
+ if (parsed) {
121843
+ renderer.render(parsed);
121844
+ if (parsed.type === "result") {
121845
+ pageHasResultEvent = true;
121846
+ }
121847
+ }
121848
+ }
121849
+ }
121850
+ if (madeSequenceProgress) {
121851
+ if (pageHasResultEvent) {
121852
+ seenResultEvent = true;
121853
+ }
121854
+ nextSequence = response.nextSequence;
121776
121855
  }
121856
+ updateTerminalDrainState(
121857
+ terminalDrain,
121858
+ response.run,
121859
+ madeSequenceProgress,
121860
+ now
121861
+ );
121862
+ if (terminalDrain.runState && hasReachedTerminalWatermark(terminalDrain.runState, nextSequence)) {
121863
+ return renderTerminalRunResult(runId, terminalDrain.runState);
121864
+ }
121865
+ const terminalRunState = terminalDrain.runState;
121866
+ if (terminalRunState && shouldReturnTerminalRunResult(
121867
+ terminalDrain,
121868
+ response,
121869
+ nextSequence,
121870
+ madeSequenceProgress,
121871
+ seenResultEvent
121872
+ )) {
121873
+ return renderTerminalRunResult(runId, terminalRunState);
121874
+ }
121875
+ if (shouldDrainNextEventPage(response, madeSequenceProgress)) {
121876
+ continue;
121877
+ }
121878
+ await sleep(
121879
+ terminalDrain.runState ? TERMINAL_DRAIN_POLL_INTERVAL_MS : POLL_INTERVAL_MS
121880
+ );
121777
121881
  }
121778
- return result;
121779
121882
  }
121780
121883
  function showNextSteps(result) {
121781
121884
  const { runId, sessionId, checkpointId } = result;
@@ -122044,4 +122147,4 @@ undici/lib/web/fetch/body.js:
122044
122147
  undici/lib/web/websocket/frame.js:
122045
122148
  (*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
122046
122149
  */
122047
- //# sourceMappingURL=chunk-2CIMPE42.js.map
122150
+ //# sourceMappingURL=chunk-2LVWQ6RG.js.map