@vm0/cli 9.180.4 → 9.180.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.180.4",
74086
+ release: "9.180.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.180.4",
74105
+ version: "9.180.6",
74106
74106
  command: process.argv.slice(2).join(" ")
74107
74107
  });
74108
74108
  setContext("runtime", {
@@ -93198,6 +93198,7 @@ var firewallSchema = external_exports.object({
93198
93198
  apis: external_exports.array(firewallApiSchema)
93199
93199
  });
93200
93200
  var firewallsSchema = external_exports.array(firewallSchema);
93201
+ var UNKNOWN_PERMISSION_GRANT = "__unknown__";
93201
93202
  var firewallConfigSchema = external_exports.object({
93202
93203
  name: external_exports.string().min(1, "Firewall name is required"),
93203
93204
  description: external_exports.string().optional(),
@@ -94285,13 +94286,18 @@ var storageEntrySchema = external_exports.object({
94285
94286
  instructionsTargetFilename: external_exports.string().optional(),
94286
94287
  archiveUrl: external_exports.string()
94287
94288
  });
94289
+ var artifactMissingRootPolicySchema = external_exports.enum([
94290
+ "fail",
94291
+ "preserveParentVersion"
94292
+ ]);
94288
94293
  var artifactEntrySchema = external_exports.object({
94289
94294
  mountPath: external_exports.string(),
94290
94295
  vasStorageName: external_exports.string(),
94291
94296
  vasStorageId: external_exports.string(),
94292
94297
  vasVersionId: external_exports.string(),
94293
94298
  archiveUrl: external_exports.string(),
94294
- manifestUrl: external_exports.string().optional()
94299
+ manifestUrl: external_exports.string().optional(),
94300
+ missingRootPolicy: artifactMissingRootPolicySchema.optional()
94295
94301
  });
94296
94302
  var storageManifestSchema = external_exports.object({
94297
94303
  storages: external_exports.array(storageEntrySchema),
@@ -95797,7 +95803,6 @@ var orgMessageResponseSchema = external_exports.object({
95797
95803
  // ../../packages/api-contracts/src/contracts/orgs.ts
95798
95804
  var c4 = initContract();
95799
95805
  var orgTierSchema = external_exports.enum(["free", "pro-suspend", "pro", "team"]);
95800
- var permissionGrantModeSchema = external_exports.enum(["legacy", "user-grants"]);
95801
95806
  var orgSlugSchema = external_exports.string().min(3, "Org slug must be at least 3 characters").max(64, "Org slug must be at most 64 characters").regex(
95802
95807
  /^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]{1,2}$/,
95803
95808
  "Org slug must contain only lowercase letters, numbers, and hyphens, and must start and end with an alphanumeric character"
@@ -95810,7 +95815,6 @@ var orgResponseSchema = external_exports.object({
95810
95815
  name: external_exports.string(),
95811
95816
  tier: external_exports.string().optional(),
95812
95817
  role: orgRoleSchema.optional(),
95813
- permissionGrantMode: permissionGrantModeSchema.optional(),
95814
95818
  createdBy: external_exports.string().optional()
95815
95819
  });
95816
95820
  var updateOrgRequestSchema = external_exports.object({
@@ -96915,7 +96919,6 @@ var zeroAgentResponseSchema = external_exports.object({
96915
96919
  displayName: external_exports.string().nullable(),
96916
96920
  sound: external_exports.string().nullable(),
96917
96921
  avatarUrl: external_exports.string().nullable(),
96918
- permissionPolicies: firewallPoliciesSchema.nullable(),
96919
96922
  customSkills: external_exports.array(external_exports.string()).default([]),
96920
96923
  modelProviderId: external_exports.string().uuid().nullable().default(null),
96921
96924
  selectedModel: external_exports.string().nullable().default(null),
@@ -97037,26 +97040,6 @@ var zeroAgentsByIdContract = c13.router({
97037
97040
  summary: "Delete zero agent by id"
97038
97041
  }
97039
97042
  });
97040
- var zeroAgentPermissionPoliciesRequestSchema = external_exports.object({
97041
- agentId: external_exports.string().uuid(),
97042
- policies: firewallPoliciesSchema
97043
- });
97044
- var zeroAgentPermissionPoliciesContract = c13.router({
97045
- update: {
97046
- method: "PUT",
97047
- path: "/api/zero/permission-policies",
97048
- headers: authHeadersSchema,
97049
- body: zeroAgentPermissionPoliciesRequestSchema,
97050
- responses: {
97051
- 200: zeroAgentResponseSchema,
97052
- 400: apiErrorSchema,
97053
- 401: apiErrorSchema,
97054
- 403: apiErrorSchema,
97055
- 404: apiErrorSchema
97056
- },
97057
- summary: "Update zero agent permission policies (owner only)"
97058
- }
97059
- });
97060
97043
  var zeroAgentInstructionsContract = c13.router({
97061
97044
  get: {
97062
97045
  method: "GET",
@@ -97227,101 +97210,70 @@ var zeroSkillsDetailContract = c13.router({
97227
97210
  summary: "Delete custom skill from the organization"
97228
97211
  }
97229
97212
  });
97230
- var permissionAccessRequestStatusSchema = external_exports.enum([
97231
- "pending",
97232
- "approved",
97233
- "rejected"
97234
- ]);
97235
- var permissionAccessRequestActionSchema = external_exports.enum(["allow", "deny"]);
97236
- var permissionAccessRequestResponseSchema = external_exports.object({
97237
- id: external_exports.string().uuid(),
97238
- agentId: external_exports.string().uuid(),
97239
- connectorRef: external_exports.string(),
97240
- permission: external_exports.string(),
97241
- action: permissionAccessRequestActionSchema,
97242
- method: external_exports.string().nullable(),
97243
- path: external_exports.string().nullable(),
97244
- reason: external_exports.string().nullable(),
97245
- status: permissionAccessRequestStatusSchema,
97246
- requesterUserId: external_exports.string(),
97247
- requesterName: external_exports.string().nullable(),
97248
- resolvedBy: external_exports.string().nullable(),
97249
- resolvedAt: external_exports.string().nullable(),
97250
- createdAt: external_exports.string()
97251
- });
97252
- var createPermissionAccessRequestSchema = external_exports.object({
97253
- agentId: external_exports.string().uuid(),
97254
- connectorRef: external_exports.string(),
97255
- permission: external_exports.string(),
97256
- action: permissionAccessRequestActionSchema.optional().default("allow"),
97257
- method: external_exports.string().optional(),
97258
- path: external_exports.string().optional(),
97259
- reason: external_exports.string().optional()
97260
- });
97261
- var resolvePermissionAccessRequestSchema = external_exports.object({
97262
- requestId: external_exports.string().uuid(),
97263
- action: external_exports.enum(["approve", "reject"])
97213
+
97214
+ // ../../packages/api-contracts/src/contracts/zero-user-permission-grants.ts
97215
+ init_esm_shims();
97216
+ var c14 = initContract();
97217
+ var agentIdSchema = external_exports.string().uuid();
97218
+ var connectorRefSchema = external_exports.string().min(1).max(64);
97219
+ var permissionSchema = external_exports.string().min(1).max(128);
97220
+ var userPermissionGrantActionSchema = external_exports.enum(["allow", "deny"]);
97221
+ var userPermissionGrantResponseSchema = external_exports.object({
97222
+ agentId: agentIdSchema,
97223
+ connectorRef: connectorRefSchema,
97224
+ permission: permissionSchema,
97225
+ action: userPermissionGrantActionSchema,
97226
+ expiresAt: external_exports.string().nullable(),
97227
+ createdAt: external_exports.string(),
97228
+ updatedAt: external_exports.string()
97264
97229
  });
97265
- var permissionAccessRequestsCreateContract = c13.router({
97266
- create: {
97267
- method: "POST",
97268
- path: "/api/zero/permission-access-requests",
97269
- headers: authHeadersSchema,
97270
- body: createPermissionAccessRequestSchema,
97271
- responses: {
97272
- 201: permissionAccessRequestResponseSchema,
97273
- 400: apiErrorSchema,
97274
- 401: apiErrorSchema,
97275
- 403: apiErrorSchema,
97276
- 404: apiErrorSchema
97277
- },
97278
- summary: "Create permission access request"
97279
- }
97230
+ var listUserPermissionGrantsQuerySchema = external_exports.object({
97231
+ agentId: agentIdSchema
97280
97232
  });
97281
- var permissionAccessRequestsListQuerySchema = external_exports.object({
97282
- agentId: external_exports.string().optional(),
97283
- requestId: external_exports.string().optional(),
97284
- status: external_exports.string().optional()
97233
+ var upsertUserPermissionGrantRequestSchema = external_exports.object({
97234
+ agentId: agentIdSchema,
97235
+ connectorRef: connectorRefSchema,
97236
+ permission: permissionSchema,
97237
+ action: userPermissionGrantActionSchema
97285
97238
  });
97286
- var permissionAccessRequestsListContract = c13.router({
97239
+ var zeroUserPermissionGrantsContract = c14.router({
97287
97240
  list: {
97288
97241
  method: "GET",
97289
- path: "/api/zero/permission-access-requests",
97242
+ path: "/api/zero/user-permission-grants",
97290
97243
  headers: authHeadersSchema,
97291
- query: permissionAccessRequestsListQuerySchema,
97244
+ query: listUserPermissionGrantsQuerySchema,
97292
97245
  responses: {
97293
- 200: external_exports.array(permissionAccessRequestResponseSchema),
97246
+ 200: external_exports.array(userPermissionGrantResponseSchema),
97294
97247
  400: apiErrorSchema,
97295
97248
  401: apiErrorSchema,
97296
- 403: apiErrorSchema
97249
+ 403: apiErrorSchema,
97250
+ 404: apiErrorSchema
97297
97251
  },
97298
- summary: "List permission access requests for an agent"
97299
- }
97300
- });
97301
- var permissionAccessRequestsResolveContract = c13.router({
97302
- resolve: {
97252
+ summary: "List current user's active permission grants for an agent"
97253
+ },
97254
+ upsert: {
97303
97255
  method: "PUT",
97304
- path: "/api/zero/permission-access-requests",
97256
+ path: "/api/zero/user-permission-grants",
97305
97257
  headers: authHeadersSchema,
97306
- body: resolvePermissionAccessRequestSchema,
97258
+ body: upsertUserPermissionGrantRequestSchema,
97307
97259
  responses: {
97308
- 200: permissionAccessRequestResponseSchema,
97260
+ 200: userPermissionGrantResponseSchema,
97309
97261
  400: apiErrorSchema,
97310
97262
  401: apiErrorSchema,
97311
97263
  403: apiErrorSchema,
97312
97264
  404: apiErrorSchema
97313
97265
  },
97314
- summary: "Resolve (approve/reject) a permission access request (owner only)"
97266
+ summary: "Upsert current user's permission grant for an agent"
97315
97267
  }
97316
97268
  });
97317
97269
 
97318
97270
  // ../../packages/api-contracts/src/contracts/user-connectors.ts
97319
97271
  init_esm_shims();
97320
- var c14 = initContract();
97272
+ var c15 = initContract();
97321
97273
  var userConnectorEnabledTypesSchema = external_exports.object({
97322
97274
  enabledTypes: external_exports.array(external_exports.string())
97323
97275
  });
97324
- var zeroUserConnectorsContract = c14.router({
97276
+ var zeroUserConnectorsContract = c15.router({
97325
97277
  get: {
97326
97278
  method: "GET",
97327
97279
  path: "/api/zero/agents/:id/user-connectors",
@@ -97405,6 +97357,16 @@ async function getZeroAgentUserConnectors(id) {
97405
97357
  `Failed to get connector permissions for zero agent "${id}"`
97406
97358
  );
97407
97359
  }
97360
+ async function listZeroUserPermissionGrants(agentId) {
97361
+ const config4 = await getClientConfig();
97362
+ const client = initClient(zeroUserPermissionGrantsContract, config4);
97363
+ const result = await client.list({ query: { agentId } });
97364
+ if (result.status === 200) return result.body;
97365
+ handleError(
97366
+ result,
97367
+ `Failed to get permission grants for zero agent "${agentId}"`
97368
+ );
97369
+ }
97408
97370
  async function updateZeroAgentInstructions(id, content) {
97409
97371
  const config4 = await getClientConfig();
97410
97372
  const client = initClient(zeroAgentInstructionsContract, config4);
@@ -108540,8 +108502,8 @@ var connectorOauthDeviceAuthSessionPollResponseSchema = external_exports.discrim
108540
108502
  ]);
108541
108503
 
108542
108504
  // ../../packages/api-contracts/src/contracts/zero-connectors.ts
108543
- var c15 = initContract();
108544
- var zeroConnectorsMainContract = c15.router({
108505
+ var c16 = initContract();
108506
+ var zeroConnectorsMainContract = c16.router({
108545
108507
  list: {
108546
108508
  method: "GET",
108547
108509
  path: "/api/zero/connectors",
@@ -108555,7 +108517,7 @@ var zeroConnectorsMainContract = c15.router({
108555
108517
  summary: "List all connectors (zero proxy)"
108556
108518
  }
108557
108519
  });
108558
- var zeroConnectorsByTypeContract = c15.router({
108520
+ var zeroConnectorsByTypeContract = c16.router({
108559
108521
  get: {
108560
108522
  method: "GET",
108561
108523
  path: "/api/zero/connectors/:type",
@@ -108575,14 +108537,14 @@ var zeroConnectorsByTypeContract = c15.router({
108575
108537
  headers: authHeadersSchema,
108576
108538
  pathParams: external_exports.object({ type: connectorTypeSchema }),
108577
108539
  responses: {
108578
- 204: c15.noBody(),
108540
+ 204: c16.noBody(),
108579
108541
  401: apiErrorSchema,
108580
108542
  404: apiErrorSchema
108581
108543
  },
108582
108544
  summary: "Disconnect a connector (zero proxy)"
108583
108545
  }
108584
108546
  });
108585
- var zeroConnectorScopeDiffContract = c15.router({
108547
+ var zeroConnectorScopeDiffContract = c16.router({
108586
108548
  getScopeDiff: {
108587
108549
  method: "GET",
108588
108550
  path: "/api/zero/connectors/:type/scope-diff",
@@ -108597,7 +108559,7 @@ var zeroConnectorScopeDiffContract = c15.router({
108597
108559
  summary: "Get scope diff for a connector"
108598
108560
  }
108599
108561
  });
108600
- var zeroConnectorOauthStartContract = c15.router({
108562
+ var zeroConnectorOauthStartContract = c16.router({
108601
108563
  start: {
108602
108564
  method: "POST",
108603
108565
  path: "/api/zero/connectors/:type/oauth/start",
@@ -108614,7 +108576,7 @@ var zeroConnectorOauthStartContract = c15.router({
108614
108576
  summary: "Create connector OAuth handoff and authorization URL"
108615
108577
  }
108616
108578
  });
108617
- var zeroConnectorManualGrantContract = c15.router({
108579
+ var zeroConnectorManualGrantContract = c16.router({
108618
108580
  connect: {
108619
108581
  method: "POST",
108620
108582
  path: "/api/zero/connectors/:type/manual-grant",
@@ -108635,7 +108597,7 @@ var zeroConnectorManualGrantContract = c15.router({
108635
108597
  summary: "Connect a connector with a manual grant"
108636
108598
  }
108637
108599
  });
108638
- var zeroConnectorOauthDeviceAuthSessionContract = c15.router({
108600
+ var zeroConnectorOauthDeviceAuthSessionContract = c16.router({
108639
108601
  create: {
108640
108602
  method: "POST",
108641
108603
  path: "/api/zero/connectors/:type/oauth/device/sessions",
@@ -108680,7 +108642,7 @@ var connectorSearchItemSchema = external_exports.object({
108680
108642
  var connectorSearchResponseSchema = external_exports.object({
108681
108643
  connectors: external_exports.array(connectorSearchItemSchema)
108682
108644
  });
108683
- var zeroConnectorsSearchContract = c15.router({
108645
+ var zeroConnectorsSearchContract = c16.router({
108684
108646
  search: {
108685
108647
  method: "GET",
108686
108648
  path: "/api/zero/connectors/search",
@@ -108764,7 +108726,7 @@ var listQuerySchema = external_exports.object({
108764
108726
  cursor: external_exports.string().optional(),
108765
108727
  limit: external_exports.coerce.number().min(1).max(100).default(20)
108766
108728
  });
108767
- var c16 = initContract();
108729
+ var c17 = initContract();
108768
108730
  var logStatusSchema = external_exports.enum([
108769
108731
  "queued",
108770
108732
  "pending",
@@ -108835,7 +108797,7 @@ var logDetailSchema = external_exports.object({
108835
108797
  completedAt: external_exports.string().nullable(),
108836
108798
  artifact: artifactSchema
108837
108799
  });
108838
- var logsListContract = c16.router({
108800
+ var logsListContract = c17.router({
108839
108801
  list: {
108840
108802
  method: "GET",
108841
108803
  path: "/api/zero/logs",
@@ -108857,7 +108819,7 @@ var logsListContract = c16.router({
108857
108819
  summary: "List agent run logs with pagination"
108858
108820
  }
108859
108821
  });
108860
- var logsByIdContract = c16.router({
108822
+ var logsByIdContract = c17.router({
108861
108823
  getById: {
108862
108824
  method: "GET",
108863
108825
  path: "/api/zero/logs/:id",
@@ -108876,7 +108838,7 @@ var logsByIdContract = c16.router({
108876
108838
  });
108877
108839
 
108878
108840
  // ../../packages/api-contracts/src/contracts/runs.ts
108879
- var c17 = initContract();
108841
+ var c18 = initContract();
108880
108842
  var directRunModelProviderTypeSchema = modelProviderTypeSchema.refine(
108881
108843
  (type) => {
108882
108844
  return type !== "vm0";
@@ -109041,7 +109003,7 @@ var runListItemSchema = external_exports.object({
109041
109003
  var runsListResponseSchema = external_exports.object({
109042
109004
  runs: external_exports.array(runListItemSchema)
109043
109005
  });
109044
- var runsMainContract = c17.router({
109006
+ var runsMainContract = c18.router({
109045
109007
  /**
109046
109008
  * GET /api/agent/runs
109047
109009
  * List agent runs (pending and running by default)
@@ -109092,7 +109054,7 @@ var runsMainContract = c17.router({
109092
109054
  summary: "Create and execute agent run"
109093
109055
  }
109094
109056
  });
109095
- var runsByIdContract = c17.router({
109057
+ var runsByIdContract = c18.router({
109096
109058
  /**
109097
109059
  * GET /api/agent/runs/:id
109098
109060
  * Get agent run status and results
@@ -109118,7 +109080,7 @@ var cancelRunResponseSchema = external_exports.object({
109118
109080
  status: external_exports.literal("cancelled"),
109119
109081
  message: external_exports.string()
109120
109082
  });
109121
- var runsCancelContract = c17.router({
109083
+ var runsCancelContract = c18.router({
109122
109084
  /**
109123
109085
  * POST /api/agent/runs/:id/cancel
109124
109086
  * Cancel a pending or running run
@@ -109141,7 +109103,7 @@ var runsCancelContract = c17.router({
109141
109103
  summary: "Cancel a pending or running run"
109142
109104
  }
109143
109105
  });
109144
- var runEventsContract = c17.router({
109106
+ var runEventsContract = c18.router({
109145
109107
  /**
109146
109108
  * GET /api/agent/runs/:id/events
109147
109109
  * Poll for agent run events with pagination
@@ -109235,7 +109197,7 @@ var telemetryResponseSchema = external_exports.object({
109235
109197
  systemLog: external_exports.string(),
109236
109198
  metrics: external_exports.array(telemetryMetricSchema)
109237
109199
  });
109238
- var runTelemetryContract = c17.router({
109200
+ var runTelemetryContract = c18.router({
109239
109201
  /**
109240
109202
  * GET /api/agent/runs/:id/telemetry
109241
109203
  * Get aggregated telemetry data for a run (legacy combined format)
@@ -109255,7 +109217,7 @@ var runTelemetryContract = c17.router({
109255
109217
  summary: "Get run telemetry data"
109256
109218
  }
109257
109219
  });
109258
- var runSystemLogContract = c17.router({
109220
+ var runSystemLogContract = c18.router({
109259
109221
  /**
109260
109222
  * GET /api/agent/runs/:id/telemetry/system-log
109261
109223
  * Get system log with pagination
@@ -109280,7 +109242,7 @@ var runSystemLogContract = c17.router({
109280
109242
  summary: "Get system log with pagination"
109281
109243
  }
109282
109244
  });
109283
- var runMetricsContract = c17.router({
109245
+ var runMetricsContract = c18.router({
109284
109246
  /**
109285
109247
  * GET /api/agent/runs/:id/telemetry/metrics
109286
109248
  * Get metrics with pagination
@@ -109305,7 +109267,7 @@ var runMetricsContract = c17.router({
109305
109267
  summary: "Get metrics with pagination"
109306
109268
  }
109307
109269
  });
109308
- var runAgentEventsContract = c17.router({
109270
+ var runAgentEventsContract = c18.router({
109309
109271
  /**
109310
109272
  * GET /api/agent/runs/:id/telemetry/agent
109311
109273
  * Get agent events with pagination (for vm0 logs default)
@@ -109330,7 +109292,7 @@ var runAgentEventsContract = c17.router({
109330
109292
  summary: "Get agent events with pagination"
109331
109293
  }
109332
109294
  });
109333
- var runNetworkLogsContract = c17.router({
109295
+ var runNetworkLogsContract = c18.router({
109334
109296
  /**
109335
109297
  * GET /api/agent/runs/:id/telemetry/network
109336
109298
  * Get network logs with pagination (for vm0 logs --network)
@@ -109366,7 +109328,7 @@ var logsSearchResponseSchema = external_exports.object({
109366
109328
  results: external_exports.array(searchResultSchema),
109367
109329
  hasMore: external_exports.boolean()
109368
109330
  });
109369
- var logsSearchContract = c17.router({
109331
+ var logsSearchContract = c18.router({
109370
109332
  /**
109371
109333
  * GET /api/logs/search
109372
109334
  * Search agent events across runs using keyword matching
@@ -109423,7 +109385,7 @@ var queueResponseSchema = external_exports.object({
109423
109385
  runningTasks: external_exports.array(runningTaskSchema),
109424
109386
  estimatedTimePerRun: external_exports.number().nullable()
109425
109387
  });
109426
- var runsQueueContract = c17.router({
109388
+ var runsQueueContract = c18.router({
109427
109389
  /**
109428
109390
  * GET /api/agent/runs/queue
109429
109391
  * Get org run queue status including concurrency context and queued entries
@@ -109446,7 +109408,7 @@ init_esm_shims();
109446
109408
 
109447
109409
  // ../../packages/api-contracts/src/contracts/storages.ts
109448
109410
  init_esm_shims();
109449
- var c18 = initContract();
109411
+ var c19 = initContract();
109450
109412
  var storageTypeSchema = external_exports.enum(["volume", "artifact"]);
109451
109413
  var versionQuerySchema = external_exports.string().regex(/^[a-f0-9]{8,64}$/i, "Version must be 8-64 hex characters").optional();
109452
109414
  var uploadStorageResponseSchema = external_exports.object({
@@ -109457,7 +109419,7 @@ var uploadStorageResponseSchema = external_exports.object({
109457
109419
  type: storageTypeSchema,
109458
109420
  deduplicated: external_exports.boolean()
109459
109421
  });
109460
- var storagesContract = c18.router({
109422
+ var storagesContract = c19.router({
109461
109423
  /**
109462
109424
  * POST /api/storages
109463
109425
  * Upload a storage (tar.gz file)
@@ -109474,7 +109436,7 @@ var storagesContract = c18.router({
109474
109436
  path: "/api/storages",
109475
109437
  headers: authHeadersSchema,
109476
109438
  contentType: "multipart/form-data",
109477
- body: c18.type(),
109439
+ body: c19.type(),
109478
109440
  responses: {
109479
109441
  200: uploadStorageResponseSchema,
109480
109442
  400: apiErrorSchema,
@@ -109503,9 +109465,9 @@ var storagesContract = c18.router({
109503
109465
  }),
109504
109466
  responses: {
109505
109467
  // Binary response - actual handling done at route level
109506
- 200: c18.otherResponse({
109468
+ 200: c19.otherResponse({
109507
109469
  contentType: "application/gzip",
109508
- body: c18.type()
109470
+ body: c19.type()
109509
109471
  }),
109510
109472
  400: apiErrorSchema,
109511
109473
  401: apiErrorSchema,
@@ -109530,7 +109492,7 @@ var presignedUploadSchema = external_exports.object({
109530
109492
  key: external_exports.string(),
109531
109493
  presignedUrl: external_exports.url()
109532
109494
  });
109533
- var storagesPrepareContract = c18.router({
109495
+ var storagesPrepareContract = c19.router({
109534
109496
  prepare: {
109535
109497
  method: "POST",
109536
109498
  path: "/api/storages/prepare",
@@ -109565,7 +109527,7 @@ var storagesPrepareContract = c18.router({
109565
109527
  summary: "Prepare for direct S3 upload"
109566
109528
  }
109567
109529
  });
109568
- var storagesCommitContract = c18.router({
109530
+ var storagesCommitContract = c19.router({
109569
109531
  commit: {
109570
109532
  method: "POST",
109571
109533
  path: "/api/storages/commit",
@@ -109599,7 +109561,7 @@ var storagesCommitContract = c18.router({
109599
109561
  summary: "Commit uploaded storage"
109600
109562
  }
109601
109563
  });
109602
- var storagesDownloadContract = c18.router({
109564
+ var storagesDownloadContract = c19.router({
109603
109565
  download: {
109604
109566
  method: "GET",
109605
109567
  path: "/api/storages/download",
@@ -109635,7 +109597,7 @@ var storagesDownloadContract = c18.router({
109635
109597
  summary: "Get presigned download URL"
109636
109598
  }
109637
109599
  });
109638
- var storagesListContract = c18.router({
109600
+ var storagesListContract = c19.router({
109639
109601
  list: {
109640
109602
  method: "GET",
109641
109603
  path: "/api/storages/list",
@@ -109663,17 +109625,17 @@ var storagesListContract = c18.router({
109663
109625
  });
109664
109626
 
109665
109627
  // ../../packages/api-contracts/src/contracts/webhooks.ts
109666
- var c19 = initContract();
109628
+ var c20 = initContract();
109667
109629
  var thirdPartyWebhookErrorSchema = external_exports.object({ error: external_exports.string() });
109668
109630
  var thirdPartyWebhookOkSchema = external_exports.union([
109669
109631
  external_exports.string(),
109670
109632
  external_exports.object({ message: external_exports.literal("pong") })
109671
109633
  ]);
109672
- var webhookClerkContract = c19.router({
109634
+ var webhookClerkContract = c20.router({
109673
109635
  post: {
109674
109636
  method: "POST",
109675
109637
  path: "/api/webhooks/clerk",
109676
- body: c19.type(),
109638
+ body: c20.type(),
109677
109639
  responses: {
109678
109640
  200: thirdPartyWebhookOkSchema,
109679
109641
  401: thirdPartyWebhookErrorSchema
@@ -109681,11 +109643,11 @@ var webhookClerkContract = c19.router({
109681
109643
  summary: "Handle Clerk organization and user webhooks"
109682
109644
  }
109683
109645
  });
109684
- var webhookGithubContract = c19.router({
109646
+ var webhookGithubContract = c20.router({
109685
109647
  post: {
109686
109648
  method: "POST",
109687
109649
  path: "/api/webhooks/github",
109688
- body: c19.type(),
109650
+ body: c20.type(),
109689
109651
  responses: {
109690
109652
  200: thirdPartyWebhookOkSchema,
109691
109653
  400: thirdPartyWebhookErrorSchema,
@@ -109695,11 +109657,11 @@ var webhookGithubContract = c19.router({
109695
109657
  summary: "Handle GitHub App webhooks"
109696
109658
  }
109697
109659
  });
109698
- var webhookStripeContract = c19.router({
109660
+ var webhookStripeContract = c20.router({
109699
109661
  post: {
109700
109662
  method: "POST",
109701
109663
  path: "/api/webhooks/stripe",
109702
- body: c19.type(),
109664
+ body: c20.type(),
109703
109665
  responses: {
109704
109666
  200: thirdPartyWebhookOkSchema,
109705
109667
  401: thirdPartyWebhookErrorSchema,
@@ -109708,7 +109670,7 @@ var webhookStripeContract = c19.router({
109708
109670
  summary: "Handle Stripe billing webhooks"
109709
109671
  }
109710
109672
  });
109711
- var webhookBuiltInGenerationFalContract = c19.router({
109673
+ var webhookBuiltInGenerationFalContract = c20.router({
109712
109674
  post: {
109713
109675
  method: "POST",
109714
109676
  path: "/api/webhooks/built-in-generations/fal/:generationId",
@@ -109719,7 +109681,7 @@ var webhookBuiltInGenerationFalContract = c19.router({
109719
109681
  token: external_exports.string().min(1),
109720
109682
  visualKey: external_exports.string().min(1).optional()
109721
109683
  }),
109722
- body: c19.type(),
109684
+ body: c20.type(),
109723
109685
  responses: {
109724
109686
  200: thirdPartyWebhookOkSchema,
109725
109687
  400: thirdPartyWebhookErrorSchema,
@@ -109729,7 +109691,7 @@ var webhookBuiltInGenerationFalContract = c19.router({
109729
109691
  summary: "Handle fal built-in generation webhooks"
109730
109692
  }
109731
109693
  });
109732
- var webhookBuiltInGenerationBytePlusContract = c19.router({
109694
+ var webhookBuiltInGenerationBytePlusContract = c20.router({
109733
109695
  post: {
109734
109696
  method: "POST",
109735
109697
  path: "/api/webhooks/built-in-generations/byteplus/:generationId",
@@ -109740,7 +109702,7 @@ var webhookBuiltInGenerationBytePlusContract = c19.router({
109740
109702
  token: external_exports.string().min(1),
109741
109703
  visualKey: external_exports.string().min(1).optional()
109742
109704
  }),
109743
- body: c19.type(),
109705
+ body: c20.type(),
109744
109706
  responses: {
109745
109707
  200: thirdPartyWebhookOkSchema,
109746
109708
  400: thirdPartyWebhookErrorSchema,
@@ -109767,7 +109729,10 @@ var artifactSnapshotsSchema = external_exports.array(
109767
109729
  external_exports.object({
109768
109730
  name: external_exports.string(),
109769
109731
  version: external_exports.string(),
109770
- mountPath: external_exports.string()
109732
+ mountPath: external_exports.string(),
109733
+ // Internal provenance used by run creation to decide checkpoint-time
109734
+ // behavior on a later resume. It is not exposed by public checkpoint APIs.
109735
+ generatedBy: external_exports.literal("apiAutoMemory").optional()
109771
109736
  })
109772
109737
  );
109773
109738
  var volumeVersionsSnapshotSchema = external_exports.object({
@@ -109793,7 +109758,7 @@ var firewallAuthResponseSchema = external_exports.object({
109793
109758
  refreshedConnectors: external_exports.array(external_exports.string()),
109794
109759
  refreshedSecrets: external_exports.array(external_exports.string())
109795
109760
  });
109796
- var webhookFirewallAuthContract = c19.router({
109761
+ var webhookFirewallAuthContract = c20.router({
109797
109762
  /**
109798
109763
  * POST /api/webhooks/agent/firewall/auth
109799
109764
  * Resolve firewall auth templates and refresh access tokens on demand.
@@ -109834,7 +109799,7 @@ var webhookFirewallAuthContract = c19.router({
109834
109799
  summary: "Resolve firewall auth templates"
109835
109800
  }
109836
109801
  });
109837
- var webhookEventsContract = c19.router({
109802
+ var webhookEventsContract = c20.router({
109838
109803
  /**
109839
109804
  * POST /api/webhooks/agent/events
109840
109805
  * Receive agent events from sandbox
@@ -109861,7 +109826,7 @@ var webhookEventsContract = c19.router({
109861
109826
  summary: "Receive agent events from sandbox"
109862
109827
  }
109863
109828
  });
109864
- var webhookCompleteContract = c19.router({
109829
+ var webhookCompleteContract = c20.router({
109865
109830
  /**
109866
109831
  * POST /api/webhooks/agent/complete
109867
109832
  * Handle agent run completion (success or failure)
@@ -109898,7 +109863,7 @@ var webhookCompleteContract = c19.router({
109898
109863
  summary: "Handle agent run completion"
109899
109864
  }
109900
109865
  });
109901
- var webhookCheckpointsContract = c19.router({
109866
+ var webhookCheckpointsContract = c20.router({
109902
109867
  /**
109903
109868
  * POST /api/webhooks/agent/checkpoints
109904
109869
  * Create a recoverable checkpoint for an agent run.
@@ -109937,7 +109902,7 @@ var webhookCheckpointsContract = c19.router({
109937
109902
  summary: "Create checkpoint for agent run"
109938
109903
  }
109939
109904
  });
109940
- var webhookCheckpointsPrepareHistoryContract = c19.router({
109905
+ var webhookCheckpointsPrepareHistoryContract = c20.router({
109941
109906
  prepare: {
109942
109907
  method: "POST",
109943
109908
  path: "/api/webhooks/agent/checkpoints/prepare-history",
@@ -109960,7 +109925,7 @@ var webhookCheckpointsPrepareHistoryContract = c19.router({
109960
109925
  summary: "Get presigned URL for uploading session history to S3"
109961
109926
  }
109962
109927
  });
109963
- var webhookHeartbeatContract = c19.router({
109928
+ var webhookHeartbeatContract = c20.router({
109964
109929
  /**
109965
109930
  * POST /api/webhooks/agent/heartbeat
109966
109931
  * Receive heartbeat signals from sandbox
@@ -109984,7 +109949,7 @@ var webhookHeartbeatContract = c19.router({
109984
109949
  summary: "Receive heartbeat from sandbox"
109985
109950
  }
109986
109951
  });
109987
- var webhookStoragesContract = c19.router({
109952
+ var webhookStoragesContract = c20.router({
109988
109953
  /**
109989
109954
  * POST /api/webhooks/agent/storages
109990
109955
  * Create a new version of a storage from sandbox
@@ -110000,7 +109965,7 @@ var webhookStoragesContract = c19.router({
110000
109965
  path: "/api/webhooks/agent/storages",
110001
109966
  headers: authHeadersSchema,
110002
109967
  contentType: "multipart/form-data",
110003
- body: c19.type(),
109968
+ body: c20.type(),
110004
109969
  responses: {
110005
109970
  200: external_exports.object({
110006
109971
  versionId: external_exports.string(),
@@ -110016,7 +109981,7 @@ var webhookStoragesContract = c19.router({
110016
109981
  summary: "Upload storage version from sandbox"
110017
109982
  }
110018
109983
  });
110019
- var webhookStoragesIncrementalContract = c19.router({
109984
+ var webhookStoragesIncrementalContract = c20.router({
110020
109985
  /**
110021
109986
  * POST /api/webhooks/agent/storages/incremental
110022
109987
  * Create a new version using incremental upload
@@ -110034,7 +109999,7 @@ var webhookStoragesIncrementalContract = c19.router({
110034
109999
  path: "/api/webhooks/agent/storages/incremental",
110035
110000
  headers: authHeadersSchema,
110036
110001
  contentType: "multipart/form-data",
110037
- body: c19.type(),
110002
+ body: c20.type(),
110038
110003
  responses: {
110039
110004
  200: external_exports.object({
110040
110005
  versionId: external_exports.string(),
@@ -110072,7 +110037,7 @@ var sandboxOperationSchema = external_exports.object({
110072
110037
  success: external_exports.boolean(),
110073
110038
  error: external_exports.string().optional()
110074
110039
  });
110075
- var webhookTelemetryContract = c19.router({
110040
+ var webhookTelemetryContract = c20.router({
110076
110041
  /**
110077
110042
  * POST /api/webhooks/agent/telemetry
110078
110043
  * Receive telemetry data (system log, metrics, network logs, and sandbox operations) from sandbox
@@ -110101,7 +110066,7 @@ var webhookTelemetryContract = c19.router({
110101
110066
  summary: "Receive telemetry data from sandbox"
110102
110067
  }
110103
110068
  });
110104
- var webhookStoragesPrepareContract = c19.router({
110069
+ var webhookStoragesPrepareContract = c20.router({
110105
110070
  prepare: {
110106
110071
  method: "POST",
110107
110072
  path: "/api/webhooks/agent/storages/prepare",
@@ -110135,7 +110100,7 @@ var webhookStoragesPrepareContract = c19.router({
110135
110100
  summary: "Prepare for direct S3 upload from sandbox"
110136
110101
  }
110137
110102
  });
110138
- var webhookStoragesCommitContract = c19.router({
110103
+ var webhookStoragesCommitContract = c20.router({
110139
110104
  commit: {
110140
110105
  method: "POST",
110141
110106
  path: "/api/webhooks/agent/storages/commit",
@@ -110177,7 +110142,7 @@ var webhookUsageEventItemSchema = external_exports.object({
110177
110142
  category: external_exports.string().min(1).max(100),
110178
110143
  quantity: external_exports.number().int().min(0)
110179
110144
  }).strict();
110180
- var webhookUsageEventContract = c19.router({
110145
+ var webhookUsageEventContract = c20.router({
110181
110146
  send: {
110182
110147
  method: "POST",
110183
110148
  path: "/api/webhooks/agent/usage-event",
@@ -110215,8 +110180,8 @@ var zeroRunRequestSchema = unifiedRunRequestSchema.omit({
110215
110180
  agentId: external_exports.string().optional(),
110216
110181
  modelProvider: external_exports.string().optional()
110217
110182
  });
110218
- var c20 = initContract();
110219
- var zeroRunsMainContract = c20.router({
110183
+ var c21 = initContract();
110184
+ var zeroRunsMainContract = c21.router({
110220
110185
  create: {
110221
110186
  method: "POST",
110222
110187
  path: "/api/zero/runs",
@@ -110235,7 +110200,7 @@ var zeroRunsMainContract = c20.router({
110235
110200
  summary: "Create and execute agent run (zero proxy)"
110236
110201
  }
110237
110202
  });
110238
- var zeroRunsByIdContract = c20.router({
110203
+ var zeroRunsByIdContract = c21.router({
110239
110204
  getById: {
110240
110205
  method: "GET",
110241
110206
  path: "/api/zero/runs/:id",
@@ -110253,7 +110218,7 @@ var zeroRunsByIdContract = c20.router({
110253
110218
  summary: "Get agent run by ID (zero proxy)"
110254
110219
  }
110255
110220
  });
110256
- var zeroRunsCancelContract = c20.router({
110221
+ var zeroRunsCancelContract = c21.router({
110257
110222
  cancel: {
110258
110223
  method: "POST",
110259
110224
  path: "/api/zero/runs/:id/cancel",
@@ -110272,7 +110237,7 @@ var zeroRunsCancelContract = c20.router({
110272
110237
  summary: "Cancel a pending or running run (zero proxy)"
110273
110238
  }
110274
110239
  });
110275
- var zeroRunsQueueContract = c20.router({
110240
+ var zeroRunsQueueContract = c21.router({
110276
110241
  getQueue: {
110277
110242
  method: "GET",
110278
110243
  path: "/api/zero/runs/queue",
@@ -110285,7 +110250,7 @@ var zeroRunsQueueContract = c20.router({
110285
110250
  summary: "Get org run queue status (zero proxy)"
110286
110251
  }
110287
110252
  });
110288
- var zeroRunAgentEventsContract = c20.router({
110253
+ var zeroRunAgentEventsContract = c21.router({
110289
110254
  getAgentEvents: {
110290
110255
  method: "GET",
110291
110256
  path: "/api/zero/runs/:id/telemetry/agent",
@@ -110347,7 +110312,7 @@ var runContextResponseSchema = external_exports.object({
110347
110312
  artifact: runContextArtifactSchema.nullable(),
110348
110313
  featureFlags: external_exports.record(external_exports.string(), external_exports.boolean()).nullable()
110349
110314
  });
110350
- var zeroRunContextContract = c20.router({
110315
+ var zeroRunContextContract = c21.router({
110351
110316
  getContext: {
110352
110317
  method: "GET",
110353
110318
  path: "/api/zero/runs/:id/context",
@@ -110365,7 +110330,7 @@ var zeroRunContextContract = c20.router({
110365
110330
  summary: "Get run execution context snapshot for debugging"
110366
110331
  }
110367
110332
  });
110368
- var zeroRunNetworkLogsContract = c20.router({
110333
+ var zeroRunNetworkLogsContract = c21.router({
110369
110334
  getNetworkLogs: {
110370
110335
  method: "GET",
110371
110336
  path: "/api/zero/runs/:id/network",
@@ -110391,7 +110356,7 @@ var zeroRunNetworkLogsContract = c20.router({
110391
110356
  var runRunnerResponseSchema = external_exports.object({
110392
110357
  sandboxReuseResult: sandboxReuseResultSchema.nullable()
110393
110358
  });
110394
- var zeroRunRunnerContract = c20.router({
110359
+ var zeroRunRunnerContract = c21.router({
110395
110360
  getRunner: {
110396
110361
  method: "GET",
110397
110362
  path: "/api/zero/runs/:id/runner",
@@ -110409,7 +110374,7 @@ var zeroRunRunnerContract = c20.router({
110409
110374
  summary: "Get runner-level metadata for a run"
110410
110375
  }
110411
110376
  });
110412
- var zeroLogsSearchContract = c20.router({
110377
+ var zeroLogsSearchContract = c21.router({
110413
110378
  searchLogs: {
110414
110379
  method: "GET",
110415
110380
  path: "/api/zero/logs/search",
@@ -110474,7 +110439,7 @@ init_esm_shims();
110474
110439
 
110475
110440
  // ../../packages/api-contracts/src/contracts/chat-threads.ts
110476
110441
  init_esm_shims();
110477
- var c21 = initContract();
110442
+ var c22 = initContract();
110478
110443
  var MODEL_FIRST_SELECTION_PROVIDER_ID = "00000000-0000-4000-8000-000000000000";
110479
110444
  var attachFileSchema = external_exports.object({
110480
110445
  id: external_exports.string(),
@@ -110597,6 +110562,20 @@ var pagedChatMessageBaseSchema = external_exports.object({
110597
110562
  attachFiles: external_exports.array(resolvedAttachFileSchema).optional(),
110598
110563
  createdAt: external_exports.string()
110599
110564
  });
110565
+ var chatMessageRecommendedFollowupSchema = external_exports.object({
110566
+ prompt: external_exports.string(),
110567
+ kind: external_exports.enum(["talk", "generate"]),
110568
+ generationType: external_exports.enum(["image", "video", "presentation", "website"]).optional()
110569
+ });
110570
+ var chatMessageRecommendedFollowupsSchema = external_exports.preprocess((value) => {
110571
+ if (!Array.isArray(value)) {
110572
+ return [];
110573
+ }
110574
+ return value.flatMap((item) => {
110575
+ const parsed = chatMessageRecommendedFollowupSchema.safeParse(item);
110576
+ return parsed.success ? [parsed.data] : [];
110577
+ });
110578
+ }, external_exports.array(chatMessageRecommendedFollowupSchema));
110600
110579
  var pagedChatMessageSchema = external_exports.discriminatedUnion("role", [
110601
110580
  pagedChatMessageBaseSchema.extend({
110602
110581
  role: external_exports.literal("user")
@@ -110604,7 +110583,8 @@ var pagedChatMessageSchema = external_exports.discriminatedUnion("role", [
110604
110583
  pagedChatMessageBaseSchema.extend({
110605
110584
  role: external_exports.literal("assistant"),
110606
110585
  status: external_exports.string().optional(),
110607
- runLifecycleEvent: external_exports.enum(["completed", "failed", "cancelled"]).optional()
110586
+ runLifecycleEvent: external_exports.enum(["completed", "failed", "cancelled"]).optional(),
110587
+ recommendedFollowups: chatMessageRecommendedFollowupsSchema.optional()
110608
110588
  })
110609
110589
  ]);
110610
110590
  var chatThreadDetailSchema = external_exports.object({
@@ -110665,7 +110645,7 @@ var modelSelectionRequestSchema = external_exports.object({
110665
110645
  });
110666
110646
  }
110667
110647
  });
110668
- var chatThreadsContract = c21.router({
110648
+ var chatThreadsContract = c22.router({
110669
110649
  create: {
110670
110650
  method: "POST",
110671
110651
  path: "/api/zero/chat-threads",
@@ -110742,7 +110722,7 @@ var chatThreadIdPathParamsSchema = external_exports.object({ id: external_export
110742
110722
  var chatThreadThreadIdPathParamsSchema = external_exports.object({
110743
110723
  threadId: external_exports.string().uuid()
110744
110724
  });
110745
- var chatThreadByIdContract = c21.router({
110725
+ var chatThreadByIdContract = c22.router({
110746
110726
  get: {
110747
110727
  method: "GET",
110748
110728
  path: "/api/zero/chat-threads/:id",
@@ -110766,7 +110746,7 @@ var chatThreadByIdContract = c21.router({
110766
110746
  draftAttachments: external_exports.array(persistedAttachmentSchema).nullable().optional()
110767
110747
  }),
110768
110748
  responses: {
110769
- 204: c21.noBody(),
110749
+ 204: c22.noBody(),
110770
110750
  400: apiErrorSchema,
110771
110751
  401: apiErrorSchema,
110772
110752
  404: apiErrorSchema
@@ -110779,22 +110759,22 @@ var chatThreadByIdContract = c21.router({
110779
110759
  headers: authHeadersSchema,
110780
110760
  pathParams: chatThreadIdPathParamsSchema,
110781
110761
  responses: {
110782
- 204: c21.noBody(),
110762
+ 204: c22.noBody(),
110783
110763
  400: apiErrorSchema,
110784
110764
  401: apiErrorSchema,
110785
110765
  404: apiErrorSchema
110786
110766
  },
110787
110767
  summary: "Delete a chat thread",
110788
- body: c21.noBody()
110768
+ body: c22.noBody()
110789
110769
  }
110790
110770
  });
110791
- var chatThreadMarkReadContract = c21.router({
110771
+ var chatThreadMarkReadContract = c22.router({
110792
110772
  markRead: {
110793
110773
  method: "POST",
110794
110774
  path: "/api/zero/chat-threads/:id/mark-read",
110795
110775
  headers: authHeadersSchema,
110796
110776
  pathParams: chatThreadIdPathParamsSchema,
110797
- body: c21.noBody(),
110777
+ body: c22.noBody(),
110798
110778
  responses: {
110799
110779
  200: external_exports.object({
110800
110780
  lastReadMessageId: external_exports.string().nullable(),
@@ -110807,15 +110787,15 @@ var chatThreadMarkReadContract = c21.router({
110807
110787
  summary: "Mark a chat thread as read up to the latest message"
110808
110788
  }
110809
110789
  });
110810
- var chatThreadPinContract = c21.router({
110790
+ var chatThreadPinContract = c22.router({
110811
110791
  pin: {
110812
110792
  method: "POST",
110813
110793
  path: "/api/zero/chat-threads/:id/pin",
110814
110794
  headers: authHeadersSchema,
110815
110795
  pathParams: chatThreadIdPathParamsSchema,
110816
- body: c21.noBody(),
110796
+ body: c22.noBody(),
110817
110797
  responses: {
110818
- 204: c21.noBody(),
110798
+ 204: c22.noBody(),
110819
110799
  400: apiErrorSchema,
110820
110800
  401: apiErrorSchema,
110821
110801
  404: apiErrorSchema
@@ -110823,15 +110803,15 @@ var chatThreadPinContract = c21.router({
110823
110803
  summary: "Pin a chat thread to the top of the sidebar"
110824
110804
  }
110825
110805
  });
110826
- var chatThreadUnpinContract = c21.router({
110806
+ var chatThreadUnpinContract = c22.router({
110827
110807
  unpin: {
110828
110808
  method: "POST",
110829
110809
  path: "/api/zero/chat-threads/:id/unpin",
110830
110810
  headers: authHeadersSchema,
110831
110811
  pathParams: chatThreadIdPathParamsSchema,
110832
- body: c21.noBody(),
110812
+ body: c22.noBody(),
110833
110813
  responses: {
110834
- 204: c21.noBody(),
110814
+ 204: c22.noBody(),
110835
110815
  400: apiErrorSchema,
110836
110816
  401: apiErrorSchema,
110837
110817
  404: apiErrorSchema
@@ -110839,7 +110819,7 @@ var chatThreadUnpinContract = c21.router({
110839
110819
  summary: "Remove the pin from a chat thread"
110840
110820
  }
110841
110821
  });
110842
- var chatThreadRenameContract = c21.router({
110822
+ var chatThreadRenameContract = c22.router({
110843
110823
  rename: {
110844
110824
  method: "POST",
110845
110825
  path: "/api/zero/chat-threads/:id/rename",
@@ -110847,7 +110827,7 @@ var chatThreadRenameContract = c21.router({
110847
110827
  pathParams: chatThreadIdPathParamsSchema,
110848
110828
  body: external_exports.object({ title: external_exports.string().min(1) }),
110849
110829
  responses: {
110850
- 204: c21.noBody(),
110830
+ 204: c22.noBody(),
110851
110831
  400: apiErrorSchema,
110852
110832
  401: apiErrorSchema,
110853
110833
  404: apiErrorSchema
@@ -110855,7 +110835,7 @@ var chatThreadRenameContract = c21.router({
110855
110835
  summary: "Rename a chat thread (suppresses automated title generation)"
110856
110836
  }
110857
110837
  });
110858
- var chatMessagesContract = c21.router({
110838
+ var chatMessagesContract = c22.router({
110859
110839
  send: {
110860
110840
  method: "POST",
110861
110841
  path: "/api/zero/chat/messages",
@@ -110900,7 +110880,7 @@ var chatMessagesContract = c21.router({
110900
110880
  // entry path end-to-end.
110901
110881
  debugNoMockClaude: external_exports.boolean().optional(),
110902
110882
  debugNoMockCodex: external_exports.boolean().optional(),
110903
- revokesMessageId: external_exports.undefined().optional(),
110883
+ revokesMessageId: external_exports.string().min(1).optional(),
110904
110884
  interruptsRunId: external_exports.undefined().optional()
110905
110885
  }),
110906
110886
  external_exports.object({
@@ -110974,7 +110954,7 @@ var chatSearchResponseSchema = external_exports.object({
110974
110954
  results: external_exports.array(chatSearchResultSchema),
110975
110955
  hasMore: external_exports.boolean()
110976
110956
  });
110977
- var chatSearchContract = c21.router({
110957
+ var chatSearchContract = c22.router({
110978
110958
  search: {
110979
110959
  method: "GET",
110980
110960
  path: "/api/zero/chat/search",
@@ -110996,7 +110976,7 @@ var chatSearchContract = c21.router({
110996
110976
  summary: "Search chat messages within caller's org (zero proxy)"
110997
110977
  }
110998
110978
  });
110999
- var chatThreadMessagesContract = c21.router({
110979
+ var chatThreadMessagesContract = c22.router({
111000
110980
  list: {
111001
110981
  method: "GET",
111002
110982
  path: "/api/zero/chat-threads/:threadId/messages",
@@ -111019,7 +110999,7 @@ var chatThreadMessagesContract = c21.router({
111019
110999
  summary: "Get paginated chat messages for a thread"
111020
111000
  }
111021
111001
  });
111022
- var chatThreadArtifactsContract = c21.router({
111002
+ var chatThreadArtifactsContract = c22.router({
111023
111003
  list: {
111024
111004
  method: "GET",
111025
111005
  path: "/api/zero/chat-threads/:threadId/artifacts",
@@ -111060,7 +111040,7 @@ var chatThreadArtifactsContract = c21.router({
111060
111040
  summary: "Sync a chat artifact file to the user's connected Google Drive"
111061
111041
  }
111062
111042
  });
111063
- var chatThreadGithubPrsContract = c21.router({
111043
+ var chatThreadGithubPrsContract = c22.router({
111064
111044
  list: {
111065
111045
  method: "GET",
111066
111046
  path: "/api/zero/chat-threads/:threadId/github-prs",
@@ -111188,7 +111168,7 @@ init_esm_shims();
111188
111168
 
111189
111169
  // ../../packages/api-contracts/src/contracts/zero-developer-support.ts
111190
111170
  init_esm_shims();
111191
- var c22 = initContract();
111171
+ var c23 = initContract();
111192
111172
  var developerSupportBodySchema = external_exports.object({
111193
111173
  title: external_exports.string().min(1, "Title is required"),
111194
111174
  description: external_exports.string().min(1, "Description is required"),
@@ -111200,7 +111180,7 @@ var consentCodeResponseSchema = external_exports.object({
111200
111180
  var submitResponseSchema = external_exports.object({
111201
111181
  reference: external_exports.string()
111202
111182
  });
111203
- var zeroDeveloperSupportContract = c22.router({
111183
+ var zeroDeveloperSupportContract = c23.router({
111204
111184
  submit: {
111205
111185
  method: "POST",
111206
111186
  path: "/api/zero/developer-support",
@@ -111237,7 +111217,7 @@ init_esm_shims();
111237
111217
 
111238
111218
  // ../../packages/api-contracts/src/contracts/zero-computer-use.ts
111239
111219
  init_esm_shims();
111240
- var c23 = initContract();
111220
+ var c24 = initContract();
111241
111221
  var computerUseHostStatusSchema = external_exports.enum(["online", "offline"]);
111242
111222
  var computerUseReadCommandKindSchema = external_exports.enum([
111243
111223
  "apps.list",
@@ -111545,7 +111525,7 @@ var computerUseAuditEventSchema = external_exports.object({
111545
111525
  var computerUseAuditEventListResponseSchema = external_exports.object({
111546
111526
  auditEvents: external_exports.array(computerUseAuditEventSchema)
111547
111527
  });
111548
- var zeroComputerUseHostsContract = c23.router({
111528
+ var zeroComputerUseHostsContract = c24.router({
111549
111529
  start: {
111550
111530
  method: "POST",
111551
111531
  path: "/api/zero/computer-use/hosts/start",
@@ -111584,7 +111564,7 @@ var zeroComputerUseHostsContract = c23.router({
111584
111564
  summary: "Delete a desktop computer-use host"
111585
111565
  }
111586
111566
  });
111587
- var zeroComputerUseHeartbeatContract = c23.router({
111567
+ var zeroComputerUseHeartbeatContract = c24.router({
111588
111568
  heartbeat: {
111589
111569
  method: "POST",
111590
111570
  path: "/api/zero/computer-use/heartbeat",
@@ -111609,7 +111589,7 @@ var zeroComputerUseHeartbeatContract = c23.router({
111609
111589
  summary: "Stop a desktop computer-use host"
111610
111590
  }
111611
111591
  });
111612
- var zeroComputerUseCommandContract = c23.router({
111592
+ var zeroComputerUseCommandContract = c24.router({
111613
111593
  create: {
111614
111594
  method: "POST",
111615
111595
  path: "/api/zero/computer-use/commands",
@@ -111644,7 +111624,7 @@ var zeroComputerUseCommandContract = c23.router({
111644
111624
  headers: authHeadersSchema,
111645
111625
  pathParams: commandIdPathParamsSchema,
111646
111626
  responses: {
111647
- 200: c23.noBody(),
111627
+ 200: c24.noBody(),
111648
111628
  401: apiErrorSchema,
111649
111629
  403: apiErrorSchema,
111650
111630
  404: apiErrorSchema
@@ -111652,7 +111632,7 @@ var zeroComputerUseCommandContract = c23.router({
111652
111632
  summary: "Download a desktop computer-use command screenshot"
111653
111633
  }
111654
111634
  });
111655
- var zeroComputerUseWriteCommandContract = c23.router({
111635
+ var zeroComputerUseWriteCommandContract = c24.router({
111656
111636
  create: {
111657
111637
  method: "POST",
111658
111638
  path: "/api/zero/computer-use/write-commands",
@@ -111669,7 +111649,7 @@ var zeroComputerUseWriteCommandContract = c23.router({
111669
111649
  summary: "Create a desktop computer-use write command"
111670
111650
  }
111671
111651
  });
111672
- var zeroComputerUseCommandApprovalContract = c23.router({
111652
+ var zeroComputerUseCommandApprovalContract = c24.router({
111673
111653
  decide: {
111674
111654
  method: "POST",
111675
111655
  path: "/api/zero/computer-use/commands/:commandId/approval",
@@ -111686,7 +111666,7 @@ var zeroComputerUseCommandApprovalContract = c23.router({
111686
111666
  summary: "Approve or deny a pending desktop computer-use write command"
111687
111667
  }
111688
111668
  });
111689
- var zeroComputerUseHostCommandsContract = c23.router({
111669
+ var zeroComputerUseHostCommandsContract = c24.router({
111690
111670
  next: {
111691
111671
  method: "POST",
111692
111672
  path: "/api/zero/computer-use/host/commands/next",
@@ -111714,7 +111694,7 @@ var zeroComputerUseHostCommandsContract = c23.router({
111714
111694
  summary: "Complete a desktop computer-use command"
111715
111695
  }
111716
111696
  });
111717
- var zeroComputerUseAuditEventsContract = c23.router({
111697
+ var zeroComputerUseAuditEventsContract = c24.router({
111718
111698
  list: {
111719
111699
  method: "GET",
111720
111700
  path: "/api/zero/computer-use/audit-events",
@@ -112025,7 +112005,7 @@ init_esm_shims();
112025
112005
 
112026
112006
  // ../../packages/api-contracts/src/contracts/sessions.ts
112027
112007
  init_esm_shims();
112028
- var c24 = initContract();
112008
+ var c25 = initContract();
112029
112009
  var sessionResponseSchema = external_exports.object({
112030
112010
  id: external_exports.string(),
112031
112011
  agentComposeId: external_exports.string(),
@@ -112066,7 +112046,7 @@ var checkpointResponseSchema = external_exports.object({
112066
112046
  volumeVersionsSnapshot: volumeVersionsSnapshotSchema2.nullable(),
112067
112047
  createdAt: external_exports.string()
112068
112048
  });
112069
- var sessionsByIdContract = c24.router({
112049
+ var sessionsByIdContract = c25.router({
112070
112050
  /**
112071
112051
  * GET /api/agent/sessions/:id
112072
112052
  * Get session by ID
@@ -112087,7 +112067,7 @@ var sessionsByIdContract = c24.router({
112087
112067
  summary: "Get session by ID"
112088
112068
  }
112089
112069
  });
112090
- var checkpointsByIdContract = c24.router({
112070
+ var checkpointsByIdContract = c25.router({
112091
112071
  /**
112092
112072
  * GET /api/agent/checkpoints/:id
112093
112073
  * Get checkpoint by ID
@@ -112249,9 +112229,9 @@ init_esm_shims();
112249
112229
 
112250
112230
  // ../../packages/api-contracts/src/contracts/zero-model-providers.ts
112251
112231
  init_esm_shims();
112252
- var c25 = initContract();
112232
+ var c26 = initContract();
112253
112233
  var orgUpsertModelProviderRequestSchema = upsertModelProviderRequestSchema.omit({ selectedModel: true });
112254
- var zeroModelProvidersMainContract = c25.router({
112234
+ var zeroModelProvidersMainContract = c26.router({
112255
112235
  list: {
112256
112236
  method: "GET",
112257
112237
  path: "/api/zero/model-providers",
@@ -112280,7 +112260,7 @@ var zeroModelProvidersMainContract = c25.router({
112280
112260
  summary: "Create or update an org-level model provider (admin only)"
112281
112261
  }
112282
112262
  });
112283
- var zeroModelProvidersByTypeContract = c25.router({
112263
+ var zeroModelProvidersByTypeContract = c26.router({
112284
112264
  delete: {
112285
112265
  method: "DELETE",
112286
112266
  path: "/api/zero/model-providers/:type",
@@ -112289,7 +112269,7 @@ var zeroModelProvidersByTypeContract = c25.router({
112289
112269
  type: modelProviderTypeSchema
112290
112270
  }),
112291
112271
  responses: {
112292
- 204: c25.noBody(),
112272
+ 204: c26.noBody(),
112293
112273
  401: apiErrorSchema,
112294
112274
  403: apiErrorSchema,
112295
112275
  404: apiErrorSchema,
@@ -112376,7 +112356,7 @@ import { pipeline } from "stream/promises";
112376
112356
 
112377
112357
  // ../../packages/api-contracts/src/contracts/integrations.ts
112378
112358
  init_esm_shims();
112379
- var c26 = initContract();
112359
+ var c27 = initContract();
112380
112360
  var sendSlackMessageBodySchema = external_exports.object({
112381
112361
  channel: external_exports.string().min(1, "Channel ID is required").optional(),
112382
112362
  user: external_exports.string().min(1, "User ID is required").optional(),
@@ -112394,7 +112374,7 @@ var sendSlackMessageResponseSchema = external_exports.object({
112394
112374
  ts: external_exports.string().optional(),
112395
112375
  channel: external_exports.string().optional()
112396
112376
  });
112397
- var integrationsSlackMessageContract = c26.router({
112377
+ var integrationsSlackMessageContract = c27.router({
112398
112378
  sendMessage: {
112399
112379
  method: "POST",
112400
112380
  path: "/api/zero/integrations/slack/message",
@@ -112422,7 +112402,7 @@ var sendTelegramMessageResponseSchema = external_exports.object({
112422
112402
  messageId: external_exports.number().int(),
112423
112403
  chatId: external_exports.string()
112424
112404
  });
112425
- var integrationsTelegramMessageContract = c26.router({
112405
+ var integrationsTelegramMessageContract = c27.router({
112426
112406
  sendMessage: {
112427
112407
  method: "POST",
112428
112408
  path: "/api/zero/integrations/telegram/message",
@@ -112450,7 +112430,7 @@ var sendPhoneMessageResponseSchema = external_exports.object({
112450
112430
  channel: external_exports.string().nullable(),
112451
112431
  toNumber: external_exports.string()
112452
112432
  });
112453
- var integrationsPhoneMessageContract = c26.router({
112433
+ var integrationsPhoneMessageContract = c27.router({
112454
112434
  sendMessage: {
112455
112435
  method: "POST",
112456
112436
  path: "/api/zero/integrations/phone/message",
@@ -112470,14 +112450,14 @@ var integrationsPhoneMessageContract = c26.router({
112470
112450
  var phoneDownloadFileQuerySchema = external_exports.object({
112471
112451
  file_id: external_exports.string().min(1, "file_id query parameter is required")
112472
112452
  });
112473
- var integrationsPhoneDownloadFileContract = c26.router({
112453
+ var integrationsPhoneDownloadFileContract = c27.router({
112474
112454
  download: {
112475
112455
  method: "GET",
112476
112456
  path: "/api/zero/integrations/phone/download-file",
112477
112457
  headers: authHeadersSchema,
112478
112458
  query: phoneDownloadFileQuerySchema,
112479
112459
  responses: {
112480
- 200: c26.type(),
112460
+ 200: c27.type(),
112481
112461
  400: apiErrorSchema,
112482
112462
  401: apiErrorSchema,
112483
112463
  403: apiErrorSchema,
@@ -112512,7 +112492,7 @@ var telegramBotListItemSchema = external_exports.object({
112512
112492
  var listTelegramBotsResponseSchema = external_exports.object({
112513
112493
  bots: external_exports.array(telegramBotListItemSchema)
112514
112494
  });
112515
- var integrationsTelegramBotListContract = c26.router({
112495
+ var integrationsTelegramBotListContract = c27.router({
112516
112496
  listBots: {
112517
112497
  method: "GET",
112518
112498
  path: "/api/zero/integrations/telegram/bots",
@@ -112533,7 +112513,7 @@ var slackUploadInitResponseSchema = external_exports.object({
112533
112513
  uploadUrl: external_exports.string(),
112534
112514
  fileId: external_exports.string()
112535
112515
  });
112536
- var integrationsSlackUploadInitContract = c26.router({
112516
+ var integrationsSlackUploadInitContract = c27.router({
112537
112517
  init: {
112538
112518
  method: "POST",
112539
112519
  path: "/api/zero/integrations/slack/upload-file/init",
@@ -112562,7 +112542,7 @@ var telegramUploadInitResponseSchema = external_exports.object({
112562
112542
  contentType: external_exports.string(),
112563
112543
  size: external_exports.number().int().nonnegative()
112564
112544
  });
112565
- var integrationsTelegramUploadInitContract = c26.router({
112545
+ var integrationsTelegramUploadInitContract = c27.router({
112566
112546
  init: {
112567
112547
  method: "POST",
112568
112548
  path: "/api/zero/integrations/telegram/upload-file/init",
@@ -112594,7 +112574,7 @@ var telegramUploadCompleteResponseSchema = external_exports.object({
112594
112574
  size: external_exports.number().int().nonnegative(),
112595
112575
  url: external_exports.string()
112596
112576
  });
112597
- var integrationsTelegramUploadCompleteContract = c26.router({
112577
+ var integrationsTelegramUploadCompleteContract = c27.router({
112598
112578
  complete: {
112599
112579
  method: "POST",
112600
112580
  path: "/api/zero/integrations/telegram/upload-file/complete",
@@ -112624,7 +112604,7 @@ var githubUploadInitResponseSchema = external_exports.object({
112624
112604
  contentType: external_exports.string(),
112625
112605
  size: external_exports.number().int().nonnegative()
112626
112606
  });
112627
- var integrationsGithubUploadInitContract = c26.router({
112607
+ var integrationsGithubUploadInitContract = c27.router({
112628
112608
  init: {
112629
112609
  method: "POST",
112630
112610
  path: "/api/zero/integrations/github/upload-file/init",
@@ -112655,7 +112635,7 @@ var githubUploadCompleteResponseSchema = external_exports.object({
112655
112635
  size: external_exports.number().int().nonnegative(),
112656
112636
  url: external_exports.string()
112657
112637
  });
112658
- var integrationsGithubUploadCompleteContract = c26.router({
112638
+ var integrationsGithubUploadCompleteContract = c27.router({
112659
112639
  complete: {
112660
112640
  method: "POST",
112661
112641
  path: "/api/zero/integrations/github/upload-file/complete",
@@ -112686,7 +112666,7 @@ var phoneUploadInitResponseSchema = external_exports.object({
112686
112666
  contentType: external_exports.string(),
112687
112667
  size: external_exports.number().int().nonnegative()
112688
112668
  });
112689
- var integrationsPhoneUploadInitContract = c26.router({
112669
+ var integrationsPhoneUploadInitContract = c27.router({
112690
112670
  init: {
112691
112671
  method: "POST",
112692
112672
  path: "/api/zero/integrations/phone/upload-file/init",
@@ -112717,7 +112697,7 @@ var phoneUploadCompleteResponseSchema = external_exports.object({
112717
112697
  size: external_exports.number().int().nonnegative(),
112718
112698
  url: external_exports.string()
112719
112699
  });
112720
- var integrationsPhoneUploadCompleteContract = c26.router({
112700
+ var integrationsPhoneUploadCompleteContract = c27.router({
112721
112701
  complete: {
112722
112702
  method: "POST",
112723
112703
  path: "/api/zero/integrations/phone/upload-file/complete",
@@ -112761,7 +112741,7 @@ var sendChatMessageResponseSchema = external_exports.object({
112761
112741
  threadId: external_exports.string(),
112762
112742
  createdAt: external_exports.string()
112763
112743
  });
112764
- var integrationsChatMessageContract = c26.router({
112744
+ var integrationsChatMessageContract = c27.router({
112765
112745
  sendMessage: {
112766
112746
  method: "POST",
112767
112747
  path: "/api/zero/integrations/chat/message",
@@ -112777,7 +112757,7 @@ var integrationsChatMessageContract = c26.router({
112777
112757
  summary: "Send a message to a web chat thread"
112778
112758
  }
112779
112759
  });
112780
- var integrationsSlackUploadCompleteContract = c26.router({
112760
+ var integrationsSlackUploadCompleteContract = c27.router({
112781
112761
  complete: {
112782
112762
  method: "POST",
112783
112763
  path: "/api/zero/integrations/slack/upload-file/complete",
@@ -112960,7 +112940,7 @@ import { pipeline as pipeline3 } from "stream/promises";
112960
112940
 
112961
112941
  // ../../packages/api-contracts/src/contracts/integrations-github.ts
112962
112942
  init_esm_shims();
112963
- var c27 = initContract();
112943
+ var c28 = initContract();
112964
112944
  var githubInstallationEnvironmentSchema = external_exports.object({
112965
112945
  requiredSecrets: external_exports.array(external_exports.string()),
112966
112946
  requiredVars: external_exports.array(external_exports.string()),
@@ -113048,7 +113028,7 @@ var createGithubLabelListenerResponseSchema = external_exports.object({
113048
113028
  var updateGithubLabelListenerResponseSchema = external_exports.object({
113049
113029
  listener: githubLabelListenerSchema
113050
113030
  });
113051
- var integrationsGithubContract = c27.router({
113031
+ var integrationsGithubContract = c28.router({
113052
113032
  getInstallation: {
113053
113033
  method: "GET",
113054
113034
  path: "/api/integrations/github",
@@ -113082,7 +113062,7 @@ var integrationsGithubContract = c27.router({
113082
113062
  method: "DELETE",
113083
113063
  path: "/api/integrations/github/link",
113084
113064
  headers: authHeadersSchema,
113085
- body: c27.noBody(),
113065
+ body: c28.noBody(),
113086
113066
  responses: {
113087
113067
  200: githubIntegrationActionResponseSchema,
113088
113068
  401: apiErrorSchema,
@@ -113095,7 +113075,7 @@ var integrationsGithubContract = c27.router({
113095
113075
  method: "DELETE",
113096
113076
  path: "/api/integrations/github",
113097
113077
  headers: authHeadersSchema,
113098
- body: c27.noBody(),
113078
+ body: c28.noBody(),
113099
113079
  responses: {
113100
113080
  200: deleteGithubInstallationResponseSchema,
113101
113081
  401: apiErrorSchema,
@@ -113158,7 +113138,7 @@ var integrationsGithubContract = c27.router({
113158
113138
  path: "/api/integrations/github/label-listeners/:listenerId",
113159
113139
  pathParams: external_exports.object({ listenerId: external_exports.string().uuid() }),
113160
113140
  headers: authHeadersSchema,
113161
- body: c27.noBody(),
113141
+ body: c28.noBody(),
113162
113142
  responses: {
113163
113143
  200: githubIntegrationActionResponseSchema,
113164
113144
  401: apiErrorSchema,
@@ -113372,7 +113352,7 @@ init_esm_shims();
113372
113352
 
113373
113353
  // ../../packages/api-contracts/src/contracts/zero-schedules.ts
113374
113354
  init_esm_shims();
113375
- var c28 = initContract();
113355
+ var c29 = initContract();
113376
113356
  var scheduleResponseSchema = external_exports.object({
113377
113357
  id: external_exports.string().uuid(),
113378
113358
  agentId: external_exports.string().uuid(),
@@ -113432,7 +113412,7 @@ var zeroDeployScheduleRequestSchema = external_exports.object({
113432
113412
  message: "Exactly one of 'cronExpression', 'atTime', or 'intervalSeconds' must be specified"
113433
113413
  }
113434
113414
  );
113435
- var zeroSchedulesMainContract = c28.router({
113415
+ var zeroSchedulesMainContract = c29.router({
113436
113416
  deploy: {
113437
113417
  method: "POST",
113438
113418
  path: "/api/zero/schedules",
@@ -113460,7 +113440,7 @@ var zeroSchedulesMainContract = c28.router({
113460
113440
  summary: "List all schedules (zero proxy)"
113461
113441
  }
113462
113442
  });
113463
- var zeroSchedulesByNameContract = c28.router({
113443
+ var zeroSchedulesByNameContract = c29.router({
113464
113444
  delete: {
113465
113445
  method: "DELETE",
113466
113446
  path: "/api/zero/schedules/:name",
@@ -113472,7 +113452,7 @@ var zeroSchedulesByNameContract = c28.router({
113472
113452
  agentId: external_exports.string().uuid("Invalid agent ID")
113473
113453
  }),
113474
113454
  responses: {
113475
- 204: c28.noBody(),
113455
+ 204: c29.noBody(),
113476
113456
  400: apiErrorSchema,
113477
113457
  401: apiErrorSchema,
113478
113458
  403: apiErrorSchema,
@@ -113481,7 +113461,7 @@ var zeroSchedulesByNameContract = c28.router({
113481
113461
  summary: "Delete schedule (zero proxy)"
113482
113462
  }
113483
113463
  });
113484
- var zeroSchedulesEnableContract = c28.router({
113464
+ var zeroSchedulesEnableContract = c29.router({
113485
113465
  enable: {
113486
113466
  method: "POST",
113487
113467
  path: "/api/zero/schedules/:name/enable",
@@ -113521,7 +113501,7 @@ var zeroSchedulesEnableContract = c28.router({
113521
113501
  summary: "Disable schedule (zero proxy)"
113522
113502
  }
113523
113503
  });
113524
- var zeroScheduleRunContract = c28.router({
113504
+ var zeroScheduleRunContract = c29.router({
113525
113505
  run: {
113526
113506
  method: "POST",
113527
113507
  path: "/api/zero/schedules/run",
@@ -128871,6 +128851,22 @@ function resolveFirewallPolicies(stored, connectors) {
128871
128851
  }
128872
128852
  return resolved;
128873
128853
  }
128854
+ function permissionGrantsToFirewallPolicies(grants) {
128855
+ const policies = {};
128856
+ for (const grant of grants) {
128857
+ const current = policies[grant.connectorRef] ?? { policies: {} };
128858
+ if (grant.permission === UNKNOWN_PERMISSION_GRANT) {
128859
+ policies[grant.connectorRef] = {
128860
+ ...current,
128861
+ unknownPolicy: grant.action
128862
+ };
128863
+ continue;
128864
+ }
128865
+ current.policies[grant.permission] = grant.action;
128866
+ policies[grant.connectorRef] = current;
128867
+ }
128868
+ return Object.keys(policies).length > 0 ? policies : null;
128869
+ }
128874
128870
 
128875
128871
  // src/lib/events/event-stream-normalizer.ts
128876
128872
  init_esm_shims();
@@ -128884,6 +128880,9 @@ init_esm_shims();
128884
128880
  // ../../packages/core/src/usage-source-bucket.ts
128885
128881
  init_esm_shims();
128886
128882
 
128883
+ // ../../packages/core/src/presentation-template-items.ts
128884
+ init_esm_shims();
128885
+
128887
128886
  // ../../packages/core/src/contracts/index.ts
128888
128887
  init_esm_shims();
128889
128888
 
@@ -128892,11 +128891,11 @@ init_esm_shims();
128892
128891
 
128893
128892
  // ../../packages/api-contracts/src/contracts/health.ts
128894
128893
  init_esm_shims();
128895
- var c29 = initContract();
128894
+ var c30 = initContract();
128896
128895
  var healthResponseSchema = external_exports.object({
128897
128896
  status: external_exports.literal("ok")
128898
128897
  });
128899
- var healthContract = c29.router({
128898
+ var healthContract = c30.router({
128900
128899
  check: {
128901
128900
  method: "GET",
128902
128901
  path: "/health",
@@ -128906,7 +128905,7 @@ var healthContract = c29.router({
128906
128905
  summary: "Check API health"
128907
128906
  }
128908
128907
  });
128909
- var healthAuthContract = c29.router({
128908
+ var healthAuthContract = c30.router({
128910
128909
  check: {
128911
128910
  method: "GET",
128912
128911
  path: "/health/auth",
@@ -128927,7 +128926,7 @@ var healthAuthContract = c29.router({
128927
128926
 
128928
128927
  // ../../packages/api-contracts/src/contracts/desktop-auth.ts
128929
128928
  init_esm_shims();
128930
- var c30 = initContract();
128929
+ var c31 = initContract();
128931
128930
  var desktopAuthCallbackSchemes = [
128932
128931
  "ai.vm0.zero.desktop",
128933
128932
  "ai.vm0.zero.desktop.dev"
@@ -128936,7 +128935,7 @@ var defaultDesktopAuthCallbackScheme = desktopAuthCallbackSchemes[0];
128936
128935
  var desktopAuthCallbackSchemeSchema = external_exports.enum(
128937
128936
  desktopAuthCallbackSchemes
128938
128937
  );
128939
- var desktopAuthHandoffContract = c30.router({
128938
+ var desktopAuthHandoffContract = c31.router({
128940
128939
  create: {
128941
128940
  method: "POST",
128942
128941
  path: "/api/desktop-auth/handoff",
@@ -128956,7 +128955,7 @@ var desktopAuthHandoffContract = c30.router({
128956
128955
  summary: "Create a desktop auth handoff code"
128957
128956
  }
128958
128957
  });
128959
- var desktopAuthConsumeContract = c30.router({
128958
+ var desktopAuthConsumeContract = c31.router({
128960
128959
  consume: {
128961
128960
  method: "POST",
128962
128961
  path: "/api/desktop-auth/consume",
@@ -128976,7 +128975,7 @@ var desktopAuthConsumeContract = c30.router({
128976
128975
 
128977
128976
  // ../../packages/api-contracts/src/contracts/zero-user-model-preference.ts
128978
128977
  init_esm_shims();
128979
- var c31 = initContract();
128978
+ var c32 = initContract();
128980
128979
  var userModelPreferenceResponseSchema = external_exports.object({
128981
128980
  selectedModel: supportedRunModelSchema.nullable(),
128982
128981
  updatedAt: external_exports.string().nullable()
@@ -128984,7 +128983,7 @@ var userModelPreferenceResponseSchema = external_exports.object({
128984
128983
  var updateUserModelPreferenceRequestSchema = external_exports.object({
128985
128984
  selectedModel: supportedRunModelSchema.nullable()
128986
128985
  });
128987
- var zeroUserModelPreferenceContract = c31.router({
128986
+ var zeroUserModelPreferenceContract = c32.router({
128988
128987
  get: {
128989
128988
  method: "GET",
128990
128989
  path: "/api/zero/user-model-preference",
@@ -129043,12 +129042,12 @@ var internalCallbackErrorSchema = external_exports.object({
129043
129042
  });
129044
129043
 
129045
129044
  // ../../packages/api-contracts/src/contracts/internal-callbacks-chat.ts
129046
- var c32 = initContract();
129045
+ var c33 = initContract();
129047
129046
  var chatCallbackPayloadSchema = external_exports.object({
129048
129047
  threadId: external_exports.string(),
129049
129048
  agentId: external_exports.string()
129050
129049
  }).passthrough();
129051
- var internalCallbacksChatContract = c32.router({
129050
+ var internalCallbacksChatContract = c33.router({
129052
129051
  post: {
129053
129052
  method: "POST",
129054
129053
  path: "/api/internal/callbacks/chat",
@@ -129069,7 +129068,7 @@ var internalCallbacksChatContract = c32.router({
129069
129068
 
129070
129069
  // ../../packages/api-contracts/src/contracts/internal-callbacks-telegram.ts
129071
129070
  init_esm_shims();
129072
- var c33 = initContract();
129071
+ var c34 = initContract();
129073
129072
  var telegramCallbackPayloadSchema = external_exports.object({
129074
129073
  installationId: external_exports.string(),
129075
129074
  chatId: external_exports.string(),
@@ -129081,7 +129080,7 @@ var telegramCallbackPayloadSchema = external_exports.object({
129081
129080
  isDM: external_exports.boolean(),
129082
129081
  thinkingMessageId: external_exports.string().nullable().optional()
129083
129082
  }).passthrough();
129084
- var internalCallbacksTelegramContract = c33.router({
129083
+ var internalCallbacksTelegramContract = c34.router({
129085
129084
  post: {
129086
129085
  method: "POST",
129087
129086
  path: "/api/internal/callbacks/telegram",
@@ -129103,7 +129102,7 @@ var internalCallbacksTelegramContract = c33.router({
129103
129102
 
129104
129103
  // ../../packages/api-contracts/src/contracts/internal-callbacks-agentphone.ts
129105
129104
  init_esm_shims();
129106
- var c34 = initContract();
129105
+ var c35 = initContract();
129107
129106
  var agentPhoneCallbackPayloadSchema = external_exports.object({
129108
129107
  messageId: external_exports.string(),
129109
129108
  conversationId: external_exports.string().nullable(),
@@ -129118,7 +129117,7 @@ var agentPhoneCallbackPayloadSchema = external_exports.object({
129118
129117
  agentphoneAgentId: external_exports.string(),
129119
129118
  existingSessionId: external_exports.string().nullable().optional()
129120
129119
  }).passthrough();
129121
- var internalCallbacksAgentPhoneContract = c34.router({
129120
+ var internalCallbacksAgentPhoneContract = c35.router({
129122
129121
  post: {
129123
129122
  method: "POST",
129124
129123
  path: "/api/internal/callbacks/agentphone",
@@ -129139,7 +129138,7 @@ var internalCallbacksAgentPhoneContract = c34.router({
129139
129138
 
129140
129139
  // ../../packages/api-contracts/src/contracts/test-telegram-dispatch-probe.ts
129141
129140
  init_esm_shims();
129142
- var c35 = initContract();
129141
+ var c36 = initContract();
129143
129142
  var testTelegramDispatchProbeBodySchema = external_exports.unknown().optional();
129144
129143
  var testTelegramDispatchProbeSuccessSchema = external_exports.object({
129145
129144
  ok: external_exports.literal(true)
@@ -129156,7 +129155,7 @@ var testTelegramDispatchProbeHandlerErrorSchema = external_exports.object({
129156
129155
  stack: external_exports.string().optional()
129157
129156
  })
129158
129157
  });
129159
- var testTelegramDispatchProbeContract = c35.router({
129158
+ var testTelegramDispatchProbeContract = c36.router({
129160
129159
  post: {
129161
129160
  method: "POST",
129162
129161
  path: "/api/test/telegram-dispatch-probe",
@@ -129175,7 +129174,7 @@ var testTelegramDispatchProbeContract = c35.router({
129175
129174
 
129176
129175
  // ../../packages/api-contracts/src/contracts/internal-callbacks-slack-org.ts
129177
129176
  init_esm_shims();
129178
- var c36 = initContract();
129177
+ var c37 = initContract();
129179
129178
  var slackOrgCallbackPayloadSchema = external_exports.object({
129180
129179
  workspaceId: external_exports.string(),
129181
129180
  channelId: external_exports.string(),
@@ -129185,7 +129184,7 @@ var slackOrgCallbackPayloadSchema = external_exports.object({
129185
129184
  agentId: external_exports.string(),
129186
129185
  existingSessionId: external_exports.string().optional()
129187
129186
  }).passthrough();
129188
- var internalCallbacksSlackOrgContract = c36.router({
129187
+ var internalCallbacksSlackOrgContract = c37.router({
129189
129188
  post: {
129190
129189
  method: "POST",
129191
129190
  path: "/api/internal/callbacks/slack/org",
@@ -129207,7 +129206,7 @@ var internalCallbacksSlackOrgContract = c36.router({
129207
129206
 
129208
129207
  // ../../packages/api-contracts/src/contracts/zero-email.ts
129209
129208
  init_esm_shims();
129210
- var c37 = initContract();
129209
+ var c38 = initContract();
129211
129210
  var emailRecipientsSchema = external_exports.array(external_exports.string()).optional();
129212
129211
  var zeroEmailReplyCallbackPayloadSchema = external_exports.object({
129213
129212
  emailThreadSessionId: external_exports.string(),
@@ -129230,7 +129229,7 @@ var zeroEmailTriggerCallbackPayloadSchema = external_exports.object({
129230
129229
  replyRecipientTo: emailRecipientsSchema,
129231
129230
  replyRecipientCc: emailRecipientsSchema
129232
129231
  }).passthrough();
129233
- var zeroEmailReplyCallbackContract = c37.router({
129232
+ var zeroEmailReplyCallbackContract = c38.router({
129234
129233
  post: {
129235
129234
  method: "POST",
129236
129235
  path: "/api/zero/email/callbacks/reply",
@@ -129247,7 +129246,7 @@ var zeroEmailReplyCallbackContract = c37.router({
129247
129246
  summary: "Handle Zero email reply completion callbacks"
129248
129247
  }
129249
129248
  });
129250
- var zeroEmailTriggerCallbackContract = c37.router({
129249
+ var zeroEmailTriggerCallbackContract = c38.router({
129251
129250
  post: {
129252
129251
  method: "POST",
129253
129252
  path: "/api/zero/email/callbacks/trigger",
@@ -129264,7 +129263,7 @@ var zeroEmailTriggerCallbackContract = c37.router({
129264
129263
  summary: "Handle Zero email trigger completion callbacks"
129265
129264
  }
129266
129265
  });
129267
- var zeroEmailInboundContract = c37.router({
129266
+ var zeroEmailInboundContract = c38.router({
129268
129267
  post: {
129269
129268
  method: "POST",
129270
129269
  path: "/api/zero/email/inbound",
@@ -129284,8 +129283,8 @@ var zeroEmailInboundContract = c37.router({
129284
129283
 
129285
129284
  // ../../packages/api-contracts/src/contracts/auth.ts
129286
129285
  init_esm_shims();
129287
- var c38 = initContract();
129288
- var authContract = c38.router({
129286
+ var c39 = initContract();
129287
+ var authContract = c39.router({
129289
129288
  /**
129290
129289
  * GET /api/auth/me
129291
129290
  * Get current user information
@@ -129310,7 +129309,7 @@ var authContract = c38.router({
129310
129309
 
129311
129310
  // ../../packages/api-contracts/src/contracts/user-export.ts
129312
129311
  init_esm_shims();
129313
- var c39 = initContract();
129312
+ var c40 = initContract();
129314
129313
  var exportJobStatusSchema = external_exports.enum([
129315
129314
  "pending",
129316
129315
  "running",
@@ -129335,7 +129334,7 @@ var userExportStartResponseSchema = external_exports.object({
129335
129334
  jobId: external_exports.string().uuid(),
129336
129335
  status: external_exports.enum(["pending", "running"])
129337
129336
  });
129338
- var userExportContract = c39.router({
129337
+ var userExportContract = c40.router({
129339
129338
  get: {
129340
129339
  method: "GET",
129341
129340
  path: "/api/user/export",
@@ -129366,7 +129365,7 @@ var userExportContract = c39.router({
129366
129365
 
129367
129366
  // ../../packages/api-contracts/src/contracts/email-unsubscribe.ts
129368
129367
  init_esm_shims();
129369
- var c40 = initContract();
129368
+ var c41 = initContract();
129370
129369
  var emailUnsubscribeQuerySchema = external_exports.object({
129371
129370
  token: external_exports.string().optional()
129372
129371
  });
@@ -129376,13 +129375,13 @@ var emailUnsubscribeResponseSchema = external_exports.object({
129376
129375
  var emailUnsubscribeErrorSchema = external_exports.object({
129377
129376
  error: external_exports.string()
129378
129377
  });
129379
- var emailUnsubscribeContract = c40.router({
129378
+ var emailUnsubscribeContract = c41.router({
129380
129379
  get: {
129381
129380
  method: "GET",
129382
129381
  path: "/api/email/unsubscribe",
129383
129382
  query: emailUnsubscribeQuerySchema,
129384
129383
  responses: {
129385
- 200: c40.otherResponse({
129384
+ 200: c41.otherResponse({
129386
129385
  contentType: "text/html",
129387
129386
  body: external_exports.unknown()
129388
129387
  }),
@@ -129405,8 +129404,8 @@ var emailUnsubscribeContract = c40.router({
129405
129404
 
129406
129405
  // ../../packages/api-contracts/src/contracts/connectors-type-callback.ts
129407
129406
  init_esm_shims();
129408
- var c41 = initContract();
129409
- var connectorsTypeCallbackContract = c41.router({
129407
+ var c42 = initContract();
129408
+ var connectorsTypeCallbackContract = c42.router({
129410
129409
  callback: {
129411
129410
  method: "GET",
129412
129411
  path: "/api/connectors/:type/callback",
@@ -129419,7 +129418,7 @@ var connectorsTypeCallbackContract = c41.router({
129419
129418
  error_description: external_exports.string().optional()
129420
129419
  }),
129421
129420
  responses: {
129422
- 307: c41.noBody()
129421
+ 307: c42.noBody()
129423
129422
  },
129424
129423
  summary: "Complete connector OAuth authorization"
129425
129424
  }
@@ -129427,7 +129426,7 @@ var connectorsTypeCallbackContract = c41.router({
129427
129426
 
129428
129427
  // ../../packages/api-contracts/src/contracts/test-oauth-provider-authorize.ts
129429
129428
  init_esm_shims();
129430
- var c42 = initContract();
129429
+ var c43 = initContract();
129431
129430
  var testOAuthProviderAuthorizeErrorSchema = external_exports.object({
129432
129431
  error: external_exports.string()
129433
129432
  });
@@ -129439,13 +129438,13 @@ var testOAuthProviderAuthorizeQuerySchema = external_exports.object({
129439
129438
  scope: external_exports.string().optional(),
129440
129439
  state: external_exports.string().optional()
129441
129440
  });
129442
- var testOAuthProviderAuthorizeContract = c42.router({
129441
+ var testOAuthProviderAuthorizeContract = c43.router({
129443
129442
  authorize: {
129444
129443
  method: "GET",
129445
129444
  path: "/api/test/oauth-provider/authorize",
129446
129445
  query: testOAuthProviderAuthorizeQuerySchema,
129447
129446
  responses: {
129448
- 302: c42.noBody(),
129447
+ 302: c43.noBody(),
129449
129448
  400: testOAuthProviderAuthorizeErrorSchema,
129450
129449
  404: external_exports.string()
129451
129450
  },
@@ -129455,7 +129454,7 @@ var testOAuthProviderAuthorizeContract = c42.router({
129455
129454
 
129456
129455
  // ../../packages/api-contracts/src/contracts/test-oauth-provider-echo.ts
129457
129456
  init_esm_shims();
129458
- var c43 = initContract();
129457
+ var c44 = initContract();
129459
129458
  var testOAuthProviderEchoErrorSchema = external_exports.object({
129460
129459
  error: external_exports.string()
129461
129460
  });
@@ -129463,7 +129462,7 @@ var testOAuthProviderEchoResponseSchema = external_exports.object({
129463
129462
  authorization: external_exports.string(),
129464
129463
  receivedAt: external_exports.string()
129465
129464
  });
129466
- var testOAuthProviderEchoContract = c43.router({
129465
+ var testOAuthProviderEchoContract = c44.router({
129467
129466
  echo: {
129468
129467
  method: "GET",
129469
129468
  path: "/api/test/oauth-provider/echo",
@@ -129478,7 +129477,7 @@ var testOAuthProviderEchoContract = c43.router({
129478
129477
 
129479
129478
  // ../../packages/api-contracts/src/contracts/test-oauth-provider-token.ts
129480
129479
  init_esm_shims();
129481
- var c44 = initContract();
129480
+ var c45 = initContract();
129482
129481
  var testOAuthProviderTokenErrorSchema = external_exports.object({
129483
129482
  error: external_exports.string(),
129484
129483
  error_description: external_exports.string().optional()
@@ -129490,11 +129489,11 @@ var testOAuthProviderTokenResponseSchema = external_exports.object({
129490
129489
  expires_in: external_exports.number(),
129491
129490
  scope: external_exports.string()
129492
129491
  });
129493
- var testOAuthProviderTokenContract = c44.router({
129492
+ var testOAuthProviderTokenContract = c45.router({
129494
129493
  token: {
129495
129494
  method: "POST",
129496
129495
  path: "/api/test/oauth-provider/token",
129497
- body: c44.type(),
129496
+ body: c45.type(),
129498
129497
  responses: {
129499
129498
  200: testOAuthProviderTokenResponseSchema,
129500
129499
  400: testOAuthProviderTokenErrorSchema,
@@ -129507,7 +129506,7 @@ var testOAuthProviderTokenContract = c44.router({
129507
129506
 
129508
129507
  // ../../packages/api-contracts/src/contracts/test-oauth-provider-device-auth.ts
129509
129508
  init_esm_shims();
129510
- var c45 = initContract();
129509
+ var c46 = initContract();
129511
129510
  var testOAuthProviderDeviceAuthErrorSchema = external_exports.object({
129512
129511
  error: external_exports.string(),
129513
129512
  error_description: external_exports.string().optional()
@@ -129520,11 +129519,11 @@ var testOAuthProviderDeviceAuthResponseSchema = external_exports.object({
129520
129519
  expires_in: external_exports.number(),
129521
129520
  interval: external_exports.number()
129522
129521
  });
129523
- var testOAuthProviderDeviceAuthContract = c45.router({
129522
+ var testOAuthProviderDeviceAuthContract = c46.router({
129524
129523
  deviceAuth: {
129525
129524
  method: "POST",
129526
129525
  path: "/api/test/oauth-provider/device/code",
129527
- body: c45.type(),
129526
+ body: c46.type(),
129528
129527
  responses: {
129529
129528
  200: testOAuthProviderDeviceAuthResponseSchema,
129530
129529
  400: testOAuthProviderDeviceAuthErrorSchema,
@@ -129537,7 +129536,7 @@ var testOAuthProviderDeviceAuthContract = c45.router({
129537
129536
 
129538
129537
  // ../../packages/api-contracts/src/contracts/test-oauth-provider-userinfo.ts
129539
129538
  init_esm_shims();
129540
- var c46 = initContract();
129539
+ var c47 = initContract();
129541
129540
  var testOAuthProviderUserinfoErrorSchema = external_exports.object({
129542
129541
  error: external_exports.string()
129543
129542
  });
@@ -129546,7 +129545,7 @@ var testOAuthProviderUserinfoResponseSchema = external_exports.object({
129546
129545
  id: external_exports.string(),
129547
129546
  username: external_exports.string()
129548
129547
  });
129549
- var testOAuthProviderUserinfoContract = c46.router({
129548
+ var testOAuthProviderUserinfoContract = c47.router({
129550
129549
  userinfo: {
129551
129550
  method: "GET",
129552
129551
  path: "/api/test/oauth-provider/userinfo",
@@ -129561,7 +129560,7 @@ var testOAuthProviderUserinfoContract = c46.router({
129561
129560
 
129562
129561
  // ../../packages/api-contracts/src/contracts/test-slack-dispatch-probe.ts
129563
129562
  init_esm_shims();
129564
- var c47 = initContract();
129563
+ var c48 = initContract();
129565
129564
  var testSlackDispatchProbeBodySchema = external_exports.object({
129566
129565
  team_id: external_exports.string(),
129567
129566
  channel_id: external_exports.string(),
@@ -129589,7 +129588,7 @@ var testSlackDispatchProbeResponseSchema = external_exports.union([
129589
129588
  testSlackDispatchProbeSuccessResponseSchema,
129590
129589
  testSlackDispatchProbeFailureResponseSchema
129591
129590
  ]);
129592
- var testSlackDispatchProbeContract = c47.router({
129591
+ var testSlackDispatchProbeContract = c48.router({
129593
129592
  post: {
129594
129593
  method: "POST",
129595
129594
  path: "/api/test/slack-dispatch-probe",
@@ -129605,7 +129604,7 @@ var testSlackDispatchProbeContract = c47.router({
129605
129604
 
129606
129605
  // ../../packages/api-contracts/src/contracts/test-slack-state.ts
129607
129606
  init_esm_shims();
129608
- var c48 = initContract();
129607
+ var c49 = initContract();
129609
129608
  var testSlackStateErrorSchema = external_exports.object({
129610
129609
  error: external_exports.string()
129611
129610
  });
@@ -129690,7 +129689,7 @@ var testSlackStateResponseSchema = external_exports.object({
129690
129689
  })
129691
129690
  )
129692
129691
  });
129693
- var testSlackStateContract = c48.router({
129692
+ var testSlackStateContract = c49.router({
129694
129693
  get: {
129695
129694
  method: "GET",
129696
129695
  path: "/api/test/slack-state",
@@ -129732,7 +129731,7 @@ var testSlackStateContract = c48.router({
129732
129731
 
129733
129732
  // ../../packages/api-contracts/src/contracts/test-slack-mock.ts
129734
129733
  init_esm_shims();
129735
- var c49 = initContract();
129734
+ var c50 = initContract();
129736
129735
  var slackMockRequestBodySchema = external_exports.unknown().optional();
129737
129736
  var slackMockNotFoundSchema = external_exports.string();
129738
129737
  var testSlackMockOkResponseSchema = external_exports.object({
@@ -129798,7 +129797,7 @@ var testSlackMockUsersInfoResponseSchema = testSlackMockOkResponseSchema.extend(
129798
129797
  })
129799
129798
  })
129800
129799
  });
129801
- var testSlackMockContract = c49.router({
129800
+ var testSlackMockContract = c50.router({
129802
129801
  assistantThreadsSetStatus: {
129803
129802
  method: "POST",
129804
129803
  path: "/api/test/slack-mock/assistant.threads.setStatus",
@@ -129903,7 +129902,7 @@ var testSlackMockContract = c49.router({
129903
129902
 
129904
129903
  // ../../packages/api-contracts/src/contracts/test-telegram-mock.ts
129905
129904
  init_esm_shims();
129906
- var c50 = initContract();
129905
+ var c51 = initContract();
129907
129906
  var testTelegramMockPathParamsSchema = external_exports.object({
129908
129907
  botToken: external_exports.string(),
129909
129908
  method: external_exports.string()
@@ -129916,7 +129915,7 @@ var testTelegramMockErrorResponseSchema = external_exports.object({
129916
129915
  ok: external_exports.literal(false),
129917
129916
  description: external_exports.string()
129918
129917
  });
129919
- var testTelegramMockContract = c50.router({
129918
+ var testTelegramMockContract = c51.router({
129920
129919
  post: {
129921
129920
  method: "POST",
129922
129921
  path: "/api/test/telegram-mock/:botToken/:method",
@@ -129932,7 +129931,7 @@ var testTelegramMockContract = c50.router({
129932
129931
 
129933
129932
  // ../../packages/api-contracts/src/contracts/test-telegram-state.ts
129934
129933
  init_esm_shims();
129935
- var c51 = initContract();
129934
+ var c52 = initContract();
129936
129935
  var testTelegramStateQuerySchema = external_exports.object({
129937
129936
  bot_id: external_exports.string().optional()
129938
129937
  });
@@ -129974,7 +129973,7 @@ var testTelegramStateSeedResponseSchema = external_exports.object({
129974
129973
  user_link_id: external_exports.string().nullable(),
129975
129974
  default_agent_id: external_exports.string()
129976
129975
  });
129977
- var testTelegramStateContract = c51.router({
129976
+ var testTelegramStateContract = c52.router({
129978
129977
  get: {
129979
129978
  method: "GET",
129980
129979
  path: "/api/test/telegram-state",
@@ -130012,7 +130011,7 @@ var testTelegramStateContract = c51.router({
130012
130011
 
130013
130012
  // ../../packages/api-contracts/src/contracts/internal-event-consumers.ts
130014
130013
  init_esm_shims();
130015
- var c52 = initContract();
130014
+ var c53 = initContract();
130016
130015
  var eventConsumerHeadersSchema = external_exports.object({
130017
130016
  "x-vm0-signature": external_exports.string().optional(),
130018
130017
  "x-vm0-timestamp": external_exports.string().optional()
@@ -130032,7 +130031,7 @@ var eventConsumerPayloadSchema = external_exports.object({
130032
130031
  var eventConsumerUnauthorizedSchema = external_exports.object({
130033
130032
  error: external_exports.string()
130034
130033
  });
130035
- var internalEventConsumerTelegramTypingContract = c52.router({
130034
+ var internalEventConsumerTelegramTypingContract = c53.router({
130036
130035
  refresh: {
130037
130036
  method: "POST",
130038
130037
  path: "/api/internal/event-consumers/telegram-typing",
@@ -130045,7 +130044,7 @@ var internalEventConsumerTelegramTypingContract = c52.router({
130045
130044
  summary: "Refresh Telegram typing indicators for all pending callbacks of a run"
130046
130045
  }
130047
130046
  });
130048
- var internalEventConsumerAgentPhoneTypingContract = c52.router({
130047
+ var internalEventConsumerAgentPhoneTypingContract = c53.router({
130049
130048
  refresh: {
130050
130049
  method: "POST",
130051
130050
  path: "/api/internal/event-consumers/agentphone-typing",
@@ -130058,7 +130057,7 @@ var internalEventConsumerAgentPhoneTypingContract = c52.router({
130058
130057
  summary: "Refresh AgentPhone typing indicators for all pending iMessage callbacks of a run"
130059
130058
  }
130060
130059
  });
130061
- var internalEventConsumerAxiomContract = c52.router({
130060
+ var internalEventConsumerAxiomContract = c53.router({
130062
130061
  ingest: {
130063
130062
  method: "POST",
130064
130063
  path: "/api/internal/event-consumers/axiom",
@@ -130072,7 +130071,7 @@ var internalEventConsumerAxiomContract = c52.router({
130072
130071
  summary: "Ingest agent run events into Axiom"
130073
130072
  }
130074
130073
  });
130075
- var internalEventConsumerChatAssistantContract = c52.router({
130074
+ var internalEventConsumerChatAssistantContract = c53.router({
130076
130075
  process: {
130077
130076
  method: "POST",
130078
130077
  path: "/api/internal/event-consumers/chat-assistant",
@@ -130088,7 +130087,7 @@ var internalEventConsumerChatAssistantContract = c52.router({
130088
130087
 
130089
130088
  // ../../packages/api-contracts/src/contracts/cron.ts
130090
130089
  init_esm_shims();
130091
- var c53 = initContract();
130090
+ var c54 = initContract();
130092
130091
  var cleanupResultSchema = external_exports.object({
130093
130092
  runId: external_exports.string(),
130094
130093
  sandboxId: external_exports.string().nullable(),
@@ -130103,7 +130102,7 @@ var cleanupResponseSchema = external_exports.object({
130103
130102
  exportJobsCleaned: external_exports.number(),
130104
130103
  exportJobsStuck: external_exports.number()
130105
130104
  });
130106
- var cronCleanupSandboxesContract = c53.router({
130105
+ var cronCleanupSandboxesContract = c54.router({
130107
130106
  /**
130108
130107
  * GET /api/cron/cleanup-sandboxes
130109
130108
  * Cron job to cleanup sandboxes that have stopped sending heartbeats
@@ -130170,7 +130169,7 @@ var cronAggregateInsightsResponseSchema = external_exports.union([
130170
130169
  cronAggregateInsightsSkippedResponseSchema,
130171
130170
  cronAggregateInsightsAggregatedResponseSchema
130172
130171
  ]);
130173
- var cronAggregateUsageContract = c53.router({
130172
+ var cronAggregateUsageContract = c54.router({
130174
130173
  aggregate: {
130175
130174
  method: "GET",
130176
130175
  path: "/api/cron/aggregate-usage",
@@ -130182,7 +130181,7 @@ var cronAggregateUsageContract = c53.router({
130182
130181
  summary: "Aggregate daily usage cache"
130183
130182
  }
130184
130183
  });
130185
- var cronProcessUsageEventsContract = c53.router({
130184
+ var cronProcessUsageEventsContract = c54.router({
130186
130185
  process: {
130187
130186
  method: "GET",
130188
130187
  path: "/api/cron/process-usage-events",
@@ -130194,7 +130193,7 @@ var cronProcessUsageEventsContract = c53.router({
130194
130193
  summary: "Process pending usage events"
130195
130194
  }
130196
130195
  });
130197
- var cronReconcileBillingEntitlementsContract = c53.router({
130196
+ var cronReconcileBillingEntitlementsContract = c54.router({
130198
130197
  reconcile: {
130199
130198
  method: "GET",
130200
130199
  path: "/api/cron/reconcile-billing-entitlements",
@@ -130206,7 +130205,7 @@ var cronReconcileBillingEntitlementsContract = c53.router({
130206
130205
  summary: "Reconcile billing entitlements"
130207
130206
  }
130208
130207
  });
130209
- var cronTelegramCleanupContract = c53.router({
130208
+ var cronTelegramCleanupContract = c54.router({
130210
130209
  cleanup: {
130211
130210
  method: "GET",
130212
130211
  path: "/api/cron/telegram-cleanup",
@@ -130218,7 +130217,7 @@ var cronTelegramCleanupContract = c53.router({
130218
130217
  summary: "Delete expired Telegram messages"
130219
130218
  }
130220
130219
  });
130221
- var cronComputerUseScreenshotCleanupContract = c53.router({
130220
+ var cronComputerUseScreenshotCleanupContract = c54.router({
130222
130221
  cleanup: {
130223
130222
  method: "GET",
130224
130223
  path: "/api/cron/computer-use-screenshot-cleanup",
@@ -130230,7 +130229,7 @@ var cronComputerUseScreenshotCleanupContract = c53.router({
130230
130229
  summary: "Delete expired desktop computer-use screenshots"
130231
130230
  }
130232
130231
  });
130233
- var cronDrainEmailOutboxContract = c53.router({
130232
+ var cronDrainEmailOutboxContract = c54.router({
130234
130233
  drain: {
130235
130234
  method: "GET",
130236
130235
  path: "/api/cron/drain-email-outbox",
@@ -130242,7 +130241,7 @@ var cronDrainEmailOutboxContract = c53.router({
130242
130241
  summary: "Drain pending email outbox messages"
130243
130242
  }
130244
130243
  });
130245
- var cronSyncSkillsContract = c53.router({
130244
+ var cronSyncSkillsContract = c54.router({
130246
130245
  sync: {
130247
130246
  method: "GET",
130248
130247
  path: "/api/cron/sync-skills",
@@ -130254,7 +130253,7 @@ var cronSyncSkillsContract = c53.router({
130254
130253
  summary: "Sync official skills from the skills repository"
130255
130254
  }
130256
130255
  });
130257
- var cronExecuteSchedulesContract = c53.router({
130256
+ var cronExecuteSchedulesContract = c54.router({
130258
130257
  execute: {
130259
130258
  method: "GET",
130260
130259
  path: "/api/cron/execute-schedules",
@@ -130266,7 +130265,7 @@ var cronExecuteSchedulesContract = c53.router({
130266
130265
  summary: "Execute due schedules"
130267
130266
  }
130268
130267
  });
130269
- var cronAggregateInsightsContract = c53.router({
130268
+ var cronAggregateInsightsContract = c54.router({
130270
130269
  aggregate: {
130271
130270
  method: "GET",
130272
130271
  path: "/api/cron/aggregate-insights",
@@ -130281,7 +130280,7 @@ var cronAggregateInsightsContract = c53.router({
130281
130280
 
130282
130281
  // ../../packages/api-contracts/src/contracts/chat-threads-v1.ts
130283
130282
  init_esm_shims();
130284
- var c54 = initContract();
130283
+ var c55 = initContract();
130285
130284
  var v1ThreadSchema = external_exports.object({
130286
130285
  id: external_exports.string(),
130287
130286
  title: external_exports.string().nullable(),
@@ -130295,7 +130294,7 @@ var v1MessageSchema = external_exports.object({
130295
130294
  error: external_exports.string().optional(),
130296
130295
  createdAt: external_exports.string()
130297
130296
  });
130298
- var chatThreadV1GetContract = c54.router({
130297
+ var chatThreadV1GetContract = c55.router({
130299
130298
  get: {
130300
130299
  method: "GET",
130301
130300
  path: "/api/v1/chat-threads/:threadId",
@@ -130310,7 +130309,7 @@ var chatThreadV1GetContract = c54.router({
130310
130309
  summary: "Get a chat thread"
130311
130310
  }
130312
130311
  });
130313
- var chatThreadV1MessagesContract = c54.router({
130312
+ var chatThreadV1MessagesContract = c55.router({
130314
130313
  list: {
130315
130314
  method: "GET",
130316
130315
  path: "/api/v1/chat-threads/:threadId/messages",
@@ -130330,7 +130329,7 @@ var chatThreadV1MessagesContract = c54.router({
130330
130329
  summary: "List messages in a chat thread"
130331
130330
  }
130332
130331
  });
130333
- var chatThreadV1SendContract = c54.router({
130332
+ var chatThreadV1SendContract = c55.router({
130334
130333
  send: {
130335
130334
  method: "POST",
130336
130335
  path: "/api/v1/chat-threads/messages",
@@ -130361,7 +130360,7 @@ var chatThreadV1SendContract = c54.router({
130361
130360
 
130362
130361
  // ../../packages/api-contracts/src/contracts/device-token.ts
130363
130362
  init_esm_shims();
130364
- var c55 = initContract();
130363
+ var c56 = initContract();
130365
130364
  var bb0DeviceCodeSchema = external_exports.string().regex(/^[A-Z2-9]{4}-[A-Z2-9]{4}$/);
130366
130365
  var bleSessionNonceSchema = external_exports.string().min(16).max(128).regex(/^[A-Za-z0-9._:-]+$/);
130367
130366
  var pollTokenSchema = external_exports.string().min(32).max(256).regex(/^[A-Za-z0-9._-]+$/);
@@ -130400,7 +130399,7 @@ var confirmBb0DeviceRequestSchema = external_exports.object({
130400
130399
  var confirmBb0DeviceResponseSchema = external_exports.object({
130401
130400
  status: external_exports.literal("approved")
130402
130401
  });
130403
- var deviceTokenContract = c55.router({
130402
+ var deviceTokenContract = c56.router({
130404
130403
  create: {
130405
130404
  method: "POST",
130406
130405
  path: "/api/device-token",
@@ -130425,7 +130424,7 @@ var deviceTokenContract = c55.router({
130425
130424
  summary: "Poll a bb0 device code for approval and final credentials"
130426
130425
  }
130427
130426
  });
130428
- var bb0DeviceConfirmContract = c55.router({
130427
+ var bb0DeviceConfirmContract = c56.router({
130429
130428
  confirm: {
130430
130429
  method: "POST",
130431
130430
  path: "/api/zero/devices/bb0/confirm",
@@ -130444,16 +130443,16 @@ var bb0DeviceConfirmContract = c55.router({
130444
130443
 
130445
130444
  // ../../packages/api-contracts/src/contracts/audio-transcriptions-v1.ts
130446
130445
  init_esm_shims();
130447
- var c56 = initContract();
130446
+ var c57 = initContract();
130448
130447
  var audioTranscriptionV1Schema = external_exports.object({
130449
130448
  text: external_exports.string()
130450
130449
  });
130451
- var audioTranscriptionsV1Contract = c56.router({
130450
+ var audioTranscriptionsV1Contract = c57.router({
130452
130451
  transcribe: {
130453
130452
  method: "POST",
130454
130453
  path: "/api/v1/audio/transcriptions",
130455
130454
  headers: authHeadersSchema,
130456
- body: c56.type(),
130455
+ body: c57.type(),
130457
130456
  responses: {
130458
130457
  200: audioTranscriptionV1Schema,
130459
130458
  400: apiErrorSchema,
@@ -130470,7 +130469,7 @@ var audioTranscriptionsV1Contract = c56.router({
130470
130469
 
130471
130470
  // ../../packages/api-contracts/src/contracts/generate-image.ts
130472
130471
  init_esm_shims();
130473
- var c57 = initContract();
130472
+ var c58 = initContract();
130474
130473
  var generateImageRequestSchema = external_exports.object({
130475
130474
  prompt: external_exports.unknown().optional()
130476
130475
  }).passthrough();
@@ -130481,7 +130480,7 @@ var generatedImageSchema = external_exports.object({
130481
130480
  var generateImageResponseSchema = external_exports.object({
130482
130481
  images: external_exports.array(generatedImageSchema)
130483
130482
  });
130484
- var generateImageContract = c57.router({
130483
+ var generateImageContract = c58.router({
130485
130484
  post: {
130486
130485
  method: "POST",
130487
130486
  path: "/api/generate-image",
@@ -130501,7 +130500,7 @@ var generateImageContract = c57.router({
130501
130500
 
130502
130501
  // ../../packages/api-contracts/src/contracts/realtime.ts
130503
130502
  init_esm_shims();
130504
- var c58 = initContract();
130503
+ var c59 = initContract();
130505
130504
  var ablyTokenRequestSchema = external_exports.object({
130506
130505
  keyName: external_exports.string(),
130507
130506
  ttl: external_exports.number().optional(),
@@ -130511,7 +130510,7 @@ var ablyTokenRequestSchema = external_exports.object({
130511
130510
  nonce: external_exports.string(),
130512
130511
  mac: external_exports.string()
130513
130512
  });
130514
- var runnerRealtimeTokenContract = c58.router({
130513
+ var runnerRealtimeTokenContract = c59.router({
130515
130514
  /**
130516
130515
  * POST /api/runners/realtime/token
130517
130516
  * Get an Ably token to subscribe to a runner group's job notification channel
@@ -130533,7 +130532,7 @@ var runnerRealtimeTokenContract = c58.router({
130533
130532
  summary: "Get Ably token for runner group job notifications"
130534
130533
  }
130535
130534
  });
130536
- var platformRealtimeTokenContract = c58.router({
130535
+ var platformRealtimeTokenContract = c59.router({
130537
130536
  /**
130538
130537
  * POST /api/zero/realtime/token
130539
130538
  * Get an Ably token to subscribe to the authenticated user's push channel
@@ -131161,14 +131160,14 @@ function findMatchingPermissions(method, path3, config4, options = {}) {
131161
131160
 
131162
131161
  // ../../packages/api-contracts/src/contracts/zero-feature-switches.ts
131163
131162
  init_esm_shims();
131164
- var c59 = initContract();
131163
+ var c60 = initContract();
131165
131164
  var featureSwitchesResponseSchema = external_exports.object({
131166
131165
  switches: external_exports.record(external_exports.string(), external_exports.boolean())
131167
131166
  });
131168
131167
  var updateFeatureSwitchesRequestSchema = external_exports.object({
131169
131168
  switches: external_exports.record(external_exports.string(), external_exports.boolean())
131170
131169
  });
131171
- var zeroFeatureSwitchesContract = c59.router({
131170
+ var zeroFeatureSwitchesContract = c60.router({
131172
131171
  get: {
131173
131172
  method: "GET",
131174
131173
  path: "/api/zero/feature-switches",
@@ -131197,7 +131196,7 @@ var zeroFeatureSwitchesContract = c59.router({
131197
131196
  method: "DELETE",
131198
131197
  path: "/api/zero/feature-switches",
131199
131198
  headers: authHeadersSchema,
131200
- body: c59.noBody(),
131199
+ body: c60.noBody(),
131201
131200
  responses: {
131202
131201
  200: external_exports.object({ deleted: external_exports.literal(true) }),
131203
131202
  401: apiErrorSchema,
@@ -131209,7 +131208,7 @@ var zeroFeatureSwitchesContract = c59.router({
131209
131208
 
131210
131209
  // ../../packages/api-contracts/src/contracts/zero-memory.ts
131211
131210
  init_esm_shims();
131212
- var c60 = initContract();
131211
+ var c61 = initContract();
131213
131212
  var memoryFileSchema = external_exports.object({
131214
131213
  path: external_exports.string(),
131215
131214
  size: external_exports.number()
@@ -131227,7 +131226,7 @@ var memoryDetailResponseSchema = external_exports.object({
131227
131226
  files: external_exports.array(memoryFileSchema),
131228
131227
  fileContents: external_exports.array(memoryFileContentSchema)
131229
131228
  });
131230
- var zeroMemoryContract = c60.router({
131229
+ var zeroMemoryContract = c61.router({
131231
131230
  get: {
131232
131231
  method: "GET",
131233
131232
  path: "/api/zero/memory",
@@ -131243,7 +131242,7 @@ var zeroMemoryContract = c60.router({
131243
131242
 
131244
131243
  // ../../packages/api-contracts/src/contracts/onboarding.ts
131245
131244
  init_esm_shims();
131246
- var c61 = initContract();
131245
+ var c62 = initContract();
131247
131246
  var onboardingStatusResponseSchema = external_exports.object({
131248
131247
  needsOnboarding: external_exports.boolean(),
131249
131248
  isAdmin: external_exports.boolean(),
@@ -131256,7 +131255,7 @@ var onboardingStatusResponseSchema = external_exports.object({
131256
131255
  sound: external_exports.string().optional()
131257
131256
  }).nullable()
131258
131257
  });
131259
- var onboardingStatusContract = c61.router({
131258
+ var onboardingStatusContract = c62.router({
131260
131259
  getStatus: {
131261
131260
  method: "GET",
131262
131261
  path: "/api/zero/onboarding/status",
@@ -131268,7 +131267,7 @@ var onboardingStatusContract = c61.router({
131268
131267
  summary: "Get onboarding status for current user"
131269
131268
  }
131270
131269
  });
131271
- var onboardingSetupContract = c61.router({
131270
+ var onboardingSetupContract = c62.router({
131272
131271
  setup: {
131273
131272
  method: "POST",
131274
131273
  path: "/api/zero/onboarding/setup",
@@ -131300,62 +131299,6 @@ var skillFrontmatterSchema = external_exports.object({
131300
131299
  description: external_exports.string().optional()
131301
131300
  });
131302
131301
 
131303
- // ../../packages/api-contracts/src/contracts/zero-user-permission-grants.ts
131304
- init_esm_shims();
131305
- var c62 = initContract();
131306
- var agentIdSchema = external_exports.string().uuid();
131307
- var connectorRefSchema = external_exports.string().min(1).max(64);
131308
- var permissionSchema = external_exports.string().min(1).max(128);
131309
- var userPermissionGrantActionSchema = external_exports.enum(["allow", "deny"]);
131310
- var userPermissionGrantResponseSchema = external_exports.object({
131311
- agentId: agentIdSchema,
131312
- connectorRef: connectorRefSchema,
131313
- permission: permissionSchema,
131314
- action: userPermissionGrantActionSchema,
131315
- expiresAt: external_exports.string().nullable(),
131316
- createdAt: external_exports.string(),
131317
- updatedAt: external_exports.string()
131318
- });
131319
- var listUserPermissionGrantsQuerySchema = external_exports.object({
131320
- agentId: agentIdSchema
131321
- });
131322
- var upsertUserPermissionGrantRequestSchema = external_exports.object({
131323
- agentId: agentIdSchema,
131324
- connectorRef: connectorRefSchema,
131325
- permission: permissionSchema,
131326
- action: userPermissionGrantActionSchema
131327
- });
131328
- var zeroUserPermissionGrantsContract = c62.router({
131329
- list: {
131330
- method: "GET",
131331
- path: "/api/zero/user-permission-grants",
131332
- headers: authHeadersSchema,
131333
- query: listUserPermissionGrantsQuerySchema,
131334
- responses: {
131335
- 200: external_exports.array(userPermissionGrantResponseSchema),
131336
- 400: apiErrorSchema,
131337
- 401: apiErrorSchema,
131338
- 403: apiErrorSchema,
131339
- 404: apiErrorSchema
131340
- },
131341
- summary: "List current user's active permission grants for an agent"
131342
- },
131343
- upsert: {
131344
- method: "PUT",
131345
- path: "/api/zero/user-permission-grants",
131346
- headers: authHeadersSchema,
131347
- body: upsertUserPermissionGrantRequestSchema,
131348
- responses: {
131349
- 200: userPermissionGrantResponseSchema,
131350
- 400: apiErrorSchema,
131351
- 401: apiErrorSchema,
131352
- 403: apiErrorSchema,
131353
- 404: apiErrorSchema
131354
- },
131355
- summary: "Upsert current user's permission grant for an agent"
131356
- }
131357
- });
131358
-
131359
131302
  // ../../packages/api-contracts/src/contracts/zero-codex-device-auth.ts
131360
131303
  init_esm_shims();
131361
131304
  var c63 = initContract();
@@ -134041,12 +133984,6 @@ var FEATURE_SWITCHES = {
134041
133984
  description: "Reveal activity debug surfaces, activity log navigation, appended system prompts, and Debug preferences",
134042
133985
  enabled: false
134043
133986
  },
134044
- ["userPermissionGrants" /* UserPermissionGrants */]: {
134045
- maintainer: "liangyou@vm0.ai",
134046
- description: "Gate the per-user Zero firewall permission grant rollout. Staff-only while the grant backfill and rollout verification complete.",
134047
- enabled: false,
134048
- enabledOrgIdHashes: STAFF_ORG_ID_HASHES
134049
- },
134050
133987
  ["computerUse" /* ComputerUse */]: {
134051
133988
  maintainer: "ethan@vm0.ai",
134052
133989
  description: "Enable remote desktop host registration",
@@ -134160,6 +134097,17 @@ var FEATURE_SWITCHES = {
134160
134097
  description: "Show the read-only memory viewer page in the Zero sidebar and at /memory, listing the files in the user's memory artifact.",
134161
134098
  enabled: false,
134162
134099
  enabledOrgIdHashes: STAFF_ORG_ID_HASHES
134100
+ },
134101
+ ["chatScrollToBottomButton" /* ChatScrollToBottomButton */]: {
134102
+ maintainer: "ethan@vm0.ai",
134103
+ description: "Show a floating scroll-to-bottom button in the bottom-right of the chat thread whenever the message list is scrolled away from the bottom. Clicking it jumps to the latest message.",
134104
+ enabled: true
134105
+ },
134106
+ ["chatRecommendedFollowups" /* ChatRecommendedFollowups */]: {
134107
+ maintainer: "linghan@vm0.ai",
134108
+ description: "Generate and show recommended follow-up prompts after completed chat runs.",
134109
+ enabled: false,
134110
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
134163
134111
  }
134164
134112
  };
134165
134113
 
@@ -135527,7 +135475,6 @@ export {
135527
135475
  Option,
135528
135476
  configureGlobalProxyFromEnv,
135529
135477
  source_default,
135530
- decodeCliTokenPayload,
135531
135478
  decodeZeroTokenPayload,
135532
135479
  loadConfig,
135533
135480
  saveConfig,
@@ -135604,6 +135551,7 @@ export {
135604
135551
  deleteZeroAgent,
135605
135552
  getZeroAgentInstructions,
135606
135553
  getZeroAgentUserConnectors,
135554
+ listZeroUserPermissionGrants,
135607
135555
  updateZeroAgentInstructions,
135608
135556
  listSkills,
135609
135557
  createSkill,
@@ -135691,6 +135639,7 @@ export {
135691
135639
  isFirewallConnectorType,
135692
135640
  getConnectorFirewall,
135693
135641
  resolveFirewallPolicies,
135642
+ permissionGrantsToFirewallPolicies,
135694
135643
  matchFirewallBaseUrl,
135695
135644
  findMatchingPermissions,
135696
135645
  parseEvent,
@@ -135720,4 +135669,4 @@ undici/lib/web/fetch/body.js:
135720
135669
  undici/lib/web/websocket/frame.js:
135721
135670
  (*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
135722
135671
  */
135723
- //# sourceMappingURL=chunk-7XY55Z3Z.js.map
135672
+ //# sourceMappingURL=chunk-Z5VRB237.js.map