@opengeni/sdk 0.57.0 → 2.2.0-canary.0

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.
Files changed (94) hide show
  1. package/README.md +123 -2
  2. package/dist/artifacts.js +5 -5
  3. package/dist/automations-client.d.ts +17 -0
  4. package/dist/automations.d.ts +3 -0
  5. package/dist/automations.js +78 -0
  6. package/dist/automations.js.map +1 -0
  7. package/dist/{chunk-JDLDDRNE.js → chunk-C2H7HBNP.js} +290 -33
  8. package/dist/chunk-C2H7HBNP.js.map +1 -0
  9. package/dist/{chunk-GU6JF75T.js → chunk-C4DJPZRU.js} +1 -1
  10. package/dist/{chunk-GU6JF75T.js.map → chunk-C4DJPZRU.js.map} +1 -1
  11. package/dist/{chunk-JRPFWI6T.js → chunk-G6LBVWKT.js} +2 -2
  12. package/dist/{chunk-HJ3HHUT5.js → chunk-GLDV5QY7.js} +16 -2
  13. package/dist/chunk-GLDV5QY7.js.map +1 -0
  14. package/dist/{chunk-ST5DDKJP.js → chunk-GW3EJ2GP.js} +52 -1
  15. package/dist/chunk-GW3EJ2GP.js.map +1 -0
  16. package/dist/{chunk-VWE2QIVO.js → chunk-XNG7YGR3.js} +23 -6
  17. package/dist/chunk-XNG7YGR3.js.map +1 -0
  18. package/dist/{chunk-PKQ377ED.js → chunk-YBQTKNTL.js} +696 -57
  19. package/dist/chunk-YBQTKNTL.js.map +1 -0
  20. package/dist/client.d.ts +151 -26
  21. package/dist/codex-realtime-controller.d.ts +3 -0
  22. package/dist/codex-realtime-controller.js +2 -2
  23. package/dist/codex-realtime-v3.d.ts +13 -2
  24. package/dist/company-brain.d.ts +32 -0
  25. package/dist/company-profile.d.ts +1 -1
  26. package/dist/core.js +4 -4
  27. package/dist/editable-artifacts/browser-session.d.ts +7 -3
  28. package/dist/editable-artifacts/controller.d.ts +4 -1
  29. package/dist/editable-artifacts/errors.d.ts +1 -1
  30. package/dist/editable-artifacts/http-live-transport.d.ts +6 -2
  31. package/dist/editable-artifacts/index.d.ts +2 -0
  32. package/dist/editable-artifacts/open-failure.d.ts +9 -0
  33. package/dist/editable-artifacts/types.d.ts +4 -3
  34. package/dist/editable-artifacts/worker/kernel-adapter.d.ts +1 -1
  35. package/dist/editable-artifacts-worker.js +44 -17
  36. package/dist/editable-artifacts-worker.js.map +1 -1
  37. package/dist/editable-artifacts.js +222 -119
  38. package/dist/editable-artifacts.js.map +1 -1
  39. package/dist/errors.d.ts +1 -1
  40. package/dist/index.d.ts +7 -4
  41. package/dist/index.js +61 -12
  42. package/dist/index.js.map +1 -1
  43. package/dist/interaction.d.ts +23 -0
  44. package/dist/interaction.js +4 -1
  45. package/dist/organization-private-session-settings.d.ts +6 -0
  46. package/dist/organization-private-session-settings.js +22 -0
  47. package/dist/organization-private-session-settings.js.map +1 -0
  48. package/dist/pr-review-client.d.ts +15 -0
  49. package/dist/pr-review.d.ts +4 -0
  50. package/dist/pr-review.js +56 -0
  51. package/dist/pr-review.js.map +1 -0
  52. package/dist/preference-registry.d.ts +8 -0
  53. package/dist/realtime.js +2 -2
  54. package/dist/retained-artifacts.d.ts +5 -1
  55. package/dist/types.d.ts +976 -17
  56. package/dist/workspace-instruction-policies.d.ts +22 -0
  57. package/dist/workspace-learning.d.ts +124 -0
  58. package/package.json +14 -2
  59. package/src/automations-client.ts +118 -0
  60. package/src/automations.ts +15 -0
  61. package/src/client.ts +974 -71
  62. package/src/codex-realtime-controller.ts +235 -5
  63. package/src/codex-realtime-v3.ts +162 -31
  64. package/src/company-brain.ts +99 -0
  65. package/src/company-profile.ts +4 -1
  66. package/src/editable-artifacts/browser-session.ts +36 -22
  67. package/src/editable-artifacts/controller.ts +66 -45
  68. package/src/editable-artifacts/errors.ts +2 -0
  69. package/src/editable-artifacts/http-live-transport.ts +62 -37
  70. package/src/editable-artifacts/index.ts +6 -0
  71. package/src/editable-artifacts/open-failure.ts +79 -0
  72. package/src/editable-artifacts/storage.ts +31 -40
  73. package/src/editable-artifacts/types.ts +4 -3
  74. package/src/editable-artifacts/worker/kernel-adapter.ts +23 -7
  75. package/src/editable-artifacts/worker/runtime.ts +26 -13
  76. package/src/editable-artifacts/worker/wire-codec.ts +23 -5
  77. package/src/errors.ts +1 -1
  78. package/src/index.ts +131 -0
  79. package/src/interaction.ts +95 -0
  80. package/src/organization-private-session-settings.ts +33 -0
  81. package/src/pr-review-client.ts +84 -0
  82. package/src/pr-review.ts +15 -0
  83. package/src/preference-registry.ts +9 -0
  84. package/src/retained-artifacts.ts +101 -0
  85. package/src/stream.ts +13 -2
  86. package/src/types.ts +1117 -16
  87. package/src/workspace-instruction-policies.ts +24 -0
  88. package/src/workspace-learning.ts +138 -0
  89. package/dist/chunk-HJ3HHUT5.js.map +0 -1
  90. package/dist/chunk-JDLDDRNE.js.map +0 -1
  91. package/dist/chunk-PKQ377ED.js.map +0 -1
  92. package/dist/chunk-ST5DDKJP.js.map +0 -1
  93. package/dist/chunk-VWE2QIVO.js.map +0 -1
  94. /package/dist/{chunk-JRPFWI6T.js.map → chunk-G6LBVWKT.js.map} +0 -0
package/src/types.ts CHANGED
@@ -125,6 +125,8 @@ export type SessionRealtimeInboundEntry = {
125
125
  delegationItemId?: string | null | undefined;
126
126
  text?: string | null | undefined;
127
127
  payload?: Record<string, unknown> | undefined;
128
+ /** Model-visible application context attached to this exact realtime message. */
129
+ modelContext?: string | undefined;
128
130
  };
129
131
 
130
132
  export type SyncSessionRealtimeLedgerRequest = {
@@ -170,7 +172,11 @@ export type WorkspaceRealtimeModelCatalogResponse = {
170
172
  models: WorkspaceRealtimeModelCatalogItem[];
171
173
  };
172
174
  export type SessionRealtimeState = "active" | "ended";
173
- export type SessionRealtimeEndReason = "user_stop" | "browser_unload" | "lease_expired";
175
+ export type SessionRealtimeEndReason =
176
+ | "user_stop"
177
+ | "browser_unload"
178
+ | "lease_expired"
179
+ | "authority_revoked";
174
180
 
175
181
  export type SessionRealtimeMode = {
176
182
  id: string;
@@ -220,7 +226,7 @@ export type SessionStatus =
220
226
  | "failed"
221
227
  | "cancelled";
222
228
 
223
- // Mirror of `@opengeni/contracts` SandboxBackend (11 values; every member is
229
+ // Mirror of `@opengeni/contracts` SandboxBackend (12 values; every member is
224
230
  // additive at the end). 3-way enum parity is pinned by
225
231
  // `test/contract-parity.test.ts`.
226
232
  export type SandboxBackend =
@@ -234,7 +240,8 @@ export type SandboxBackend =
234
240
  | "blaxel"
235
241
  | "cloudflare"
236
242
  | "vercel"
237
- | "selfhosted";
243
+ | "selfhosted"
244
+ | "opensandbox";
238
245
 
239
246
  // Mirror of `@opengeni/contracts` SandboxOs. Only "linux" is reachable in v1.
240
247
  export type SandboxOs = "linux" | "macos" | "windows";
@@ -447,6 +454,8 @@ export type RepositoryResourceRef = {
447
454
  kind: "repository";
448
455
  uri: string;
449
456
  ref: string;
457
+ /** Exact immutable commit that repository materialization must produce. */
458
+ expectedCommitSha?: string | undefined;
450
459
  /**
451
460
  * Optional workspace-relative override. When omitted, OpenGeni persists
452
461
  * `repos/<encoded-host>/<owner>/<repo>` so equal names on different Git
@@ -456,6 +465,7 @@ export type RepositoryResourceRef = {
456
465
  mountPath?: string | undefined;
457
466
  subpath?: string | undefined;
458
467
  provider?: GitCredentialProvider | undefined;
468
+ connectionType?: "github_personal" | undefined;
459
469
  credentialBindingId?: GitCredentialBindingId | undefined;
460
470
  access?: GitRepositoryAccess | undefined;
461
471
  repositoryId?: number | string | undefined;
@@ -482,6 +492,7 @@ export type ToolRef = {
482
492
  kind: "mcp";
483
493
  id: string;
484
494
  optional?: boolean | undefined;
495
+ eager?: boolean | undefined;
485
496
  };
486
497
 
487
498
  export type SessionToolPolicy = {
@@ -527,6 +538,7 @@ export type SessionEffectiveToolPolicy = {
527
538
  export type GoalSpec = {
528
539
  text: string;
529
540
  successCriteria?: string | undefined;
541
+ rootConstraints?: string[] | undefined;
530
542
  maxAutoContinuations?: number | undefined;
531
543
  mutationPolicy?: SessionGoalMutationPolicy | undefined;
532
544
  };
@@ -573,6 +585,27 @@ export type UpdateSessionMcpApprovalPolicyResponse = {
573
585
  export type ConnectionKind = "oauth2" | "api_key" | "app_install" | "delegated";
574
586
  export type ConnectionStatus = "active" | "needs_reauth" | "revoked" | "error";
575
587
 
588
+ export type UserResourceDelegation = {
589
+ authorityId: string;
590
+ grantId: string;
591
+ organizationId: string;
592
+ workspaceId: string;
593
+ sessionId: string | null;
594
+ action: string;
595
+ mode: "once" | "session" | "always";
596
+ context: "user_private" | "workspace_shared";
597
+ authorityEpoch: number | null;
598
+ authorityGeneration: number;
599
+ grantGeneration: number;
600
+ resourceVersionId?: string | null | undefined;
601
+ };
602
+
603
+ export type McpConnectionAuthoritySelection = {
604
+ serverId: string;
605
+ connectionId: string;
606
+ userDelegation: UserResourceDelegation;
607
+ };
608
+
576
609
  export type McpServerConnectionRef = {
577
610
  connectionId?: string | undefined;
578
611
  provider?: string | undefined;
@@ -637,6 +670,114 @@ export type CreateConnectionRequest = {
637
670
  metadata?: Record<string, unknown> | undefined;
638
671
  };
639
672
 
673
+ export type PersonalGitHubConnectionMetadata = {
674
+ credentialRole: "opengeni_github_personal";
675
+ providerFamily: "github";
676
+ providerPrincipalId: string;
677
+ githubUserId: string;
678
+ githubLogin: string;
679
+ oauthEnvironment: string;
680
+ oauthClientMarker: string;
681
+ credentialBindingId: string;
682
+ connectedAt: string;
683
+ lastVerifiedAt: string;
684
+ refreshTokenExpiresAt?: string | null | undefined;
685
+ disconnectedAt?: string | null | undefined;
686
+ [key: string]: unknown;
687
+ };
688
+
689
+ export type PersonalGitHubOAuthStartRequest = {
690
+ connectionId?: string | undefined;
691
+ returnPath?: string | undefined;
692
+ };
693
+
694
+ export type PersonalGitHubOAuthStartResponse = {
695
+ authorizationUrl: string;
696
+ expiresAt: string;
697
+ };
698
+
699
+ export type PersonalGitHubConnectionStatusResponse = {
700
+ enabled: boolean;
701
+ connection: ConnectionMetadata | null;
702
+ reviewUrl: string | null;
703
+ };
704
+
705
+ export type PersonalGitHubDisconnectRequest = {
706
+ expectedVersion: number;
707
+ idempotencyKey: string;
708
+ };
709
+
710
+ export type PersonalGitHubRepositoryAccess = "read" | "write";
711
+
712
+ export type PersonalGitHubRepositoryPermissions = {
713
+ pull: boolean;
714
+ push: boolean;
715
+ admin: boolean;
716
+ maintain: boolean;
717
+ triage: boolean;
718
+ };
719
+
720
+ export type PersonalGitHubRepository = {
721
+ repositoryId: string;
722
+ fullName: string;
723
+ canonicalUrl: string;
724
+ defaultBranch: string;
725
+ visibility: "public" | "private" | "internal";
726
+ private: boolean;
727
+ archived: boolean;
728
+ disabled: boolean;
729
+ permissions: PersonalGitHubRepositoryPermissions;
730
+ };
731
+
732
+ export type PersonalGitHubSelectedRepository = PersonalGitHubRepository & {
733
+ selectedAccess: PersonalGitHubRepositoryAccess;
734
+ selectionGeneration: number;
735
+ selectedAt: string;
736
+ lastVerifiedAt: string;
737
+ };
738
+
739
+ export type PersonalGitHubRepositorySelectionState = {
740
+ connectionAuthorityGeneration: number;
741
+ credentialBindingId: string;
742
+ providerPrincipalId: string;
743
+ selectionGeneration: number;
744
+ repositories: PersonalGitHubSelectedRepository[];
745
+ };
746
+
747
+ export type PersonalGitHubRepositoryCatalogItem = PersonalGitHubRepository & {
748
+ selectedAccess: PersonalGitHubRepositoryAccess | null;
749
+ };
750
+
751
+ export type ListPersonalGitHubRepositoriesOptions = {
752
+ cursor?: number | undefined;
753
+ limit?: number | undefined;
754
+ };
755
+
756
+ export type ListPersonalGitHubRepositoriesResponse = {
757
+ repositories: PersonalGitHubRepositoryCatalogItem[];
758
+ nextCursor: number | null;
759
+ selection: PersonalGitHubRepositorySelectionState;
760
+ };
761
+
762
+ export type PersonalGitHubRepositorySelectionInput = {
763
+ repositoryId: string;
764
+ fullName: string;
765
+ access: PersonalGitHubRepositoryAccess;
766
+ };
767
+
768
+ export type ReplacePersonalGitHubRepositorySelectionsRequest = {
769
+ expectedConnectionAuthorityGeneration: number;
770
+ expectedSelectionGeneration: number;
771
+ idempotencyKey: string;
772
+ repositories: PersonalGitHubRepositorySelectionInput[];
773
+ };
774
+
775
+ export type VerifyPersonalGitHubRepositorySelectionsRequest = {
776
+ expectedConnectionAuthorityGeneration: number;
777
+ expectedSelectionGeneration: number;
778
+ idempotencyKey: string;
779
+ };
780
+
640
781
  export type OpenGeniSlackBotInstallRequest = {
641
782
  /** Existing OpenGeni Slack bot connection to reinstall in place. */
642
783
  connectionId?: string | undefined;
@@ -679,7 +820,7 @@ export type SlackInstallationBinding = {
679
820
  slackTeamName: string;
680
821
  botId: string;
681
822
  botUserId: string;
682
- botDisplayName: "OpenGeni";
823
+ botDisplayName: "OpenGeni" | "OpenGeni Staging";
683
824
  state: SlackInstallationBindingState;
684
825
  quarantineReason: string | null;
685
826
  version: number;
@@ -743,8 +884,9 @@ export type GoogleDriveConnectionMetadata = {
743
884
  googleEmail: string;
744
885
  googleDisplayName: string | null;
745
886
  verifiedAt: string;
746
- accessMode: "metadata_readonly" | "readonly";
887
+ accessMode: "file_only" | "metadata_readonly" | "readonly";
747
888
  lifecycle?: GoogleDriveConnectionLifecycle | undefined;
889
+ outputDestination?: GoogleDriveOutputDestination | undefined;
748
890
  documentDestination?: ConnectorDocumentDestination | undefined;
749
891
  selectedSources?: GoogleDriveSelectedSource[] | undefined;
750
892
  /** @deprecated Read selectedSources; retained while existing connections migrate. */
@@ -752,8 +894,17 @@ export type GoogleDriveConnectionMetadata = {
752
894
  [key: string]: unknown;
753
895
  };
754
896
 
897
+ export type GoogleDriveOutputDestination = {
898
+ folderId: string;
899
+ folderName: string;
900
+ driveId: string | null;
901
+ location: "my_drive" | "shared_drive";
902
+ selectedAt: string;
903
+ };
904
+
755
905
  export type GoogleDriveOAuthStartRequest = {
756
906
  connectionId?: string | undefined;
907
+ capability?: "source_read" | "publish" | undefined;
757
908
  };
758
909
 
759
910
  export type GoogleDriveOAuthStartResponse = {
@@ -1015,11 +1166,95 @@ export type IntegrationClientMetadata = {
1015
1166
  response_types: ["code"];
1016
1167
  };
1017
1168
 
1169
+ export type SessionVisibility = "private" | "workspace";
1170
+
1171
+ export type SessionTenancyCreateCapabilities = {
1172
+ activated: boolean;
1173
+ canCreatePrivate: boolean;
1174
+ reason: "available" | "not_activated" | "managed_session_required" | "unavailable";
1175
+ };
1176
+
1177
+ export type SessionTenancyPublicProjection = {
1178
+ visibility: SessionVisibility;
1179
+ authorityEpoch: number;
1180
+ ownedByCurrentUser: boolean;
1181
+ fork: {
1182
+ sourceVisibility: SessionVisibility;
1183
+ sourceAuthorityEpoch: number;
1184
+ forkedAt: string;
1185
+ } | null;
1186
+ };
1187
+
1188
+ export type UpdateSessionVisibilityRequest = {
1189
+ visibility: SessionVisibility;
1190
+ expectedAuthorityEpoch: number;
1191
+ idempotencyKey: string;
1192
+ };
1193
+
1194
+ export type UpdateSessionVisibilityResponse = {
1195
+ operationId: string;
1196
+ eventId: string | null;
1197
+ eventSequence: number | null;
1198
+ visibility: SessionVisibility;
1199
+ authorityEpoch: number;
1200
+ changed: boolean;
1201
+ replay: boolean;
1202
+ revokedGrantCount: number;
1203
+ };
1204
+
1205
+ export type ForkSessionRequest = {
1206
+ idempotencyKey: string;
1207
+ visibility: SessionVisibility;
1208
+ workspaceSharedAcknowledged: boolean;
1209
+ };
1210
+
1211
+ export type ForkSessionResponse = {
1212
+ operationId: string;
1213
+ eventId: string;
1214
+ eventSequence: number;
1215
+ sessionId: string;
1216
+ workspaceId: string;
1217
+ visibility: SessionVisibility;
1218
+ authorityEpoch: 1;
1219
+ copiedHistoryItemCount: number;
1220
+ replay: boolean;
1221
+ };
1222
+
1223
+ export type SessionBackgroundCommandActivity = {
1224
+ state: "running" | "stopping";
1225
+ count: number;
1226
+ };
1227
+
1228
+ export type SessionBackgroundCommand = {
1229
+ id: string;
1230
+ workspaceId: string;
1231
+ sessionId: string;
1232
+ provider: "managed" | "connected_machine";
1233
+ state: "running" | "stopping" | "exited" | "lost";
1234
+ commandPreview: string;
1235
+ cancelRequestedAt: string | null;
1236
+ exitCode: number | null;
1237
+ settlementReason: string | null;
1238
+ startedAt: string;
1239
+ settledAt: string | null;
1240
+ updatedAt: string;
1241
+ };
1242
+
1243
+ export type SessionBackgroundCommandListResponse = {
1244
+ commands: SessionBackgroundCommand[];
1245
+ };
1246
+
1247
+ export type CancelSessionBackgroundCommandResult = {
1248
+ command: SessionBackgroundCommand;
1249
+ accepted: boolean;
1250
+ };
1251
+
1018
1252
  export type Session = {
1019
1253
  id: string;
1020
1254
  workspaceId: string;
1021
1255
  accountId: string;
1022
1256
  status: SessionStatus;
1257
+ backgroundCommandActivity?: SessionBackgroundCommandActivity | undefined;
1023
1258
  initialMessage: string;
1024
1259
  title: string | null;
1025
1260
  titleSource: "user" | "agent" | null;
@@ -1035,10 +1270,14 @@ export type Session = {
1035
1270
  toolPolicyVersion: number;
1036
1271
  effectiveToolPolicy?: SessionEffectiveToolPolicy | undefined;
1037
1272
  metadata: Record<string, unknown>;
1273
+ /** Present only when session-tenancy product activation is enabled for the organization. */
1274
+ tenancy?: SessionTenancyPublicProjection | undefined;
1038
1275
  /** Frozen creator fact; later turns carry their own independent initiator. */
1039
1276
  createdBy: TurnInitiator;
1040
1277
  createdByContext: Record<string, unknown>;
1041
1278
  model: string;
1279
+ reasoningEffort: ReasoningEffort;
1280
+ latencyMode: LatencyMode;
1042
1281
  sandboxBackend: SandboxBackend;
1043
1282
  sandboxOs: SandboxOs;
1044
1283
  sandboxGroupId: string;
@@ -1089,6 +1328,17 @@ export type Session = {
1089
1328
  pinnedAt?: string | null;
1090
1329
  /** Optimistic pin-state revision; zero represents an absent pin relation. */
1091
1330
  pinVersion?: number;
1331
+ /** Personal explicit acknowledgment state. */
1332
+ unread?: boolean;
1333
+ /** Personal actively-working label. */
1334
+ activelyWorking?: boolean;
1335
+ /** Optimistic unread/actively-working revision. */
1336
+ attentionVersion?: number;
1337
+ /** Personal archive state. */
1338
+ archived?: boolean;
1339
+ archivedAt?: string | null;
1340
+ /** Optimistic archive-state revision. */
1341
+ archiveVersion?: number;
1092
1342
  /** Server-authoritative descendant counts populated by session-list reads. */
1093
1343
  treeStats?:
1094
1344
  | {
@@ -1099,10 +1349,22 @@ export type Session = {
1099
1349
  attentionDescendants: number;
1100
1350
  pausedDescendants: number;
1101
1351
  failedDescendants: number;
1352
+ unreadDescendants?: number | undefined;
1353
+ activelyWorkingDescendants?: number | undefined;
1354
+ /**
1355
+ * Earliest moment one of the counted `attentionDescendants` entered
1356
+ * `requires_action`; null when none is waiting, absent on older servers.
1357
+ */
1358
+ attentionSince?: string | null | undefined;
1102
1359
  /** Counts are lower bounds rather than exact totals when true. */
1103
1360
  truncated: boolean;
1104
1361
  }
1105
1362
  | undefined;
1363
+ /**
1364
+ * When this session's own open turn entered `requires_action`. Populated by
1365
+ * list and lineage reads for `requires_action` sessions; null otherwise.
1366
+ */
1367
+ requiresActionSince?: string | null | undefined;
1106
1368
  createdAt: string;
1107
1369
  updatedAt: string;
1108
1370
  };
@@ -1173,6 +1435,18 @@ export type UpdateSessionPinRequest = {
1173
1435
  expectedVersion?: number;
1174
1436
  };
1175
1437
 
1438
+ export type UpdateSessionAttentionRequest = {
1439
+ unread?: boolean;
1440
+ acknowledgedThroughSequence?: number;
1441
+ activelyWorking?: boolean;
1442
+ expectedVersion?: number;
1443
+ };
1444
+
1445
+ export type UpdateSessionArchiveRequest = {
1446
+ archived: boolean;
1447
+ expectedVersion?: number;
1448
+ };
1449
+
1176
1450
  export type LineageNode = {
1177
1451
  session: SessionSummary;
1178
1452
  children: LineageNode[];
@@ -1237,6 +1511,25 @@ export type TimelineAnnotation = DraftTimelineAnnotation & {
1237
1511
  ordinal: number;
1238
1512
  };
1239
1513
 
1514
+ export const PERSONAL_RESOURCE_SHARED_OUTPUT_WARNING_VERSION = 1 as const;
1515
+ export const PERSONAL_RESOURCE_SHARED_OUTPUT_WARNING =
1516
+ "Personal resources used in a workspace-shared session may influence outputs visible to other workspace members. The underlying credentials and secret values are not shared by the attachment itself.";
1517
+
1518
+ export type PersonalResourceAttachmentIntent = {
1519
+ mode: "once" | "session" | "always";
1520
+ expectedAuthorityEpoch?: number | undefined;
1521
+ workspaceSharedAcknowledged?: boolean | undefined;
1522
+ sharedOutputWarningVersion: 1;
1523
+ };
1524
+
1525
+ export type PersonalResourceAttachmentSummary = {
1526
+ mode: "once" | "session" | "always";
1527
+ context: "user_private" | "workspace_shared";
1528
+ resourceCount: number;
1529
+ resourceKinds: Array<"variable_set" | "rig" | "connected_machine">;
1530
+ sharedOutputWarningVersion: 1;
1531
+ };
1532
+
1240
1533
  export type SessionTurn = {
1241
1534
  id: string;
1242
1535
  workspaceId: string;
@@ -1264,6 +1557,7 @@ export type SessionTurn = {
1264
1557
  initiator: TurnInitiator;
1265
1558
  initiatorContext: Record<string, unknown>;
1266
1559
  personalConnections?: McpPersonalConnectionSummary[] | undefined;
1560
+ personalResources?: PersonalResourceAttachmentSummary | null | undefined;
1267
1561
  cancelledBy?: string | null;
1268
1562
  cancelReason?: string | null;
1269
1563
  startedAt: string | null;
@@ -1357,6 +1651,9 @@ export const SESSION_EVENT_TYPES = [
1357
1651
  "turn.superseded",
1358
1652
  "turn.recovery.requested",
1359
1653
  "turn.capacity_waiting",
1654
+ "turn.startup.phase.started",
1655
+ "turn.startup.phase.completed",
1656
+ "turn.startup.phase.failed",
1360
1657
  "agent.message.delta",
1361
1658
  "agent.message.completed",
1362
1659
  "agent.reasoning.delta",
@@ -1374,6 +1671,8 @@ export const SESSION_EVENT_TYPES = [
1374
1671
  "sandbox.operation.started",
1375
1672
  "sandbox.operation.completed",
1376
1673
  "sandbox.operation.failed",
1674
+ "session.command.backgrounded",
1675
+ "session.command.finished",
1377
1676
  "sandbox.command.output.delta",
1378
1677
  "artifact.created",
1379
1678
  "goal.set",
@@ -1385,6 +1684,7 @@ export const SESSION_EVENT_TYPES = [
1385
1684
  "goal.paused",
1386
1685
  "goal.resumed",
1387
1686
  "goal.cleared",
1687
+ "goal.held",
1388
1688
  "goal.continuation",
1389
1689
  "system.update.pending",
1390
1690
  "system.update.delivered",
@@ -1421,6 +1721,7 @@ export const SESSION_EVENT_TYPES = [
1421
1721
  "terminal.pty.exited",
1422
1722
  "session.title_set",
1423
1723
  "session.visibility.changed",
1724
+ "session.personal_resources.attached",
1424
1725
  "session.mcp.approval_policy.updated",
1425
1726
  "session.tool_policy.updated",
1426
1727
  // Multi-account Codex (P1): the session's inference account changed.
@@ -1861,6 +2162,14 @@ export type FsReadResponse = {
1861
2162
  isBinary: boolean;
1862
2163
  revision: number;
1863
2164
  };
2165
+ export const SANDBOX_FILE_ARTIFACT_MAX_BYTES = 25 * 1024 * 1024 - 1;
2166
+ export type PublishSandboxFileArtifactRequest = { path: string };
2167
+ export type SandboxFileArtifactReceipt = {
2168
+ type: "sandbox_file";
2169
+ sandboxPath: string;
2170
+ filename: string;
2171
+ artifact: RetainedArtifactReference;
2172
+ };
1864
2173
  export type FsWriteRequest = {
1865
2174
  path: string;
1866
2175
  encoding?: FsEncoding;
@@ -2184,6 +2493,55 @@ export type ScheduledTaskScheduleSpec =
2184
2493
  daysOfWeek?: ScheduledTaskDayOfWeek[] | undefined;
2185
2494
  };
2186
2495
 
2496
+ export type IncidentTelemetrySeriesMetadata = {
2497
+ metric: string;
2498
+ labels: string[];
2499
+ };
2500
+
2501
+ export type IncidentTelemetryDataRoute =
2502
+ | { kind: "mcp"; serverId: string }
2503
+ | { kind: "first_party"; tool: FirstPartyMcpToolName }
2504
+ | { kind: "variable_set"; variableSetName: string; variableNames: string[] }
2505
+ | { kind: "rig_credential_hook"; credentialHookId: string };
2506
+
2507
+ export type IncidentTelemetryPreflight = {
2508
+ requiredResources: ResourceRef[];
2509
+ requiredMcpServerIds: string[];
2510
+ requiredFirstPartyMcpTools: FirstPartyMcpToolName[];
2511
+ requiredFirstPartyMcpPermissions: Permission[];
2512
+ requiredRig: { name: string; credentialHookIds: string[] } | null;
2513
+ requiredVariableSetNames: string[];
2514
+ requiredVariableNames: string[];
2515
+ dataSource: {
2516
+ kind: "prometheus";
2517
+ queryPath: "/api/v1/query" | "/api/v1/query_range";
2518
+ workspaceLabel: string;
2519
+ alertSelectorLabels: string[];
2520
+ route: IncidentTelemetryDataRoute;
2521
+ requiredSeries: IncidentTelemetrySeriesMetadata[];
2522
+ availableSeries: IncidentTelemetrySeriesMetadata[];
2523
+ };
2524
+ };
2525
+
2526
+ export type IncidentTelemetryPreflightInput = Omit<
2527
+ IncidentTelemetryPreflight,
2528
+ | "requiredResources"
2529
+ | "requiredMcpServerIds"
2530
+ | "requiredFirstPartyMcpTools"
2531
+ | "requiredFirstPartyMcpPermissions"
2532
+ | "requiredRig"
2533
+ | "requiredVariableSetNames"
2534
+ | "requiredVariableNames"
2535
+ > & {
2536
+ requiredResources?: ResourceRef[] | undefined;
2537
+ requiredMcpServerIds?: string[] | undefined;
2538
+ requiredFirstPartyMcpTools?: FirstPartyMcpToolName[] | undefined;
2539
+ requiredFirstPartyMcpPermissions?: Permission[] | undefined;
2540
+ requiredRig?: { name: string; credentialHookIds?: string[] | undefined } | null | undefined;
2541
+ requiredVariableSetNames?: string[] | undefined;
2542
+ requiredVariableNames?: string[] | undefined;
2543
+ };
2544
+
2187
2545
  export type ScheduledTaskAgentConfig = {
2188
2546
  prompt: string;
2189
2547
  resources: ResourceRef[];
@@ -2194,6 +2552,8 @@ export type ScheduledTaskAgentConfig = {
2194
2552
  reasoningEffort?: ReasoningEffort | undefined;
2195
2553
  sandboxBackend?: SandboxBackend | undefined;
2196
2554
  goal?: GoalSpec | undefined;
2555
+ executionClass?: "incident_telemetry" | undefined;
2556
+ incidentTelemetryPreflight?: IncidentTelemetryPreflight | undefined;
2197
2557
  maxNestedAgentDepth?: number | undefined;
2198
2558
  };
2199
2559
 
@@ -2250,6 +2610,8 @@ export type ScheduledTask = {
2250
2610
  createdBy?: TurnInitiator | undefined;
2251
2611
  createdByContext?: TurnInitiatorContext | undefined;
2252
2612
  personalConnections?: McpPersonalConnectionSummary[] | undefined;
2613
+ authorityRevision: number;
2614
+ executionDigest: string;
2253
2615
  targetSessionId: string | null;
2254
2616
  reusableSessionId: string | null;
2255
2617
  variableSetId: string | null;
@@ -2267,15 +2629,16 @@ export type CreateSessionRequest = {
2267
2629
  // projection before OpenGeni admits the initial turn. Replays must retain the
2268
2630
  // same UUID and idempotency key.
2269
2631
  requestedSessionId?: string | undefined;
2632
+ visibility?: SessionVisibility | undefined;
2270
2633
  initialMessage?: string | undefined;
2271
2634
  /** Create an idle session shell so realtime voice can be the first interaction. */
2272
2635
  startMode?: "realtime" | undefined;
2273
- /** System instructions scoped to the initial turn; never visible timeline text. */
2274
- turnInstructions?: string | undefined;
2636
+ /** Model-visible application context attached to the initial user message; omitted by standard timeline rendering. */
2637
+ modelContext?: string | undefined;
2275
2638
  // Per-session agent persona/system instructions (org-visible metadata, not a
2276
2639
  // secret). Delivered system-level, composed AFTER the per-workspace persona —
2277
2640
  // how a host supplies per-agent-type prompts without leaking them into the
2278
- // user-visible timeline. Trimmed, non-empty, max 32768 chars.
2641
+ // user-visible timeline. Trimmed, non-empty, max 65536 chars.
2279
2642
  instructions?: string | undefined;
2280
2643
  /** Immutable normalized prompt-policy role; distinct from membership roles. */
2281
2644
  policyRole?: string | undefined;
@@ -2313,6 +2676,8 @@ export type CreateSessionRequest = {
2313
2676
  firstPartyMcpPermissions?: string[] | undefined;
2314
2677
  firstPartyMcpTools?: FirstPartyMcpToolName[] | undefined;
2315
2678
  mcpServers?: SessionMcpServerInput[] | undefined;
2679
+ /** Atomically attach the server-derived personal Variable Set/Rig closure to the initial turn. */
2680
+ personalResourceAttachment?: PersonalResourceAttachmentIntent | undefined;
2316
2681
  // Shared-sandbox placement (mirror of `@opengeni/contracts` CreateSessionRequest.sandbox,
2317
2682
  // addendum 05 §D.1). Three-way union; OMITTED ⇒ the context-dependent server default
2318
2683
  // (from inside a session → "shared" with the creator's box, top-level → "new").
@@ -2362,6 +2727,7 @@ export const KNOWN_PERMISSIONS = [
2362
2727
  "variable-sets:read",
2363
2728
  "variable-sets:write",
2364
2729
  "variable-sets:manage",
2730
+ "variable-sets:attach",
2365
2731
  "variable-sets:use",
2366
2732
  "secrets:list",
2367
2733
  "secrets:read",
@@ -2390,6 +2756,7 @@ export type FirstPartyMcpToolName =
2390
2756
  | "goal_set"
2391
2757
  | "goal_update"
2392
2758
  | "goal_progress"
2759
+ | "goal_wait"
2393
2760
  | "goal_complete"
2394
2761
  | "goal_pause"
2395
2762
  | "memory_search"
@@ -2400,6 +2767,18 @@ export type FirstPartyMcpToolName =
2400
2767
  | "task_notes_list"
2401
2768
  | "task_note_save"
2402
2769
  | "task_note_archive"
2770
+ | "task_note_replace"
2771
+ | "knowledge_propose"
2772
+ | "knowledge_correct"
2773
+ | "task_note_promote_knowledge"
2774
+ | "task_note_promote_instruction_policy"
2775
+ | "task_note_promote_preference"
2776
+ | "instruction_policy_propose"
2777
+ | "preference_propose"
2778
+ | "remember"
2779
+ | "remember_confirm"
2780
+ | "company_profile_propose"
2781
+ | "company_profile_confirm"
2403
2782
  | "sandboxes_list"
2404
2783
  | "sandbox_attach"
2405
2784
  | "sandbox_swap"
@@ -2414,11 +2793,13 @@ export type FirstPartyMcpToolName =
2414
2793
  | "sessions_list"
2415
2794
  | "session_get"
2416
2795
  | "session_events"
2796
+ | "session_wait"
2417
2797
  | "session_create"
2418
2798
  | "session_send_message"
2419
2799
  | "session_pause"
2420
2800
  | "session_resume"
2421
2801
  | "session_steer"
2802
+ | "session_human_input_respond"
2422
2803
  | "set_other_session_title"
2423
2804
  | "interaction_discover"
2424
2805
  | "browser_open"
@@ -2477,6 +2858,7 @@ export type FirstPartyMcpToolName =
2477
2858
  | "scheduled_tasks_delete"
2478
2859
  | "scheduled_task_runs_list"
2479
2860
  | "slack_bot_list_channels"
2861
+ | "slack_bot_search"
2480
2862
  | "slack_bot_channel_history"
2481
2863
  | "slack_bot_thread_replies"
2482
2864
  | "slack_bot_list_users"
@@ -2498,6 +2880,7 @@ export type FirstPartyMcpToolName =
2498
2880
  | "atlassian_sources_list"
2499
2881
  | "atlassian_search"
2500
2882
  | "atlassian_get"
2883
+ | "sandbox_file_publish"
2501
2884
  | "artifacts_list"
2502
2885
  | "artifacts_get_source"
2503
2886
  | "artifacts_create"
@@ -2652,6 +3035,8 @@ export type ModelCredentialReadinessV1 = {
2652
3035
 
2653
3036
  export type WorkspaceModelCatalogModel = ClientModel & {
2654
3037
  credentialReadiness: ModelCredentialReadinessV1;
3038
+ /** Exact workspace-policy verdict without exposing provider identity. */
3039
+ policyAllowed?: boolean | undefined;
2655
3040
  availability: ModelAvailabilityV1;
2656
3041
  };
2657
3042
 
@@ -2659,6 +3044,21 @@ export type WorkspaceModelCatalogResponse = {
2659
3044
  models: WorkspaceModelCatalogModel[];
2660
3045
  };
2661
3046
 
3047
+ /**
3048
+ * The workspace's hard model/provider allowlist. `null` means unrestricted for
3049
+ * that dimension; an empty array is an explicit total block.
3050
+ */
3051
+ export type WorkspaceModelAccessPolicy = {
3052
+ allowedProviders: string[] | null;
3053
+ allowedModels: string[] | null;
3054
+ };
3055
+
3056
+ /** Full replacement body for `PUT /v1/workspaces/:id/model-policy`. */
3057
+ export type UpdateWorkspaceModelAccessPolicyRequest = {
3058
+ allowedProviders?: string[] | null | undefined;
3059
+ allowedModels?: string[] | null | undefined;
3060
+ };
3061
+
2662
3062
  /**
2663
3063
  * Connection state of a workspace's Codex (ChatGPT) subscription, returned by
2664
3064
  * `GET /v1/workspaces/:id/codex/status`. `models` are the codex models the
@@ -2806,6 +3206,12 @@ export type CodexAccountOverview = {
2806
3206
  credits: CodexResetCredit[];
2807
3207
  };
2808
3208
  canRedeem: boolean;
3209
+ /** Secret-free reason redemption is owner-actionable or view-only. */
3210
+ redemptionAccess: {
3211
+ ownership: "current_human" | "unowned" | "different_human" | "managed_human_unavailable";
3212
+ /** A direct managed-cookie admin may claim only an unowned same-provider row by reconnecting. */
3213
+ canClaimUnownedViaReconnect: boolean;
3214
+ };
2809
3215
  /** Owning managed-cookie human may replay durable completion without a healthy provider token. */
2810
3216
  canResumeRedemption: boolean;
2811
3217
  /** Durable owner-scoped ambiguity/completion discovery; never redemption authority for agents. */
@@ -2980,11 +3386,16 @@ export type ClientAuthConfig =
2980
3386
  | { mode: "none" }
2981
3387
  | { mode: "deploymentKey"; headerName: "x-opengeni-access-key" }
2982
3388
  | { mode: "configuredToken"; headerName: "authorization"; scheme: "bearer" }
2983
- | { mode: "managedSession"; session: "cookie" };
3389
+ | {
3390
+ mode: "managedSession";
3391
+ session: "cookie";
3392
+ /** Defaults to true when omitted by an older deployment. */
3393
+ emailVerificationRequired?: boolean;
3394
+ };
2984
3395
 
2985
3396
  // Kept value-identical to @opengeni/contracts and pinned by the SDK contract
2986
3397
  // parity suite. The SDK has no runtime dependency on the Zod contracts package.
2987
- export const OPENGENI_API_CONTRACT_REVISION = "2026-08-social-provider-tools-v1" as const;
3398
+ export const OPENGENI_API_CONTRACT_REVISION = "2026-08-atomic-session-fork-visibility-v1" as const;
2988
3399
  export const OPENGENI_API_CONTRACT_HEADER = "x-opengeni-api-contract" as const;
2989
3400
  /** Bounded request/response identifier shared by browser, ingress, and API diagnostics. */
2990
3401
  export const OPENGENI_CORRELATION_HEADER = "x-opengeni-correlation-id" as const;
@@ -3194,6 +3605,220 @@ export type ListManagedOrganizationMembershipsResponse = {
3194
3605
  memberships: ManagedOrganizationMembership[];
3195
3606
  };
3196
3607
 
3608
+ export type UserResourceKind =
3609
+ | "connection"
3610
+ | "document"
3611
+ | "variable_set"
3612
+ | "rig"
3613
+ | "connected_machine";
3614
+ export type UserResourceGrantAction =
3615
+ | "connection.use"
3616
+ | "document.read"
3617
+ | "variable_set.use"
3618
+ | "rig.use"
3619
+ | "connected_machine.use";
3620
+ export type UserResourceAuthorityGrant = {
3621
+ grantId: string;
3622
+ targetWorkspaceId: string;
3623
+ targetSessionId: string | null;
3624
+ action: UserResourceGrantAction;
3625
+ mode: "once" | "session" | "always";
3626
+ context: "user_private" | "workspace_shared";
3627
+ authorityEpoch: number | null;
3628
+ generation: number;
3629
+ status: "active" | "consumed" | "revoked" | "expired";
3630
+ expiresAt: string | null;
3631
+ delegation: UserResourceDelegation;
3632
+ };
3633
+ export type UserResourceAuthoritySummary = {
3634
+ authorityId: string;
3635
+ resourceKind: UserResourceKind;
3636
+ resourceId: string;
3637
+ originWorkspaceId: string | null;
3638
+ generation: number;
3639
+ status: "active" | "retained" | "revoked";
3640
+ grants: UserResourceAuthorityGrant[];
3641
+ };
3642
+ export type ListUserResourceAuthoritiesOptions = {
3643
+ resourceKind: UserResourceKind;
3644
+ cursor?: string | undefined;
3645
+ limit?: number | undefined;
3646
+ };
3647
+ export type ListUserResourceAuthoritiesResponse = {
3648
+ scope: "user";
3649
+ authorities: UserResourceAuthoritySummary[];
3650
+ nextCursor: string | null;
3651
+ };
3652
+ export type IssueUserResourceGrantRequest =
3653
+ | {
3654
+ scope: "user";
3655
+ resourceKind: UserResourceKind;
3656
+ mode: "session";
3657
+ context: "user_private" | "workspace_shared";
3658
+ sessionId: string;
3659
+ expectedAuthorityEpoch: number;
3660
+ workspaceSharedAcknowledged?: boolean | undefined;
3661
+ }
3662
+ | {
3663
+ scope: "user";
3664
+ resourceKind: UserResourceKind;
3665
+ mode: "always";
3666
+ context: "user_private" | "workspace_shared";
3667
+ sessionId?: null | undefined;
3668
+ expectedAuthorityEpoch?: null | undefined;
3669
+ workspaceSharedAcknowledged?: boolean | undefined;
3670
+ };
3671
+ export type UserResourceGrantMutationResponse = {
3672
+ scope: "user";
3673
+ grant: UserResourceAuthorityGrant;
3674
+ };
3675
+ export type RevokeUserResourceGrantResponse = {
3676
+ scope: "user";
3677
+ grant: {
3678
+ grantId: string;
3679
+ generation: number;
3680
+ status: "revoked";
3681
+ revokedAt: string;
3682
+ };
3683
+ };
3684
+
3685
+ export type OrganizationMembershipRole = "owner" | "admin" | "member";
3686
+ export type OrganizationInvitation = {
3687
+ id: string;
3688
+ organizationId: string;
3689
+ targetEmail: string;
3690
+ targetName: string | null;
3691
+ initialWorkspaceIds: string[];
3692
+ role: OrganizationMembershipRole;
3693
+ status: "pending" | "accepted" | "revoked" | "expired";
3694
+ revision: number;
3695
+ expiresAt: string;
3696
+ acceptedMembershipId: string | null;
3697
+ createdAt: string;
3698
+ updatedAt: string;
3699
+ };
3700
+ export type OrganizationMember = {
3701
+ id: string;
3702
+ organizationId: string;
3703
+ subjectId: string;
3704
+ name: string | null;
3705
+ email: string | null;
3706
+ role: OrganizationMembershipRole;
3707
+ status: "provisioning" | "active" | "suspended" | "revoked";
3708
+ authorizationRevision: number;
3709
+ personalWorkspaceId: string | null;
3710
+ revokedAt: string | null;
3711
+ personalRetentionUntil: string | null;
3712
+ createdAt: string;
3713
+ updatedAt: string;
3714
+ };
3715
+ export type OrganizationSummary = {
3716
+ id: string;
3717
+ name: string;
3718
+ createdAt: string;
3719
+ updatedAt: string;
3720
+ };
3721
+ export type OrganizationWorkspaceAccessMember = {
3722
+ membershipId: string;
3723
+ subjectId: string;
3724
+ subjectLabel: string | null;
3725
+ principalKind: "human" | "service";
3726
+ role: string;
3727
+ permissions: string[];
3728
+ createdAt: string;
3729
+ };
3730
+ export type OrganizationWorkspaceAccess = {
3731
+ id: string;
3732
+ name: string;
3733
+ slug: string | null;
3734
+ createdAt: string;
3735
+ updatedAt: string;
3736
+ members: OrganizationWorkspaceAccessMember[];
3737
+ };
3738
+ export type OrganizationAdministrationOverview = {
3739
+ organization: OrganizationSummary;
3740
+ workspaces: OrganizationWorkspaceAccess[];
3741
+ };
3742
+ export type OrganizationPrivateSessionSettings = {
3743
+ organizationId: string;
3744
+ enabled: boolean;
3745
+ available: boolean;
3746
+ version: number;
3747
+ updatedAt: string;
3748
+ changed?: boolean;
3749
+ };
3750
+ export type AddOrganizationWorkspaceMemberRequest = {
3751
+ organizationMembershipId: string;
3752
+ role?: string | undefined;
3753
+ permissions: Permission[];
3754
+ };
3755
+ export type CreateOrganizationWorkspaceRequest = {
3756
+ name: string;
3757
+ slug?: string | null;
3758
+ agentInstructions?: string | null;
3759
+ operationId: string;
3760
+ };
3761
+ export type CreateOrganizationRequest = {
3762
+ name: string;
3763
+ operationId: string;
3764
+ };
3765
+ export type CreateOrganizationResponse = {
3766
+ organization: OrganizationSummary;
3767
+ workspaceId: string;
3768
+ };
3769
+ export type UpdateOrganizationNameRequest = {
3770
+ name: string;
3771
+ expectedUpdatedAt: string;
3772
+ operationId: string;
3773
+ };
3774
+ export type UpdateOrganizationPrivateSessionSettingsRequest = {
3775
+ enabled: boolean;
3776
+ expectedVersion: number;
3777
+ operationId: string;
3778
+ };
3779
+ export type OrganizationRetentionPolicy = {
3780
+ organizationId: string;
3781
+ mode: "retain" | "delete_after";
3782
+ retentionDays: number | null;
3783
+ version: number;
3784
+ updatedAt: string;
3785
+ };
3786
+ export type CreateOrganizationInvitationRequest = {
3787
+ email: string;
3788
+ name?: string;
3789
+ initialWorkspaceIds?: string[];
3790
+ role?: OrganizationMembershipRole;
3791
+ expiresAt: string;
3792
+ operationId: string;
3793
+ };
3794
+ export type AcceptOrganizationInvitationRequest = {
3795
+ expectedRevision: number;
3796
+ operationId: string;
3797
+ };
3798
+ export type RevokeOrganizationInvitationRequest = AcceptOrganizationInvitationRequest;
3799
+ export type UpdateOrganizationMemberRequest = {
3800
+ kind: "change_role" | "suspend" | "reactivate" | "offboard";
3801
+ role?: OrganizationMembershipRole;
3802
+ expectedAuthorizationRevision: number;
3803
+ operationId: string;
3804
+ reason?: string;
3805
+ };
3806
+ export type UpdateOrganizationRetentionPolicyRequest = {
3807
+ mode: "retain" | "delete_after";
3808
+ retentionDays: number | null;
3809
+ expectedVersion: number;
3810
+ operationId: string;
3811
+ };
3812
+ export type ListOrganizationInvitationsPageResponse = {
3813
+ invitations: OrganizationInvitation[];
3814
+ nextCursor: string | null;
3815
+ };
3816
+ export type ListOrganizationMembersResponse = { members: OrganizationMember[] };
3817
+ export type AcceptOrganizationInvitationResponse = {
3818
+ invitation: OrganizationInvitation;
3819
+ membership: OrganizationMember;
3820
+ };
3821
+
3197
3822
  export type Workspace = {
3198
3823
  id: string;
3199
3824
  accountId: string;
@@ -3219,6 +3844,10 @@ export type WorkspaceSettings = {
3219
3844
  memoryEnabled?: boolean | undefined;
3220
3845
  /** Reversible Memory V1 prompt composition rollout. */
3221
3846
  memoryPromptMode?: "legacy_standing" | "retrieval_only" | undefined;
3847
+ /** Model policy inherited by new chats and scheduled tasks. */
3848
+ sessionDefaults?: WorkspaceSessionDefaults | undefined;
3849
+ /** Exact capability selection inherited by new top-level sessions. */
3850
+ sessionToolDefaults?: WorkspaceSessionToolDefaults | undefined;
3222
3851
  voiceInput?: WorkspaceVoiceInputSettings | undefined;
3223
3852
  transcription?: WorkspaceTranscriptionPolicy | undefined;
3224
3853
  maxNestedAgentDepth?: number | null | undefined;
@@ -3227,15 +3856,38 @@ export type WorkspaceSettings = {
3227
3856
  /** Whether agents may invoke the built-in structured human-input tool. */
3228
3857
  agentHumanInputEnabled?: boolean | undefined;
3229
3858
  slackReactionSummon?: WorkspaceSlackReactionSummonSettings | undefined;
3859
+ /** Slack orchestration notices; both default off when absent or invalid. */
3860
+ slackOrchestrationNotices?: WorkspaceSlackOrchestrationNoticeSettings | undefined;
3230
3861
  [key: string]: unknown;
3231
3862
  };
3232
3863
 
3864
+ export type WorkspaceSessionDefaults = {
3865
+ model: string;
3866
+ reasoningEffort: ReasoningEffort;
3867
+ };
3868
+
3869
+ export type WorkspaceSessionToolDefaults = {
3870
+ mcpServerIds: string[];
3871
+ firstPartyMcpTools: FirstPartyMcpToolName[];
3872
+ };
3873
+
3233
3874
  export type WorkspaceSlackReactionSummonSettings = {
3234
3875
  enabled: boolean;
3235
3876
  emoji: "genie";
3236
3877
  channelPolicy: { mode: "bot_member" } | { mode: "allowlist"; channelIds: string[] };
3237
3878
  };
3238
3879
 
3880
+ /**
3881
+ * Per-workspace switches for the two Slack orchestration notices. Both are off
3882
+ * unless the workspace explicitly turned them on.
3883
+ */
3884
+ export type WorkspaceSlackOrchestrationNoticeSettings = {
3885
+ /** Post a pointer card when a child worker blocks on input or an approval. */
3886
+ childRequiresAction?: boolean | undefined;
3887
+ /** Post one line when a goal pauses for budget or the continuation cap. */
3888
+ goalPaused?: boolean | undefined;
3889
+ };
3890
+
3239
3891
  export type SlackReactionChannel = {
3240
3892
  id: string;
3241
3893
  name: string | null;
@@ -3254,12 +3906,15 @@ export type WorkspaceVoiceInputSettings = {
3254
3906
  export type UpdateWorkspaceSettingsRequest = {
3255
3907
  memoryEnabled?: boolean | undefined;
3256
3908
  memoryPromptMode?: "legacy_standing" | "retrieval_only" | undefined;
3909
+ sessionDefaults?: WorkspaceSessionDefaults | undefined;
3910
+ sessionToolDefaults?: WorkspaceSessionToolDefaults | undefined;
3257
3911
  voiceInput?: WorkspaceVoiceInputSettings | undefined;
3258
3912
  transcription?: WorkspaceTranscriptionPolicy | undefined;
3259
3913
  maxNestedAgentDepth?: number | null | undefined;
3260
3914
  codexCompactionDefault?: "remote_v2" | "portable" | undefined;
3261
3915
  agentHumanInputEnabled?: boolean | undefined;
3262
3916
  slackReactionSummon?: WorkspaceSlackReactionSummonSettings | undefined;
3917
+ slackOrchestrationNotices?: WorkspaceSlackOrchestrationNoticeSettings | undefined;
3263
3918
  [key: string]: unknown;
3264
3919
  };
3265
3920
 
@@ -3287,6 +3942,7 @@ export type ApiKey = {
3287
3942
  accountId: string;
3288
3943
  workspaceId: string | null;
3289
3944
  name: string;
3945
+ description: string | null;
3290
3946
  prefix: string;
3291
3947
  permissions: Permission[];
3292
3948
  expiresAt: string | null;
@@ -3298,6 +3954,7 @@ export type ApiKey = {
3298
3954
 
3299
3955
  export type CreateApiKeyRequest = {
3300
3956
  name: string;
3957
+ description?: string | undefined;
3301
3958
  permissions: Permission[];
3302
3959
  expiresAt?: string | undefined;
3303
3960
  };
@@ -3405,12 +4062,14 @@ export type SessionGoalRevision = {
3405
4062
  resultObjectiveRevision: number | null;
3406
4063
  text: string;
3407
4064
  successCriteria: string | null;
4065
+ rootConstraints: string[];
3408
4066
  mutationPolicy: SessionGoalMutationPolicy;
3409
4067
  rationale: string;
3410
4068
  actor: "agent" | "api" | "scheduled_task";
3411
4069
  actorTurnId: string | null;
3412
4070
  actorAttemptId: string | null;
3413
4071
  proposalId: string | null;
4072
+ rollbackOfRevisionId: string | null;
3414
4073
  createdAt: string;
3415
4074
  };
3416
4075
 
@@ -3419,6 +4078,32 @@ export type ApplySessionGoalRevisionRequest = {
3419
4078
  rationale?: string | undefined;
3420
4079
  };
3421
4080
 
4081
+ export type ListSessionGoalRevisionsOptions = {
4082
+ limit?: number | undefined;
4083
+ before?: string | undefined;
4084
+ };
4085
+
4086
+ export type ListSessionGoalRevisionsResponse = {
4087
+ revisions: SessionGoalRevision[];
4088
+ hasMore: boolean;
4089
+ nextCursor: string | null;
4090
+ };
4091
+
4092
+ export type RejectSessionGoalRevisionRequest = {
4093
+ expectedObjectiveRevision: number;
4094
+ rationale: string;
4095
+ };
4096
+
4097
+ export type RejectSessionGoalRevisionResponse = {
4098
+ revision: SessionGoalRevision;
4099
+ replay: boolean;
4100
+ };
4101
+
4102
+ export type RollbackSessionGoalRevisionRequest = {
4103
+ expectedObjectiveRevision: number;
4104
+ rationale: string;
4105
+ };
4106
+
3422
4107
  export type SessionGoalContinuationState =
3423
4108
  | "inactive"
3424
4109
  | "scheduled"
@@ -3438,6 +4123,8 @@ export type SessionGoalContinuationReason =
3438
4123
  | "provider_backpressure"
3439
4124
  | "session_cancelled"
3440
4125
  | "system_work_pending"
4126
+ | "held_for_input"
4127
+ | "backoff_pending"
3441
4128
  | "missing_obligation";
3442
4129
 
3443
4130
  export type SessionGoalContinuation = {
@@ -3447,6 +4134,8 @@ export type SessionGoalContinuation = {
3447
4134
  observedRevision: number;
3448
4135
  nextAttemptAt: string | null;
3449
4136
  lastError: string | null;
4137
+ /** Agent-stated reason for a `held_for_input` hold; null otherwise. */
4138
+ holdReason?: string | null | undefined;
3450
4139
  };
3451
4140
 
3452
4141
  export type SessionGoal = {
@@ -3457,6 +4146,7 @@ export type SessionGoal = {
3457
4146
  status: SessionGoalStatus;
3458
4147
  text: string;
3459
4148
  successCriteria: string | null;
4149
+ rootConstraints: string[];
3460
4150
  evidence: string | null;
3461
4151
  rationale: string | null;
3462
4152
  pausedReason: string | null;
@@ -3482,6 +4172,7 @@ export type UpdateSessionGoalRequest =
3482
4172
  | {
3483
4173
  text: string;
3484
4174
  successCriteria?: string | null | undefined;
4175
+ rootConstraints?: string[] | undefined;
3485
4176
  mutationPolicy?: SessionGoalMutationPolicy | undefined;
3486
4177
  rationale: string;
3487
4178
  expectedObjectiveRevision: number;
@@ -3536,6 +4227,7 @@ export type EffectiveSessionControl = {
3536
4227
  interruptionPendingCount: number;
3537
4228
  quiescencePendingCount: number;
3538
4229
  } | null;
4230
+ backgroundCommandSettlement?: { state: "stopping"; commandCount: number } | null | undefined;
3539
4231
  };
3540
4232
 
3541
4233
  export type SessionCommandReceipt = {
@@ -3551,6 +4243,11 @@ export type SessionCommandReceipt = {
3551
4243
  createdAt: string;
3552
4244
  };
3553
4245
 
4246
+ export type SessionPromptRouting =
4247
+ | "accepted_for_execution"
4248
+ | "queued_for_execution"
4249
+ | "accepted_for_steering";
4250
+
3554
4251
  export type ComposerDraft = {
3555
4252
  revision: number;
3556
4253
  text: string;
@@ -3558,13 +4255,14 @@ export type ComposerDraft = {
3558
4255
  resources: ResourceRef[];
3559
4256
  model: string;
3560
4257
  reasoningEffort: ReasoningEffort;
3561
- latencyMode?: LatencyMode | undefined;
4258
+ latencyMode: LatencyMode;
3562
4259
  sourceTurnId: string | null;
3563
4260
  sourceTurnVersion: number | null;
3564
4261
  updatedAt: string | null;
3565
4262
  };
3566
4263
 
3567
4264
  export type NewSessionDraftOptions = {
4265
+ visibility?: SessionVisibility | undefined;
3568
4266
  sandboxBackend?: SandboxBackend | undefined;
3569
4267
  targetSandboxId?: string | undefined;
3570
4268
  workingDir?: string | undefined;
@@ -3575,6 +4273,17 @@ export type NewSessionDraftOptions = {
3575
4273
  firstPartyMcpTools?: FirstPartyMcpToolName[] | undefined;
3576
4274
  };
3577
4275
 
4276
+ export type NewSessionSelectionHistory = {
4277
+ /** Most-recently used project first. Null channelId is the Default project. */
4278
+ projects: Array<{
4279
+ channelId: string | null;
4280
+ /** Null means the managed sandbox was used most recently in this project. */
4281
+ targetSandboxId: string | null;
4282
+ /** Most-recently used machine in this project first. */
4283
+ machines: Array<{ sandboxId: string; workingDir: string | null }>;
4284
+ }>;
4285
+ };
4286
+
3578
4287
  export type NewSessionDraft = {
3579
4288
  revision: number;
3580
4289
  text: string;
@@ -3584,8 +4293,9 @@ export type NewSessionDraft = {
3584
4293
  toolsProvided: boolean;
3585
4294
  model: string;
3586
4295
  reasoningEffort: ReasoningEffort;
3587
- latencyMode?: LatencyMode | undefined;
4296
+ latencyMode: LatencyMode;
3588
4297
  options: NewSessionDraftOptions;
4298
+ selectionHistory: NewSessionSelectionHistory;
3589
4299
  updatedAt: string | null;
3590
4300
  };
3591
4301
 
@@ -3619,7 +4329,12 @@ export type SessionSystemUpdateKind =
3619
4329
  | "agent_message"
3620
4330
  | "agent_steer_instruction"
3621
4331
  | "child_terminal_result"
3622
- | "media_generation_result";
4332
+ | "media_generation_result"
4333
+ | "child_requires_action"
4334
+ | "child_requires_action_resolved"
4335
+ | "child_paused"
4336
+ | "child_waiting_capacity"
4337
+ | "child_progress";
3623
4338
 
3624
4339
  export type SessionSystemUpdateState =
3625
4340
  | "pending"
@@ -3734,7 +4449,31 @@ export type SaveComposerDraftRequest = Omit<
3734
4449
  "revision" | "sourceTurnId" | "sourceTurnVersion" | "updatedAt"
3735
4450
  > & { expectedRevision: number };
3736
4451
 
3737
- export type SaveNewSessionDraftRequest = Omit<NewSessionDraft, "revision" | "updatedAt"> & {
4452
+ export type SubmitComposerDraftRequest = Omit<SaveComposerDraftRequest, "expectedRevision"> & {
4453
+ expectedDraftRevision: number;
4454
+ clientEventId: string;
4455
+ delivery: "send" | "steer";
4456
+ controlEtag?: string;
4457
+ modelContext?: string;
4458
+ mcpCredentialUpdates?: SessionMcpCredentialUpdateInput[];
4459
+ connectionAuthorities?: McpConnectionAuthoritySelection[];
4460
+ personalResourceAttachment?: PersonalResourceAttachmentIntent;
4461
+ };
4462
+
4463
+ export type SubmitComposerDraftResponse = {
4464
+ accepted: SessionEvent;
4465
+ turn: SessionTurn;
4466
+ draft: ComposerDraft;
4467
+ receipt: SessionCommandReceipt;
4468
+ routing: SessionPromptRouting;
4469
+ interruptionCount: number;
4470
+ replay: boolean;
4471
+ };
4472
+
4473
+ export type SaveNewSessionDraftRequest = Omit<
4474
+ NewSessionDraft,
4475
+ "revision" | "selectionHistory" | "updatedAt"
4476
+ > & {
3738
4477
  expectedRevision: number;
3739
4478
  };
3740
4479
 
@@ -3751,6 +4490,8 @@ export type ScheduledTaskAgentConfigInput = {
3751
4490
  reasoningEffort?: ReasoningEffort | undefined;
3752
4491
  sandboxBackend?: SandboxBackend | undefined;
3753
4492
  goal?: GoalSpec | undefined;
4493
+ executionClass?: "incident_telemetry" | undefined;
4494
+ incidentTelemetryPreflight?: IncidentTelemetryPreflightInput | undefined;
3754
4495
  maxNestedAgentDepth?: number | undefined;
3755
4496
  };
3756
4497
 
@@ -3760,6 +4501,7 @@ export type CreateAgentScheduledTaskRequest = {
3760
4501
  action?: { kind: "agent_turn" } | undefined;
3761
4502
  runMode?: ScheduledTaskRunMode | undefined;
3762
4503
  targetSessionId?: string | null | undefined;
4504
+ connectionAuthorities?: McpConnectionAuthoritySelection[] | undefined;
3763
4505
  overlapPolicy?: ScheduledTaskOverlapPolicy | undefined;
3764
4506
  agentConfig: ScheduledTaskAgentConfigInput;
3765
4507
  status?: ScheduledTaskStatus | undefined;
@@ -3789,6 +4531,7 @@ export type UpdateScheduledTaskRequest = {
3789
4531
  schedule?: ScheduledTaskScheduleSpec | undefined;
3790
4532
  runMode?: ScheduledTaskRunMode | undefined;
3791
4533
  targetSessionId?: string | null | undefined;
4534
+ connectionAuthorities?: McpConnectionAuthoritySelection[] | undefined;
3792
4535
  overlapPolicy?: ScheduledTaskOverlapPolicy | undefined;
3793
4536
  action?: ScheduledTaskAction | undefined;
3794
4537
  agentConfig?: ScheduledTaskAgentConfigInput | undefined;
@@ -3851,6 +4594,8 @@ export type ScheduledTaskRun = {
3851
4594
  accountId: string;
3852
4595
  workspaceId: string;
3853
4596
  taskId: string;
4597
+ taskAuthorityRevision: number | null;
4598
+ taskExecutionDigest: string | null;
3854
4599
  status: ScheduledTaskRunStatus;
3855
4600
  triggerType: ScheduledTaskTriggerType;
3856
4601
  scheduledAt: string | null;
@@ -3888,6 +4633,9 @@ export type VariableSet = {
3888
4633
  id: string;
3889
4634
  accountId: string;
3890
4635
  workspaceId: string;
4636
+ scope: "organization" | "workspace" | "user";
4637
+ generation: number;
4638
+ status: "active" | "revoked";
3891
4639
  name: string;
3892
4640
  description: string | null;
3893
4641
  variables: VariableSetVariableMetadata[];
@@ -3902,6 +4650,8 @@ export type WorkspaceEnvironmentVariableMetadata = VariableSetVariableMetadata;
3902
4650
  export type WorkspaceEnvironment = VariableSet;
3903
4651
 
3904
4652
  export type CreateVariableSetRequest = {
4653
+ /** Omitted remains the legacy workspace-owned path. */
4654
+ scope?: "organization" | "workspace" | "user" | undefined;
3905
4655
  name: string;
3906
4656
  description?: string | undefined;
3907
4657
  /** Initial variables. Values are write-only: they never come back on reads. */
@@ -4000,6 +4750,8 @@ export type Channel = {
4000
4750
  workspaceId: string;
4001
4751
  name: string;
4002
4752
  description: string | null;
4753
+ pinned: boolean;
4754
+ sortOrder: number;
4003
4755
  createdBy: string | null;
4004
4756
  createdAt: string;
4005
4757
  updatedAt: string;
@@ -4013,6 +4765,12 @@ export type CreateChannelRequest = {
4013
4765
  export type UpdateChannelRequest = {
4014
4766
  name?: string;
4015
4767
  description?: string | null;
4768
+ pinned?: boolean;
4769
+ };
4770
+
4771
+ /** Complete workspace project order. It is replaced atomically after a drag. */
4772
+ export type ReorderChannelsRequest = {
4773
+ channelIds: string[];
4016
4774
  };
4017
4775
 
4018
4776
  /** Re-files one session; null moves it back to the unfiled inbox. */
@@ -4024,6 +4782,9 @@ export type Rig = {
4024
4782
  id: string;
4025
4783
  accountId: string;
4026
4784
  workspaceId: string;
4785
+ scope: ResourceAuthorityScope;
4786
+ generation: number;
4787
+ status: "active" | "revoked";
4027
4788
  name: string;
4028
4789
  description: string | null;
4029
4790
  createdBy: string | null;
@@ -4068,6 +4829,7 @@ export type RigChange = {
4068
4829
  };
4069
4830
 
4070
4831
  export type CreateRigRequest = {
4832
+ scope?: ResourceAuthorityScope;
4071
4833
  name: string;
4072
4834
  description?: string | undefined;
4073
4835
  image?: string | undefined;
@@ -4464,6 +5226,7 @@ export type Document = {
4464
5226
  authorityKind: DocumentAuthorityKind;
4465
5227
  authorityWorkspaceId: string | null;
4466
5228
  authoritySubjectId: string | null;
5229
+ authorityId?: string | null | undefined;
4467
5230
  visibility: DocumentVisibility;
4468
5231
  createdBy: string | null;
4469
5232
  agentAccess: boolean;
@@ -4539,6 +5302,55 @@ export type MoveDocumentRequest = {
4539
5302
  targetBaseId?: string | undefined;
4540
5303
  };
4541
5304
 
5305
+ export type DocumentAuthorityTuple = {
5306
+ kind: DocumentAuthorityKind;
5307
+ workspaceId: string | null;
5308
+ subjectId: string | null;
5309
+ authorityId: string | null;
5310
+ };
5311
+
5312
+ export type ReclassifyDocumentAuthorityRequest = {
5313
+ operationId: string;
5314
+ expectedAuthority: DocumentAuthorityTuple;
5315
+ targetAuthorityKind: DocumentAuthorityKind;
5316
+ };
5317
+
5318
+ export type DocumentAuthorityReclassification = {
5319
+ operationId: string;
5320
+ documentId: string;
5321
+ previousAuthority: DocumentAuthorityTuple;
5322
+ authority: DocumentAuthorityTuple;
5323
+ createdAt: string;
5324
+ };
5325
+
5326
+ export type ListDocumentAuthorityReclassificationsOptions = {
5327
+ limit?: number | undefined;
5328
+ cursor?: string | undefined;
5329
+ };
5330
+
5331
+ export type ListDocumentAuthorityReclassificationsResponse = {
5332
+ receipts: DocumentAuthorityReclassification[];
5333
+ hasMore: boolean;
5334
+ nextCursor: string | null;
5335
+ };
5336
+
5337
+ export type RunDocumentDefaultCollectionBackfillRequest = {
5338
+ runId: string;
5339
+ operationId: string;
5340
+ batchSize?: number | undefined;
5341
+ };
5342
+
5343
+ export type DocumentDefaultCollectionBackfill = {
5344
+ runId: string;
5345
+ operationId: string;
5346
+ status: "running" | "completed";
5347
+ lastWorkspaceId: string | null;
5348
+ processedCount: number;
5349
+ createdCount: number;
5350
+ adoptedCount: number;
5351
+ completedAt: string | null;
5352
+ };
5353
+
4542
5354
  export type DocumentSearchRequest = {
4543
5355
  query: string;
4544
5356
  baseIds?: string[] | undefined;
@@ -4689,6 +5501,30 @@ export type CapabilityPackScheduledTaskTemplate = {
4689
5501
  prompt?: string | undefined;
4690
5502
  };
4691
5503
 
5504
+ export type CapabilityPackAutomationTemplate = {
5505
+ id: string;
5506
+ name: string;
5507
+ description: string;
5508
+ adapterId: string;
5509
+ eventTypes: string[];
5510
+ sessionTemplate: {
5511
+ prompt: string;
5512
+ instructions: string | null;
5513
+ resources: ResourceRef[];
5514
+ skills: CapabilityPackSkill[];
5515
+ tools: ToolRef[];
5516
+ firstPartyMcpTools: string[];
5517
+ firstPartyMcpPermissions: Permission[];
5518
+ model: string | null;
5519
+ reasoningEffort: ReasoningEffort | null;
5520
+ sandboxBackend: SandboxBackend | null;
5521
+ policyRole: string | null;
5522
+ metadata: Record<string, unknown>;
5523
+ };
5524
+ configuration: Record<string, unknown>;
5525
+ connectionRequirement: string | null;
5526
+ };
5527
+
4692
5528
  export type CapabilityPackSkillFile = {
4693
5529
  path: string;
4694
5530
  content: string;
@@ -4771,6 +5607,7 @@ export type CapabilityPack = {
4771
5607
  connectors: CapabilityPackConnector[];
4772
5608
  knowledge: CapabilityPackKnowledge[];
4773
5609
  scheduledTaskTemplates: CapabilityPackScheduledTaskTemplate[];
5610
+ automationTemplates?: CapabilityPackAutomationTemplate[] | undefined;
4774
5611
  variableSet?: CapabilityPackVariableSetSpec | undefined;
4775
5612
  metadata: Record<string, unknown>;
4776
5613
  };
@@ -4875,6 +5712,31 @@ export type RegisterCapabilityPackRequest = {
4875
5712
  prompt?: string | undefined;
4876
5713
  }[]
4877
5714
  | undefined;
5715
+ automationTemplates?:
5716
+ | {
5717
+ id: string;
5718
+ name: string;
5719
+ description: string;
5720
+ adapterId: string;
5721
+ eventTypes: string[];
5722
+ sessionTemplate: {
5723
+ prompt: string;
5724
+ instructions?: string | null | undefined;
5725
+ resources?: ResourceRef[] | undefined;
5726
+ skills?: CapabilityPackSkill[] | undefined;
5727
+ tools?: ToolRef[] | undefined;
5728
+ firstPartyMcpTools?: string[] | undefined;
5729
+ firstPartyMcpPermissions?: Permission[] | undefined;
5730
+ model?: string | null | undefined;
5731
+ reasoningEffort?: ReasoningEffort | null | undefined;
5732
+ sandboxBackend?: SandboxBackend | null | undefined;
5733
+ policyRole?: string | null | undefined;
5734
+ metadata?: Record<string, unknown> | undefined;
5735
+ };
5736
+ configuration?: Record<string, unknown> | undefined;
5737
+ connectionRequirement?: string | null | undefined;
5738
+ }[]
5739
+ | undefined;
4878
5740
  variableSet?:
4879
5741
  | {
4880
5742
  description: string;
@@ -4911,6 +5773,100 @@ export type PackInstallation = {
4911
5773
  updatedAt: string;
4912
5774
  };
4913
5775
 
5776
+ // --- OpenGeni Review Bot ------------------------------------------------------------
5777
+
5778
+ export type PrReviewProvider = GitCredentialProvider;
5779
+ export type PrReviewCredentialKind = "github_app" | "provider_token";
5780
+ export type PrReviewWebhookAuthKind = "hmac_sha256" | "shared_token" | "basic";
5781
+
5782
+ export type CreatePrReviewAppRegistrationRequest = {
5783
+ name: string;
5784
+ provider: PrReviewProvider;
5785
+ providerBaseUrl?: string | undefined;
5786
+ appId?: string | undefined;
5787
+ credentialKind: PrReviewCredentialKind;
5788
+ privateKey?: string | undefined;
5789
+ accessToken?: string | undefined;
5790
+ accessTokenExpiresAt?: string | null | undefined;
5791
+ webhookSecret: string;
5792
+ webhookUsername?: string | undefined;
5793
+ };
5794
+
5795
+ export type UpdatePrReviewAppRegistrationRequest = {
5796
+ name?: string | undefined;
5797
+ privateKey?: string | undefined;
5798
+ accessToken?: string | undefined;
5799
+ accessTokenExpiresAt?: string | null | undefined;
5800
+ webhookSecret?: string | undefined;
5801
+ webhookUsername?: string | undefined;
5802
+ status?: "active" | "disabled" | undefined;
5803
+ };
5804
+
5805
+ export type PrReviewAppRegistration = {
5806
+ id: string;
5807
+ sourceId: string;
5808
+ accountId: string;
5809
+ workspaceId: string;
5810
+ name: string;
5811
+ provider: PrReviewProvider;
5812
+ providerBaseUrl: string;
5813
+ appId: string | null;
5814
+ credentialKind: PrReviewCredentialKind;
5815
+ hasCredential: boolean;
5816
+ accessTokenExpiresAt: string | null;
5817
+ webhookAuthKind: PrReviewWebhookAuthKind;
5818
+ hasWebhookSecret: boolean;
5819
+ webhookUsername: string | null;
5820
+ webhookPath: string;
5821
+ status: "active" | "disabled";
5822
+ createdBySubjectId: string;
5823
+ createdAt: string;
5824
+ updatedAt: string;
5825
+ };
5826
+
5827
+ export type CreatePrReviewRepositoryBindingRequest = {
5828
+ registrationId: string;
5829
+ repositoryUri: string;
5830
+ repositoryFullName: string;
5831
+ providerRepositoryId: string | number;
5832
+ installationId?: string | number | undefined;
5833
+ projectId?: string | number | undefined;
5834
+ model?: string | null | undefined;
5835
+ additionalInstructions?: string | null | undefined;
5836
+ status?: "active" | "disabled" | undefined;
5837
+ };
5838
+
5839
+ export type UpdatePrReviewRepositoryBindingRequest = {
5840
+ model?: string | null | undefined;
5841
+ additionalInstructions?: string | null | undefined;
5842
+ status?: "active" | "disabled" | undefined;
5843
+ };
5844
+
5845
+ export type PrReviewRepositoryBinding = {
5846
+ id: string;
5847
+ triggerId: string;
5848
+ accountId: string;
5849
+ workspaceId: string;
5850
+ registrationId: string;
5851
+ provider: PrReviewProvider;
5852
+ repositoryUri: string;
5853
+ repositoryFullName: string;
5854
+ providerRepositoryId: string;
5855
+ installationId: string | null;
5856
+ projectId: string | null;
5857
+ model: string | null;
5858
+ additionalInstructions: string | null;
5859
+ status: "active" | "disabled";
5860
+ createdBySubjectId: string;
5861
+ createdAt: string;
5862
+ updatedAt: string;
5863
+ };
5864
+
5865
+ export type ListPrReviewConfigurationResponse = {
5866
+ registrations: PrReviewAppRegistration[];
5867
+ repositories: PrReviewRepositoryBinding[];
5868
+ };
5869
+
4914
5870
  export type EnablePackRequest = {
4915
5871
  variableSetId?: string | undefined;
4916
5872
  /** @deprecated use variableSetId */
@@ -5314,6 +6270,8 @@ export type IntegrationFacetBindingSummary = {
5314
6270
  lastErrorCode: string | null;
5315
6271
  createdAt: string;
5316
6272
  updatedAt: string;
6273
+ directlyOwned: boolean;
6274
+ owners: CapabilityComponentOwner[];
5317
6275
  };
5318
6276
 
5319
6277
  export type IntegrationInstanceFacetsResponse = {
@@ -5356,6 +6314,20 @@ export type IntegrationFacetRemovalResult = {
5356
6314
  remainingOwners: CapabilityComponentOwner[];
5357
6315
  };
5358
6316
 
6317
+ /**
6318
+ * Presentation-only consent copy served with an integration or connector.
6319
+ * Never grants a scope or replaces server-side authorization; the UI keeps a
6320
+ * generic fallback for any omitted field.
6321
+ */
6322
+ export type IntegrationPresentation = {
6323
+ providerName?: string | undefined;
6324
+ icon?: "calendar" | "cloud" | "contacts" | "files" | "mail" | undefined;
6325
+ introduction?: string | undefined;
6326
+ capabilities?: { title: string; description: string }[] | undefined;
6327
+ permissionSummary?: string | undefined;
6328
+ scopeLabels?: Record<string, { label: string; description: string }> | undefined;
6329
+ };
6330
+
5359
6331
  export type IntegrationDefinitionSummary = {
5360
6332
  id: string;
5361
6333
  name: string;
@@ -5369,6 +6341,7 @@ export type IntegrationDefinitionSummary = {
5369
6341
  kind: "oauth2";
5370
6342
  scopes: string[];
5371
6343
  };
6344
+ presentation?: IntegrationPresentation | undefined;
5372
6345
  facets: IntegrationFacetDefinitionSummary[];
5373
6346
  };
5374
6347
 
@@ -5925,6 +6898,30 @@ export type InsightsModelCallRow = {
5925
6898
  pricingSource: InsightsPricingSource | null;
5926
6899
  };
5927
6900
 
6901
+ export type ModelContextContributionSource =
6902
+ | "workspace_instruction_policy"
6903
+ | "legacy_workspace_instructions"
6904
+ | "preference_registry_descriptor"
6905
+ | "company_profile"
6906
+ | "legacy_memory_v1"
6907
+ | "runtime_skill_catalog";
6908
+
6909
+ export type InsightsPromptContributionRow = {
6910
+ source: ModelContextContributionSource;
6911
+ items: number;
6912
+ utf8Bytes: number;
6913
+ estimatedTokens: number;
6914
+ calls: number;
6915
+ };
6916
+
6917
+ export type InsightsPromptContributions = {
6918
+ estimatedTokens: number;
6919
+ utf8Bytes: number;
6920
+ coveredCalls: number;
6921
+ totalCalls: number;
6922
+ sources: InsightsPromptContributionRow[];
6923
+ };
6924
+
5928
6925
  export type WorkspaceInsightsSnapshot = {
5929
6926
  range: InsightsRange;
5930
6927
  rangeLabel: string;
@@ -5942,6 +6939,7 @@ export type WorkspaceInsightsSnapshot = {
5942
6939
  drivers: InsightsSpendDriver[];
5943
6940
  schedules: InsightsScheduleRow[];
5944
6941
  recentCalls: InsightsModelCallRow[];
6942
+ promptContributions: InsightsPromptContributions;
5945
6943
  warmSeconds: number;
5946
6944
  priorWarmSeconds: number;
5947
6945
  warmGroups: InsightsWarmGroupRow[];
@@ -6000,18 +6998,32 @@ export type CreateCheckoutResponse = {
6000
6998
  url: string;
6001
6999
  };
6002
7000
 
7001
+ export type CreateBillingPortalRequest = {
7002
+ accountId?: string | undefined;
7003
+ returnUrl?: string | undefined;
7004
+ };
7005
+
7006
+ export type CreateBillingPortalResponse = {
7007
+ portalSessionId: string;
7008
+ url: string;
7009
+ };
7010
+
6003
7011
  export type UserMessageEventInput = {
6004
7012
  type: "user.message";
6005
7013
  clientEventId?: string | undefined;
6006
7014
  payload: {
6007
7015
  text: string;
6008
7016
  annotations?: SubmittedTimelineAnnotation[] | undefined;
6009
- turnInstructions?: string | undefined;
7017
+ modelContext?: string | undefined;
6010
7018
  resources?: ResourceRef[] | undefined;
6011
7019
  model?: string | undefined;
6012
7020
  reasoningEffort?: ReasoningEffort | undefined;
6013
7021
  latencyMode?: LatencyMode | undefined;
7022
+ controlEtag?: string | undefined;
7023
+ expectedDraftRevision?: number | undefined;
6014
7024
  mcpCredentialUpdates?: SessionMcpCredentialUpdateInput[] | undefined;
7025
+ connectionAuthorities?: McpConnectionAuthoritySelection[] | undefined;
7026
+ personalResourceAttachment?: PersonalResourceAttachmentIntent | undefined;
6015
7027
  };
6016
7028
  };
6017
7029
 
@@ -6073,13 +7085,92 @@ export type MachineState =
6073
7085
  | "display_unavailable"
6074
7086
  | "enrolling";
6075
7087
 
6076
- export type MachineKind = "modal" | "selfhosted";
7088
+ export type MachineKind = "modal" | "selfhosted" | "opensandbox";
7089
+
7090
+ export type MachineConnectionAuthority = {
7091
+ state: "not_applicable" | "unclaimed" | "active" | "expired";
7092
+ generation: number;
7093
+ supersededCount: number;
7094
+ leaseExpiresAt: string | null;
7095
+ duplicateRunnerDeniedCount: number;
7096
+ duplicateRunnerDeniedAt: string | null;
7097
+ };
7098
+
7099
+ export type MachineRuntimeCapabilities = {
7100
+ exec: boolean;
7101
+ filesystem: boolean;
7102
+ git: boolean;
7103
+ pty: boolean;
7104
+ desktop: boolean;
7105
+ opStream: boolean;
7106
+ browserBridge: boolean;
7107
+ operationResourcePolicy: boolean;
7108
+ operationCpuQuota: boolean;
7109
+ };
7110
+
7111
+ export type MachineUpdateStatus =
7112
+ | "requested"
7113
+ | "accepted"
7114
+ | "waiting_for_idle"
7115
+ | "downloading"
7116
+ | "verifying"
7117
+ | "applying"
7118
+ | "restarting"
7119
+ | "succeeded"
7120
+ | "failed";
7121
+
7122
+ export type MachineUpdateState = {
7123
+ operationId: string;
7124
+ status: MachineUpdateStatus;
7125
+ targetVersion: string;
7126
+ expectedBinarySha256: string | null;
7127
+ errorCode: string | null;
7128
+ retryable: boolean;
7129
+ rolledBack: boolean;
7130
+ requestedAt: string;
7131
+ updatedAt: string;
7132
+ completedAt: string | null;
7133
+ };
7134
+
7135
+ export type MachineRuntime = {
7136
+ installedVersion: string | null;
7137
+ binarySha256: string | null;
7138
+ updateChannel: "stable" | "beta" | null;
7139
+ desiredVersion: string | null;
7140
+ versionState: "unknown" | "current" | "outdated" | "ahead" | "updating" | "update_failed";
7141
+ capabilities: MachineRuntimeCapabilities;
7142
+ update: MachineUpdateState | null;
7143
+ };
7144
+
7145
+ export type UpdateMachineAgentResponse = {
7146
+ operationId: string;
7147
+ accepted: boolean;
7148
+ targetVersion: string;
7149
+ };
7150
+
7151
+ export type MachineOperationPolicy = {
7152
+ memoryMaxBytes: number | null;
7153
+ memoryHighBytes: number | null;
7154
+ cpuMaxMillicores: number | null;
7155
+ revision: number;
7156
+ updatedAt: string | null;
7157
+ };
7158
+
7159
+ export type UpdateMachineOperationPolicyRequest = {
7160
+ memoryMaxBytes: number | null;
7161
+ memoryHighBytes: number | null;
7162
+ /** Omitted preserves the current CPU limit for older/partial clients; null clears. */
7163
+ cpuMaxMillicores?: number | null;
7164
+ expectedRevision: number;
7165
+ };
6077
7166
 
6078
7167
  /** A machine as the Machines dashboard renders it (an enrolled selfhosted machine
6079
7168
  * or the session's synthetic Modal group box, `isSessionGroup: true`). */
6080
7169
  export type MachineView = {
6081
7170
  sandboxId: string;
6082
7171
  enrollmentId: string | null;
7172
+ scope: ResourceAuthorityScope;
7173
+ generation: number;
6083
7174
  name: string;
6084
7175
  kind: MachineKind;
6085
7176
  state: MachineState;
@@ -6098,6 +7189,14 @@ export type MachineView = {
6098
7189
  allowScreenControl: boolean;
6099
7190
  sharedSessionCount: number;
6100
7191
  lastSeenAt: string | null;
7192
+ /** Secret-free single-runner authority diagnostics. */
7193
+ connectionAuthority: MachineConnectionAuthority;
7194
+ /** Exact build/update truth. Null means the runner predates runtime Hello
7195
+ * reporting or this is a managed-session group without a connected agent. */
7196
+ runtime: MachineRuntime | null;
7197
+ /** Explicit per-enrollment command memory policy. Null only for managed
7198
+ * session boxes; null limits on a real machine mean unrestricted. */
7199
+ operationPolicy: MachineOperationPolicy | null;
6101
7200
  metrics: MetricSample | null;
6102
7201
  };
6103
7202
 
@@ -6179,6 +7278,7 @@ export type SwapActiveSandboxResponse = {
6179
7278
 
6180
7279
  /** Mirror of `@opengeni/contracts` EnrollmentOs. */
6181
7280
  export type EnrollmentOs = "linux" | "macos" | "windows";
7281
+ export type ResourceAuthorityScope = "organization" | "workspace" | "user";
6182
7282
 
6183
7283
  /** POST /v1/enrollments/device/lookup body. */
6184
7284
  export type DeviceEnrollmentLookupRequest = {
@@ -6206,6 +7306,7 @@ export type DeviceEnrollmentLookupResponse = {
6206
7306
  export type DeviceEnrollmentApproveRequest = {
6207
7307
  userCode: string;
6208
7308
  allowScreenControl?: boolean;
7309
+ scope?: ResourceAuthorityScope;
6209
7310
  };
6210
7311
 
6211
7312
  /** POST /v1/workspaces/:ws/enrollments/device/approve response. */