@renai-labs/sdk 0.1.20 → 0.1.22

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.
@@ -76,21 +76,6 @@ export const zReplayPublicView = z.object({
76
76
  session: zReplayPublicSession,
77
77
  messages: z.array(zReplayMessage),
78
78
  });
79
- export const zPublisherLink = z.object({
80
- label: z.string().min(1),
81
- href: z.url(),
82
- });
83
- export const zPublisherPublicView = z.object({
84
- id: z.string(),
85
- slug: z.string(),
86
- handle: z.string(),
87
- name: z.string(),
88
- description: z.string().nullable(),
89
- avatar: z.string().nullable(),
90
- url: z.string().nullable(),
91
- isVerified: z.boolean(),
92
- links: z.array(zPublisherLink),
93
- });
94
79
  export const zSpecPublicTriggerEntry = z.object({
95
80
  slug: z.string().regex(/^[a-z0-9][a-z0-9-]*$/),
96
81
  ref: z
@@ -216,6 +201,21 @@ export const zSpecPublic = z.object({
216
201
  })
217
202
  .optional(),
218
203
  });
204
+ export const zPublisherLink = z.object({
205
+ label: z.string().min(1),
206
+ href: z.url(),
207
+ });
208
+ export const zPublisherPublicView = z.object({
209
+ id: z.string(),
210
+ slug: z.string(),
211
+ handle: z.string(),
212
+ name: z.string(),
213
+ description: z.string().nullable(),
214
+ avatar: z.string().nullable(),
215
+ url: z.string().nullable(),
216
+ isVerified: z.boolean(),
217
+ links: z.array(zPublisherLink),
218
+ });
219
219
  export const zBlueprintOutcome = z.object({
220
220
  title: z.string().min(1),
221
221
  description: z.string().min(1),
@@ -244,21 +244,96 @@ export const zBlueprintPublicView = z.object({
244
244
  websiteMetadata: zWebsiteMetadata.nullable(),
245
245
  pageContent: zBlueprintPageContent.nullable(),
246
246
  publisherId: z.string(),
247
+ publisher: zPublisherPublicView.nullish().default(null),
247
248
  template: zSpecPublic,
248
249
  replays: z.array(z.string()),
249
250
  });
250
- export const zRequiredCredential = z.object({
251
+ export const zBlueprintPublicListItem = z.object({
252
+ id: z.string(),
253
+ slug: z.string(),
254
+ name: z.string(),
255
+ description: z.string().nullable(),
256
+ websiteMetadata: zWebsiteMetadata.nullable(),
257
+ publisherId: z.string().nullable(),
258
+ publisher: zPublisherPublicView.nullish().default(null),
259
+ updatedAt: z.iso
260
+ .datetime()
261
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
262
+ });
263
+ export const zRequirementWhen = z.object({
251
264
  name: z
252
265
  .string()
253
266
  .min(1)
254
- .max(128)
255
- .regex(/^[A-Z_][A-Z0-9_]*$/),
256
- description: z.string().max(512).optional(),
267
+ .max(64)
268
+ .regex(/^[a-z][A-Za-z0-9_]*$/),
269
+ op: z.enum(["eq", "neq"]),
270
+ value: z.string().max(512),
257
271
  });
272
+ export const zRequiredCredential = z.union([
273
+ z.object({
274
+ kind: z.literal("env").optional().default("env"),
275
+ name: z
276
+ .string()
277
+ .min(1)
278
+ .max(128)
279
+ .regex(/^[A-Z_][A-Z0-9_]*$/),
280
+ description: z.string().max(512).optional(),
281
+ }),
282
+ z.object({
283
+ kind: z.literal("secret"),
284
+ name: z
285
+ .string()
286
+ .min(1)
287
+ .max(64)
288
+ .regex(/^[a-z][A-Za-z0-9_]*$/),
289
+ description: z.string().max(512).optional(),
290
+ }),
291
+ z.object({
292
+ kind: z.literal("oauth_app"),
293
+ name: z.string().min(1).max(128),
294
+ description: z.string().max(512).optional(),
295
+ }),
296
+ z.object({
297
+ kind: z.literal("text"),
298
+ name: z
299
+ .string()
300
+ .min(1)
301
+ .max(64)
302
+ .regex(/^[a-z][A-Za-z0-9_]*$/),
303
+ description: z.string().max(512).optional(),
304
+ message: z.string().min(1).max(512),
305
+ placeholder: z.string().max(256).optional(),
306
+ when: zRequirementWhen.optional(),
307
+ }),
308
+ z.object({
309
+ kind: z.literal("select"),
310
+ name: z
311
+ .string()
312
+ .min(1)
313
+ .max(64)
314
+ .regex(/^[a-z][A-Za-z0-9_]*$/),
315
+ description: z.string().max(512).optional(),
316
+ message: z.string().min(1).max(512),
317
+ options: z
318
+ .array(z.object({
319
+ label: z.string().min(1).max(256),
320
+ value: z.string().max(512),
321
+ hint: z.string().max(256).optional(),
322
+ }))
323
+ .min(1)
324
+ .max(64),
325
+ when: zRequirementWhen.optional(),
326
+ }),
327
+ ]);
258
328
  export const zRepository = z.object({
259
329
  url: z.url().optional(),
260
330
  source: z.string().optional(),
261
331
  });
332
+ export const zMcpTimeout = z.object({
333
+ startup: z.int().gt(0).lte(600000).optional(),
334
+ catalog: z.int().gt(0).lte(600000).optional(),
335
+ execution: z.int().gt(0).lte(600000).optional(),
336
+ });
262
337
  export const zAgentLatestVersion = z.object({
263
338
  id: z.string(),
264
339
  agentId: z.string(),
@@ -286,16 +361,34 @@ export const zAgentLatestVersion = z.object({
286
361
  }),
287
362
  })),
288
363
  });
289
- export const zOAuthStartInput = z.object({
364
+ export const zOAuthSessionStatus = z.object({
365
+ id: z.string(),
366
+ status: z.enum(["pending", "complete", "failed", "expired"]),
367
+ mcpId: z.string().nullable(),
368
+ credentialId: z.string().nullable(),
369
+ failureReason: z.string().nullable(),
370
+ expiresAt: z.iso
371
+ .datetime()
372
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
373
+ });
374
+ /**
375
+ * Start 'Sign in with X' for an MCP. Needs a human with a browser: unless alreadyConnected, hand the returned authorizationUrl to the user and poll the session until it is complete, failed, or expired.
376
+ */
377
+ export const zOAuthConnectBody = z.object({
290
378
  mcpId: z.string().regex(/^mcp_[0-9A-HJKMNP-TV-Z]{26}$/),
291
379
  scope: z.string().optional(),
292
- callbackUrl: z.url().optional(),
293
- });
294
- export const zOAuthStartResult = z.object({
295
- authorizationUrl: z.string(),
296
- sessionId: z.string(),
297
- state: z.string(),
298
380
  });
381
+ export const zOAuthConnectResult = z.union([
382
+ z.object({
383
+ alreadyConnected: z.literal(true),
384
+ credentialId: z.string(),
385
+ }),
386
+ z.object({
387
+ alreadyConnected: z.literal(false),
388
+ authorizationUrl: z.string(),
389
+ sessionId: z.string(),
390
+ }),
391
+ ]);
299
392
  export const zCredentialTransferInput = z.object({
300
393
  targetVaultId: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
301
394
  mode: z.enum(["copy", "move"]).optional().default("copy"),
@@ -317,6 +410,23 @@ export const zCredentialAuthPublic = z.union([
317
410
  resource: z.string().optional(),
318
411
  })
319
412
  .nullish(),
413
+ profile: z
414
+ .union([
415
+ z.object({
416
+ service: z.literal("github"),
417
+ id: z.number(),
418
+ login: z.string(),
419
+ name: z.string().nullable(),
420
+ }),
421
+ z.object({
422
+ service: z.literal("google_workspace"),
423
+ sub: z.string(),
424
+ email: z.string(),
425
+ name: z.string().nullable(),
426
+ hd: z.string().nullable(),
427
+ }),
428
+ ])
429
+ .nullish(),
320
430
  }),
321
431
  z.object({
322
432
  type: z.literal("env"),
@@ -330,12 +440,17 @@ export const zCredentialAuthPublic = z.union([
330
440
  provider: z.enum(["composio"]),
331
441
  userId: z.string(),
332
442
  }),
443
+ z.object({
444
+ type: z.literal("custom"),
445
+ fieldNames: z.array(z.string()),
446
+ }),
333
447
  ]);
334
448
  export const zCredential = z.object({
335
449
  id: z.string(),
336
450
  vaultId: z.string(),
337
451
  name: z.string(),
338
452
  mcpId: z.string().nullable(),
453
+ oauthAppId: z.string().nullable(),
339
454
  provider: z.enum(["github", "google_workspace"]).nullable(),
340
455
  label: z.string().nullable(),
341
456
  keyPreview: z.string().nullable(),
@@ -346,17 +461,16 @@ export const zCredential = z.object({
346
461
  updatedAt: z.iso
347
462
  .datetime()
348
463
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
349
- archivedAt: z.iso
350
- .datetime()
351
- .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
352
- .nullable(),
353
464
  });
354
465
  export const zCredentialTransferResult = z.object({
355
466
  target: zCredential,
356
467
  sourceCredentialId: z.string(),
357
- sourceArchived: z.boolean(),
468
+ sourceDeleted: z.boolean(),
358
469
  replacedCredentialId: z.string().nullable(),
359
470
  });
471
+ /**
472
+ * Rotate the secret in place. The kind (bearer/oauth/env/basic) cannot change. Replacing an OAuth token without its renewal info (refresh token + token endpoint) disables automatic renewal.
473
+ */
360
474
  export const zCredentialAuth = z.union([
361
475
  z.object({
362
476
  type: z.literal("bearer"),
@@ -410,24 +524,113 @@ export const zCredentialAuth = z.union([
410
524
  userId: z.string(),
411
525
  url: z.url(),
412
526
  }),
527
+ z.object({
528
+ type: z.literal("custom"),
529
+ fields: z.record(z.string(), z.string().max(4096)),
530
+ }),
413
531
  ]);
414
- export const zVault = z.object({
532
+ export const zCredentialCreateAuth = z.union([
533
+ z.object({
534
+ type: z.literal("bearer"),
535
+ token: z.string(),
536
+ }),
537
+ z.object({
538
+ type: z.literal("oauth"),
539
+ accessToken: z.string(),
540
+ expiresAt: z.string().nullish(),
541
+ refresh: z
542
+ .object({
543
+ clientId: z.string(),
544
+ refreshToken: z.string(),
545
+ clientSecret: z.string().optional(),
546
+ tokenEndpoint: z.string().optional(),
547
+ tokenEndpointAuth: z.enum(["none", "client_secret_basic", "client_secret_post"]).optional(),
548
+ scope: z.string().optional(),
549
+ resource: z.string().optional(),
550
+ })
551
+ .nullish(),
552
+ profile: z
553
+ .union([
554
+ z.object({
555
+ service: z.literal("github"),
556
+ id: z.number(),
557
+ login: z.string(),
558
+ name: z.string().nullable(),
559
+ }),
560
+ z.object({
561
+ service: z.literal("google_workspace"),
562
+ sub: z.string(),
563
+ email: z.string(),
564
+ name: z.string().nullable(),
565
+ hd: z.string().nullable(),
566
+ }),
567
+ ])
568
+ .nullish(),
569
+ }),
570
+ z.object({
571
+ type: z.literal("env"),
572
+ value: z.string(),
573
+ }),
574
+ z.object({
575
+ type: z.literal("basic"),
576
+ username: z.string(),
577
+ password: z.string(),
578
+ }),
579
+ z.object({
580
+ type: z.literal("custom"),
581
+ fields: z.record(z.string(), z.string().max(4096)),
582
+ }),
583
+ ]);
584
+ /**
585
+ * Create a credential in one of two slots. Adding to a slot that is already filled replaces it in place (that is what 'Reconnect' does). Labels double as environment-variable names and must be unique per vault.
586
+ */
587
+ export const zCreateCredentialBody = z.union([
588
+ z.object({
589
+ slot: z.literal("mcp"),
590
+ mcpId: z.string().regex(/^mcp_[0-9A-HJKMNP-TV-Z]{26}$/),
591
+ name: z.string().min(1).max(256),
592
+ auth: zCredentialCreateAuth,
593
+ }),
594
+ z.object({
595
+ slot: z.literal("env"),
596
+ label: z
597
+ .string()
598
+ .min(1)
599
+ .max(128)
600
+ .regex(/^[A-Z_][A-Z0-9_]*$/),
601
+ name: z.string().min(1).max(256),
602
+ auth: zCredentialCreateAuth,
603
+ }),
604
+ ]);
605
+ export const zVaultDetail = z.object({
415
606
  id: z.string(),
416
607
  name: z.string(),
417
608
  description: z.string().nullable(),
418
- isDefault: z.boolean(),
419
609
  orgId: z.string(),
420
610
  userId: z.string().nullable(),
611
+ podId: z.string().nullable(),
421
612
  createdAt: z.iso
422
613
  .datetime()
423
614
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
424
615
  updatedAt: z.iso
425
616
  .datetime()
426
617
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
427
- archivedAt: z.iso
618
+ tier: z.enum(["org", "pod", "user"]),
619
+ credentialLimit: z.int().gte(-9007199254740991).lte(9007199254740991),
620
+ });
621
+ export const zVault = z.object({
622
+ id: z.string(),
623
+ name: z.string(),
624
+ description: z.string().nullable(),
625
+ orgId: z.string(),
626
+ userId: z.string().nullable(),
627
+ podId: z.string().nullable(),
628
+ createdAt: z.iso
428
629
  .datetime()
429
- .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
430
- .nullable(),
630
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
631
+ updatedAt: z.iso
632
+ .datetime()
633
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
431
634
  });
432
635
  export const zLinearMapping = z.object({
433
636
  id: z.string(),
@@ -612,6 +815,46 @@ export const zWebhookTriggerCreateResult = z.object({
612
815
  trigger: zWebhookTrigger,
613
816
  plaintextSecret: z.string().nullable(),
614
817
  });
818
+ export const zCronTriggerDetail = z.object({
819
+ id: z.string(),
820
+ projectId: z.string(),
821
+ projectAgentId: z.string().nullable(),
822
+ senderUserId: z.string(),
823
+ inputMessage: z.string(),
824
+ schedule: z.string(),
825
+ timezone: z.string().nullable(),
826
+ until: z.iso
827
+ .datetime()
828
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
829
+ .nullable(),
830
+ isEnabled: z.boolean(),
831
+ syncedAt: z.iso
832
+ .datetime()
833
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
834
+ .nullable(),
835
+ createdAt: z.iso
836
+ .datetime()
837
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
838
+ updatedAt: z.iso
839
+ .datetime()
840
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
841
+ archivedAt: z.iso
842
+ .datetime()
843
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
844
+ .nullable(),
845
+ lastRun: z
846
+ .object({
847
+ at: z.iso
848
+ .datetime()
849
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
850
+ status: z.string(),
851
+ })
852
+ .nullable(),
853
+ nextRunAt: z.iso
854
+ .datetime()
855
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
856
+ .nullable(),
857
+ });
615
858
  export const zCronTrigger = z.object({
616
859
  id: z.string(),
617
860
  projectId: z.string(),
@@ -773,6 +1016,29 @@ export const zTopology = z.object({
773
1016
  }))
774
1017
  .optional(),
775
1018
  });
1019
+ export const zSkillVersionFiles = z.object({
1020
+ type: z.literal("files"),
1021
+ files: z.array(z.object({
1022
+ path: z.string(),
1023
+ contentBase64: z.string(),
1024
+ })),
1025
+ });
1026
+ export const zSkillRequiredCredential = z.union([
1027
+ z.object({
1028
+ kind: z.literal("env").optional().default("env"),
1029
+ name: z
1030
+ .string()
1031
+ .min(1)
1032
+ .max(128)
1033
+ .regex(/^[A-Z_][A-Z0-9_]*$/),
1034
+ description: z.string().max(512).optional(),
1035
+ }),
1036
+ z.object({
1037
+ kind: z.literal("oauth_app"),
1038
+ name: z.string().min(1).max(128),
1039
+ description: z.string().max(512).optional(),
1040
+ }),
1041
+ ]);
776
1042
  export const zSkillVersion = z.object({
777
1043
  id: z.string(),
778
1044
  skillId: z.string(),
@@ -788,7 +1054,7 @@ export const zSkillVersion = z.object({
788
1054
  source: z.union([
789
1055
  z.object({
790
1056
  type: z.literal("s3"),
791
- url: z.url(),
1057
+ key: z.string(),
792
1058
  }),
793
1059
  z.object({
794
1060
  type: z.literal("git"),
@@ -797,9 +1063,46 @@ export const zSkillVersion = z.object({
797
1063
  path: z.string().optional(),
798
1064
  }),
799
1065
  ]),
800
- requiredCredentials: z.array(zRequiredCredential),
1066
+ requiredCredentials: z.array(zSkillRequiredCredential),
801
1067
  releaseNotes: z.string().nullable(),
802
- contentHash: z.string().nullable(),
1068
+ });
1069
+ export const zSkillArchiveResult = z.object({
1070
+ id: z.string(),
1071
+ slug: z.string(),
1072
+ name: z.string(),
1073
+ description: z.string().nullable(),
1074
+ icon: z.string().nullable(),
1075
+ docUrl: z.string().nullable(),
1076
+ repository: zRepository.nullable(),
1077
+ orgId: z.string(),
1078
+ userId: z.string().nullable(),
1079
+ publisherId: z.string().nullable(),
1080
+ parentId: z.string().nullable(),
1081
+ websiteMetadata: zWebsiteMetadata.nullable(),
1082
+ sortOrder: z.int().gte(-9007199254740991).lte(9007199254740991).nullable(),
1083
+ popularityScore: z.int().gte(-9007199254740991).lte(9007199254740991).nullable(),
1084
+ trendingScore: z.int().gte(-9007199254740991).lte(9007199254740991).nullable(),
1085
+ rank: z.int().gte(-9007199254740991).lte(9007199254740991).nullable(),
1086
+ latestVersionId: z.string().nullable(),
1087
+ createdAt: z.iso
1088
+ .datetime()
1089
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1090
+ updatedAt: z.iso
1091
+ .datetime()
1092
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1093
+ archivedAt: z.iso
1094
+ .datetime()
1095
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1096
+ .nullable(),
1097
+ deprecatedAt: z.iso
1098
+ .datetime()
1099
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1100
+ .nullable(),
1101
+ deprecationMessage: z.string().nullable(),
1102
+ tags: z.array(z.string()).optional().default([]),
1103
+ publisher: zPublisherPublicView.nullish().default(null),
1104
+ agentCount: z.int().gte(-9007199254740991).lte(9007199254740991),
1105
+ projectCount: z.int().gte(-9007199254740991).lte(9007199254740991),
803
1106
  });
804
1107
  export const zSkill = z.object({
805
1108
  id: z.string(),
@@ -835,6 +1138,7 @@ export const zSkill = z.object({
835
1138
  .nullable(),
836
1139
  deprecationMessage: z.string().nullable(),
837
1140
  tags: z.array(z.string()).optional().default([]),
1141
+ publisher: zPublisherPublicView.nullish().default(null),
838
1142
  });
839
1143
  export const zSessionVolumeRef = z.object({
840
1144
  kind: z.enum(["outputs", "uploads"]),
@@ -864,28 +1168,122 @@ export const zAuthRequirementEnvSource = z.object({
864
1168
  id: z.string(),
865
1169
  name: z.string(),
866
1170
  });
867
- export const zAuthRequirementEnv = z.object({
868
- name: z
869
- .string()
870
- .min(1)
871
- .max(128)
872
- .regex(/^[A-Z_][A-Z0-9_]*$/),
873
- description: z.string().max(512).optional(),
874
- satisfied: z.boolean(),
875
- neededBy: z.array(zAuthRequirementEnvSource),
876
- });
1171
+ export const zAuthRequirementEnv = z.union([
1172
+ z.object({
1173
+ kind: z.literal("env").optional().default("env"),
1174
+ name: z
1175
+ .string()
1176
+ .min(1)
1177
+ .max(128)
1178
+ .regex(/^[A-Z_][A-Z0-9_]*$/),
1179
+ description: z.string().max(512).optional(),
1180
+ satisfied: z.boolean(),
1181
+ neededBy: z.array(zAuthRequirementEnvSource),
1182
+ }),
1183
+ z.object({
1184
+ kind: z.literal("secret"),
1185
+ name: z
1186
+ .string()
1187
+ .min(1)
1188
+ .max(64)
1189
+ .regex(/^[a-z][A-Za-z0-9_]*$/),
1190
+ description: z.string().max(512).optional(),
1191
+ satisfied: z.boolean(),
1192
+ neededBy: z.array(zAuthRequirementEnvSource),
1193
+ }),
1194
+ z.object({
1195
+ kind: z.literal("oauth_app"),
1196
+ name: z.string().min(1).max(128),
1197
+ description: z.string().max(512).optional(),
1198
+ satisfied: z.boolean(),
1199
+ neededBy: z.array(zAuthRequirementEnvSource),
1200
+ }),
1201
+ z.object({
1202
+ kind: z.literal("text"),
1203
+ name: z
1204
+ .string()
1205
+ .min(1)
1206
+ .max(64)
1207
+ .regex(/^[a-z][A-Za-z0-9_]*$/),
1208
+ description: z.string().max(512).optional(),
1209
+ message: z.string().min(1).max(512),
1210
+ placeholder: z.string().max(256).optional(),
1211
+ when: zRequirementWhen.optional(),
1212
+ satisfied: z.boolean(),
1213
+ neededBy: z.array(zAuthRequirementEnvSource),
1214
+ }),
1215
+ z.object({
1216
+ kind: z.literal("select"),
1217
+ name: z
1218
+ .string()
1219
+ .min(1)
1220
+ .max(64)
1221
+ .regex(/^[a-z][A-Za-z0-9_]*$/),
1222
+ description: z.string().max(512).optional(),
1223
+ message: z.string().min(1).max(512),
1224
+ options: z
1225
+ .array(z.object({
1226
+ label: z.string().min(1).max(256),
1227
+ value: z.string().max(512),
1228
+ hint: z.string().max(256).optional(),
1229
+ }))
1230
+ .min(1)
1231
+ .max(64),
1232
+ when: zRequirementWhen.optional(),
1233
+ satisfied: z.boolean(),
1234
+ neededBy: z.array(zAuthRequirementEnvSource),
1235
+ }),
1236
+ ]);
877
1237
  export const zMcpAuthConfig = z.union([
878
1238
  z.object({
879
1239
  type: z.literal("oauth"),
880
- scopes: z.array(z.string()).optional(),
1240
+ scopes: z.array(z.string().min(1).max(256)).optional(),
881
1241
  tokenEndpoint: z.string().optional(),
882
1242
  authorizationEndpoint: z.string().optional(),
883
1243
  tokenEndpointAuth: z.enum(["none", "client_secret_basic", "client_secret_post"]).optional(),
1244
+ oauthAppName: z.string().min(1).max(128).optional(),
1245
+ }),
1246
+ z.object({
1247
+ type: z.literal("header"),
1248
+ headers: z
1249
+ .array(z.object({
1250
+ name: z
1251
+ .string()
1252
+ .min(1)
1253
+ .max(128)
1254
+ .regex(/^[A-Za-z0-9!#$%&'*+\-.^_`|~]+$/),
1255
+ template: z.string().min(1).max(512),
1256
+ }))
1257
+ .max(8)
1258
+ .optional()
1259
+ .default([]),
1260
+ queryParams: z
1261
+ .array(z.object({
1262
+ name: z
1263
+ .string()
1264
+ .min(1)
1265
+ .max(128)
1266
+ .regex(/^[A-Za-z0-9._~-]+$/),
1267
+ template: z.string().min(1).max(512),
1268
+ }))
1269
+ .max(8)
1270
+ .optional()
1271
+ .default([]),
884
1272
  }),
885
1273
  z.object({
886
1274
  type: z.literal("api_key"),
887
- headerName: z.string().optional(),
888
- queryParam: z.string().optional(),
1275
+ headerName: z
1276
+ .string()
1277
+ .min(1)
1278
+ .max(128)
1279
+ .regex(/^[A-Za-z0-9!#$%&'*+\-.^_`|~]+$/)
1280
+ .optional(),
1281
+ queryParam: z
1282
+ .string()
1283
+ .min(1)
1284
+ .max(128)
1285
+ .regex(/^[A-Za-z0-9._~-]+$/)
1286
+ .optional(),
889
1287
  }),
890
1288
  z.object({
891
1289
  type: z.literal("basic"),
@@ -1012,6 +1410,9 @@ export const zSessionCreateJob = z.object({
1012
1410
  jobId: z.string().regex(/^sjob_[0-9A-HJKMNP-TV-Z]{26}$/),
1013
1411
  status: z.literal("pending"),
1014
1412
  });
1413
+ export const zResourceIconUpload = z.object({
1414
+ url: z.url(),
1415
+ });
1015
1416
  export const zReplay = z.object({
1016
1417
  id: z.string(),
1017
1418
  orgId: z.string(),
@@ -1072,6 +1473,21 @@ export const zProjectMcp = z.object({
1072
1473
  .datetime()
1073
1474
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1074
1475
  });
1476
+ export const zSkillPinConflict = z.object({
1477
+ skillSlug: z.string(),
1478
+ pinnedVersion: z.string(),
1479
+ effectiveVersion: z.string(),
1480
+ reason: z.enum(["outranked", "pin-archived"]),
1481
+ });
1482
+ export const zProjectSkillResolution = z.object({
1483
+ skills: z.array(z.object({
1484
+ skillId: z.string(),
1485
+ skillSlug: z.string(),
1486
+ effectiveVersionId: z.string(),
1487
+ effectiveVersion: z.string(),
1488
+ })),
1489
+ conflicts: z.array(zSkillPinConflict),
1490
+ });
1075
1491
  export const zProjectSkill = z.object({
1076
1492
  id: z.string(),
1077
1493
  projectId: z.string(),
@@ -1150,12 +1566,57 @@ export const zProject = z.object({
1150
1566
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1151
1567
  .nullable(),
1152
1568
  });
1569
+ /**
1570
+ * An artifact: a static site an agent built in its pod, hosted at a URL.
1571
+ */
1572
+ export const zArtifact = z.object({
1573
+ id: z.string(),
1574
+ orgId: z.string(),
1575
+ podId: z.string(),
1576
+ sourceSessionId: z.string().nullable(),
1577
+ slug: z.string(),
1578
+ title: z.string(),
1579
+ description: z.string(),
1580
+ shareToken: z.string(),
1581
+ createdAt: z.iso
1582
+ .datetime()
1583
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1584
+ updatedAt: z.iso
1585
+ .datetime()
1586
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1587
+ archivedAt: z.iso
1588
+ .datetime()
1589
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1590
+ .nullable(),
1591
+ url: z.url(),
1592
+ });
1593
+ export const zPodDatabase = z.object({
1594
+ id: z.string(),
1595
+ podId: z.string(),
1596
+ orgId: z.string(),
1597
+ userId: z.string().nullable(),
1598
+ slug: z.string(),
1599
+ name: z.string(),
1600
+ description: z.string(),
1601
+ createdAt: z.iso
1602
+ .datetime()
1603
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1604
+ updatedAt: z.iso
1605
+ .datetime()
1606
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1607
+ archivedAt: z.iso
1608
+ .datetime()
1609
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1610
+ .nullable(),
1611
+ });
1153
1612
  export const zSandbox = z.object({
1154
1613
  id: z.string(),
1155
1614
  orgId: z.string(),
1156
1615
  userId: z.string().nullable(),
1157
1616
  providerId: z.string(),
1158
1617
  providerSandboxId: z.string().nullable(),
1618
+ templateRef: z.string().nullable(),
1619
+ buildId: z.string().nullable(),
1159
1620
  internalHost: z.string().nullable(),
1160
1621
  publicHost: z.string().nullable(),
1161
1622
  createdAt: z.iso
@@ -1195,17 +1656,20 @@ export const zPodSandboxProvisionResponse = z.object({
1195
1656
  workflowId: z.string(),
1196
1657
  status: z.literal("provisioning"),
1197
1658
  });
1198
- export const zPodVault = z.object({
1199
- id: z.string(),
1200
- podId: z.string(),
1659
+ export const zPodResolvedCredential = z.object({
1660
+ credentialId: z.string(),
1661
+ name: z.string(),
1201
1662
  vaultId: z.string(),
1202
- priority: z.int().gte(-2147483648).lte(2147483647),
1203
- createdAt: z.iso
1204
- .datetime()
1205
- .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1206
- updatedAt: z.iso
1207
- .datetime()
1208
- .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1663
+ vaultName: z.string(),
1664
+ tier: z.enum(["org", "pod", "user"]),
1665
+ sourcePodId: z.string().nullable(),
1666
+ anchor: z.string(),
1667
+ keyPreview: z.string().nullable(),
1668
+ shadowed: z.boolean(),
1669
+ });
1670
+ export const zPodCredentials = z.object({
1671
+ writeVaultId: z.string().nullable(),
1672
+ credentials: z.array(zPodResolvedCredential),
1209
1673
  });
1210
1674
  export const zPodMember = z.object({
1211
1675
  id: z.string(),
@@ -1219,6 +1683,7 @@ export const zPodMember = z.object({
1219
1683
  .datetime()
1220
1684
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1221
1685
  });
1686
+ export const zPresetTemplate = z.enum(["xs", "small", "medium", "large", "xl"]);
1222
1687
  export const zPod = z.object({
1223
1688
  id: z.string(),
1224
1689
  name: z.string(),
@@ -1229,6 +1694,7 @@ export const zPod = z.object({
1229
1694
  defaultModel: z.string().nullable(),
1230
1695
  instructions: z.string(),
1231
1696
  environmentId: z.string().nullable(),
1697
+ presetTemplate: zPresetTemplate,
1232
1698
  orgId: z.string(),
1233
1699
  userId: z.string().nullable(),
1234
1700
  manifestUpdatedAt: z.iso
@@ -1325,6 +1791,9 @@ export const zMemoryStoreFile = z.object({
1325
1791
  .optional(),
1326
1792
  contentSha256: z.string().optional(),
1327
1793
  });
1794
+ /**
1795
+ * A memory store: a named bucket of agent knowledge that persists between sessions, mounted at its mountPath.
1796
+ */
1328
1797
  export const zMemoryStore = z.object({
1329
1798
  id: z.string(),
1330
1799
  name: z.string(),
@@ -1343,6 +1812,7 @@ export const zMemoryStore = z.object({
1343
1812
  .datetime()
1344
1813
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1345
1814
  .nullable(),
1815
+ mountPath: z.string(),
1346
1816
  });
1347
1817
  export const zOnboardingComplete = z.object({
1348
1818
  onboarding: z.object({
@@ -1377,31 +1847,17 @@ export const zMe = z.object({
1377
1847
  }),
1378
1848
  method: z.enum(["session", "pat", "sandbox"]),
1379
1849
  });
1380
- export const zOAuthSessionStatus = z.object({
1850
+ export const zSearchResult = z.object({
1381
1851
  id: z.string(),
1382
- status: z.enum(["pending", "active", "failed", "expired"]),
1383
- mcpId: z.string().nullable(),
1384
- credentialId: z.string().nullable(),
1385
- failureReason: z.string().nullable(),
1386
- expiresAt: z.iso
1852
+ slug: z.string(),
1853
+ name: z.string(),
1854
+ description: z.string().nullable(),
1855
+ icon: z.string().nullable(),
1856
+ source: z.enum(["user", "org", "registry"]),
1857
+ updatedAt: z.iso
1387
1858
  .datetime()
1388
1859
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1389
1860
  });
1390
- export const zMcpOAuthConnectBody = z.object({
1391
- scope: z.string().optional(),
1392
- callbackUrl: z.url().optional(),
1393
- });
1394
- export const zMcpOAuthConnectResult = z.union([
1395
- z.object({
1396
- alreadyConnected: z.literal(true),
1397
- credentialId: z.string(),
1398
- }),
1399
- z.object({
1400
- alreadyConnected: z.literal(false),
1401
- authorizationUrl: z.string(),
1402
- sessionId: z.string(),
1403
- }),
1404
- ]);
1405
1861
  export const zMcp = z.object({
1406
1862
  id: z.string(),
1407
1863
  slug: z.string(),
@@ -1411,9 +1867,10 @@ export const zMcp = z.object({
1411
1867
  mcpServerUrl: z.string().nullable(),
1412
1868
  docUrl: z.string().nullable(),
1413
1869
  type: z.enum(["remote", "local"]),
1414
- transport: z.enum(["streamable-http", "sse", "stdio"]),
1415
1870
  command: z.string().nullable(),
1416
1871
  args: z.array(z.string()),
1872
+ cwd: z.string().nullable(),
1873
+ timeout: zMcpTimeout.nullable(),
1417
1874
  version: z.string().nullable(),
1418
1875
  repository: zRepository.nullable(),
1419
1876
  tools: z.array(z.string()),
@@ -1440,12 +1897,73 @@ export const zMcp = z.object({
1440
1897
  .datetime()
1441
1898
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1442
1899
  .nullable(),
1443
- deprecatedAt: z.iso
1444
- .datetime()
1445
- .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1446
- .nullable(),
1447
- deprecationMessage: z.string().nullable(),
1448
- tags: z.array(z.string()).optional().default([]),
1900
+ deprecatedAt: z.iso
1901
+ .datetime()
1902
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1903
+ .nullable(),
1904
+ deprecationMessage: z.string().nullable(),
1905
+ tags: z.array(z.string()).optional().default([]),
1906
+ publisher: zPublisherPublicView.nullish().default(null),
1907
+ });
1908
+ export const zOAuthAppUsage = z.object({
1909
+ mcpIds: z.array(z.string()),
1910
+ });
1911
+ export const zOAuthAuthorizeParams = z.record(z.string(), z.string().max(512));
1912
+ export const zOAuthAppUpdateInput = z.object({
1913
+ name: z.string().min(1).max(128).optional(),
1914
+ clientId: z.string().min(1).max(512).optional(),
1915
+ clientSecret: z.string().min(1).max(2048).nullish(),
1916
+ scopes: z.array(z.string().min(1)).max(64).optional(),
1917
+ tokenEndpointAuth: z.enum(["none", "client_secret_basic", "client_secret_post"]).optional(),
1918
+ resource: z.string().max(512).nullish(),
1919
+ authorizeParams: zOAuthAuthorizeParams.optional(),
1920
+ pkce: z.boolean().optional(),
1921
+ discovery: z.enum(["static", "mcp"]).optional(),
1922
+ authorizationEndpoint: z.url().nullish(),
1923
+ tokenEndpoint: z.url().nullish(),
1924
+ });
1925
+ export const zOAuthAppCreateInput = z.object({
1926
+ name: z.string().min(1).max(128),
1927
+ clientId: z.string().min(1).max(512),
1928
+ clientSecret: z.string().min(1).max(2048).nullish().default(null),
1929
+ scopes: z.array(z.string().min(1)).max(64).optional().default([]),
1930
+ tokenEndpointAuth: z.enum(["none", "client_secret_basic", "client_secret_post"]).optional().default("none"),
1931
+ resource: z.string().max(512).nullish().default(null),
1932
+ authorizeParams: zOAuthAuthorizeParams.optional(),
1933
+ pkce: z.boolean().optional().default(true),
1934
+ discovery: z.enum(["static", "mcp"]).optional().default("mcp"),
1935
+ authorizationEndpoint: z.url().nullish().default(null),
1936
+ tokenEndpoint: z.url().nullish().default(null),
1937
+ });
1938
+ export const zOAuthAppRedirectUri = z.object({
1939
+ redirectUri: z.url(),
1940
+ });
1941
+ export const zOAuthApp = z.object({
1942
+ id: z.string(),
1943
+ orgId: z.string(),
1944
+ configuredById: z.string().nullable(),
1945
+ name: z.string(),
1946
+ provider: z.string().nullable(),
1947
+ clientId: z.string(),
1948
+ scopes: z.array(z.string()),
1949
+ discovery: z.enum(["static", "mcp"]),
1950
+ authorizationEndpoint: z.string().nullable(),
1951
+ tokenEndpoint: z.string().nullable(),
1952
+ tokenEndpointAuth: z.enum(["none", "client_secret_basic", "client_secret_post"]),
1953
+ resource: z.string().nullable(),
1954
+ authorizeParams: zOAuthAuthorizeParams,
1955
+ pkce: z.boolean(),
1956
+ createdAt: z.iso
1957
+ .datetime()
1958
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1959
+ updatedAt: z.iso
1960
+ .datetime()
1961
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1962
+ archivedAt: z.iso
1963
+ .datetime()
1964
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1965
+ .nullable(),
1966
+ hasClientSecret: z.boolean(),
1449
1967
  });
1450
1968
  export const zGoogleWorkspaceOAuthStartResult = z.object({
1451
1969
  url: z.url(),
@@ -1518,6 +2036,8 @@ export const zStoreStartUploadResponse = z.object({
1518
2036
  expiresAt: z.iso
1519
2037
  .datetime()
1520
2038
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
2039
+ uploadId: z.string(),
2040
+ status: z.literal("staged"),
1521
2041
  });
1522
2042
  export const zStorePresignResponse = z.object({
1523
2043
  url: z.string(),
@@ -1534,6 +2054,9 @@ export const zFileStoreFile = z.object({
1534
2054
  .optional(),
1535
2055
  contentSha256: z.string().optional(),
1536
2056
  });
2057
+ /**
2058
+ * A file store: a named bucket of user artifacts, mounted into agent workspaces at its mountPath.
2059
+ */
1537
2060
  export const zFileStore = z.object({
1538
2061
  id: z.string(),
1539
2062
  name: z.string(),
@@ -1552,13 +2075,43 @@ export const zFileStore = z.object({
1552
2075
  .datetime()
1553
2076
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1554
2077
  .nullable(),
2078
+ mountPath: z.string(),
2079
+ });
2080
+ export const zTemplateMemoryMb = z.union([
2081
+ z.literal(1024),
2082
+ z.literal(2048),
2083
+ z.literal(3072),
2084
+ z.literal(4096),
2085
+ z.literal(5120),
2086
+ z.literal(6144),
2087
+ z.literal(7168),
2088
+ z.literal(8192),
2089
+ ]);
2090
+ export const zTemplateCpuCount = z.union([z.literal(1), z.literal(2), z.literal(4), z.literal(6), z.literal(8)]);
2091
+ export const zEnvironmentBuildStatus = z.enum(["queued", "building", "ready", "error"]);
2092
+ export const zEnvironmentBuild = z.object({
2093
+ id: z.string(),
2094
+ environmentId: z.string(),
2095
+ status: zEnvironmentBuildStatus,
2096
+ tag: z.string().nullable(),
2097
+ cpuCount: zTemplateCpuCount,
2098
+ memoryMB: zTemplateMemoryMb,
2099
+ baseRef: z.string(),
2100
+ templateId: z.string().nullable(),
2101
+ buildId: z.string().nullable(),
2102
+ log: z.string(),
2103
+ error: z.string().nullable(),
2104
+ createdAt: z.iso
2105
+ .datetime()
2106
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
2107
+ updatedAt: z.iso
2108
+ .datetime()
2109
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1555
2110
  });
1556
2111
  export const zPackagesConfig = z.object({
1557
2112
  apt: z.array(z.string()).optional(),
1558
2113
  npm: z.array(z.string()).optional(),
1559
2114
  pip: z.array(z.string()).optional(),
1560
- cargo: z.array(z.string()).optional(),
1561
- gem: z.array(z.string()).optional(),
1562
2115
  go: z.array(z.string()).optional(),
1563
2116
  });
1564
2117
  export const zNetworkingConfig = z.union([
@@ -1579,8 +2132,14 @@ export const zEnvironment = z.object({
1579
2132
  orgId: z.string(),
1580
2133
  userId: z.string().nullable(),
1581
2134
  hostingType: z.enum(["cloud"]),
2135
+ cpuCount: zTemplateCpuCount,
2136
+ memoryMB: zTemplateMemoryMb,
2137
+ templateName: z.string().nullable(),
2138
+ tag: z.string().nullable(),
2139
+ currentBuildId: z.string().nullable(),
1582
2140
  networking: zNetworkingConfig,
1583
2141
  packages: zPackagesConfig,
2142
+ buildCommands: z.array(z.string().min(1).max(4096)).max(50),
1584
2143
  createdAt: z.iso
1585
2144
  .datetime()
1586
2145
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
@@ -1653,6 +2212,7 @@ export const zUsageGroup = z.object({
1653
2212
  export const zUsageDailyPoint = z.object({
1654
2213
  date: z.string(),
1655
2214
  credits: z.string(),
2215
+ eventCount: z.int().gte(-9007199254740991).lte(9007199254740991),
1656
2216
  });
1657
2217
  export const zUsageBreakdownItem = z.object({
1658
2218
  source: z.string(),
@@ -1899,6 +2459,52 @@ export const zBlueprint = z.object({
1899
2459
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
1900
2460
  .nullable(),
1901
2461
  deprecationMessage: z.string().nullable(),
2462
+ publisher: zPublisherPublicView.nullish().default(null),
2463
+ });
2464
+ export const zAgentVersionArchiveResult = z.object({
2465
+ id: z.string(),
2466
+ agentId: z.string(),
2467
+ version: z.string().regex(/^\d+\.\d+\.\d+$/),
2468
+ createdById: z.string(),
2469
+ createdAt: z.iso
2470
+ .datetime()
2471
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
2472
+ archivedAt: z.iso
2473
+ .datetime()
2474
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
2475
+ .nullable(),
2476
+ description: z.string().nullable(),
2477
+ prompt: z.string().nullable(),
2478
+ model: z.string().nullable(),
2479
+ releaseNotes: z.string().nullable(),
2480
+ permission: zPermissionConfig,
2481
+ skills: z
2482
+ .array(z.object({
2483
+ skillId: z.string(),
2484
+ skillVersionId: z.string().nullish().default(null),
2485
+ skill: z.object({
2486
+ id: z.string(),
2487
+ slug: z.string(),
2488
+ name: z.string(),
2489
+ icon: z.string().nullable(),
2490
+ }),
2491
+ }))
2492
+ .optional()
2493
+ .default([]),
2494
+ mcps: z
2495
+ .array(z.object({
2496
+ mcpId: z.string(),
2497
+ mcp: z.object({
2498
+ id: z.string(),
2499
+ slug: z.string(),
2500
+ name: z.string(),
2501
+ icon: z.string().nullable(),
2502
+ }),
2503
+ }))
2504
+ .optional()
2505
+ .default([]),
2506
+ projectCount: z.int().gte(0).lte(9007199254740991),
2507
+ podCount: z.int().gte(0).lte(9007199254740991),
1902
2508
  });
1903
2509
  export const zAgentVersion = z.object({
1904
2510
  id: z.string(),
@@ -1943,16 +2549,37 @@ export const zAgentVersion = z.object({
1943
2549
  .optional()
1944
2550
  .default([]),
1945
2551
  });
1946
- export const zSearchResult = z.object({
2552
+ export const zAgentArchiveResult = z.object({
1947
2553
  id: z.string(),
1948
2554
  slug: z.string(),
1949
2555
  name: z.string(),
1950
- description: z.string().nullable(),
1951
2556
  icon: z.string().nullable(),
1952
- source: z.enum(["user", "org", "registry"]),
2557
+ orgId: z.string(),
2558
+ userId: z.string().nullable(),
2559
+ publisherId: z.string().nullable(),
2560
+ parentId: z.string().nullable(),
2561
+ websiteMetadata: zWebsiteMetadata.nullable(),
2562
+ latestVersionId: z.string().nullable(),
2563
+ createdAt: z.iso
2564
+ .datetime()
2565
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
1953
2566
  updatedAt: z.iso
1954
2567
  .datetime()
1955
2568
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/),
2569
+ archivedAt: z.iso
2570
+ .datetime()
2571
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
2572
+ .nullable(),
2573
+ deprecatedAt: z.iso
2574
+ .datetime()
2575
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
2576
+ .nullable(),
2577
+ deprecationMessage: z.string().nullable(),
2578
+ tags: z.array(z.string()).optional().default([]),
2579
+ publisher: zPublisherPublicView.nullish().default(null),
2580
+ latestVersion: zAgentLatestVersion.nullish(),
2581
+ projectCount: z.int().gte(0).lte(9007199254740991),
2582
+ podCount: z.int().gte(0).lte(9007199254740991),
1956
2583
  });
1957
2584
  export const zAgent = z.object({
1958
2585
  id: z.string(),
@@ -1981,13 +2608,18 @@ export const zAgent = z.object({
1981
2608
  .nullable(),
1982
2609
  deprecationMessage: z.string().nullable(),
1983
2610
  tags: z.array(z.string()).optional().default([]),
2611
+ publisher: zPublisherPublicView.nullish().default(null),
1984
2612
  latestVersion: zAgentLatestVersion.nullish(),
1985
2613
  });
1986
2614
  export const zAgentListQuery = z.object({
1987
2615
  limit: z.int().gte(1).lte(1000).optional(),
1988
2616
  offset: z.int().gte(0).lte(9007199254740991).optional(),
1989
2617
  includeDeprecated: z.boolean().optional(),
1990
- visibility: z.enum(["private", "org"]).optional(),
2618
+ visibility: z.enum(["private", "pod", "org"]).optional(),
2619
+ query: z.string().optional(),
2620
+ published: z.boolean().optional(),
2621
+ publisherId: z.string().optional(),
2622
+ tagged: z.union([z.string(), z.array(z.string())]).optional(),
1991
2623
  });
1992
2624
  /**
1993
2625
  * List of agents
@@ -1996,61 +2628,42 @@ export const zAgentListResponse = z.array(zAgent);
1996
2628
  export const zAgentCreateBody = z.object({
1997
2629
  name: z.string().min(1).max(256),
1998
2630
  icon: z.string().nullish().default(null),
1999
- tags: z.array(z.string()).optional(),
2000
- visibility: z.enum(["private", "org"]).optional().default("org"),
2631
+ tags: z.array(z.string()).nullish(),
2632
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
2001
2633
  version: z
2002
2634
  .union([z.string(), z.enum(["major", "minor", "patch"])])
2003
2635
  .optional()
2004
2636
  .default("patch"),
2005
- description: z.string().optional().default(""),
2006
- prompt: z.string().optional().default(""),
2007
- model: z.string().nullish().default(null),
2637
+ description: z.string().optional(),
2638
+ prompt: z.string().optional(),
2639
+ model: z.string().nullish(),
2008
2640
  permission: zPermissionConfig.optional(),
2009
2641
  skills: z
2010
2642
  .array(z.object({
2011
2643
  skillId: z.string(),
2012
2644
  skillVersionId: z.string().nullish().default(null),
2013
2645
  }))
2014
- .optional()
2015
- .default([]),
2646
+ .optional(),
2016
2647
  mcps: z
2017
2648
  .array(z.object({
2018
2649
  mcpId: z.string(),
2019
2650
  }))
2020
- .optional()
2021
- .default([]),
2651
+ .optional(),
2022
2652
  releaseNotes: z.string().max(4096).optional(),
2023
2653
  });
2024
2654
  /**
2025
2655
  * Created agent
2026
2656
  */
2027
2657
  export const zAgentCreateResponse = zAgent;
2028
- export const zAgentSearchBody = z.object({
2029
- query: z.string().optional(),
2030
- sources: z
2031
- .array(z.enum(["user", "org", "registry"]))
2032
- .min(1)
2033
- .optional()
2034
- .default(["user", "org", "registry"]),
2035
- limit: z.int().gte(1).lte(50).optional().default(20),
2036
- });
2037
- /**
2038
- * Matching agents
2039
- */
2040
- export const zAgentSearchResponse = z.array(zSearchResult);
2041
- export const zAgentGetBySlugPath = z.object({
2042
- slug: z
2043
- .string()
2044
- .min(1)
2045
- .max(128)
2046
- .regex(/^[a-z0-9-]+$/),
2047
- });
2048
- /**
2049
- * Agent details
2050
- */
2051
- export const zAgentGetBySlugResponse = zAgent;
2052
2658
  export const zAgentGetPath = z.object({
2053
- id: z.string().regex(/^agt_[0-9A-HJKMNP-TV-Z]{26}$/),
2659
+ idOrSlug: z.union([
2660
+ z.string().regex(/^agt_[0-9A-HJKMNP-TV-Z]{26}$/),
2661
+ z
2662
+ .string()
2663
+ .min(1)
2664
+ .max(128)
2665
+ .regex(/^[a-z0-9-]+$/),
2666
+ ]),
2054
2667
  });
2055
2668
  /**
2056
2669
  * Agent details
@@ -2060,7 +2673,7 @@ export const zAgentUpdateBody = z.object({
2060
2673
  name: z.string().optional(),
2061
2674
  icon: z.string().nullish(),
2062
2675
  websiteMetadata: zWebsiteMetadata.nullish(),
2063
- tags: z.array(z.string()).optional(),
2676
+ tags: z.array(z.string()).nullish(),
2064
2677
  });
2065
2678
  export const zAgentUpdatePath = z.object({
2066
2679
  id: z.string().regex(/^agt_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -2073,9 +2686,9 @@ export const zAgentArchivePath = z.object({
2073
2686
  id: z.string().regex(/^agt_[0-9A-HJKMNP-TV-Z]{26}$/),
2074
2687
  });
2075
2688
  /**
2076
- * Archived agent
2689
+ * Archived agent, with the blast radius (projectCount/podCount) of placements that referenced it.
2077
2690
  */
2078
- export const zAgentArchiveResponse = zAgent;
2691
+ export const zAgentArchiveResponse = zAgentArchiveResult;
2079
2692
  export const zAgentPublishPath = z.object({
2080
2693
  id: z.string().regex(/^agt_[0-9A-HJKMNP-TV-Z]{26}$/),
2081
2694
  });
@@ -2124,23 +2737,21 @@ export const zAgentVersionCreateBody = z.object({
2124
2737
  .union([z.string(), z.enum(["major", "minor", "patch"])])
2125
2738
  .optional()
2126
2739
  .default("patch"),
2127
- description: z.string().optional().default(""),
2128
- prompt: z.string().optional().default(""),
2129
- model: z.string().nullish().default(null),
2740
+ description: z.string().optional(),
2741
+ prompt: z.string().optional(),
2742
+ model: z.string().nullish(),
2130
2743
  permission: zPermissionConfig.optional(),
2131
2744
  skills: z
2132
2745
  .array(z.object({
2133
2746
  skillId: z.string(),
2134
2747
  skillVersionId: z.string().nullish().default(null),
2135
2748
  }))
2136
- .optional()
2137
- .default([]),
2749
+ .optional(),
2138
2750
  mcps: z
2139
2751
  .array(z.object({
2140
2752
  mcpId: z.string(),
2141
2753
  }))
2142
- .optional()
2143
- .default([]),
2754
+ .optional(),
2144
2755
  releaseNotes: z.string().max(4096).optional(),
2145
2756
  });
2146
2757
  export const zAgentVersionCreatePath = z.object({
@@ -2163,14 +2774,14 @@ export const zAgentVersionArchivePath = z.object({
2163
2774
  version: z.string().min(1).max(32),
2164
2775
  });
2165
2776
  /**
2166
- * Archived agent version
2777
+ * Archived agent version, with the blast radius of the placements it affected.
2167
2778
  */
2168
- export const zAgentVersionArchiveResponse = zAgentVersion;
2779
+ export const zAgentVersionArchiveResponse = zAgentVersionArchiveResult;
2169
2780
  export const zBlueprintListQuery = z.object({
2170
2781
  limit: z.int().gte(1).lte(1000).optional(),
2171
2782
  offset: z.int().gte(0).lte(9007199254740991).optional(),
2172
2783
  includeDeprecated: z.boolean().optional(),
2173
- visibility: z.enum(["private", "org"]).optional(),
2784
+ visibility: z.enum(["private", "pod", "org"]).optional(),
2174
2785
  });
2175
2786
  /**
2176
2787
  * List of blueprints
@@ -2184,7 +2795,7 @@ export const zBlueprintCreateBody = z.object({
2184
2795
  instructions: z.string().optional(),
2185
2796
  initialPrompt: zSpecInitialPrompt.optional(),
2186
2797
  selection: zBlueprintSelection,
2187
- visibility: z.enum(["private", "org"]).optional().default("org"),
2798
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
2188
2799
  });
2189
2800
  /**
2190
2801
  * Created blueprint
@@ -2384,7 +2995,7 @@ export const zEnvironmentListQuery = z.object({
2384
2995
  offset: z.int().gte(0).lte(9007199254740991).optional(),
2385
2996
  includeDeprecated: z.boolean().optional(),
2386
2997
  userId: z.string().nullish(),
2387
- visibility: z.enum(["private", "org"]).optional(),
2998
+ visibility: z.enum(["private", "pod", "org"]).optional(),
2388
2999
  });
2389
3000
  /**
2390
3001
  * List of environments
@@ -2396,7 +3007,10 @@ export const zEnvironmentCreateBody = z.object({
2396
3007
  description: z.string().optional().default(""),
2397
3008
  hostingType: z.enum(["cloud"]).optional().default("cloud"),
2398
3009
  packages: zPackagesConfig.optional(),
2399
- visibility: z.enum(["private", "org"]).optional().default("org"),
3010
+ cpuCount: zTemplateCpuCount.optional(),
3011
+ memoryMB: zTemplateMemoryMb.optional(),
3012
+ buildCommands: z.array(z.string().min(1).max(4096)).max(50).optional().default([]),
3013
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
2400
3014
  });
2401
3015
  /**
2402
3016
  * Created environment
@@ -2421,6 +3035,9 @@ export const zEnvironmentUpdateBody = z.object({
2421
3035
  description: z.string().optional(),
2422
3036
  networking: zNetworkingConfig.optional(),
2423
3037
  packages: zPackagesConfig.optional(),
3038
+ cpuCount: zTemplateCpuCount.optional(),
3039
+ memoryMB: zTemplateMemoryMb.optional(),
3040
+ buildCommands: z.array(z.string().min(1).max(4096)).max(50).optional(),
2424
3041
  });
2425
3042
  export const zEnvironmentUpdatePath = z.object({
2426
3043
  id: z.string().regex(/^env_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -2429,6 +3046,25 @@ export const zEnvironmentUpdatePath = z.object({
2429
3046
  * Updated environment
2430
3047
  */
2431
3048
  export const zEnvironmentUpdateResponse = zEnvironment;
3049
+ export const zEnvironmentBuildStartPath = z.object({
3050
+ id: z.string().regex(/^env_[0-9A-HJKMNP-TV-Z]{26}$/),
3051
+ });
3052
+ /**
3053
+ * Queued build
3054
+ */
3055
+ export const zEnvironmentBuildStartResponse = zEnvironmentBuild;
3056
+ export const zEnvironmentBuildListPath = z.object({
3057
+ id: z.string().regex(/^env_[0-9A-HJKMNP-TV-Z]{26}$/),
3058
+ });
3059
+ export const zEnvironmentBuildListQuery = z.object({
3060
+ limit: z.int().gte(1).lte(1000).optional(),
3061
+ offset: z.int().gte(0).lte(9007199254740991).optional(),
3062
+ includeDeprecated: z.boolean().optional(),
3063
+ });
3064
+ /**
3065
+ * Builds, newest first
3066
+ */
3067
+ export const zEnvironmentBuildListResponse = z.array(zEnvironmentBuild);
2432
3068
  export const zEnvironmentArchivePath = z.object({
2433
3069
  id: z.string().regex(/^env_[0-9A-HJKMNP-TV-Z]{26}$/),
2434
3070
  });
@@ -2442,7 +3078,7 @@ export const zFileStoreListQuery = z.object({
2442
3078
  offset: z.int().gte(0).lte(9007199254740991).optional(),
2443
3079
  includeDeprecated: z.boolean().optional(),
2444
3080
  userId: z.string().nullish(),
2445
- visibility: z.enum(["private", "org"]).optional(),
3081
+ visibility: z.enum(["private", "pod", "org"]).optional(),
2446
3082
  });
2447
3083
  /**
2448
3084
  * List of file stores
@@ -2452,7 +3088,7 @@ export const zFileStoreCreateBody = z.object({
2452
3088
  name: z.string().min(1).max(256),
2453
3089
  description: z.string().optional().default(""),
2454
3090
  isDefault: z.boolean().optional().default(false),
2455
- visibility: z.enum(["private", "org"]).optional().default("org"),
3091
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
2456
3092
  });
2457
3093
  /**
2458
3094
  * Created file store
@@ -2462,7 +3098,7 @@ export const zFileStoreGetPath = z.object({
2462
3098
  id: z.string().regex(/^fst_[0-9A-HJKMNP-TV-Z]{26}$/),
2463
3099
  });
2464
3100
  /**
2465
- * File store details
3101
+ * file store details
2466
3102
  */
2467
3103
  export const zFileStoreGetResponse = zFileStore;
2468
3104
  export const zFileStoreUpdateBody = z.object({
@@ -2531,6 +3167,7 @@ export const zFileStoreFilesStartUploadPath = z.object({
2531
3167
  export const zFileStoreFilesStartUploadResponse = zStoreStartUploadResponse;
2532
3168
  export const zFileStoreFilesFinalizeUploadBody = z.object({
2533
3169
  path: z.string().min(1),
3170
+ uploadId: z.string().min(1),
2534
3171
  });
2535
3172
  export const zFileStoreFilesFinalizeUploadPath = z.object({
2536
3173
  id: z.string().regex(/^fst_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -2539,6 +3176,17 @@ export const zFileStoreFilesFinalizeUploadPath = z.object({
2539
3176
  * Finalized file info
2540
3177
  */
2541
3178
  export const zFileStoreFilesFinalizeUploadResponse = zFileStoreFile;
3179
+ export const zFileStoreFilesWriteContentBody = z.string();
3180
+ export const zFileStoreFilesWriteContentPath = z.object({
3181
+ id: z.string().regex(/^fst_[0-9A-HJKMNP-TV-Z]{26}$/),
3182
+ });
3183
+ export const zFileStoreFilesWriteContentQuery = z.object({
3184
+ path: z.string().min(1),
3185
+ });
3186
+ /**
3187
+ * Written file info
3188
+ */
3189
+ export const zFileStoreFilesWriteContentResponse = zFileStoreFile;
2542
3190
  export const zInvitationPreviewPath = z.object({
2543
3191
  id: z.string().min(1).max(128),
2544
3192
  });
@@ -2569,6 +3217,7 @@ export const zInvitationPreviewResponse = z.object({
2569
3217
  export const zGithubUninstallResponse = z.void();
2570
3218
  export const zGithubInstallQuery = z.object({
2571
3219
  returnTo: z.string().optional(),
3220
+ vaultId: z.string().optional(),
2572
3221
  });
2573
3222
  /**
2574
3223
  * Authorization URL for the user to visit
@@ -2576,6 +3225,7 @@ export const zGithubInstallQuery = z.object({
2576
3225
  export const zGithubInstallResponse = zGithubOAuthStartResult;
2577
3226
  export const zGithubConnectQuery = z.object({
2578
3227
  returnTo: z.string().optional(),
3228
+ vaultId: z.string().optional(),
2579
3229
  });
2580
3230
  /**
2581
3231
  * Authorization URL for the user to visit
@@ -2652,12 +3302,53 @@ export const zGoogleConnectQuery = z.object({
2652
3302
  * Authorization URL for the user to visit
2653
3303
  */
2654
3304
  export const zGoogleConnectResponse = zGoogleWorkspaceOAuthStartResult;
3305
+ /**
3306
+ * OAuth apps
3307
+ */
3308
+ export const zOauthAppListResponse = z.array(zOAuthApp);
3309
+ export const zOauthAppCreateBody = zOAuthAppCreateInput;
3310
+ /**
3311
+ * Created app
3312
+ */
3313
+ export const zOauthAppCreateResponse = zOAuthApp;
3314
+ /**
3315
+ * Redirect URI
3316
+ */
3317
+ export const zOauthAppRedirectUriResponse = zOAuthAppRedirectUri;
3318
+ export const zOauthAppDeletePath = z.object({
3319
+ id: z.string().regex(/^oap_[0-9A-HJKMNP-TV-Z]{26}$/),
3320
+ });
3321
+ export const zOauthAppDeleteQuery = z.object({
3322
+ force: z.string().optional(),
3323
+ });
3324
+ /**
3325
+ * Archived
3326
+ */
3327
+ export const zOauthAppDeleteResponse = z.void();
3328
+ export const zOauthAppUpdateBody = zOAuthAppUpdateInput;
3329
+ export const zOauthAppUpdatePath = z.object({
3330
+ id: z.string().regex(/^oap_[0-9A-HJKMNP-TV-Z]{26}$/),
3331
+ });
3332
+ export const zOauthAppUpdateQuery = z.object({
3333
+ force: z.string().optional(),
3334
+ });
3335
+ /**
3336
+ * Updated app
3337
+ */
3338
+ export const zOauthAppUpdateResponse = zOAuthApp;
3339
+ export const zOauthAppUsagePath = z.object({
3340
+ id: z.string().regex(/^oap_[0-9A-HJKMNP-TV-Z]{26}$/),
3341
+ });
3342
+ /**
3343
+ * Usage
3344
+ */
3345
+ export const zOauthAppUsageResponse = zOAuthAppUsage;
2655
3346
  export const zMcpListQuery = z.object({
2656
3347
  limit: z.int().gte(1).lte(1000).optional(),
2657
3348
  offset: z.int().gte(0).lte(9007199254740991).optional(),
2658
3349
  includeDeprecated: z.boolean().optional(),
2659
3350
  sort: z.enum(["popular", "trending", "recent"]).optional(),
2660
- visibility: z.enum(["private", "org"]).optional(),
3351
+ visibility: z.enum(["private", "pod", "org"]).optional(),
2661
3352
  });
2662
3353
  /**
2663
3354
  * List of MCPs
@@ -2665,25 +3356,32 @@ export const zMcpListQuery = z.object({
2665
3356
  export const zMcpListResponse = z.array(zMcp);
2666
3357
  export const zMcpCreateBody = z.object({
2667
3358
  name: z.string().min(1).max(256),
2668
- slug: z.string().optional(),
3359
+ slug: z
3360
+ .string()
3361
+ .min(1)
3362
+ .max(128)
3363
+ .regex(/^[a-z0-9-]+$/)
3364
+ .optional(),
2669
3365
  description: z.string().optional().default(""),
2670
3366
  icon: z.string().nullish().default(null),
2671
3367
  mcpServerUrl: z.url().nullish().default(null),
2672
3368
  docUrl: z.url().nullish().default(null),
2673
3369
  type: z.enum(["remote", "local"]).optional().default("remote"),
2674
- transport: z.enum(["streamable-http", "sse", "stdio"]).optional().default("streamable-http"),
2675
3370
  command: z.string().nullish().default(null),
2676
3371
  args: z.array(z.string()).optional().default([]),
3372
+ cwd: z.string().nullish().default(null),
3373
+ timeout: zMcpTimeout.nullish().default(null),
2677
3374
  env: z.record(z.string(), z.string()).optional().default({}),
2678
- requiredCredentials: z.array(zRequiredCredential).optional().default([]),
3375
+ requiredCredentials: z.array(zRequiredCredential).optional(),
2679
3376
  version: z.string().nullish().default(null),
2680
3377
  repository: zRepository.nullish().default(null),
2681
3378
  tools: z.array(z.string()).optional().default([]),
2682
3379
  prompts: z.array(z.string()).optional().default([]),
2683
3380
  auth: z.enum(["none", "oauth", "api_key", "basic", "mcp_provider"]).optional().default("none"),
2684
3381
  authConfig: zMcpAuthConfig.nullish().default(null),
2685
- tags: z.array(z.string()).optional(),
2686
- visibility: z.enum(["private", "org"]).optional().default("org"),
3382
+ tags: z.array(z.string()).nullish(),
3383
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
3384
+ allowDuplicateUrl: z.boolean().optional().default(false),
2687
3385
  });
2688
3386
  /**
2689
3387
  * Created MCP
@@ -2727,9 +3425,10 @@ export const zMcpUpdateBody = z.object({
2727
3425
  mcpServerUrl: z.url().optional(),
2728
3426
  docUrl: z.url().nullish(),
2729
3427
  type: z.enum(["remote", "local"]).optional(),
2730
- transport: z.enum(["streamable-http", "sse", "stdio"]).optional(),
2731
3428
  command: z.string().nullish(),
2732
3429
  args: z.array(z.string()).optional(),
3430
+ cwd: z.string().nullish(),
3431
+ timeout: zMcpTimeout.nullish(),
2733
3432
  env: z.record(z.string(), z.string()).optional(),
2734
3433
  requiredCredentials: z.array(zRequiredCredential).optional(),
2735
3434
  version: z.string().nullish(),
@@ -2739,7 +3438,7 @@ export const zMcpUpdateBody = z.object({
2739
3438
  auth: z.enum(["none", "oauth", "api_key", "basic", "mcp_provider"]).optional(),
2740
3439
  authConfig: zMcpAuthConfig.nullish(),
2741
3440
  websiteMetadata: zWebsiteMetadata.nullish(),
2742
- tags: z.array(z.string()).optional(),
3441
+ tags: z.array(z.string()).nullish(),
2743
3442
  });
2744
3443
  export const zMcpUpdatePath = z.object({
2745
3444
  id: z.string().regex(/^mcp_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -2786,22 +3485,6 @@ export const zMcpUndeprecatePath = z.object({
2786
3485
  * Undeprecated MCP
2787
3486
  */
2788
3487
  export const zMcpUndeprecateResponse = zMcp;
2789
- export const zMcpOauthConnectBody = zMcpOAuthConnectBody;
2790
- export const zMcpOauthConnectPath = z.object({
2791
- id: z.string().regex(/^mcp_[0-9A-HJKMNP-TV-Z]{26}$/),
2792
- });
2793
- /**
2794
- * OAuth connect result
2795
- */
2796
- export const zMcpOauthConnectResponse = zMcpOAuthConnectResult;
2797
- export const zMcpOauthSessionPath = z.object({
2798
- id: z.string().regex(/^mcp_[0-9A-HJKMNP-TV-Z]{26}$/),
2799
- sessionId: z.string().regex(/^oas_[0-9A-HJKMNP-TV-Z]{26}$/),
2800
- });
2801
- /**
2802
- * OAuth session status
2803
- */
2804
- export const zMcpOauthSessionResponse = zOAuthSessionStatus;
2805
3488
  /**
2806
3489
  * Resolved auth context
2807
3490
  */
@@ -2826,7 +3509,7 @@ export const zMemoryStoreListQuery = z.object({
2826
3509
  offset: z.int().gte(0).lte(9007199254740991).optional(),
2827
3510
  includeDeprecated: z.boolean().optional(),
2828
3511
  userId: z.string().nullish(),
2829
- visibility: z.enum(["private", "org"]).optional(),
3512
+ visibility: z.enum(["private", "pod", "org"]).optional(),
2830
3513
  });
2831
3514
  /**
2832
3515
  * List of memory stores
@@ -2836,7 +3519,7 @@ export const zMemoryStoreCreateBody = z.object({
2836
3519
  name: z.string().min(1).max(256),
2837
3520
  description: z.string().optional().default(""),
2838
3521
  isDefault: z.boolean().optional().default(false),
2839
- visibility: z.enum(["private", "org"]).optional().default("org"),
3522
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
2840
3523
  });
2841
3524
  /**
2842
3525
  * Created memory store
@@ -2846,7 +3529,7 @@ export const zMemoryStoreGetPath = z.object({
2846
3529
  id: z.string().regex(/^mst_[0-9A-HJKMNP-TV-Z]{26}$/),
2847
3530
  });
2848
3531
  /**
2849
- * Memory store details
3532
+ * memory store details
2850
3533
  */
2851
3534
  export const zMemoryStoreGetResponse = zMemoryStore;
2852
3535
  export const zMemoryStoreUpdateBody = z.object({
@@ -2915,6 +3598,7 @@ export const zMemoryStoreFilesStartUploadPath = z.object({
2915
3598
  export const zMemoryStoreFilesStartUploadResponse = zStoreStartUploadResponse;
2916
3599
  export const zMemoryStoreFilesFinalizeUploadBody = z.object({
2917
3600
  path: z.string().min(1),
3601
+ uploadId: z.string().min(1),
2918
3602
  });
2919
3603
  export const zMemoryStoreFilesFinalizeUploadPath = z.object({
2920
3604
  id: z.string().regex(/^mst_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -2923,6 +3607,17 @@ export const zMemoryStoreFilesFinalizeUploadPath = z.object({
2923
3607
  * Finalized file info
2924
3608
  */
2925
3609
  export const zMemoryStoreFilesFinalizeUploadResponse = zMemoryStoreFile;
3610
+ export const zMemoryStoreFilesWriteContentBody = z.string();
3611
+ export const zMemoryStoreFilesWriteContentPath = z.object({
3612
+ id: z.string().regex(/^mst_[0-9A-HJKMNP-TV-Z]{26}$/),
3613
+ });
3614
+ export const zMemoryStoreFilesWriteContentQuery = z.object({
3615
+ path: z.string().min(1),
3616
+ });
3617
+ /**
3618
+ * Written file info
3619
+ */
3620
+ export const zMemoryStoreFilesWriteContentResponse = zMemoryStoreFile;
2926
3621
  /**
2927
3622
  * Grouped model list
2928
3623
  */
@@ -2992,7 +3687,7 @@ export const zPodListQuery = z.object({
2992
3687
  offset: z.int().gte(0).lte(9007199254740991).optional(),
2993
3688
  includeDeprecated: z.boolean().optional(),
2994
3689
  userId: z.string().nullish(),
2995
- visibility: z.enum(["private", "org"]).optional(),
3690
+ visibility: z.enum(["private", "pod", "org"]).optional(),
2996
3691
  });
2997
3692
  /**
2998
3693
  * List of pods
@@ -3005,8 +3700,9 @@ export const zPodCreateBody = z.object({
3005
3700
  instructions: z.string().optional().default(""),
3006
3701
  isPrivate: z.boolean().optional().default(true),
3007
3702
  isDefault: z.boolean().optional().default(false),
3703
+ presetTemplate: zPresetTemplate.optional(),
3008
3704
  createDefaultProject: z.boolean().optional().default(true),
3009
- visibility: z.enum(["private", "org"]).optional().default("org"),
3705
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
3010
3706
  });
3011
3707
  /**
3012
3708
  * Created pod with freshly provisioned sandbox
@@ -3026,6 +3722,7 @@ export const zPodUpdateBody = z.object({
3026
3722
  environmentId: z.string().nullish(),
3027
3723
  defaultModel: z.string().nullish(),
3028
3724
  instructions: z.string().optional(),
3725
+ presetTemplate: zPresetTemplate.optional(),
3029
3726
  });
3030
3727
  export const zPodUpdatePath = z.object({
3031
3728
  id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -3037,90 +3734,196 @@ export const zPodUpdateResponse = zPod;
3037
3734
  export const zPodUsagePath = z.object({
3038
3735
  id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3039
3736
  });
3737
+ export const zPodUsageQuery = z.object({
3738
+ groupBy: z.enum(["user", "member", "agent", "model", "session", "project", "pod", "source"]).optional(),
3739
+ start: z.iso
3740
+ .datetime()
3741
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
3742
+ .optional(),
3743
+ end: z.iso
3744
+ .datetime()
3745
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
3746
+ .optional(),
3747
+ });
3748
+ /**
3749
+ * Pod credit usage
3750
+ */
3751
+ export const zPodUsageResponse = zUsage;
3752
+ export const zPodArchivePath = z.object({
3753
+ id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3754
+ });
3755
+ /**
3756
+ * Archived pod
3757
+ */
3758
+ export const zPodArchiveResponse = zPod;
3759
+ export const zPodMemberListPath = z.object({
3760
+ id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3761
+ });
3762
+ /**
3763
+ * List of members
3764
+ */
3765
+ export const zPodMemberListResponse = z.array(zPodMember);
3766
+ export const zPodMemberAddBody = z.object({
3767
+ userId: z.string().regex(/^usr_[0-9A-HJKMNP-TV-Z]{26}$/),
3768
+ role: z.enum(["owner", "member"]).optional().default("member"),
3769
+ });
3770
+ export const zPodMemberAddPath = z.object({
3771
+ id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3772
+ });
3773
+ /**
3774
+ * Added member
3775
+ */
3776
+ export const zPodMemberAddResponse = zPodMember;
3777
+ export const zPodMemberRemovePath = z.object({
3778
+ id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3779
+ userId: z.string().regex(/^usr_[0-9A-HJKMNP-TV-Z]{26}$/),
3780
+ });
3781
+ /**
3782
+ * Removed member
3783
+ */
3784
+ export const zPodMemberRemoveResponse = zPodMember;
3785
+ export const zPodCredentialListPath = z.object({
3786
+ id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3787
+ });
3788
+ /**
3789
+ * Resolved credentials
3790
+ */
3791
+ export const zPodCredentialListResponse = zPodCredentials;
3792
+ export const zPodSandboxProvisionPath = z.object({
3793
+ podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3794
+ });
3795
+ /**
3796
+ * Workflow started or joined
3797
+ */
3798
+ export const zPodSandboxProvisionResponse2 = zPodSandboxProvisionResponse;
3799
+ export const zPodSandboxTeardownPath = z.object({
3800
+ podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3801
+ });
3802
+ /**
3803
+ * Teardown result
3804
+ */
3805
+ export const zPodSandboxTeardownResponse2 = zPodSandboxTeardownResponse;
3806
+ export const zPodSandboxStatusPath = z.object({
3807
+ podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3808
+ });
3040
3809
  /**
3041
- * Pod credit usage
3810
+ * Current sandbox state
3042
3811
  */
3043
- export const zPodUsageResponse = zUsage;
3044
- export const zPodArchivePath = z.object({
3045
- id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3812
+ export const zPodSandboxStatusResponse2 = zPodSandboxStatusResponse;
3813
+ export const zPodDatabaseListPath = z.object({
3814
+ podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3815
+ });
3816
+ export const zPodDatabaseListQuery = z.object({
3817
+ limit: z.int().gte(1).lte(1000).optional(),
3818
+ offset: z.int().gte(0).lte(9007199254740991).optional(),
3819
+ includeDeprecated: z.boolean().optional(),
3046
3820
  });
3047
3821
  /**
3048
- * Archived pod
3822
+ * Pod databases
3049
3823
  */
3050
- export const zPodArchiveResponse = zPod;
3051
- export const zPodMemberListPath = z.object({
3052
- id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3824
+ export const zPodDatabaseListResponse = z.array(zPodDatabase);
3825
+ export const zPodDatabaseCreateBody = z.object({
3826
+ name: z.string().min(1).max(256),
3827
+ slug: z
3828
+ .string()
3829
+ .min(1)
3830
+ .max(128)
3831
+ .regex(/^[a-z0-9-]+$/)
3832
+ .optional(),
3833
+ description: z.string().max(4096).optional().default(""),
3834
+ });
3835
+ export const zPodDatabaseCreatePath = z.object({
3836
+ podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3053
3837
  });
3054
3838
  /**
3055
- * List of members
3839
+ * Created pod database
3056
3840
  */
3057
- export const zPodMemberListResponse = z.array(zPodMember);
3058
- export const zPodMemberAddBody = z.object({
3059
- userId: z.string().regex(/^usr_[0-9A-HJKMNP-TV-Z]{26}$/),
3060
- role: z.enum(["owner", "member"]).optional().default("member"),
3061
- });
3062
- export const zPodMemberAddPath = z.object({
3063
- id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3841
+ export const zPodDatabaseCreateResponse = zPodDatabase;
3842
+ export const zPodDatabaseGetPath = z.object({
3843
+ podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3844
+ id: z.string().regex(/^pdb_[0-9A-HJKMNP-TV-Z]{26}$/),
3064
3845
  });
3065
3846
  /**
3066
- * Added member
3847
+ * Pod database details
3067
3848
  */
3068
- export const zPodMemberAddResponse = zPodMember;
3069
- export const zPodMemberRemovePath = z.object({
3070
- id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3071
- userId: z.string().regex(/^usr_[0-9A-HJKMNP-TV-Z]{26}$/),
3849
+ export const zPodDatabaseGetResponse = zPodDatabase;
3850
+ export const zPodDatabaseUpdateBody = z.object({
3851
+ name: z.string().min(1).max(256).optional(),
3852
+ description: z.string().optional(),
3853
+ });
3854
+ export const zPodDatabaseUpdatePath = z.object({
3855
+ podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3856
+ id: z.string().regex(/^pdb_[0-9A-HJKMNP-TV-Z]{26}$/),
3072
3857
  });
3073
3858
  /**
3074
- * Removed member
3859
+ * Updated pod database
3075
3860
  */
3076
- export const zPodMemberRemoveResponse = zPodMember;
3077
- export const zPodVaultListPath = z.object({
3078
- id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3861
+ export const zPodDatabaseUpdateResponse = zPodDatabase;
3862
+ export const zPodDatabaseArchivePath = z.object({
3863
+ podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3864
+ id: z.string().regex(/^pdb_[0-9A-HJKMNP-TV-Z]{26}$/),
3079
3865
  });
3080
3866
  /**
3081
- * List of vault associations
3867
+ * Archived pod database
3082
3868
  */
3083
- export const zPodVaultListResponse = z.array(zPodVault);
3084
- export const zPodVaultAddBody = z.object({
3085
- vaultId: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
3086
- priority: z.int().gte(-9007199254740991).lte(9007199254740991).optional().default(0),
3869
+ export const zPodDatabaseArchiveResponse = zPodDatabase;
3870
+ export const zArtifactListPath = z.object({
3871
+ podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3087
3872
  });
3088
- export const zPodVaultAddPath = z.object({
3089
- id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3873
+ export const zArtifactListQuery = z.object({
3874
+ limit: z.int().gte(1).lte(1000).optional(),
3875
+ offset: z.int().gte(0).lte(9007199254740991).optional(),
3876
+ includeDeprecated: z.boolean().optional(),
3090
3877
  });
3091
3878
  /**
3092
- * Added vault
3879
+ * Pod artifacts
3093
3880
  */
3094
- export const zPodVaultAddResponse = zPodVault;
3095
- export const zPodVaultRemovePath = z.object({
3096
- id: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3097
- vaultId: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
3881
+ export const zArtifactListResponse = z.array(zArtifact);
3882
+ export const zArtifactCreateBody = z.object({
3883
+ slug: z
3884
+ .string()
3885
+ .min(1)
3886
+ .max(128)
3887
+ .regex(/^[a-z0-9-]+$/),
3888
+ title: z.string().min(1).max(200),
3889
+ description: z.string().max(2000).optional().default(""),
3890
+ sourceSessionId: z.string().nullish().default(null),
3891
+ });
3892
+ export const zArtifactCreatePath = z.object({
3893
+ podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3098
3894
  });
3099
3895
  /**
3100
- * Removed vault
3896
+ * Created artifact
3101
3897
  */
3102
- export const zPodVaultRemoveResponse = zPodVault;
3103
- export const zPodSandboxProvisionPath = z.object({
3898
+ export const zArtifactCreateResponse = zArtifact;
3899
+ export const zArtifactGetPath = z.object({
3104
3900
  podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3901
+ id: z.string().regex(/^art_[0-9A-HJKMNP-TV-Z]{26}$/),
3105
3902
  });
3106
3903
  /**
3107
- * Workflow started or joined
3904
+ * The artifact
3108
3905
  */
3109
- export const zPodSandboxProvisionResponse2 = zPodSandboxProvisionResponse;
3110
- export const zPodSandboxTeardownPath = z.object({
3906
+ export const zArtifactGetResponse = zArtifact;
3907
+ export const zArtifactUpdateBody = z.object({
3908
+ title: z.string().min(1).max(200).optional(),
3909
+ description: z.string().max(2000).optional(),
3910
+ });
3911
+ export const zArtifactUpdatePath = z.object({
3111
3912
  podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3913
+ id: z.string().regex(/^art_[0-9A-HJKMNP-TV-Z]{26}$/),
3112
3914
  });
3113
3915
  /**
3114
- * Teardown result
3916
+ * Updated artifact
3115
3917
  */
3116
- export const zPodSandboxTeardownResponse2 = zPodSandboxTeardownResponse;
3117
- export const zPodSandboxStatusPath = z.object({
3918
+ export const zArtifactUpdateResponse = zArtifact;
3919
+ export const zArtifactArchivePath = z.object({
3118
3920
  podId: z.string().regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/),
3921
+ id: z.string().regex(/^art_[0-9A-HJKMNP-TV-Z]{26}$/),
3119
3922
  });
3120
3923
  /**
3121
- * Current sandbox state
3924
+ * Archived artifact
3122
3925
  */
3123
- export const zPodSandboxStatusResponse2 = zPodSandboxStatusResponse;
3926
+ export const zArtifactArchiveResponse = zArtifact;
3124
3927
  export const zProjectListQuery = z.object({
3125
3928
  limit: z.int().gte(1).lte(1000).optional(),
3126
3929
  offset: z.int().gte(0).lte(9007199254740991).optional(),
@@ -3129,7 +3932,7 @@ export const zProjectListQuery = z.object({
3129
3932
  .string()
3130
3933
  .regex(/^pod_[0-9A-HJKMNP-TV-Z]{26}$/)
3131
3934
  .optional(),
3132
- visibility: z.enum(["private", "org"]).optional(),
3935
+ visibility: z.enum(["private", "pod", "org"]).optional(),
3133
3936
  });
3134
3937
  /**
3135
3938
  * List of projects
@@ -3143,7 +3946,7 @@ export const zProjectCreateBody = z.object({
3143
3946
  permission: zPermissionConfig.optional(),
3144
3947
  gitRepos: z.array(zProjectGitRepo).optional().default([]),
3145
3948
  references: zProjectReferences.optional(),
3146
- visibility: z.enum(["private", "org"]).optional().default("org"),
3949
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
3147
3950
  });
3148
3951
  /**
3149
3952
  * Created project
@@ -3301,6 +4104,13 @@ export const zProjectSkillAddPath = z.object({
3301
4104
  * Attached skill
3302
4105
  */
3303
4106
  export const zProjectSkillAddResponse = zProjectSkill;
4107
+ export const zProjectSkillResolutionPath = z.object({
4108
+ id: z.string().regex(/^prj_[0-9A-HJKMNP-TV-Z]{26}$/),
4109
+ });
4110
+ /**
4111
+ * Effective versions and pin-conflict warnings
4112
+ */
4113
+ export const zProjectSkillResolutionResponse = zProjectSkillResolution;
3304
4114
  export const zProjectSkillRemovePath = z.object({
3305
4115
  id: z.string().regex(/^prj_[0-9A-HJKMNP-TV-Z]{26}$/),
3306
4116
  skillId: z.string().regex(/^skl_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -3389,7 +4199,7 @@ export const zReplayListQuery = z.object({
3389
4199
  offset: z.int().gte(0).lte(9007199254740991).optional(),
3390
4200
  includeDeprecated: z.boolean().optional(),
3391
4201
  publisherId: z.string().optional(),
3392
- visibility: z.enum(["private", "org"]).optional(),
4202
+ visibility: z.enum(["private", "pod", "org"]).optional(),
3393
4203
  });
3394
4204
  /**
3395
4205
  * List
@@ -3400,7 +4210,7 @@ export const zReplayCreateBody = z.object({
3400
4210
  publisherId: z.string().nullish().default(null),
3401
4211
  websiteMetadata: zWebsiteMetadata.nullish().default(null),
3402
4212
  shareToken: z.string().nullish().default(null),
3403
- visibility: z.enum(["private", "org"]).optional().default("org"),
4213
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
3404
4214
  });
3405
4215
  /**
3406
4216
  * Created
@@ -3462,6 +4272,13 @@ export const zReplayShareBody = z.object({
3462
4272
  * Shared replay
3463
4273
  */
3464
4274
  export const zReplayShareResponse = zReplay;
4275
+ export const zResourceIconUploadBody = z.object({
4276
+ file: z.string(),
4277
+ });
4278
+ /**
4279
+ * Persistent resource icon URL
4280
+ */
4281
+ export const zResourceIconUploadResponse = zResourceIconUpload;
3465
4282
  export const zSessionListQuery = z.object({
3466
4283
  podId: z.string().optional(),
3467
4284
  projectId: z.string().optional(),
@@ -3596,7 +4413,11 @@ export const zSkillListQuery = z.object({
3596
4413
  offset: z.int().gte(0).lte(9007199254740991).optional(),
3597
4414
  includeDeprecated: z.boolean().optional(),
3598
4415
  sort: z.enum(["popular", "trending", "recent"]).optional(),
3599
- visibility: z.enum(["private", "org"]).optional(),
4416
+ visibility: z.enum(["private", "pod", "org"]).optional(),
4417
+ query: z.string().optional(),
4418
+ published: z.boolean().optional(),
4419
+ publisherId: z.string().optional(),
4420
+ tagged: z.union([z.string(), z.array(z.string())]).optional(),
3600
4421
  });
3601
4422
  /**
3602
4423
  * List of skills
@@ -3604,59 +4425,61 @@ export const zSkillListQuery = z.object({
3604
4425
  export const zSkillListResponse = z.array(zSkill);
3605
4426
  export const zSkillCreateBody = z.object({
3606
4427
  slug: z.string().optional(),
3607
- name: z.string(),
3608
- description: z.string().optional(),
3609
- icon: z.string().optional(),
3610
- tags: z.string().optional(),
3611
- requiredCredentials: z.string().optional(),
4428
+ nameOverride: z.string().min(1).optional(),
4429
+ descriptionOverride: z.string().optional(),
4430
+ icon: z.string().nullish().default(null),
4431
+ docUrl: z.url().nullish().default(null),
4432
+ repository: zRepository.nullish().default(null),
4433
+ websiteMetadata: zWebsiteMetadata.nullish().default(null),
4434
+ version: z.string().optional(),
3612
4435
  releaseNotes: z.string().optional(),
3613
- source: z.string().optional(),
3614
- visibility: z.enum(["private", "org"]).optional().default("org"),
3615
- files: z.array(z.string()),
4436
+ requiredCredentials: z.array(zSkillRequiredCredential).optional(),
4437
+ tags: z.array(z.string()).nullish(),
4438
+ files: z
4439
+ .array(z.object({
4440
+ path: z.string().min(1),
4441
+ contentBase64: z
4442
+ .string()
4443
+ .regex(/^$|^(?:[0-9a-zA-Z+\/]{4})*(?:(?:[0-9a-zA-Z+\/]{2}==)|(?:[0-9a-zA-Z+\/]{3}=))?$/),
4444
+ }))
4445
+ .min(1)
4446
+ .optional(),
4447
+ source: z
4448
+ .object({
4449
+ type: z.literal("git"),
4450
+ url: z.url(),
4451
+ ref: z.string().optional(),
4452
+ path: z.string().optional(),
4453
+ })
4454
+ .optional(),
4455
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
3616
4456
  });
3617
4457
  /**
3618
4458
  * Created skill
3619
4459
  */
3620
4460
  export const zSkillCreateResponse = zSkill;
3621
- export const zSkillSearchBody = z.object({
3622
- query: z.string().optional(),
3623
- sources: z
3624
- .array(z.enum(["user", "org", "registry"]))
3625
- .min(1)
3626
- .optional()
3627
- .default(["user", "org", "registry"]),
3628
- limit: z.int().gte(1).lte(50).optional().default(20),
3629
- });
3630
- /**
3631
- * Matching skills
3632
- */
3633
- export const zSkillSearchResponse = z.array(zSearchResult);
3634
- export const zSkillGetBySlugPath = z.object({
3635
- slug: z
3636
- .string()
3637
- .min(1)
3638
- .max(128)
3639
- .regex(/^[a-z0-9-]+$/),
3640
- });
3641
- /**
3642
- * Skill details
3643
- */
3644
- export const zSkillGetBySlugResponse = zSkill;
3645
4461
  export const zSkillGetPath = z.object({
3646
- id: z.string().regex(/^skl_[0-9A-HJKMNP-TV-Z]{26}$/),
4462
+ idOrSlug: z.union([
4463
+ z.string().regex(/^skl_[0-9A-HJKMNP-TV-Z]{26}$/),
4464
+ z
4465
+ .string()
4466
+ .min(1)
4467
+ .max(128)
4468
+ .regex(/^[a-z0-9-]+$/),
4469
+ ]),
3647
4470
  });
3648
4471
  /**
3649
4472
  * Skill details
3650
4473
  */
3651
4474
  export const zSkillGetResponse = zSkill;
3652
4475
  export const zSkillUpdateBody = z.object({
3653
- name: z.string().optional(),
3654
- description: z.string().nullish(),
4476
+ name: z.string().min(1).optional(),
4477
+ description: z.string().optional(),
3655
4478
  icon: z.string().nullish(),
3656
4479
  docUrl: z.string().nullish(),
3657
4480
  repository: zRepository.nullish(),
3658
4481
  websiteMetadata: zWebsiteMetadata.nullish(),
3659
- tags: z.array(z.string()).optional(),
4482
+ tags: z.array(z.string()).nullish(),
3660
4483
  });
3661
4484
  export const zSkillUpdatePath = z.object({
3662
4485
  id: z.string().regex(/^skl_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -3669,9 +4492,9 @@ export const zSkillArchivePath = z.object({
3669
4492
  id: z.string().regex(/^skl_[0-9A-HJKMNP-TV-Z]{26}$/),
3670
4493
  });
3671
4494
  /**
3672
- * Archived skill
4495
+ * Archived skill with the blast radius of agents and projects that referenced it
3673
4496
  */
3674
- export const zSkillArchiveResponse = zSkill;
4497
+ export const zSkillArchiveResponse = zSkillArchiveResult;
3675
4498
  export const zSkillPublishPath = z.object({
3676
4499
  id: z.string().regex(/^skl_[0-9A-HJKMNP-TV-Z]{26}$/),
3677
4500
  });
@@ -3699,7 +4522,7 @@ export const zSkillUndeprecateResponse = zSkill;
3699
4522
  export const zSkillCopyBody = z.object({
3700
4523
  name: z.string(),
3701
4524
  version: z.string().optional(),
3702
- visibility: z.enum(["private", "org"]).optional().default("org"),
4525
+ visibility: z.enum(["private", "pod", "org"]).optional().default("org"),
3703
4526
  });
3704
4527
  export const zSkillCopyPath = z.object({
3705
4528
  id: z.string().regex(/^skl_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -3728,11 +4551,29 @@ export const zSkillVersionListQuery = z.object({
3728
4551
  */
3729
4552
  export const zSkillVersionListResponse = z.array(zSkillVersion);
3730
4553
  export const zSkillVersionCreateBody = z.object({
3731
- version: z.string().optional(),
4554
+ version: z
4555
+ .union([z.string(), z.enum(["major", "minor", "patch"])])
4556
+ .optional()
4557
+ .default("patch"),
3732
4558
  releaseNotes: z.string().optional(),
3733
- requiredCredentials: z.string().optional(),
3734
- source: z.string().optional(),
3735
- files: z.array(z.string()),
4559
+ requiredCredentials: z.array(zSkillRequiredCredential).optional(),
4560
+ files: z
4561
+ .array(z.object({
4562
+ path: z.string().min(1),
4563
+ contentBase64: z
4564
+ .string()
4565
+ .regex(/^$|^(?:[0-9a-zA-Z+\/]{4})*(?:(?:[0-9a-zA-Z+\/]{2}==)|(?:[0-9a-zA-Z+\/]{3}=))?$/),
4566
+ }))
4567
+ .min(1)
4568
+ .optional(),
4569
+ source: z
4570
+ .object({
4571
+ type: z.literal("git"),
4572
+ url: z.url(),
4573
+ ref: z.string().optional(),
4574
+ path: z.string().optional(),
4575
+ })
4576
+ .optional(),
3736
4577
  });
3737
4578
  export const zSkillVersionCreatePath = z.object({
3738
4579
  id: z.string().regex(/^skl_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -3753,22 +4594,11 @@ export const zSkillVersionDataPath = z.object({
3753
4594
  id: z.string().regex(/^skl_[0-9A-HJKMNP-TV-Z]{26}$/),
3754
4595
  version: z.string().min(1).max(32),
3755
4596
  });
3756
- export const zSkillVersionDataQuery = z.object({
3757
- format: z.enum(["json", "presigned"]).optional(),
3758
- });
3759
4597
  /**
3760
- * Extracted files, presigned URL, or git source descriptor
4598
+ * One shape per skill kind: file-backed versions return their files base64-encoded (binary-safe); git-backed versions return the git source pointer verbatim (Read fix #1).
3761
4599
  */
3762
4600
  export const zSkillVersionDataResponse = z.union([
3763
- z.object({
3764
- files: z.array(z.object({
3765
- path: z.string().min(1),
3766
- content: z.string(),
3767
- })),
3768
- }),
3769
- z.object({
3770
- url: z.url(),
3771
- }),
4601
+ zSkillVersionFiles,
3772
4602
  z.object({
3773
4603
  type: z.literal("git"),
3774
4604
  url: z.url(),
@@ -3808,23 +4638,23 @@ export const zTopologyShareArchivePath = z.object({
3808
4638
  * Archived topology share
3809
4639
  */
3810
4640
  export const zTopologyShareArchiveResponse = zTopologyShare;
3811
- export const zTriggerListQuery = z.object({
4641
+ export const zCronTriggerListPath = z.object({
4642
+ projectId: z.string().regex(/^prj_[0-9A-HJKMNP-TV-Z]{26}$/),
4643
+ });
4644
+ export const zCronTriggerListQuery = z.object({
3812
4645
  limit: z.int().gte(1).lte(1000).optional(),
3813
4646
  offset: z.int().gte(0).lte(9007199254740991).optional(),
3814
4647
  includeDeprecated: z.boolean().optional(),
3815
- projectId: z.string().regex(/^prj_[0-9A-HJKMNP-TV-Z]{26}$/),
3816
4648
  });
3817
4649
  /**
3818
4650
  * List of cron triggers
3819
4651
  */
3820
- export const zTriggerListResponse = z.array(zCronTrigger);
3821
- export const zTriggerCreateBody = z.object({
3822
- projectId: z.string().regex(/^prj_[0-9A-HJKMNP-TV-Z]{26}$/),
4652
+ export const zCronTriggerListResponse = z.array(zCronTrigger);
4653
+ export const zCronTriggerCreateBody = z.object({
3823
4654
  projectAgentId: z.string().nullish().default(null),
3824
- senderUserId: z.string().optional(),
3825
4655
  inputMessage: z.string(),
3826
4656
  schedule: z.string(),
3827
- timezone: z.string().nullish().default(null),
4657
+ timezone: z.string().optional().default("UTC"),
3828
4658
  until: z.iso
3829
4659
  .datetime()
3830
4660
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
@@ -3832,50 +4662,48 @@ export const zTriggerCreateBody = z.object({
3832
4662
  .default(null),
3833
4663
  isEnabled: z.boolean().optional().default(true),
3834
4664
  });
4665
+ export const zCronTriggerCreatePath = z.object({
4666
+ projectId: z.string().regex(/^prj_[0-9A-HJKMNP-TV-Z]{26}$/),
4667
+ });
3835
4668
  /**
3836
4669
  * Created cron trigger
3837
4670
  */
3838
- export const zTriggerCreateResponse = zCronTrigger;
3839
- export const zTriggerGetPath = z.object({
3840
- triggerId: z.string().regex(/^ctrg_[0-9A-HJKMNP-TV-Z]{26}$/),
3841
- });
3842
- export const zTriggerGetQuery = z.object({
4671
+ export const zCronTriggerCreateResponse = zCronTrigger;
4672
+ export const zCronTriggerGetPath = z.object({
3843
4673
  projectId: z.string().regex(/^prj_[0-9A-HJKMNP-TV-Z]{26}$/),
4674
+ triggerId: z.string().regex(/^ctrg_[0-9A-HJKMNP-TV-Z]{26}$/),
3844
4675
  });
3845
4676
  /**
3846
- * Cron trigger details
4677
+ * Cron trigger details with Temporal runtime state
3847
4678
  */
3848
- export const zTriggerGetResponse = zCronTrigger;
3849
- export const zTriggerUpdateBody = z.object({
4679
+ export const zCronTriggerGetResponse = zCronTriggerDetail;
4680
+ export const zCronTriggerUpdateBody = z.object({
3850
4681
  projectAgentId: z.string().nullish(),
3851
- senderUserId: z.string().optional(),
3852
4682
  inputMessage: z.string().optional(),
3853
4683
  schedule: z.string().optional(),
3854
- timezone: z.string().nullish(),
4684
+ timezone: z.string().optional(),
3855
4685
  until: z.iso
3856
4686
  .datetime()
3857
4687
  .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$/)
3858
4688
  .nullish(),
3859
4689
  isEnabled: z.boolean().optional(),
3860
- projectId: z.string().regex(/^prj_[0-9A-HJKMNP-TV-Z]{26}$/),
3861
4690
  });
3862
- export const zTriggerUpdatePath = z.object({
4691
+ export const zCronTriggerUpdatePath = z.object({
4692
+ projectId: z.string().regex(/^prj_[0-9A-HJKMNP-TV-Z]{26}$/),
3863
4693
  triggerId: z.string().regex(/^ctrg_[0-9A-HJKMNP-TV-Z]{26}$/),
3864
4694
  });
3865
4695
  /**
3866
4696
  * Updated cron trigger
3867
4697
  */
3868
- export const zTriggerUpdateResponse = zCronTrigger;
3869
- export const zTriggerArchiveBody = z.object({
4698
+ export const zCronTriggerUpdateResponse = zCronTrigger;
4699
+ export const zCronTriggerArchivePath = z.object({
3870
4700
  projectId: z.string().regex(/^prj_[0-9A-HJKMNP-TV-Z]{26}$/),
3871
- });
3872
- export const zTriggerArchivePath = z.object({
3873
4701
  triggerId: z.string().regex(/^ctrg_[0-9A-HJKMNP-TV-Z]{26}$/),
3874
4702
  });
3875
4703
  /**
3876
4704
  * Archived cron trigger
3877
4705
  */
3878
- export const zTriggerArchiveResponse = zCronTrigger;
4706
+ export const zCronTriggerArchiveResponse = zCronTrigger;
3879
4707
  export const zWebhookTriggerListQuery = z.object({
3880
4708
  limit: z.int().gte(1).lte(1000).optional(),
3881
4709
  offset: z.int().gte(0).lte(9007199254740991).optional(),
@@ -4107,54 +4935,19 @@ export const zVaultListQuery = z.object({
4107
4935
  limit: z.int().gte(1).lte(1000).optional(),
4108
4936
  offset: z.int().gte(0).lte(9007199254740991).optional(),
4109
4937
  includeDeprecated: z.boolean().optional(),
4110
- visibility: z.enum(["private", "org"]).optional(),
4938
+ visibility: z.enum(["private", "pod", "org"]).optional(),
4111
4939
  });
4112
4940
  /**
4113
4941
  * List of vaults
4114
4942
  */
4115
4943
  export const zVaultListResponse = z.array(zVault);
4116
- export const zVaultCreateBody = z.object({
4117
- name: z.string().min(1).max(256),
4118
- description: z.string().optional().default(""),
4119
- isDefault: z.boolean().optional().default(false),
4120
- visibility: z.enum(["private", "org"]).optional().default("org"),
4121
- });
4122
- /**
4123
- * Created vault
4124
- */
4125
- export const zVaultCreateResponse = zVault;
4126
- export const zVaultDeletePath = z.object({
4127
- id: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
4128
- });
4129
- /**
4130
- * Deleted vault
4131
- */
4132
- export const zVaultDeleteResponse = zVault;
4133
4944
  export const zVaultGetPath = z.object({
4134
4945
  id: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
4135
4946
  });
4136
4947
  /**
4137
4948
  * Vault details
4138
4949
  */
4139
- export const zVaultGetResponse = zVault;
4140
- export const zVaultUpdateBody = z.object({
4141
- name: z.string().min(1).max(256).optional(),
4142
- description: z.string().optional(),
4143
- });
4144
- export const zVaultUpdatePath = z.object({
4145
- id: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
4146
- });
4147
- /**
4148
- * Updated vault
4149
- */
4150
- export const zVaultUpdateResponse = zVault;
4151
- export const zVaultArchivePath = z.object({
4152
- id: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
4153
- });
4154
- /**
4155
- * Archived vault
4156
- */
4157
- export const zVaultArchiveResponse = zVault;
4950
+ export const zVaultGetResponse = zVaultDetail;
4158
4951
  export const zCredentialListPath = z.object({
4159
4952
  vaultId: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
4160
4953
  });
@@ -4167,18 +4960,7 @@ export const zCredentialListQuery = z.object({
4167
4960
  * List of credentials
4168
4961
  */
4169
4962
  export const zCredentialListResponse = z.array(zCredential);
4170
- export const zCredentialCreateBody = z.object({
4171
- name: z.string().min(1).max(256),
4172
- mcpId: z.string().nullish().default(null),
4173
- label: z
4174
- .string()
4175
- .min(1)
4176
- .max(64)
4177
- .regex(/^[A-Z0-9_]+$/)
4178
- .nullish()
4179
- .default(null),
4180
- auth: zCredentialAuth,
4181
- });
4963
+ export const zCredentialCreateBody = zCreateCredentialBody;
4182
4964
  export const zCredentialCreatePath = z.object({
4183
4965
  vaultId: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
4184
4966
  });
@@ -4214,14 +4996,6 @@ export const zCredentialUpdatePath = z.object({
4214
4996
  * Updated credential
4215
4997
  */
4216
4998
  export const zCredentialUpdateResponse = zCredential;
4217
- export const zCredentialArchivePath = z.object({
4218
- vaultId: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
4219
- id: z.string().regex(/^crd_[0-9A-HJKMNP-TV-Z]{26}$/),
4220
- });
4221
- /**
4222
- * Archived credential
4223
- */
4224
- export const zCredentialArchiveResponse = zCredential;
4225
4999
  export const zCredentialTransferBody = zCredentialTransferInput;
4226
5000
  export const zCredentialTransferPath = z.object({
4227
5001
  vaultId: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
@@ -4231,16 +5005,15 @@ export const zCredentialTransferPath = z.object({
4231
5005
  * Credential transferred
4232
5006
  */
4233
5007
  export const zCredentialTransferResponse = zCredentialTransferResult;
4234
- export const zCredentialOauthStartBody = zOAuthStartInput;
4235
- export const zCredentialOauthStartPath = z.object({
5008
+ export const zCredentialOauthConnectBody = zOAuthConnectBody;
5009
+ export const zCredentialOauthConnectPath = z.object({
4236
5010
  vaultId: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
4237
5011
  });
4238
5012
  /**
4239
- * Authorization URL for the user to visit
5013
+ * OAuth connect result
4240
5014
  */
4241
- export const zCredentialOauthStartResponse = zOAuthStartResult;
5015
+ export const zCredentialOauthConnectResponse = zOAuthConnectResult;
4242
5016
  export const zCredentialOauthSessionPath = z.object({
4243
- vaultId: z.string().regex(/^vlt_[0-9A-HJKMNP-TV-Z]{26}$/),
4244
5017
  sessionId: z.string().regex(/^oas_[0-9A-HJKMNP-TV-Z]{26}$/),
4245
5018
  });
4246
5019
  /**
@@ -4297,6 +5070,15 @@ export const zRegistryMcpGetPath = z.object({
4297
5070
  * MCP details
4298
5071
  */
4299
5072
  export const zRegistryMcpGetResponse = zMcp;
5073
+ export const zRegistryBlueprintListQuery = z.object({
5074
+ limit: z.int().gte(1).lte(1000).optional(),
5075
+ offset: z.int().gte(0).lte(9007199254740991).optional(),
5076
+ includeDeprecated: z.boolean().optional(),
5077
+ });
5078
+ /**
5079
+ * Published blueprint list
5080
+ */
5081
+ export const zRegistryBlueprintListResponse = z.array(zBlueprintPublicListItem);
4300
5082
  export const zRegistryBlueprintGetPath = z.object({
4301
5083
  slug: z
4302
5084
  .string()
@@ -4319,6 +5101,70 @@ export const zRegistryPublisherGetPath = z.object({
4319
5101
  * Public publisher view
4320
5102
  */
4321
5103
  export const zRegistryPublisherGetResponse = zPublisherPublicView;
5104
+ export const zRegistryPublisherBlueprintsPath = z.object({
5105
+ slug: z
5106
+ .string()
5107
+ .min(1)
5108
+ .max(128)
5109
+ .regex(/^[a-z0-9-]+$/),
5110
+ });
5111
+ export const zRegistryPublisherBlueprintsQuery = z.object({
5112
+ limit: z.int().gte(1).lte(1000).optional(),
5113
+ offset: z.int().gte(0).lte(9007199254740991).optional(),
5114
+ includeDeprecated: z.boolean().optional(),
5115
+ });
5116
+ /**
5117
+ * Published blueprint list for the publisher
5118
+ */
5119
+ export const zRegistryPublisherBlueprintsResponse = z.array(zBlueprintPublicListItem);
5120
+ export const zRegistryPublisherSkillsPath = z.object({
5121
+ slug: z
5122
+ .string()
5123
+ .min(1)
5124
+ .max(128)
5125
+ .regex(/^[a-z0-9-]+$/),
5126
+ });
5127
+ export const zRegistryPublisherSkillsQuery = z.object({
5128
+ limit: z.int().gte(1).lte(1000).optional(),
5129
+ offset: z.int().gte(0).lte(9007199254740991).optional(),
5130
+ includeDeprecated: z.boolean().optional(),
5131
+ });
5132
+ /**
5133
+ * Published skill list for the publisher
5134
+ */
5135
+ export const zRegistryPublisherSkillsResponse = z.array(zSkill);
5136
+ export const zRegistryPublisherAgentsPath = z.object({
5137
+ slug: z
5138
+ .string()
5139
+ .min(1)
5140
+ .max(128)
5141
+ .regex(/^[a-z0-9-]+$/),
5142
+ });
5143
+ export const zRegistryPublisherAgentsQuery = z.object({
5144
+ limit: z.int().gte(1).lte(1000).optional(),
5145
+ offset: z.int().gte(0).lte(9007199254740991).optional(),
5146
+ includeDeprecated: z.boolean().optional(),
5147
+ });
5148
+ /**
5149
+ * Published agent list for the publisher
5150
+ */
5151
+ export const zRegistryPublisherAgentsResponse = z.array(zAgent);
5152
+ export const zRegistryPublisherMcpsPath = z.object({
5153
+ slug: z
5154
+ .string()
5155
+ .min(1)
5156
+ .max(128)
5157
+ .regex(/^[a-z0-9-]+$/),
5158
+ });
5159
+ export const zRegistryPublisherMcpsQuery = z.object({
5160
+ limit: z.int().gte(1).lte(1000).optional(),
5161
+ offset: z.int().gte(0).lte(9007199254740991).optional(),
5162
+ includeDeprecated: z.boolean().optional(),
5163
+ });
5164
+ /**
5165
+ * Published MCP list for the publisher
5166
+ */
5167
+ export const zRegistryPublisherMcpsResponse = z.array(zMcp);
4322
5168
  export const zRegistryReplayGetPath = z.object({
4323
5169
  slug: z
4324
5170
  .string()