@opengeni/sdk 0.48.0 → 0.57.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 (122) hide show
  1. package/README.md +147 -1
  2. package/dist/artifact-client.d.ts +20 -2
  3. package/dist/artifacts.d.ts +4 -0
  4. package/dist/artifacts.js +11 -0
  5. package/dist/artifacts.js.map +1 -0
  6. package/dist/{chunk-V5F253OG.js → chunk-GU6JF75T.js} +6 -3
  7. package/dist/chunk-GU6JF75T.js.map +1 -0
  8. package/dist/chunk-HJ3HHUT5.js +222 -0
  9. package/dist/chunk-HJ3HHUT5.js.map +1 -0
  10. package/dist/{chunk-KIHGPM7H.js → chunk-JDLDDRNE.js} +20 -14
  11. package/dist/chunk-JDLDDRNE.js.map +1 -0
  12. package/dist/chunk-JRPFWI6T.js +128 -0
  13. package/dist/chunk-JRPFWI6T.js.map +1 -0
  14. package/dist/{chunk-MBGBLVUV.js → chunk-PKQ377ED.js} +1725 -555
  15. package/dist/chunk-PKQ377ED.js.map +1 -0
  16. package/dist/chunk-ST5DDKJP.js +987 -0
  17. package/dist/chunk-ST5DDKJP.js.map +1 -0
  18. package/dist/chunk-VWE2QIVO.js +1162 -0
  19. package/dist/chunk-VWE2QIVO.js.map +1 -0
  20. package/dist/chunk-VYCTL62C.js +230 -0
  21. package/dist/chunk-VYCTL62C.js.map +1 -0
  22. package/dist/{chunk-DXDL7EEW.js → chunk-YKZME56C.js} +197 -113
  23. package/dist/chunk-YKZME56C.js.map +1 -0
  24. package/dist/client.d.ts +240 -16
  25. package/dist/codex-realtime-controller.d.ts +9 -6
  26. package/dist/codex-realtime-controller.js +2 -2
  27. package/dist/codex-realtime-lifecycle.d.ts +1 -1
  28. package/dist/codex-realtime-v3.d.ts +3 -3
  29. package/dist/codex-realtime.d.ts +1 -1
  30. package/dist/company-profile.d.ts +100 -0
  31. package/dist/core.d.ts +5 -5
  32. package/dist/core.js +10 -5
  33. package/dist/desktop.d.ts +9 -1
  34. package/dist/editable-artifact-resources.d.ts +96 -0
  35. package/dist/editable-artifacts/browser-session.d.ts +35 -0
  36. package/dist/editable-artifacts/controller.d.ts +60 -0
  37. package/dist/editable-artifacts/errors.d.ts +23 -0
  38. package/dist/editable-artifacts/http-live-transport.d.ts +46 -0
  39. package/dist/editable-artifacts/index.d.ts +19 -0
  40. package/dist/editable-artifacts/pool.d.ts +15 -0
  41. package/dist/editable-artifacts/session.d.ts +96 -0
  42. package/dist/editable-artifacts/storage.d.ts +72 -0
  43. package/dist/editable-artifacts/types.d.ts +416 -0
  44. package/dist/editable-artifacts/worker/browser-client.d.ts +80 -0
  45. package/dist/editable-artifacts/worker/browser-entry.d.ts +6 -0
  46. package/dist/editable-artifacts/worker/kernel-adapter.d.ts +45 -0
  47. package/dist/editable-artifacts/worker/rpc-protocol.d.ts +92 -0
  48. package/dist/editable-artifacts/worker/runtime.d.ts +66 -0
  49. package/dist/editable-artifacts/worker/wire-codec.d.ts +52 -0
  50. package/dist/editable-artifacts-worker.d.ts +8 -0
  51. package/dist/editable-artifacts-worker.js +1708 -0
  52. package/dist/editable-artifacts-worker.js.map +1 -0
  53. package/dist/editable-artifacts.d.ts +6 -0
  54. package/dist/editable-artifacts.js +5954 -0
  55. package/dist/editable-artifacts.js.map +1 -0
  56. package/dist/gateway-realtime-transport.d.ts +2 -1
  57. package/dist/gateway-realtime-transport.js +5 -3
  58. package/dist/index.d.ts +45 -35
  59. package/dist/index.js +134 -64
  60. package/dist/index.js.map +1 -1
  61. package/dist/interaction-revision-stream.d.ts +11 -0
  62. package/dist/interaction.d.ts +1484 -0
  63. package/dist/interaction.js +81 -0
  64. package/dist/interaction.js.map +1 -0
  65. package/dist/memory-slack-client.d.ts +13 -0
  66. package/dist/memory-slack-delivery.d.ts +99 -0
  67. package/dist/memory-slack.d.ts +4 -0
  68. package/dist/memory-slack.js +44 -0
  69. package/dist/memory-slack.js.map +1 -0
  70. package/dist/proxy.d.ts +3 -3
  71. package/dist/realtime.d.ts +14 -14
  72. package/dist/realtime.js +11 -7
  73. package/dist/realtime.js.map +1 -1
  74. package/dist/retained-artifacts.d.ts +12 -0
  75. package/dist/stream.d.ts +1 -1
  76. package/dist/terminal.d.ts +1 -1
  77. package/dist/types.d.ts +1347 -34
  78. package/dist/workspace-control-stream.d.ts +2 -2
  79. package/dist/workspace-live-stream.d.ts +14 -0
  80. package/dist/workspace-state.d.ts +1 -1
  81. package/package.json +29 -3
  82. package/src/artifact-client.ts +129 -0
  83. package/src/artifacts.ts +17 -0
  84. package/src/client.ts +3022 -910
  85. package/src/codex-realtime-controller.ts +25 -7
  86. package/src/codex-realtime-lifecycle.ts +1 -0
  87. package/src/company-profile.ts +92 -0
  88. package/src/desktop.ts +11 -1
  89. package/src/editable-artifact-resources.ts +119 -0
  90. package/src/editable-artifacts/browser-session.ts +176 -0
  91. package/src/editable-artifacts/controller.ts +2632 -0
  92. package/src/editable-artifacts/errors.ts +52 -0
  93. package/src/editable-artifacts/http-live-transport.ts +1449 -0
  94. package/src/editable-artifacts/index.ts +175 -0
  95. package/src/editable-artifacts/pool.ts +81 -0
  96. package/src/editable-artifacts/session.ts +778 -0
  97. package/src/editable-artifacts/storage.ts +1718 -0
  98. package/src/editable-artifacts/types.ts +499 -0
  99. package/src/editable-artifacts/worker/browser-client.ts +1167 -0
  100. package/src/editable-artifacts/worker/browser-entry.ts +57 -0
  101. package/src/editable-artifacts/worker/kernel-adapter.ts +1039 -0
  102. package/src/editable-artifacts/worker/rpc-protocol.ts +622 -0
  103. package/src/editable-artifacts/worker/runtime.ts +1204 -0
  104. package/src/editable-artifacts/worker/wire-codec.ts +852 -0
  105. package/src/editable-artifacts-worker.ts +8 -0
  106. package/src/editable-artifacts.ts +6 -0
  107. package/src/errors.ts +16 -2
  108. package/src/gateway-realtime-transport.ts +252 -109
  109. package/src/index.ts +215 -1
  110. package/src/interaction-revision-stream.ts +117 -0
  111. package/src/interaction.ts +2874 -0
  112. package/src/memory-slack-client.ts +71 -0
  113. package/src/memory-slack-delivery.ts +128 -0
  114. package/src/memory-slack.ts +19 -0
  115. package/src/realtime.ts +14 -4
  116. package/src/retained-artifacts.ts +326 -0
  117. package/src/types.ts +1636 -52
  118. package/src/workspace-live-stream.ts +137 -0
  119. package/dist/chunk-DXDL7EEW.js.map +0 -1
  120. package/dist/chunk-KIHGPM7H.js.map +0 -1
  121. package/dist/chunk-MBGBLVUV.js.map +0 -1
  122. package/dist/chunk-V5F253OG.js.map +0 -1
package/src/types.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import type { WorkspaceTranscriptionPolicy } from "./transcription";
2
2
 
3
3
  // Hand-written mirrors of the public wire shapes in `@opengeni/contracts`.
4
- // The SDK keeps zero runtime dependencies so it stays framework-agnostic and
5
- // publishable on its own; `test/contract-parity.test.ts` pins these types to
6
- // the contracts package so drift fails the gate instead of shipping.
4
+ // Ordinary SDK entries stay framework-agnostic and do not import the contracts
5
+ // runtime; `test/contract-parity.test.ts` pins these types to the contracts
6
+ // package so drift fails the gate instead of shipping.
7
7
 
8
8
  export type CodexRealtimeWebrtcVersion = "v3";
9
9
  export type CodexRealtimeVoice =
@@ -148,6 +148,7 @@ export type SyncSessionRealtimeLedgerResponse = {
148
148
 
149
149
  export type SessionRealtimeModel =
150
150
  | "gpt-live-1-boulder-alpha"
151
+ | "supergrok/grok-voice-think-fast-2.0"
151
152
  | "opengeni-gateway/openai/gpt-realtime-2.1"
152
153
  | "opengeni-gateway/openai/gpt-realtime-mini"
153
154
  | "opengeni-gateway/xai/grok-voice-think-fast-2.0"
@@ -158,7 +159,7 @@ export type SessionRealtimeModel =
158
159
  export type WorkspaceRealtimeModelCatalogItem = {
159
160
  id: SessionRealtimeModel;
160
161
  label: string;
161
- provider: "OpenGeni" | "Connected Codex" | "Your Gateway";
162
+ provider: "OpenGeni" | "Connected Codex" | "Connected SuperGrok" | "Your Gateway";
162
163
  description: string;
163
164
  available: boolean;
164
165
  unavailableReason: string | null;
@@ -282,11 +283,12 @@ export type SessionCapabilities = {
282
283
  reason: CapabilityUnavailableReason | null;
283
284
  };
284
285
  Terminal: {
285
- transport: "sse-events" | "pty-ws" | null;
286
+ transport: "sse-events" | "pty-ws" | "relay-pty" | null;
286
287
  ptyCapable: boolean;
287
288
  shell: string;
288
289
  url: string | null;
289
290
  token: string | null;
291
+ expiresAt: string | null;
290
292
  reason: CapabilityUnavailableReason | null;
291
293
  };
292
294
  Git: {
@@ -343,8 +345,8 @@ export type ComputerUseCapability = SessionCapabilities["ComputerUse"];
343
345
  // the capability-gated client (`@opengeni/react`) drives. The desktop pixel
344
346
  // plane rides Channel B (direct-to-provider noVNC); the structured terminal/
345
347
  // files/git surfaces ride Channel A (the existing event spine + the synchronous
346
- // fs/git/terminal point queries above). These are TYPES only (the SDK keeps zero
347
- // runtime deps); the contract-parity test pins them.
348
+ // fs/git/terminal point queries above). These are TYPES only, so ordinary SDK
349
+ // entries do not reach the contracts runtime; the contract-parity test pins them.
348
350
 
349
351
  // Mirror of `@opengeni/contracts` StreamUrlRotatedPayload — the Channel-A event
350
352
  // the client folds in to hot-swap its noVNC socket on a box rollover, fenced on
@@ -374,12 +376,14 @@ export type StreamRevokedPayload = {
374
376
 
375
377
  // Mirror of `@opengeni/contracts` AttachViewerRequest. Omitting `viewerId` mints
376
378
  // a fresh holder id (returned on the response, carried through heartbeat/detach).
377
- // `desktop:true` opts into the un-redacted pixel plane (the consent-gated noVNC
378
- // stream); a terminal/files-only warm attach omits it (defaults false) so it
379
- // warms the box + mints the pty-ws terminal cell WITHOUT tripping the consent 409.
379
+ // Plane flags are exact: credentials are minted only for the requested live
380
+ // surfaces and each surface enforces its own permission. An omitted plane set is
381
+ // retained as the legacy terminal-only request; current clients send all flags.
380
382
  export type AttachViewerRequest = {
381
383
  viewerId?: string | undefined;
382
384
  desktop?: boolean | undefined;
385
+ terminal?: boolean | undefined;
386
+ files?: boolean | undefined;
383
387
  };
384
388
 
385
389
  // Mirror of `@opengeni/contracts` ViewerHolder + the P4.2 desktop-stream fields
@@ -402,8 +406,8 @@ export type AttachViewerResponse = ViewerHolder & {
402
406
  streamToken: string | null;
403
407
  streamExpiresAt: string | null;
404
408
  resolution: [number, number] | null;
405
- transport: "vnc-ws" | null;
406
- client: "novnc" | null;
409
+ transport: "vnc-ws" | "relay-frames" | null;
410
+ client: "novnc" | "frames" | null;
407
411
  // The scoped ttyd PTY-over-websocket address minted for THIS holder — the REAL
408
412
  // interactive terminal, symmetric with the desktop pixel plane (same Modal
409
413
  // tunnel, same scoped stream token). Populated on a warm box; null when the
@@ -412,7 +416,8 @@ export type AttachViewerResponse = ViewerHolder & {
412
416
  // `terminalTransport` is "pty-ws" iff a live `terminalUrl` was minted.
413
417
  terminalUrl: string | null;
414
418
  terminalToken: string | null;
415
- terminalTransport: "pty-ws" | null;
419
+ terminalExpiresAt: string | null;
420
+ terminalTransport: "pty-ws" | "relay-pty" | null;
416
421
  };
417
422
 
418
423
  // Mirror of `@opengeni/contracts` AcknowledgeStreamRequest/Response — the
@@ -461,7 +466,7 @@ export type RepositoryResourceRef = {
461
466
  githubRepositoryId?: number | undefined;
462
467
  };
463
468
 
464
- /** Value mirror of `@opengeni/contracts`; parity-tested without adding an SDK runtime dependency. */
469
+ /** Value mirror of `@opengeni/contracts`; parity-tested without importing it from ordinary SDK entries. */
465
470
  export const DEFAULT_FILE_RESOURCE_MOUNT_ROOT = ".opengeni/files" as const;
466
471
 
467
472
  export type FileResourceRef = {
@@ -523,6 +528,7 @@ export type GoalSpec = {
523
528
  text: string;
524
529
  successCriteria?: string | undefined;
525
530
  maxAutoContinuations?: number | undefined;
531
+ mutationPolicy?: SessionGoalMutationPolicy | undefined;
526
532
  };
527
533
 
528
534
  export type SessionMcpServerInput = {
@@ -636,11 +642,55 @@ export type OpenGeniSlackBotInstallRequest = {
636
642
  connectionId?: string | undefined;
637
643
  };
638
644
 
645
+ export type FikenInstallRequest = {
646
+ apiToken: string;
647
+ defaultCompanySlug?: string | undefined;
648
+ /** Existing Fiken connection to rewrite in place (reconnect). */
649
+ connectionId?: string | undefined;
650
+ };
651
+
652
+ export type FikenOAuthStartRequest = {
653
+ /** Existing Fiken connection to re-authorize in place (reconnect). */
654
+ connectionId?: string | undefined;
655
+ };
656
+
657
+ export type FikenOAuthStartResponse = {
658
+ authorizationUrl: string;
659
+ expiresAt: string;
660
+ };
661
+
639
662
  export type OpenGeniSlackBotInstallStart = {
640
663
  authorizationUrl: string;
641
664
  expiresAt: string;
642
665
  };
643
666
 
667
+ export type SlackInstallationBindingState = "active" | "quarantined";
668
+
669
+ export type SlackInstallationBinding = {
670
+ id: string;
671
+ accountId: string;
672
+ accountName: string;
673
+ workspaceId: string;
674
+ workspaceName: string;
675
+ connectionId: string;
676
+ connectionStatus: ConnectionStatus;
677
+ connectionVersion: number;
678
+ slackTeamId: string;
679
+ slackTeamName: string;
680
+ botId: string;
681
+ botUserId: string;
682
+ botDisplayName: "OpenGeni";
683
+ state: SlackInstallationBindingState;
684
+ quarantineReason: string | null;
685
+ version: number;
686
+ createdAt: string;
687
+ updatedAt: string;
688
+ };
689
+
690
+ export type ListSlackInstallationBindingsResponse = {
691
+ bindings: SlackInstallationBinding[];
692
+ };
693
+
644
694
  export type GoogleDriveTargetScope = "user" | "workspace" | "organization";
645
695
  export type ConnectorDocumentDestinationAuthority = "organization" | "workspace" | "personal";
646
696
  export type ConnectorDocumentDestinationSelection = {
@@ -680,13 +730,15 @@ export type GoogleDriveSelectedSource = {
680
730
  /** @deprecated Missing destinations resolve to the current workspace boundary. */
681
731
  targetScope?: GoogleDriveTargetScope | undefined;
682
732
  syncCadence: GoogleDriveSyncCadence;
733
+ syncEnabled: boolean;
734
+ configGeneration: number;
683
735
  readPolicy: GoogleDriveReadPolicy;
684
736
  selectedAt: string;
685
737
  };
686
738
 
687
739
  export type GoogleDriveConnectionMetadata = {
688
740
  credentialRole: "google_drive_metadata";
689
- credentialLabel: "Google Drive metadata browser";
741
+ credentialLabel: "Google Drive read-only source sync" | "Google Drive metadata browser";
690
742
  googlePermissionId: string;
691
743
  googleEmail: string;
692
744
  googleDisplayName: string | null;
@@ -739,15 +791,124 @@ export type GoogleDriveBrowseResponse = {
739
791
  incompleteSearch: boolean;
740
792
  };
741
793
 
794
+ export type AtlassianSourceKind = "jira_project" | "confluence_space";
795
+ export type AtlassianSyncCadence = "manual" | "hourly" | "daily";
796
+ export type AtlassianReadPolicy = "allow" | "ask" | "block";
797
+ export type AtlassianConnectionLifecycle = {
798
+ state:
799
+ | "active"
800
+ | "paused"
801
+ | "token_revoked"
802
+ | "app_removed"
803
+ | "disconnected"
804
+ | "reconnect_required"
805
+ | "reconsent_required";
806
+ recoverable: boolean;
807
+ observedAt: string;
808
+ };
809
+ export type AtlassianSelectedSource = {
810
+ id: string;
811
+ cloudId: string;
812
+ siteName: string;
813
+ siteUrl: string;
814
+ resourceId: string;
815
+ key: string;
816
+ name: string;
817
+ kind: AtlassianSourceKind;
818
+ destination?: ConnectorDocumentDestination | undefined;
819
+ syncCadence: AtlassianSyncCadence;
820
+ syncEnabled: boolean;
821
+ configGeneration: number;
822
+ readPolicy: AtlassianReadPolicy;
823
+ selectedAt: string;
824
+ };
825
+ export type AtlassianConnectionMetadata = {
826
+ credentialRole: "atlassian_knowledge";
827
+ credentialLabel: "Atlassian read-only knowledge sync";
828
+ atlassianAccountId: string;
829
+ displayName: string;
830
+ email?: string | null | undefined;
831
+ sites: Array<{
832
+ cloudId: string;
833
+ name: string;
834
+ url: string;
835
+ products: Array<"jira" | "confluence">;
836
+ }>;
837
+ verifiedAt: string;
838
+ accessMode: "readonly";
839
+ lifecycle?: AtlassianConnectionLifecycle | undefined;
840
+ documentDestination?: ConnectorDocumentDestination | undefined;
841
+ selectedSources: AtlassianSelectedSource[];
842
+ [key: string]: unknown;
843
+ };
844
+ export type AtlassianOAuthStartResponse = {
845
+ authorizationUrl: string;
846
+ expiresAt: string;
847
+ };
848
+ export type AtlassianLifecycleActionRequest = {
849
+ action: "pause" | "resume";
850
+ expectedVersion: number;
851
+ };
852
+ export type AtlassianDisconnectRequest = {
853
+ expectedVersion: number;
854
+ idempotencyKey: string;
855
+ };
856
+ export type AtlassianBrowseItem = {
857
+ id: string;
858
+ cloudId: string;
859
+ siteName: string;
860
+ siteUrl: string;
861
+ resourceId: string;
862
+ key: string;
863
+ name: string;
864
+ kind: AtlassianSourceKind;
865
+ description: string | null;
866
+ webUrl: string;
867
+ };
868
+ export type AtlassianBrowseResponse = {
869
+ connection: ConnectionMetadata;
870
+ items: AtlassianBrowseItem[];
871
+ };
872
+
742
873
  export type SaveGoogleDriveSourceRequest = {
743
874
  sources: Array<Pick<GoogleDriveBrowseItem, "id" | "name" | "mimeType" | "driveId">>;
744
875
  destination?: ConnectorDocumentDestinationSelection | undefined;
745
876
  /** @deprecated Legacy requests resolve to workspace authority. */
746
877
  targetScope?: GoogleDriveTargetScope | undefined;
747
878
  syncCadence: GoogleDriveSyncCadence;
879
+ syncEnabled: boolean;
880
+ readPolicy: GoogleDriveReadPolicy;
881
+ };
882
+
883
+ export type GoogleDriveKnowledgeSourceItem = {
884
+ id: string;
885
+ name: string;
886
+ mimeType: string;
887
+ driveId?: string | undefined;
888
+ sourceKind: "my_drive" | "shared_drive" | "folder";
889
+ includeDescendants: boolean;
890
+ };
891
+
892
+ export type GoogleDriveKnowledgeSourceDestination = {
893
+ authorityKind: ConnectorDocumentDestinationAuthority;
894
+ authorityAccountId: string;
895
+ authorityWorkspaceId?: string | undefined;
896
+ authoritySubjectId?: string | undefined;
897
+ collectionId?: string | undefined;
898
+ };
899
+
900
+ export type GoogleDriveKnowledgeSourceConfig = {
901
+ sources: GoogleDriveKnowledgeSourceItem[];
902
+ destination: GoogleDriveKnowledgeSourceDestination;
903
+ syncCadence: GoogleDriveSyncCadence;
748
904
  readPolicy: GoogleDriveReadPolicy;
749
905
  };
750
906
 
907
+ export type SaveGoogleDriveIntegrationSourceRequest = SaveGoogleDriveSourceRequest & {
908
+ expectedVersion?: number | undefined;
909
+ idempotencyKey: string;
910
+ };
911
+
751
912
  export type UpdateConnectionRequest = {
752
913
  providerDomain?: string | undefined;
753
914
  subjectId?: string | null | undefined;
@@ -892,6 +1053,8 @@ export type Session = {
892
1053
  // rig-less session. Frozen at create; a later rig promote never moves them.
893
1054
  rigId: string | null;
894
1055
  rigVersionId: string | null;
1056
+ /** Workspace channel the session is filed under; null = unfiled (inbox). */
1057
+ channelId: string | null;
895
1058
  firstPartyMcpPermissions: string[] | null;
896
1059
  firstPartyMcpTools: FirstPartyMcpToolName[];
897
1060
  mcpServers: SessionMcpServerMetadata[];
@@ -960,6 +1123,51 @@ export type SessionListResponse = {
960
1123
  nextCursor: string | null;
961
1124
  };
962
1125
 
1126
+ /** Compact, bounded session projection for workspace agent-topology browsers. */
1127
+ export type AgentTopologySession = {
1128
+ id: string;
1129
+ title: string | null;
1130
+ titleTruncated: boolean;
1131
+ parentSessionId: string | null;
1132
+ rootSessionId: string;
1133
+ nestedAgentDepth: number;
1134
+ ancestorPath: Array<{
1135
+ id: string;
1136
+ title: string | null;
1137
+ titleTruncated: boolean;
1138
+ }>;
1139
+ status: SessionStatus;
1140
+ pause: {
1141
+ state: "active" | "paused";
1142
+ additionalBlockerCount: number;
1143
+ source: {
1144
+ kind: "session" | "workspace";
1145
+ sessionId?: string | undefined;
1146
+ displayName: string;
1147
+ displayNameTruncated: boolean;
1148
+ } | null;
1149
+ };
1150
+ children: {
1151
+ directChildren: number;
1152
+ totalDescendants: number;
1153
+ runningDescendants: number;
1154
+ queuedDescendants: number;
1155
+ attentionDescendants: number;
1156
+ pausedDescendants: number;
1157
+ failedDescendants: number;
1158
+ truncated: boolean;
1159
+ };
1160
+ createdAt: string;
1161
+ updatedAt: string;
1162
+ };
1163
+
1164
+ export type AgentTopologyPageResponse = {
1165
+ sessions: AgentTopologySession[];
1166
+ total: number;
1167
+ hasMore: boolean;
1168
+ nextCursor: string | null;
1169
+ };
1170
+
963
1171
  export type UpdateSessionPinRequest = {
964
1172
  pinned: boolean;
965
1173
  expectedVersion?: number;
@@ -996,6 +1204,39 @@ export type SessionTurnSource =
996
1204
  | "system"
997
1205
  | "compaction";
998
1206
 
1207
+ export type TimelineAnnotationSourceKind = "user_message" | "assistant_message" | "tool_output";
1208
+
1209
+ export type TimelineAnnotationSourceEventType =
1210
+ | "user.message"
1211
+ | "agent.message.completed"
1212
+ | "agent.toolCall.output";
1213
+
1214
+ export type TimelineAnnotationSource = {
1215
+ kind: TimelineAnnotationSourceKind;
1216
+ eventId: string;
1217
+ eventType: TimelineAnnotationSourceEventType;
1218
+ sequence: number;
1219
+ turnId: string | null;
1220
+ startOffset: number;
1221
+ endOffset: number;
1222
+ contextBefore: string;
1223
+ contextAfter: string;
1224
+ label?: string | undefined;
1225
+ };
1226
+
1227
+ export type DraftTimelineAnnotation = {
1228
+ id: string;
1229
+ source: TimelineAnnotationSource;
1230
+ quote: string;
1231
+ note: string;
1232
+ };
1233
+
1234
+ export type SubmittedTimelineAnnotation = DraftTimelineAnnotation;
1235
+
1236
+ export type TimelineAnnotation = DraftTimelineAnnotation & {
1237
+ ordinal: number;
1238
+ };
1239
+
999
1240
  export type SessionTurn = {
1000
1241
  id: string;
1001
1242
  workspaceId: string;
@@ -1006,6 +1247,7 @@ export type SessionTurn = {
1006
1247
  source: SessionTurnSource;
1007
1248
  position: number;
1008
1249
  prompt: string;
1250
+ annotations?: TimelineAnnotation[] | undefined;
1009
1251
  resources: ResourceRef[];
1010
1252
  tools: ToolRef[];
1011
1253
  toolsProvided?: boolean | undefined;
@@ -1136,6 +1378,9 @@ export const SESSION_EVENT_TYPES = [
1136
1378
  "artifact.created",
1137
1379
  "goal.set",
1138
1380
  "goal.updated",
1381
+ "goal.progress",
1382
+ "goal.rewrite.proposed",
1383
+ "goal.rewrite.rejected",
1139
1384
  "goal.completed",
1140
1385
  "goal.paused",
1141
1386
  "goal.resumed",
@@ -1175,6 +1420,7 @@ export const SESSION_EVENT_TYPES = [
1175
1420
  "terminal.pty.output.delta",
1176
1421
  "terminal.pty.exited",
1177
1422
  "session.title_set",
1423
+ "session.visibility.changed",
1178
1424
  "session.mcp.approval_policy.updated",
1179
1425
  "session.tool_policy.updated",
1180
1426
  // Multi-account Codex (P1): the session's inference account changed.
@@ -1373,6 +1619,17 @@ export type ToolAuthNeededPayload = {
1373
1619
  selectedResources?: Array<{ id: string; kind: "repository" }> | undefined;
1374
1620
  authorizationUrl?: string | undefined;
1375
1621
  subjectId?: string | null | undefined;
1622
+ capability?:
1623
+ | {
1624
+ id: string;
1625
+ name: string;
1626
+ kind: CapabilityKind;
1627
+ source: CapabilitySource;
1628
+ action: "connect" | "add_credentials" | "enable";
1629
+ rationale: string;
1630
+ requiredVariables: string[];
1631
+ }
1632
+ | undefined;
1376
1633
  };
1377
1634
 
1378
1635
  // Payload shapes for the high-traffic event types. `SessionEvent.payload` is
@@ -1471,9 +1728,10 @@ export type CodexFleetDecisionEventPayload = {
1471
1728
  } & Record<string, unknown>;
1472
1729
  };
1473
1730
 
1474
- // Recording payloads (P4.3 — plain TS mirror of the contracts Zod schemas; the
1475
- // SDK is zero-runtime-dep so these are TYPES, not Zod, F15). The contract-parity
1476
- // test asserts the event-type literals; these shapes document the wire payloads.
1731
+ // Recording payloads (P4.3 — plain TS mirror of the contracts Zod schemas).
1732
+ // These are TYPES, not Zod (F15), so ordinary SDK entries remain runtime-clean.
1733
+ // The contract-parity test asserts the event-type literals; these shapes
1734
+ // document the wire payloads.
1477
1735
  export type RecordingMode = "manual" | "on-turn" | "on-verify";
1478
1736
  export type RecordingCodec = "h264-mp4" | "vp9-webm";
1479
1737
  export type RecordingContentType = "video/mp4" | "video/webm";
@@ -1653,6 +1911,9 @@ export type GitStatusRequest = { path?: string };
1653
1911
  export type GitStatusResponse = {
1654
1912
  isRepo: boolean;
1655
1913
  head: string | null;
1914
+ /** Exact commit object identity. null for unborn/non-repositories; absent on
1915
+ * legacy adapters. */
1916
+ headOid?: string | null | undefined;
1656
1917
  detached: boolean;
1657
1918
  upstream: string | null;
1658
1919
  ahead: number;
@@ -1761,6 +2022,9 @@ export type WorkspaceCaptureFile = {
1761
2022
  export type WorkspaceCaptureRepo = {
1762
2023
  root: string;
1763
2024
  head: string | null;
2025
+ /** Exact HEAD commit object identity. null for unborn repositories; absent
2026
+ * on legacy captures. */
2027
+ headOid?: string | null | undefined;
1764
2028
  detached: boolean;
1765
2029
  upstream: string | null;
1766
2030
  ahead: number;
@@ -1904,6 +2168,7 @@ export type ScheduledTaskDayOfWeek =
1904
2168
  | "SATURDAY";
1905
2169
 
1906
2170
  export type ScheduledTaskScheduleSpec =
2171
+ | { type: "manual" }
1907
2172
  | { type: "once"; runAt: string; timeZone: string }
1908
2173
  | {
1909
2174
  type: "interval";
@@ -1932,6 +2197,44 @@ export type ScheduledTaskAgentConfig = {
1932
2197
  maxNestedAgentDepth?: number | undefined;
1933
2198
  };
1934
2199
 
2200
+ export type ScopedKnowledgeScope =
2201
+ | { kind: "organization"; workspaceId: null; subjectId: null }
2202
+ | { kind: "workspace"; workspaceId: string; subjectId: null }
2203
+ | { kind: "personal"; workspaceId: string | null; subjectId: string };
2204
+
2205
+ export type KnowledgeSourceSyncLimits = {
2206
+ maxItems: number;
2207
+ maxBytes: number;
2208
+ maxFileBytes: number;
2209
+ maxProviderRequests: number;
2210
+ maxElapsedSeconds: number;
2211
+ maxConcurrency: number;
2212
+ maxFailureDetails: number;
2213
+ };
2214
+
2215
+ export type ScheduledTaskAction =
2216
+ | { kind: "agent_turn" }
2217
+ | {
2218
+ kind: "knowledge_source_sync";
2219
+ sourceId: string;
2220
+ sourceGeneration: number;
2221
+ sourceLifecycleGeneration: number;
2222
+ sourceConfigGeneration: number;
2223
+ controlWorkspaceId: string;
2224
+ providerCoordinationKey: string;
2225
+ connection: {
2226
+ connectionId: string;
2227
+ connectionVersion: number;
2228
+ providerDomain: string;
2229
+ kind: ConnectionKind;
2230
+ ownerSubjectId: string;
2231
+ };
2232
+ destination: ScopedKnowledgeScope;
2233
+ initiatingSubjectId: string;
2234
+ allDescendants: boolean;
2235
+ limits: KnowledgeSourceSyncLimits;
2236
+ };
2237
+
1935
2238
  export type ScheduledTask = {
1936
2239
  id: string;
1937
2240
  accountId: string;
@@ -1942,6 +2245,7 @@ export type ScheduledTask = {
1942
2245
  temporalScheduleId: string;
1943
2246
  runMode: ScheduledTaskRunMode;
1944
2247
  overlapPolicy: ScheduledTaskOverlapPolicy;
2248
+ action: ScheduledTaskAction;
1945
2249
  agentConfig: ScheduledTaskAgentConfig;
1946
2250
  createdBy?: TurnInitiator | undefined;
1947
2251
  createdByContext?: TurnInitiatorContext | undefined;
@@ -2063,7 +2367,7 @@ export const KNOWN_PERMISSIONS = [
2063
2367
  "secrets:read",
2064
2368
  "secrets:write",
2065
2369
  "mcp_servers:attach",
2066
- "toolspace:call",
2370
+ "codemode:call",
2067
2371
  "goals:manage",
2068
2372
  "enrollments:read",
2069
2373
  "enrollments:manage",
@@ -2085,6 +2389,7 @@ export type FirstPartyMcpToolName =
2085
2389
  | "set_session_title"
2086
2390
  | "goal_set"
2087
2391
  | "goal_update"
2392
+ | "goal_progress"
2088
2393
  | "goal_complete"
2089
2394
  | "goal_pause"
2090
2395
  | "memory_search"
@@ -2092,13 +2397,15 @@ export type FirstPartyMcpToolName =
2092
2397
  | "memory_correct"
2093
2398
  | "preference_registry_summary"
2094
2399
  | "preference_registry_get"
2400
+ | "task_notes_list"
2401
+ | "task_note_save"
2402
+ | "task_note_archive"
2095
2403
  | "sandboxes_list"
2096
2404
  | "sandbox_attach"
2097
2405
  | "sandbox_swap"
2098
2406
  | "run_on"
2099
2407
  | "sandbox_provision"
2100
2408
  | "connected_machine_remove"
2101
- | "connected_machine_remove"
2102
2409
  | "rig_list"
2103
2410
  | "rig_get"
2104
2411
  | "rig_propose_change"
@@ -2113,11 +2420,31 @@ export type FirstPartyMcpToolName =
2113
2420
  | "session_resume"
2114
2421
  | "session_steer"
2115
2422
  | "set_other_session_title"
2423
+ | "interaction_discover"
2424
+ | "browser_open"
2425
+ | "browser_tabs"
2426
+ | "browser_observe"
2427
+ | "browser_act"
2428
+ | "browser_clipboard"
2429
+ | "browser_debug"
2430
+ | "browser_auth"
2431
+ | "interaction_request_human"
2432
+ | "browser_identity"
2433
+ | "browser_publish"
2434
+ | "browser_lifecycle"
2435
+ | "computer_open"
2436
+ | "computer_targets"
2437
+ | "computer_observe"
2438
+ | "computer_clipboard"
2439
+ | "computer_act"
2440
+ | "computer_lifecycle"
2116
2441
  | "variable_set_list"
2117
2442
  | "environment_list"
2118
2443
  | "variable_set_get_variable"
2119
2444
  | "variable_set_set_variable"
2120
2445
  | "environment_set_variable"
2446
+ | "capability_catalog_search"
2447
+ | "capability_authorization_request"
2121
2448
  | "github_connect_link"
2122
2449
  | "github_repositories_list"
2123
2450
  | "social_connections_list"
@@ -2128,6 +2455,18 @@ export type FirstPartyMcpToolName =
2128
2455
  | "social_thread_fetch"
2129
2456
  | "social_posts_sync"
2130
2457
  | "social_post_reply"
2458
+ | "x_accounts_list"
2459
+ | "x_search_live"
2460
+ | "x_mentions_live"
2461
+ | "x_thread_fetch"
2462
+ | "x_posts_sync"
2463
+ | "x_post_reply"
2464
+ | "reddit_accounts_list"
2465
+ | "reddit_search_live"
2466
+ | "reddit_mentions_live"
2467
+ | "reddit_thread_fetch"
2468
+ | "reddit_posts_sync"
2469
+ | "reddit_post_reply"
2131
2470
  | "scheduled_tasks_list"
2132
2471
  | "scheduled_tasks_get"
2133
2472
  | "scheduled_tasks_create"
@@ -2146,11 +2485,32 @@ export type FirstPartyMcpToolName =
2146
2485
  | "slack_bot_file_content"
2147
2486
  | "slack_bot_post_message"
2148
2487
  | "slack_bot_delete_message"
2488
+ | "fiken_companies_list"
2489
+ | "fiken_contacts_list"
2490
+ | "fiken_contact_create"
2491
+ | "fiken_products_list"
2492
+ | "fiken_invoices_list"
2493
+ | "fiken_invoice_get"
2494
+ | "fiken_invoice_draft_create"
2495
+ | "fiken_bank_accounts_list"
2496
+ | "fiken_purchases_list"
2497
+ | "fiken_sales_list"
2498
+ | "atlassian_sources_list"
2499
+ | "atlassian_search"
2500
+ | "atlassian_get"
2149
2501
  | "artifacts_list"
2150
2502
  | "artifacts_get_source"
2151
2503
  | "artifacts_create"
2152
2504
  | "artifacts_publish"
2153
- | "artifacts_rollback";
2505
+ | "artifacts_rollback"
2506
+ | "editable_artifact_list"
2507
+ | "editable_artifact_create"
2508
+ | "editable_artifact_import"
2509
+ | "editable_artifact_get"
2510
+ | "editable_artifact_inspect"
2511
+ | "editable_artifact_apply"
2512
+ | "editable_artifact_export"
2513
+ | "editable_artifact_export_status";
2154
2514
 
2155
2515
  export type ProductAccessMode = "local" | "configured" | "managed";
2156
2516
 
@@ -2197,7 +2557,7 @@ export type ModelCapabilitiesV1 = {
2197
2557
 
2198
2558
  export type ModelCredentialSourceV1 =
2199
2559
  | { kind: "deployment"; mechanism: "api_key" | "azure_ad_bearer" }
2200
- | { kind: "connected_subscription"; provider: "codex" }
2560
+ | { kind: "connected_subscription"; provider: "codex" | "xai" }
2201
2561
  | { kind: "workspace_connection"; mechanism: "api_key" };
2202
2562
 
2203
2563
  export type ModelBillingAttributionV1 = {
@@ -2237,7 +2597,7 @@ export type ClientModel = {
2237
2597
  provider: string;
2238
2598
  providerLabel: string;
2239
2599
  api: "responses" | "chat";
2240
- source?: "opengeni" | "codex" | "workspace_gateway" | undefined;
2600
+ source?: "opengeni" | "codex" | "supergrok" | "workspace_gateway" | undefined;
2241
2601
  contextWindowTokens?: number | undefined;
2242
2602
  schemaVersion?: 1 | undefined;
2243
2603
  aliases?: string[] | undefined;
@@ -2519,6 +2879,89 @@ export type CodexConnectPoll =
2519
2879
  isActive?: boolean;
2520
2880
  };
2521
2881
 
2882
+ /** Explicit authority of one connected SuperGrok/xAI subscription account. */
2883
+ export type SuperGrokAccountScope = "workspace" | "user";
2884
+
2885
+ /** Metadata-only connected SuperGrok account. Secret OAuth material never crosses the API. */
2886
+ export type SuperGrokAccount = {
2887
+ id: string;
2888
+ scope: SuperGrokAccountScope;
2889
+ subject: string;
2890
+ email?: string | null;
2891
+ label?: string | null;
2892
+ status: "active" | "needs_relogin" | "error";
2893
+ active: boolean;
2894
+ expiresAt?: string | null;
2895
+ lastRefreshAt?: string | null;
2896
+ lastError?: string | null;
2897
+ allocatorEnabled: boolean;
2898
+ allocatorVersion: number;
2899
+ allocatorUpdatedAt?: string | null;
2900
+ exhaustedUntil?: string | null;
2901
+ quota?: {
2902
+ usedPercent: number | null;
2903
+ periodStart: string | null;
2904
+ periodEnd: string | null;
2905
+ subscriptionTier: string | null;
2906
+ checkedAt: string | null;
2907
+ } | null;
2908
+ };
2909
+
2910
+ export type SuperGrokRotationSettings = {
2911
+ rotationEnabled: boolean;
2912
+ rotationStrategy: "sharded";
2913
+ activeCredentialId: string | null;
2914
+ };
2915
+
2916
+ /** GET /supergrok/accounts — visible accounts plus the workspace active pointer. */
2917
+ export type SuperGrokAccountsResponse = {
2918
+ accounts: SuperGrokAccount[];
2919
+ activeAccountId: string | null;
2920
+ settings: SuperGrokRotationSettings;
2921
+ };
2922
+
2923
+ export type SuperGrokConnectionStatus = {
2924
+ connected: boolean;
2925
+ valid?: boolean;
2926
+ accountCount?: number;
2927
+ models?: ClientModel[];
2928
+ activeAccount?: {
2929
+ id: string;
2930
+ label?: string | null;
2931
+ subject?: string | null;
2932
+ scope: SuperGrokAccountScope;
2933
+ } | null;
2934
+ };
2935
+
2936
+ /** Workspace is the deliberately simple/default connection authority. */
2937
+ export type SuperGrokConnectStart = {
2938
+ userCode: string;
2939
+ verificationUri: string;
2940
+ verificationUriComplete?: string | null;
2941
+ intervalSeconds: number;
2942
+ expiresInSeconds: number;
2943
+ scope: SuperGrokAccountScope;
2944
+ state: string;
2945
+ };
2946
+
2947
+ export type SuperGrokConnectPoll =
2948
+ | { status: "pending" | "slow_down"; intervalSeconds?: number }
2949
+ | { status: "expired" | "denied" }
2950
+ | {
2951
+ status: "connected";
2952
+ accountId: string;
2953
+ scope: SuperGrokAccountScope;
2954
+ isActive: boolean;
2955
+ email?: string | null;
2956
+ };
2957
+
2958
+ export type SuperGrokAllocatorUpdate = {
2959
+ allocatorEnabled: boolean;
2960
+ allocatorVersion: number;
2961
+ allocatorUpdatedAt: string | null;
2962
+ changed: boolean;
2963
+ };
2964
+
2522
2965
  /** Remaining usage/limits for one account. `usage` is the normalized P2 payload. */
2523
2966
  export type CodexUsage = {
2524
2967
  status: "ok" | "limit_reached" | "error" | "no-data";
@@ -2541,7 +2984,7 @@ export type ClientAuthConfig =
2541
2984
 
2542
2985
  // Kept value-identical to @opengeni/contracts and pinned by the SDK contract
2543
2986
  // parity suite. The SDK has no runtime dependency on the Zod contracts package.
2544
- export const OPENGENI_API_CONTRACT_REVISION = "2026-07-workspace-artifacts-v1" as const;
2987
+ export const OPENGENI_API_CONTRACT_REVISION = "2026-08-social-provider-tools-v1" as const;
2545
2988
  export const OPENGENI_API_CONTRACT_HEADER = "x-opengeni-api-contract" as const;
2546
2989
  /** Bounded request/response identifier shared by browser, ingress, and API diagnostics. */
2547
2990
  export const OPENGENI_CORRELATION_HEADER = "x-opengeni-correlation-id" as const;
@@ -2563,6 +3006,13 @@ export type ClientConfig = {
2563
3006
  defaultReasoningEffort: ReasoningEffort;
2564
3007
  allowedReasoningEfforts: ReasoningEffort[];
2565
3008
  mcpServers: { id: string; name: string }[];
3009
+ /** Deployment defaults and hard maximum for built-in OpenGeni session tools. */
3010
+ firstPartyMcpTools?:
3011
+ | {
3012
+ default: FirstPartyMcpToolName[];
3013
+ allowed: FirstPartyMcpToolName[];
3014
+ }
3015
+ | undefined;
2566
3016
  fileUploads: { enabled: boolean; maxSizeBytes: number };
2567
3017
  /** Native browser microphone capture + server-side transcription capability. */
2568
3018
  voiceInput?: ClientVoiceInputConfig | undefined;
@@ -2733,6 +3183,17 @@ export type AccessContext = {
2733
3183
  defaultWorkspaceId: string | null;
2734
3184
  };
2735
3185
 
3186
+ export type ManagedOrganizationMembership = {
3187
+ id: string;
3188
+ organizationId: string;
3189
+ status: "active";
3190
+ personalWorkspaceId: string;
3191
+ };
3192
+
3193
+ export type ListManagedOrganizationMembershipsResponse = {
3194
+ memberships: ManagedOrganizationMembership[];
3195
+ };
3196
+
2736
3197
  export type Workspace = {
2737
3198
  id: string;
2738
3199
  accountId: string;
@@ -2756,6 +3217,8 @@ export type Workspace = {
2756
3217
 
2757
3218
  export type WorkspaceSettings = {
2758
3219
  memoryEnabled?: boolean | undefined;
3220
+ /** Reversible Memory V1 prompt composition rollout. */
3221
+ memoryPromptMode?: "legacy_standing" | "retrieval_only" | undefined;
2759
3222
  voiceInput?: WorkspaceVoiceInputSettings | undefined;
2760
3223
  transcription?: WorkspaceTranscriptionPolicy | undefined;
2761
3224
  maxNestedAgentDepth?: number | null | undefined;
@@ -2769,7 +3232,7 @@ export type WorkspaceSettings = {
2769
3232
 
2770
3233
  export type WorkspaceSlackReactionSummonSettings = {
2771
3234
  enabled: boolean;
2772
- emoji: string;
3235
+ emoji: "genie";
2773
3236
  channelPolicy: { mode: "bot_member" } | { mode: "allowlist"; channelIds: string[] };
2774
3237
  };
2775
3238
 
@@ -2790,6 +3253,7 @@ export type WorkspaceVoiceInputSettings = {
2790
3253
 
2791
3254
  export type UpdateWorkspaceSettingsRequest = {
2792
3255
  memoryEnabled?: boolean | undefined;
3256
+ memoryPromptMode?: "legacy_standing" | "retrieval_only" | undefined;
2793
3257
  voiceInput?: WorkspaceVoiceInputSettings | undefined;
2794
3258
  transcription?: WorkspaceTranscriptionPolicy | undefined;
2795
3259
  maxNestedAgentDepth?: number | null | undefined;
@@ -2874,12 +3338,87 @@ export type UpdateWorkspaceMemberRequest = {
2874
3338
  permissions: Permission[];
2875
3339
  };
2876
3340
 
3341
+ export type SlackUserLinkAccessRequestStatus =
3342
+ | "prepared"
3343
+ | "pending"
3344
+ | "completed"
3345
+ | "denied"
3346
+ | "cancelled"
3347
+ | "expired";
3348
+
3349
+ /** Token-free durable projection of one signed Slack identity-link intent. */
3350
+ export type SlackUserLinkAccessRequest = {
3351
+ id: string;
3352
+ workspaceId: string;
3353
+ workspaceDisplayName: string | null;
3354
+ subjectLabel: string | null;
3355
+ status: SlackUserLinkAccessRequestStatus;
3356
+ version: number;
3357
+ expiresAt: string;
3358
+ requestedAt: string | null;
3359
+ decidedAt: string | null;
3360
+ completedAt: string | null;
3361
+ createdAt: string;
3362
+ updatedAt: string;
3363
+ };
3364
+
3365
+ export type PrepareSlackUserLinkAccessRequest = {
3366
+ linkToken: string;
3367
+ };
3368
+
3369
+ export type SlackUserLinkAccessMutationRequest = {
3370
+ expectedVersion: number;
3371
+ idempotencyKey: string;
3372
+ };
3373
+
3374
+ export type ApproveSlackUserLinkAccessRequest = SlackUserLinkAccessMutationRequest & {
3375
+ role?: string | undefined;
3376
+ permissions: Permission[];
3377
+ };
3378
+
3379
+ export type ListSlackUserLinkAccessRequestsResponse = {
3380
+ requests: SlackUserLinkAccessRequest[];
3381
+ };
3382
+
2877
3383
  // --- Goals -------------------------------------------------------------------
2878
3384
 
2879
3385
  export type SessionGoalStatus = "active" | "paused" | "completed";
2880
3386
 
2881
3387
  export type SessionGoalCreatedBy = "api" | "agent" | "scheduled_task";
2882
3388
 
3389
+ export type SessionGoalMutationPolicy =
3390
+ | "review_changes"
3391
+ | "preserve_intent"
3392
+ | "autonomous_adaptation";
3393
+
3394
+ export type SessionGoalChangeKind = "refinement" | "adaptation" | "replacement";
3395
+
3396
+ export type SessionGoalRevision = {
3397
+ id: string;
3398
+ accountId: string;
3399
+ workspaceId: string;
3400
+ sessionId: string;
3401
+ goalId: string;
3402
+ disposition: "applied" | "proposed" | "rejected";
3403
+ changeKind: SessionGoalChangeKind;
3404
+ baseObjectiveRevision: number;
3405
+ resultObjectiveRevision: number | null;
3406
+ text: string;
3407
+ successCriteria: string | null;
3408
+ mutationPolicy: SessionGoalMutationPolicy;
3409
+ rationale: string;
3410
+ actor: "agent" | "api" | "scheduled_task";
3411
+ actorTurnId: string | null;
3412
+ actorAttemptId: string | null;
3413
+ proposalId: string | null;
3414
+ createdAt: string;
3415
+ };
3416
+
3417
+ export type ApplySessionGoalRevisionRequest = {
3418
+ expectedObjectiveRevision: number;
3419
+ rationale?: string | undefined;
3420
+ };
3421
+
2883
3422
  export type SessionGoalContinuationState =
2884
3423
  | "inactive"
2885
3424
  | "scheduled"
@@ -2923,6 +3462,8 @@ export type SessionGoal = {
2923
3462
  pausedReason: string | null;
2924
3463
  createdBy: SessionGoalCreatedBy;
2925
3464
  version: number;
3465
+ objectiveRevision: number;
3466
+ mutationPolicy: SessionGoalMutationPolicy;
2926
3467
  autoContinuations: number;
2927
3468
  noProgressStreak: number;
2928
3469
  maxAutoContinuations: number | null;
@@ -2933,10 +3474,18 @@ export type SessionGoal = {
2933
3474
  updatedAt: string;
2934
3475
  };
2935
3476
 
2936
- export type UpdateSessionGoalRequest = {
2937
- status: "paused" | "active";
2938
- rationale?: string | undefined;
2939
- };
3477
+ export type UpdateSessionGoalRequest =
3478
+ | {
3479
+ status: "paused" | "active";
3480
+ rationale?: string | undefined;
3481
+ }
3482
+ | {
3483
+ text: string;
3484
+ successCriteria?: string | null | undefined;
3485
+ mutationPolicy?: SessionGoalMutationPolicy | undefined;
3486
+ rationale: string;
3487
+ expectedObjectiveRevision: number;
3488
+ };
2940
3489
 
2941
3490
  export type UpdateSessionRequest = {
2942
3491
  title: string;
@@ -3005,6 +3554,7 @@ export type SessionCommandReceipt = {
3005
3554
  export type ComposerDraft = {
3006
3555
  revision: number;
3007
3556
  text: string;
3557
+ annotations?: DraftTimelineAnnotation[] | undefined;
3008
3558
  resources: ResourceRef[];
3009
3559
  model: string;
3010
3560
  reasoningEffort: ReasoningEffort;
@@ -3068,7 +3618,8 @@ export type SessionSystemUpdateKind =
3068
3618
  | "goal_continuation"
3069
3619
  | "agent_message"
3070
3620
  | "agent_steer_instruction"
3071
- | "child_terminal_result";
3621
+ | "child_terminal_result"
3622
+ | "media_generation_result";
3072
3623
 
3073
3624
  export type SessionSystemUpdateState =
3074
3625
  | "pending"
@@ -3203,9 +3754,10 @@ export type ScheduledTaskAgentConfigInput = {
3203
3754
  maxNestedAgentDepth?: number | undefined;
3204
3755
  };
3205
3756
 
3206
- export type CreateScheduledTaskRequest = {
3757
+ export type CreateAgentScheduledTaskRequest = {
3207
3758
  name: string;
3208
3759
  schedule: ScheduledTaskScheduleSpec;
3760
+ action?: { kind: "agent_turn" } | undefined;
3209
3761
  runMode?: ScheduledTaskRunMode | undefined;
3210
3762
  targetSessionId?: string | null | undefined;
3211
3763
  overlapPolicy?: ScheduledTaskOverlapPolicy | undefined;
@@ -3219,12 +3771,26 @@ export type CreateScheduledTaskRequest = {
3219
3771
  metadata?: Record<string, unknown> | undefined;
3220
3772
  };
3221
3773
 
3774
+ export type CreateKnowledgeSourceSyncScheduledTaskRequest = {
3775
+ name: string;
3776
+ schedule: ScheduledTaskScheduleSpec;
3777
+ action: Extract<ScheduledTaskAction, { kind: "knowledge_source_sync" }>;
3778
+ overlapPolicy?: "skip" | "buffer_one" | undefined;
3779
+ status?: ScheduledTaskStatus | undefined;
3780
+ metadata?: Record<string, unknown> | undefined;
3781
+ };
3782
+
3783
+ export type CreateScheduledTaskRequest =
3784
+ | CreateAgentScheduledTaskRequest
3785
+ | CreateKnowledgeSourceSyncScheduledTaskRequest;
3786
+
3222
3787
  export type UpdateScheduledTaskRequest = {
3223
3788
  name?: string | undefined;
3224
3789
  schedule?: ScheduledTaskScheduleSpec | undefined;
3225
3790
  runMode?: ScheduledTaskRunMode | undefined;
3226
3791
  targetSessionId?: string | null | undefined;
3227
3792
  overlapPolicy?: ScheduledTaskOverlapPolicy | undefined;
3793
+ action?: ScheduledTaskAction | undefined;
3228
3794
  agentConfig?: ScheduledTaskAgentConfigInput | undefined;
3229
3795
  status?: ScheduledTaskStatus | undefined;
3230
3796
  variableSetId?: string | null | undefined;
@@ -3235,9 +3801,50 @@ export type UpdateScheduledTaskRequest = {
3235
3801
  metadata?: Record<string, unknown> | undefined;
3236
3802
  };
3237
3803
 
3238
- export type ScheduledTaskRunStatus = "queued" | "dispatched" | "failed";
3804
+ export type ScheduledTaskRunStatus = "queued" | "dispatched" | "succeeded" | "skipped" | "failed";
3805
+
3806
+ export type KnowledgeSourceSyncRunSummary = {
3807
+ phase: "queued" | "inventory" | "transfer" | "index" | "checkpoint" | "completed" | "failed";
3808
+ scanned: number;
3809
+ imported: number;
3810
+ unchanged: number;
3811
+ skipped: number;
3812
+ failed: number;
3813
+ bytes: number;
3814
+ providerRequests: number;
3815
+ elapsedMs: number;
3816
+ indexed: number;
3817
+ aclPending: number;
3818
+ retryable: boolean;
3819
+ limitReached: "items" | "bytes" | "file_bytes" | "provider_requests" | "elapsed_time" | null;
3820
+ checkpointed: boolean;
3821
+ reconnectRequired: boolean;
3822
+ failures: Array<{
3823
+ externalObjectId: string;
3824
+ code:
3825
+ | "authority_changed"
3826
+ | "connection_reconnect_required"
3827
+ | "provider_unavailable"
3828
+ | "provider_rejected"
3829
+ | "provider_payload_invalid"
3830
+ | "content_unsupported"
3831
+ | "content_too_large"
3832
+ | "resource_limit"
3833
+ | "item_processing_failed"
3834
+ | "indexing_failed"
3835
+ | "internal_failure";
3836
+ retryable: boolean;
3837
+ message: string;
3838
+ }>;
3839
+ };
3239
3840
 
3240
- export type ScheduledTaskTriggerType = "scheduled" | "manual";
3841
+ export type ScheduledTaskTriggerType =
3842
+ | "scheduled"
3843
+ | "manual"
3844
+ | "initial"
3845
+ | "provider_event"
3846
+ | "retry"
3847
+ | "repair";
3241
3848
 
3242
3849
  export type ScheduledTaskRun = {
3243
3850
  id: string;
@@ -3250,6 +3857,10 @@ export type ScheduledTaskRun = {
3250
3857
  firedAt: string;
3251
3858
  sessionId: string | null;
3252
3859
  triggerEventId: string | null;
3860
+ actionKind: "agent_turn" | "knowledge_source_sync";
3861
+ knowledgeSyncRunId: string | null;
3862
+ knowledgeSummary: KnowledgeSourceSyncRunSummary | null;
3863
+ completedAt: string | null;
3253
3864
  error: string | null;
3254
3865
  createdAt: string;
3255
3866
  updatedAt: string;
@@ -3324,6 +3935,40 @@ export type RigCheck = {
3324
3935
  command: string;
3325
3936
  };
3326
3937
 
3938
+ export type RigProviderImageBuildStatus = "building" | "ready" | "failed" | "unsupported";
3939
+
3940
+ export type RigProviderImage = {
3941
+ backend: SandboxBackend;
3942
+ provider: string;
3943
+ status: RigProviderImageBuildStatus;
3944
+ contentHash: string;
3945
+ setupHash: string;
3946
+ sourceImage: string | null;
3947
+ buildRequestId: string;
3948
+ imageId: string | null;
3949
+ imageDigest: string | null;
3950
+ artifactId: string | null;
3951
+ providerBindingKeyHash: string | null;
3952
+ coldBootValidation?:
3953
+ | {
3954
+ version: 1;
3955
+ checkedAt: string;
3956
+ }
3957
+ | undefined;
3958
+ provenance: {
3959
+ kind: "rig_verification";
3960
+ targetKind: "change" | "version";
3961
+ targetId: string;
3962
+ };
3963
+ startedAt: string;
3964
+ finishedAt: string | null;
3965
+ error: {
3966
+ code: string;
3967
+ message: string;
3968
+ retryable: boolean;
3969
+ } | null;
3970
+ };
3971
+
3327
3972
  export type RigVersion = {
3328
3973
  id: string;
3329
3974
  rigId: string;
@@ -3334,6 +3979,7 @@ export type RigVersion = {
3334
3979
  credentialHooks: string[];
3335
3980
  defaultVariableSetIds: string[];
3336
3981
  changelog: string | null;
3982
+ providerImages: Partial<Record<SandboxBackend, RigProviderImage>>;
3337
3983
  createdBy: string | null;
3338
3984
  active: boolean;
3339
3985
  createdAt: string;
@@ -3344,23 +3990,53 @@ export type RigVerificationHealth = {
3344
3990
  lastVerifiedAt: string | null;
3345
3991
  };
3346
3992
 
3347
- export type Rig = {
3993
+ /**
3994
+ * Workspace-shared channel organizing root sessions ("workstreams") by work
3995
+ * type in the rail. Pure organizational metadata.
3996
+ */
3997
+ export type Channel = {
3348
3998
  id: string;
3349
3999
  accountId: string;
3350
4000
  workspaceId: string;
3351
4001
  name: string;
3352
4002
  description: string | null;
3353
4003
  createdBy: string | null;
3354
- activeVersion: RigVersion | null;
3355
- activeVersionHealth?: RigVerificationHealth | null;
3356
- versionCount: number;
3357
4004
  createdAt: string;
3358
4005
  updatedAt: string;
3359
4006
  };
3360
4007
 
3361
- export type RigChangeKind = "setup_append" | "definition_edit";
4008
+ export type CreateChannelRequest = {
4009
+ name: string;
4010
+ description?: string;
4011
+ };
3362
4012
 
3363
- export type RigChangeStatus = "proposed" | "verifying" | "merged" | "rejected" | "failed";
4013
+ export type UpdateChannelRequest = {
4014
+ name?: string;
4015
+ description?: string | null;
4016
+ };
4017
+
4018
+ /** Re-files one session; null moves it back to the unfiled inbox. */
4019
+ export type UpdateSessionChannelRequest = {
4020
+ channelId: string | null;
4021
+ };
4022
+
4023
+ export type Rig = {
4024
+ id: string;
4025
+ accountId: string;
4026
+ workspaceId: string;
4027
+ name: string;
4028
+ description: string | null;
4029
+ createdBy: string | null;
4030
+ activeVersion: RigVersion | null;
4031
+ activeVersionHealth?: RigVerificationHealth | null;
4032
+ versionCount: number;
4033
+ createdAt: string;
4034
+ updatedAt: string;
4035
+ };
4036
+
4037
+ export type RigChangeKind = "setup_append" | "definition_edit";
4038
+
4039
+ export type RigChangeStatus = "proposed" | "verifying" | "merged" | "rejected" | "failed";
3364
4040
 
3365
4041
  export type RigCheckResult = {
3366
4042
  name: string;
@@ -3447,6 +4123,8 @@ export type FileAsset = {
3447
4123
  export const RETAINED_OUTPUT_DEFAULT_PAGE_BYTES = 256 * 1024;
3448
4124
  export const RETAINED_OUTPUT_MAX_PAGE_BYTES = 1024 * 1024;
3449
4125
  export const COMPUTER_SCREENSHOT_MAX_BYTES = 32 * 1024 * 1024;
4126
+ export const GENERATED_IMAGE_MAX_BYTES = 64 * 1024 * 1024;
4127
+ export const GENERATED_VIDEO_MAX_BYTES = 512 * 1024 * 1024;
3450
4128
 
3451
4129
  export type RetainedOutputKind =
3452
4130
  | "tool_result"
@@ -3454,6 +4132,8 @@ export type RetainedOutputKind =
3454
4132
  | "internal_update"
3455
4133
  | "event_media"
3456
4134
  | "computer_screenshot"
4135
+ | "generated_image"
4136
+ | "generated_video"
3457
4137
  | "file";
3458
4138
 
3459
4139
  export type RetainedOutputUnavailableReason =
@@ -3497,6 +4177,160 @@ export type RetainedArtifactUnavailable = {
3497
4177
 
3498
4178
  export type RetainedArtifactMetadata = RetainedArtifactReference | RetainedArtifactUnavailable;
3499
4179
 
4180
+ export type GeneratedImageReceipt = {
4181
+ type: "generated_image";
4182
+ artifact: RetainedArtifactReference;
4183
+ sandboxPath: string;
4184
+ };
4185
+
4186
+ export type VideoGenerationSourceMode =
4187
+ | "text"
4188
+ | "first_frame"
4189
+ | "first_and_last_frames"
4190
+ | "image_reference"
4191
+ | "video_reference";
4192
+
4193
+ export type VideoGenerationResolution = "480p" | "720p";
4194
+
4195
+ export type VideoGenerationAspectRatio =
4196
+ | "16:9"
4197
+ | "4:3"
4198
+ | "1:1"
4199
+ | "3:4"
4200
+ | "9:16"
4201
+ | "21:9"
4202
+ | "adaptive";
4203
+
4204
+ export type VideoGenerationModelCapability = {
4205
+ modelId: string;
4206
+ label: string;
4207
+ providerLabel: string;
4208
+ sourceModes: VideoGenerationSourceMode[];
4209
+ resolutions: VideoGenerationResolution[];
4210
+ aspectRatios: VideoGenerationAspectRatio[];
4211
+ duration: {
4212
+ minSeconds: number;
4213
+ maxSeconds: number;
4214
+ stepSeconds: number;
4215
+ };
4216
+ supportsAudio: boolean;
4217
+ };
4218
+
4219
+ export type VideoGenerationCapabilities = {
4220
+ schemaVersion: 1;
4221
+ capabilityRevision: string;
4222
+ defaultModelId: string;
4223
+ models: VideoGenerationModelCapability[];
4224
+ };
4225
+
4226
+ export type VideoGenerationPolicy = {
4227
+ schemaVersion: 1;
4228
+ revision: number;
4229
+ fundingSource: VideoGenerationFundingSource;
4230
+ enabledModelIds: string[];
4231
+ defaultModelId: string | null;
4232
+ };
4233
+
4234
+ export type UpdateVideoGenerationPolicyRequest = {
4235
+ expectedRevision: number;
4236
+ fundingSource: VideoGenerationFundingSource;
4237
+ enabledModelIds: string[];
4238
+ defaultModelId: string | null;
4239
+ };
4240
+
4241
+ export type VideoGenerationFundingSource =
4242
+ | "opengeni_credits"
4243
+ | "workspace_gateway"
4244
+ | "supergrok_subscription";
4245
+
4246
+ export type VideoGenerationFundingOption = {
4247
+ source: VideoGenerationFundingSource;
4248
+ label: string;
4249
+ description: string;
4250
+ available: boolean;
4251
+ unavailableReason: string | null;
4252
+ };
4253
+
4254
+ export type WorkspaceVideoGenerationSettings = {
4255
+ schemaVersion: 1;
4256
+ policy: VideoGenerationPolicy;
4257
+ fundingOptions: VideoGenerationFundingOption[];
4258
+ availableModels: VideoGenerationModelCapability[];
4259
+ capabilities: VideoGenerationCapabilities | null;
4260
+ };
4261
+
4262
+ export type GeneratedVideoFacts = {
4263
+ durationSeconds: number;
4264
+ width: number;
4265
+ height: number;
4266
+ fps: number;
4267
+ hasAudio: boolean;
4268
+ videoCodec: "h264";
4269
+ audioCodec: "aac" | null;
4270
+ };
4271
+
4272
+ export type GeneratedVideoReceipt = {
4273
+ type: "generated_video";
4274
+ schemaVersion: 1;
4275
+ operationId: string;
4276
+ artifact: RetainedArtifactReference;
4277
+ video: GeneratedVideoFacts;
4278
+ sandboxPath: string;
4279
+ };
4280
+
4281
+ export type VideoGenerationTerminalFailureStatus =
4282
+ | "provider_failed"
4283
+ | "retention_failed"
4284
+ | "cancelled_before_submit"
4285
+ | "outcome_unknown";
4286
+
4287
+ export type MediaGenerationResult =
4288
+ | {
4289
+ type: "media_generation_result";
4290
+ schemaVersion: 1;
4291
+ status: "ready";
4292
+ operationId: string;
4293
+ receipt: GeneratedVideoReceipt;
4294
+ }
4295
+ | {
4296
+ type: "media_generation_result";
4297
+ schemaVersion: 1;
4298
+ status: VideoGenerationTerminalFailureStatus;
4299
+ operationId: string;
4300
+ boundedPublicReason: string;
4301
+ };
4302
+
4303
+ export type VideoGenerationPublicStatus =
4304
+ | "preparing"
4305
+ | "prepared"
4306
+ | "accepted"
4307
+ | "provider_started"
4308
+ | "retaining"
4309
+ | "completed"
4310
+ | VideoGenerationTerminalFailureStatus;
4311
+
4312
+ export type VideoGenerationOperationSummary = {
4313
+ schemaVersion: 1;
4314
+ operationId: string;
4315
+ modelId: string;
4316
+ status: VideoGenerationPublicStatus;
4317
+ createdAt: string;
4318
+ updatedAt: string;
4319
+ terminal: MediaGenerationResult | null;
4320
+ };
4321
+
4322
+ /** Ephemeral source minted for native browser playback; never persist the URL. */
4323
+ export type VideoArtifactPlaybackSource = {
4324
+ schemaVersion: 1;
4325
+ artifactId: string;
4326
+ url: string;
4327
+ expiresAt: string;
4328
+ contentType: "video/mp4";
4329
+ sizeBytes: number;
4330
+ sha256: string;
4331
+ acceptRanges: "bytes";
4332
+ };
4333
+
3500
4334
  export type RetainedArtifactContentOptions = {
3501
4335
  /** One RFC-style bytes range, for example `bytes=1048576-2097151`. */
3502
4336
  range?: string | undefined;
@@ -3512,18 +4346,25 @@ export type RetainedArtifactContent = {
3512
4346
  acceptRanges: "bytes";
3513
4347
  };
3514
4348
 
3515
- export type RetainedScreenshotDownloadOptions = {
4349
+ export type RetainedArtifactDownloadOptions = {
3516
4350
  signal?: AbortSignal | undefined;
3517
4351
  /** Retry transient range failures; bounded to 0..3, default 2. */
3518
4352
  maxRetries?: number | undefined;
3519
4353
  };
3520
4354
 
4355
+ export type RetainedScreenshotDownloadOptions = RetainedArtifactDownloadOptions;
4356
+
3521
4357
  export type RetainedScreenshotDownload = {
3522
4358
  metadata: RetainedArtifactMetadata;
3523
4359
  /** Null when metadata truth says the screenshot is unavailable. */
3524
4360
  bytes: Uint8Array | null;
3525
4361
  };
3526
4362
 
4363
+ export type RetainedArtifactDownload = {
4364
+ artifact: RetainedArtifactReference;
4365
+ bytes: Uint8Array;
4366
+ };
4367
+
3527
4368
  export type CreateFileUploadRequest = {
3528
4369
  filename: string;
3529
4370
  contentType: string;
@@ -3867,6 +4708,49 @@ export type CapabilityPackVariableSetSpec = {
3867
4708
  required: boolean;
3868
4709
  };
3869
4710
 
4711
+ export type CapabilityPackComponentReference =
4712
+ | {
4713
+ key: string;
4714
+ kind: "plugin";
4715
+ pluginKey: string;
4716
+ version: string;
4717
+ manifestDigest: string;
4718
+ required: boolean;
4719
+ }
4720
+ | {
4721
+ key: string;
4722
+ kind: "skill";
4723
+ capabilityId: string;
4724
+ contentSha256: string;
4725
+ required: boolean;
4726
+ }
4727
+ | {
4728
+ key: string;
4729
+ kind: "integration";
4730
+ capabilityId: string;
4731
+ instanceKey: string;
4732
+ revisionId: string;
4733
+ contentSha256: string;
4734
+ required: boolean;
4735
+ }
4736
+ | {
4737
+ key: string;
4738
+ kind: "facet";
4739
+ capabilityId: string;
4740
+ instanceKey: string;
4741
+ facetKey: string;
4742
+ bindingKey: string;
4743
+ configDigest: string;
4744
+ required: boolean;
4745
+ };
4746
+
4747
+ export type CapabilityPackRigRequirement = {
4748
+ description?: string | undefined;
4749
+ required: boolean;
4750
+ rigId?: string | undefined;
4751
+ requireVerified: boolean;
4752
+ };
4753
+
3870
4754
  export type CapabilityPack = {
3871
4755
  id: string;
3872
4756
  name: string;
@@ -3881,6 +4765,8 @@ export type CapabilityPack = {
3881
4765
  }
3882
4766
  | undefined;
3883
4767
  skills: CapabilityPackSkill[];
4768
+ components: CapabilityPackComponentReference[];
4769
+ rig?: CapabilityPackRigRequirement | undefined;
3884
4770
  tools: ToolRef[];
3885
4771
  connectors: CapabilityPackConnector[];
3886
4772
  knowledge: CapabilityPackKnowledge[];
@@ -3910,6 +4796,52 @@ export type RegisterCapabilityPackRequest = {
3910
4796
  files: CapabilityPackSkillFile[];
3911
4797
  }[]
3912
4798
  | undefined;
4799
+ components?:
4800
+ | (
4801
+ | {
4802
+ key: string;
4803
+ kind: "plugin";
4804
+ pluginKey: string;
4805
+ version: string;
4806
+ manifestDigest: string;
4807
+ required?: boolean | undefined;
4808
+ }
4809
+ | {
4810
+ key: string;
4811
+ kind: "skill";
4812
+ capabilityId: string;
4813
+ contentSha256: string;
4814
+ required?: boolean | undefined;
4815
+ }
4816
+ | {
4817
+ key: string;
4818
+ kind: "integration";
4819
+ capabilityId: string;
4820
+ instanceKey: string;
4821
+ revisionId: string;
4822
+ contentSha256: string;
4823
+ required?: boolean | undefined;
4824
+ }
4825
+ | {
4826
+ key: string;
4827
+ kind: "facet";
4828
+ capabilityId: string;
4829
+ instanceKey: string;
4830
+ facetKey: string;
4831
+ bindingKey: string;
4832
+ configDigest: string;
4833
+ required?: boolean | undefined;
4834
+ }
4835
+ )[]
4836
+ | undefined;
4837
+ rig?:
4838
+ | {
4839
+ description?: string | undefined;
4840
+ required?: boolean | undefined;
4841
+ rigId?: string | undefined;
4842
+ requireVerified?: boolean | undefined;
4843
+ }
4844
+ | undefined;
3913
4845
  tools?: ToolRef[] | undefined;
3914
4846
  connectors?:
3915
4847
  | {
@@ -3961,7 +4893,7 @@ export type WorkspaceRegisteredPack = {
3961
4893
  updatedAt: string;
3962
4894
  };
3963
4895
 
3964
- export type PackInstallationStatus = "active" | "disabled";
4896
+ export type PackInstallationStatus = "installing" | "active" | "needs_attention" | "disabled";
3965
4897
 
3966
4898
  export type PackInstallation = {
3967
4899
  id: string;
@@ -3969,6 +4901,11 @@ export type PackInstallation = {
3969
4901
  workspaceId: string;
3970
4902
  packId: string;
3971
4903
  status: PackInstallationStatus;
4904
+ version: number;
4905
+ manifestSnapshot: CapabilityPack | null;
4906
+ manifestDigest: string | null;
4907
+ selectedRigId: string | null;
4908
+ installedBySubjectId: string | null;
3972
4909
  metadata: Record<string, unknown>;
3973
4910
  enabledAt: string;
3974
4911
  updatedAt: string;
@@ -3981,6 +4918,82 @@ export type EnablePackRequest = {
3981
4918
  metadata?: Record<string, unknown> | undefined;
3982
4919
  };
3983
4920
 
4921
+ export type PackComponentResolutionStatus = "ready" | "missing" | "mismatch";
4922
+
4923
+ export type PackComponentResolution = {
4924
+ key: string;
4925
+ kind: "plugin" | "skill" | "integration" | "facet" | "inline_skill";
4926
+ capabilityId: string;
4927
+ required: boolean;
4928
+ status: PackComponentResolutionStatus;
4929
+ expectedDigest: string;
4930
+ actualDigest: string | null;
4931
+ resolvedId: string | null;
4932
+ label: string;
4933
+ };
4934
+
4935
+ export type PackRigResolution = {
4936
+ required: boolean;
4937
+ status: "not_required" | "ready" | "missing" | "mismatch" | "unverified";
4938
+ requestedRigId: string | null;
4939
+ rigId: string | null;
4940
+ rigVersionId: string | null;
4941
+ name: string | null;
4942
+ image: string | null;
4943
+ };
4944
+
4945
+ export type PreviewPackInstallationRequest = {
4946
+ rigId?: string | undefined;
4947
+ variableSetId?: string | undefined;
4948
+ };
4949
+
4950
+ export type PackInstallationPreview = {
4951
+ packId: string;
4952
+ packVersion: string;
4953
+ manifestDigest: string;
4954
+ installationVersion: number | null;
4955
+ action: "install" | "update" | "repair";
4956
+ ready: boolean;
4957
+ blockers: string[];
4958
+ components: PackComponentResolution[];
4959
+ rig: PackRigResolution;
4960
+ variableSetId: string | null;
4961
+ legacyInlineSkillCount: number;
4962
+ legacySandboxImage: string | null;
4963
+ };
4964
+
4965
+ export type InstallPackRequest = {
4966
+ expectedManifestDigest: string;
4967
+ expectedInstallationVersion?: number | undefined;
4968
+ rigId?: string | undefined;
4969
+ variableSetId?: string | undefined;
4970
+ idempotencyKey: string;
4971
+ metadata?: Record<string, unknown> | undefined;
4972
+ };
4973
+
4974
+ export type PackUninstallPreview = {
4975
+ packId: string;
4976
+ installed: boolean;
4977
+ installationVersion: number | null;
4978
+ components: Array<{
4979
+ key: string;
4980
+ kind: "plugin" | "skill" | "integration" | "facet" | "inline_skill";
4981
+ capabilityId: string;
4982
+ retainedByOtherOwners: boolean;
4983
+ }>;
4984
+ };
4985
+
4986
+ export type UninstallPackRequest = {
4987
+ expectedInstallationVersion: number;
4988
+ idempotencyKey: string;
4989
+ };
4990
+
4991
+ export type UninstallPackResult = {
4992
+ packId: string;
4993
+ status: "not_installed" | "uninstalled";
4994
+ retainedComponents: string[];
4995
+ };
4996
+
3984
4997
  export type ListPacksResponse = {
3985
4998
  packs: CapabilityPack[];
3986
4999
  installations: PackInstallation[];
@@ -4009,6 +5022,34 @@ export type CapabilityCatalogAuthKind = "oauth2" | "api_key" | "none" | "unknown
4009
5022
 
4010
5023
  export type CapabilityCatalogTier = "verified" | "community";
4011
5024
 
5025
+ export type CapabilityLifecycleStatus =
5026
+ | "available"
5027
+ | "installed"
5028
+ | "connected"
5029
+ | "ready"
5030
+ | "needs_attention"
5031
+ | "unavailable"
5032
+ | "managed";
5033
+
5034
+ export type CapabilityReadiness = "ready" | "setup_required" | "attention" | "unavailable";
5035
+
5036
+ export type CapabilityAction =
5037
+ | "install"
5038
+ | "connect"
5039
+ | "configure"
5040
+ | "update"
5041
+ | "repair"
5042
+ | "disconnect"
5043
+ | "uninstall"
5044
+ | "inspect";
5045
+
5046
+ export type CapabilityLifecycle = {
5047
+ status: CapabilityLifecycleStatus;
5048
+ readiness: CapabilityReadiness;
5049
+ detail: string | null;
5050
+ managedBy: "deployment" | "platform" | "workspace" | null;
5051
+ };
5052
+
4012
5053
  export type CapabilityRuntime = {
4013
5054
  available: boolean;
4014
5055
  mcpServerId?: string | undefined;
@@ -4055,7 +5096,11 @@ export type CapabilityCatalogItem = {
4055
5096
  staleAt: string | null;
4056
5097
  tools: ToolRef[];
4057
5098
  runtime: CapabilityRuntime;
5099
+ lifecycle: CapabilityLifecycle;
5100
+ actions: CapabilityAction[];
5101
+ /** @deprecated Use lifecycle and actions. */
4058
5102
  enabled: boolean;
5103
+ /** @deprecated Use lifecycle.detail. */
4059
5104
  enabledReason: string | null;
4060
5105
  /** The connection backing this enabled installation, or null when none is involved. */
4061
5106
  connectionRef: {
@@ -4089,7 +5134,7 @@ export type CapabilityCatalogResponse = {
4089
5134
 
4090
5135
  export type CreateCapabilityCatalogItemRequest = {
4091
5136
  id?: string | undefined;
4092
- kind: Exclude<CapabilityKind, "pack">;
5137
+ kind: "mcp";
4093
5138
  source?: CapabilitySource | undefined;
4094
5139
  name: string;
4095
5140
  description?: string | undefined;
@@ -4112,14 +5157,6 @@ export type EnableCapabilityRequest = {
4112
5157
  * API (responses expose header names only).
4113
5158
  */
4114
5159
  headers?: Record<string, string> | undefined;
4115
- /**
4116
- * Initial variableSet attachment for kind=pack capabilities — mirrors the
4117
- * dedicated POST /packs/:id/enable body. Required to enable an
4118
- * variableSet.required pack through this unified path; ignored otherwise.
4119
- */
4120
- variableSetId?: string | undefined;
4121
- /** @deprecated use variableSetId */
4122
- environmentId?: string | undefined;
4123
5160
  };
4124
5161
 
4125
5162
  export type DiscoverMcpCapabilitiesResponse = {
@@ -4128,6 +5165,491 @@ export type DiscoverMcpCapabilitiesResponse = {
4128
5165
  sourceUrl: string;
4129
5166
  };
4130
5167
 
5168
+ export type SkillImportSource = "github" | "skills_sh";
5169
+
5170
+ export type SkillInstallationSource = "library" | "github" | "skills_sh" | "pack";
5171
+
5172
+ export type PreviewSkillImportRequest = {
5173
+ url: string;
5174
+ };
5175
+
5176
+ export type SkillImportFileSummary = {
5177
+ path: string;
5178
+ byteSize: number;
5179
+ contentSha256: string;
5180
+ };
5181
+
5182
+ export type SkillImportPreview = {
5183
+ source: SkillImportSource;
5184
+ sourceUrl: string;
5185
+ repositoryUrl: string;
5186
+ owner: string;
5187
+ repository: string;
5188
+ sourcePath: string;
5189
+ sourceCommit: string;
5190
+ name: string;
5191
+ description: string;
5192
+ contentSha256: string;
5193
+ totalBytes: number;
5194
+ files: SkillImportFileSummary[];
5195
+ warnings: string[];
5196
+ installed: boolean;
5197
+ installationVersion: number | null;
5198
+ };
5199
+
5200
+ export type InstallSkillRequest = {
5201
+ url: string;
5202
+ expectedSourceCommit: string;
5203
+ expectedContentSha256: string;
5204
+ expectedInstallationVersion?: number | undefined;
5205
+ };
5206
+
5207
+ export type InstallLibrarySkillRequest = {
5208
+ expectedVersion: string;
5209
+ expectedContentSha256: string;
5210
+ expectedInstallationVersion?: number | undefined;
5211
+ };
5212
+
5213
+ export type InstalledSkill = {
5214
+ capabilityId: string;
5215
+ pluginId: string;
5216
+ pluginVersionId: string;
5217
+ facetId: string;
5218
+ pluginInstallationId: string;
5219
+ facetInstallationId: string;
5220
+ installationVersion: number;
5221
+ source: SkillInstallationSource;
5222
+ version: string;
5223
+ sourceUrl: string;
5224
+ sourceCommit: string;
5225
+ contentSha256: string;
5226
+ name: string;
5227
+ status: "installed";
5228
+ };
5229
+
5230
+ export type CapabilityComponentOwner = {
5231
+ kind: "direct" | "plugin" | "pack" | "migration";
5232
+ id: string;
5233
+ removable: boolean;
5234
+ };
5235
+
5236
+ export type InstalledSkillSummary = {
5237
+ capabilityId: string;
5238
+ pluginKey: string;
5239
+ installationVersion: number;
5240
+ name: string;
5241
+ description: string;
5242
+ category: string;
5243
+ tags: string[];
5244
+ provenance: string;
5245
+ source: SkillInstallationSource;
5246
+ version: string;
5247
+ sourceUrl: string;
5248
+ repositoryUrl: string;
5249
+ sourceCommit: string;
5250
+ sourcePath: string;
5251
+ contentSha256: string;
5252
+ fileCount: number;
5253
+ totalBytes: number;
5254
+ license: string | null;
5255
+ installedAt: string;
5256
+ updatedAt: string;
5257
+ owners: CapabilityComponentOwner[];
5258
+ };
5259
+
5260
+ export type ListInstalledSkillsResponse = {
5261
+ skills: InstalledSkillSummary[];
5262
+ };
5263
+
5264
+ export type SkillUninstallPreview = {
5265
+ capabilityId: string;
5266
+ installed: boolean;
5267
+ installationVersion: number | null;
5268
+ directOwner: CapabilityComponentOwner | null;
5269
+ remainingOwners: CapabilityComponentOwner[];
5270
+ removesRuntimeSkill: boolean;
5271
+ };
5272
+
5273
+ export type UninstallSkillRequest = {
5274
+ expectedInstallationVersion: number;
5275
+ };
5276
+
5277
+ export type UninstallSkillResult = {
5278
+ capabilityId: string;
5279
+ status: "not_installed" | "uninstalled" | "retained_by_other_owners";
5280
+ remainingOwners: CapabilityComponentOwner[];
5281
+ };
5282
+
5283
+ export type ApiIntegrationProtocol = "openapi" | "graphql";
5284
+ export type IntegrationDefinitionProvenance = "curated" | "workspace";
5285
+
5286
+ export type IntegrationFacetKind =
5287
+ | "tools"
5288
+ | "knowledge_source"
5289
+ | "inbound_trigger"
5290
+ | "delivery_destination"
5291
+ | "identity_link";
5292
+
5293
+ export type IntegrationFacetStatus = "active" | "paused" | "needs_attention" | "disabled";
5294
+
5295
+ export type IntegrationFacetDefinitionSummary = {
5296
+ facetKey: string;
5297
+ kind: Exclude<IntegrationFacetKind, "tools">;
5298
+ configSchema: Record<string, unknown>;
5299
+ capabilities: Record<string, unknown>;
5300
+ };
5301
+
5302
+ export type IntegrationFacetBindingSummary = {
5303
+ id: string;
5304
+ facetKey: string;
5305
+ kind: Exclude<IntegrationFacetKind, "tools">;
5306
+ bindingKey: string;
5307
+ displayName: string;
5308
+ connectionId: string | null;
5309
+ status: IntegrationFacetStatus;
5310
+ config: Record<string, unknown>;
5311
+ version: number;
5312
+ hasCursor: boolean;
5313
+ lastSuccessAt: string | null;
5314
+ lastErrorCode: string | null;
5315
+ createdAt: string;
5316
+ updatedAt: string;
5317
+ };
5318
+
5319
+ export type IntegrationInstanceFacetsResponse = {
5320
+ capabilityId: string;
5321
+ instanceKey: string;
5322
+ providerDomain: string;
5323
+ connectionId: string | null;
5324
+ facets: {
5325
+ definition: IntegrationFacetDefinitionSummary;
5326
+ binding: IntegrationFacetBindingSummary | null;
5327
+ }[];
5328
+ };
5329
+
5330
+ export type UpsertIntegrationFacetRequest = {
5331
+ displayName: string;
5332
+ config?: Record<string, unknown> | undefined;
5333
+ expectedVersion?: number | undefined;
5334
+ idempotencyKey: string;
5335
+ };
5336
+
5337
+ export type MutateIntegrationFacetRequest = {
5338
+ expectedVersion: number;
5339
+ idempotencyKey: string;
5340
+ };
5341
+
5342
+ export type IntegrationFacetMutationResult = {
5343
+ capabilityId: string;
5344
+ instanceKey: string;
5345
+ facetKey: string;
5346
+ status: "configured" | "paused" | "active";
5347
+ binding: IntegrationFacetBindingSummary;
5348
+ };
5349
+
5350
+ export type IntegrationFacetRemovalResult = {
5351
+ capabilityId: string;
5352
+ instanceKey: string;
5353
+ facetKey: string;
5354
+ status: "not_configured" | "removed" | "retained_by_other_owners";
5355
+ binding: IntegrationFacetBindingSummary | null;
5356
+ remainingOwners: CapabilityComponentOwner[];
5357
+ };
5358
+
5359
+ export type IntegrationDefinitionSummary = {
5360
+ id: string;
5361
+ name: string;
5362
+ summary: string;
5363
+ protocol: "openapi";
5364
+ provider: {
5365
+ id: "google" | "microsoft";
5366
+ domain: string;
5367
+ };
5368
+ authentication: {
5369
+ kind: "oauth2";
5370
+ scopes: string[];
5371
+ };
5372
+ facets: IntegrationFacetDefinitionSummary[];
5373
+ };
5374
+
5375
+ export type ListIntegrationDefinitionsResponse = {
5376
+ definitions: IntegrationDefinitionSummary[];
5377
+ };
5378
+
5379
+ export type IntegrationSource =
5380
+ | { kind: "definition"; definitionId: string }
5381
+ | { kind: "openapi"; url: string; baseUrl?: string | undefined }
5382
+ | { kind: "graphql"; endpoint: string; name?: string | undefined }
5383
+ | { kind: "auto"; url: string; baseUrl?: string | undefined };
5384
+
5385
+ export type PreviewApiIntegrationRequest = {
5386
+ source: IntegrationSource;
5387
+ connectionId?: string | undefined;
5388
+ ownership?: ConnectionOwnership | undefined;
5389
+ };
5390
+
5391
+ export type ApiIntegrationOAuthStartRequest = {
5392
+ definitionId: string;
5393
+ ownership?: ConnectionOwnership | undefined;
5394
+ connectionId?: string | undefined;
5395
+ returnPath?: string | undefined;
5396
+ };
5397
+
5398
+ export type ApiIntegrationAuthPreview =
5399
+ | { kind: "none" }
5400
+ | { kind: "oauth2"; providerDomain: string; scopes: string[] }
5401
+ | {
5402
+ kind: "api_key";
5403
+ providerDomain: string;
5404
+ carrier: "header" | "query" | "cookie";
5405
+ name: string;
5406
+ }
5407
+ | { kind: "http"; providerDomain: string; scheme: string };
5408
+
5409
+ export type ApiIntegrationToolPreview = {
5410
+ id: string;
5411
+ operationKey: string;
5412
+ name: string;
5413
+ description: string;
5414
+ safety: "read" | "write" | "destructive";
5415
+ approvalMode: "never" | "ask";
5416
+ deprecated: boolean;
5417
+ };
5418
+
5419
+ export type ApiIntegrationPreview = {
5420
+ source: IntegrationSource;
5421
+ definitionId: string;
5422
+ definitionProvenance: IntegrationDefinitionProvenance;
5423
+ protocol: ApiIntegrationProtocol;
5424
+ capabilityId: string;
5425
+ pluginKey: string;
5426
+ serverId: string;
5427
+ name: string;
5428
+ description: string | null;
5429
+ provider: string | null;
5430
+ providerDomain: string;
5431
+ baseUrl: string;
5432
+ sourceUrl: string | null;
5433
+ revisionId: string;
5434
+ contentSha256: string;
5435
+ auth: ApiIntegrationAuthPreview;
5436
+ connectionId: string | null;
5437
+ connectionOwnership: ConnectionOwnership | null;
5438
+ tools: ApiIntegrationToolPreview[];
5439
+ warnings: string[];
5440
+ };
5441
+
5442
+ export type InstallApiIntegrationRequest = {
5443
+ source: IntegrationSource;
5444
+ expectedRevisionId: string;
5445
+ expectedContentSha256: string;
5446
+ connectionId?: string | undefined;
5447
+ ownership?: ConnectionOwnership | undefined;
5448
+ instanceKey?: string | undefined;
5449
+ displayName?: string | undefined;
5450
+ expectedInstanceVersion?: number | undefined;
5451
+ allowedTools?: string[] | undefined;
5452
+ };
5453
+
5454
+ export type InstalledApiIntegration = {
5455
+ capabilityId: string;
5456
+ pluginId: string;
5457
+ pluginVersionId: string;
5458
+ integrationFacetId: string;
5459
+ apiFacetId: string;
5460
+ pluginInstallationId: string;
5461
+ integrationFacetInstallationId: string;
5462
+ apiFacetInstallationId: string;
5463
+ installationVersion: number;
5464
+ instanceId: string;
5465
+ instanceKey: string;
5466
+ displayName: string;
5467
+ instanceVersion: number;
5468
+ revisionId: string;
5469
+ serverId: string;
5470
+ status: "installed";
5471
+ };
5472
+
5473
+ export type ApiIntegrationInstallationSummary = {
5474
+ capabilityId: string;
5475
+ pluginKey: string;
5476
+ installationVersion: number;
5477
+ instanceId: string;
5478
+ instanceKey: string;
5479
+ displayName: string;
5480
+ instanceVersion: number;
5481
+ serverId: string;
5482
+ name: string;
5483
+ description: string | null;
5484
+ protocol: ApiIntegrationProtocol;
5485
+ definitionId: string;
5486
+ definitionProvenance: IntegrationDefinitionProvenance;
5487
+ providerDomain: string;
5488
+ baseUrl: string;
5489
+ sourceUrl: string | null;
5490
+ connected: boolean;
5491
+ requiresConnection: boolean;
5492
+ connectionId: string | null;
5493
+ ownership: "workspace" | "personal" | "none";
5494
+ allowedTools: string[];
5495
+ toolCount: number;
5496
+ approvalRequiredToolCount: number;
5497
+ revisionId: string;
5498
+ contentSha256: string;
5499
+ };
5500
+
5501
+ export type ListApiIntegrationsResponse = {
5502
+ integrations: ApiIntegrationInstallationSummary[];
5503
+ };
5504
+
5505
+ export type ApiIntegrationUninstallPreview = {
5506
+ capabilityId: string;
5507
+ instanceKey: string;
5508
+ displayName: string | null;
5509
+ installed: boolean;
5510
+ installationVersion: number | null;
5511
+ instanceVersion: number | null;
5512
+ directOwner: CapabilityComponentOwner | null;
5513
+ remainingOwners: CapabilityComponentOwner[];
5514
+ removesRuntimeIntegration: boolean;
5515
+ removesDefinition: boolean;
5516
+ };
5517
+
5518
+ export type UninstallApiIntegrationRequest = {
5519
+ expectedInstallationVersion: number;
5520
+ expectedInstanceVersion: number;
5521
+ };
5522
+
5523
+ export type UninstallApiIntegrationResult = {
5524
+ capabilityId: string;
5525
+ instanceKey: string;
5526
+ status: "not_installed" | "uninstalled" | "retained_by_other_owners";
5527
+ remainingOwners: CapabilityComponentOwner[];
5528
+ definitionStatus: "retained" | "disabled";
5529
+ };
5530
+
5531
+ export type PluginManifestComponent =
5532
+ | { key: string; kind: "skill"; url: string }
5533
+ | { key: string; kind: "integration"; source: IntegrationSource }
5534
+ | { key: string; kind: "mcp"; serverId: string };
5535
+
5536
+ export type PluginManifest = {
5537
+ schemaVersion: 1;
5538
+ pluginKey: string;
5539
+ version: string;
5540
+ name: string;
5541
+ description: string;
5542
+ category: string;
5543
+ tags: string[];
5544
+ components: PluginManifestComponent[];
5545
+ };
5546
+
5547
+ export type PluginComponentBinding = {
5548
+ connectionId?: string | undefined;
5549
+ instanceKey?: string | undefined;
5550
+ displayName?: string | undefined;
5551
+ };
5552
+
5553
+ export type PreviewPluginRequest = {
5554
+ url: string;
5555
+ bindings?: Record<string, PluginComponentBinding> | undefined;
5556
+ };
5557
+
5558
+ export type PluginComponentPreview = {
5559
+ key: string;
5560
+ kind: "skill" | "integration" | "mcp";
5561
+ name: string;
5562
+ capabilityId: string;
5563
+ digest: string;
5564
+ connectionRequired: boolean;
5565
+ connectionId: string | null;
5566
+ instanceKey: string | null;
5567
+ displayName: string | null;
5568
+ facts: Record<string, unknown>;
5569
+ };
5570
+
5571
+ export type PluginUpdateDiff = {
5572
+ fromVersion: string | null;
5573
+ toVersion: string;
5574
+ added: string[];
5575
+ removed: string[];
5576
+ changed: string[];
5577
+ unchanged: string[];
5578
+ };
5579
+
5580
+ export type PluginPreview = {
5581
+ sourceUrl: string;
5582
+ manifest: PluginManifest;
5583
+ manifestDigest: string;
5584
+ installed: boolean;
5585
+ installationVersion: number | null;
5586
+ components: PluginComponentPreview[];
5587
+ diff: PluginUpdateDiff;
5588
+ };
5589
+
5590
+ export type InstallPluginRequest = {
5591
+ url: string;
5592
+ expectedManifestDigest: string;
5593
+ expectedComponents: Array<{ key: string; digest: string }>;
5594
+ bindings?: Record<string, PluginComponentBinding> | undefined;
5595
+ idempotencyKey: string;
5596
+ expectedInstallationVersion?: number | undefined;
5597
+ };
5598
+
5599
+ export type InstalledPlugin = {
5600
+ pluginKey: string;
5601
+ version: string;
5602
+ pluginId: string;
5603
+ pluginVersionId: string;
5604
+ pluginInstallationId: string;
5605
+ installationVersion: number;
5606
+ componentCount: number;
5607
+ status: "installed";
5608
+ };
5609
+
5610
+ export type PluginInstallationSummary = {
5611
+ pluginKey: string;
5612
+ version: string;
5613
+ name: string;
5614
+ description: string;
5615
+ category: string;
5616
+ tags: string[];
5617
+ sourceUrl: string | null;
5618
+ manifestDigest: string;
5619
+ installationVersion: number;
5620
+ componentCount: number;
5621
+ status: "active" | "needs_attention";
5622
+ installedAt: string;
5623
+ updatedAt: string;
5624
+ };
5625
+
5626
+ export type ListInstalledPluginsResponse = {
5627
+ plugins: PluginInstallationSummary[];
5628
+ };
5629
+
5630
+ export type PluginUninstallPreview = {
5631
+ pluginKey: string;
5632
+ installed: boolean;
5633
+ version: string | null;
5634
+ installationVersion: number | null;
5635
+ components: Array<{
5636
+ capabilityId: string;
5637
+ kind: "skill" | "integration" | "mcp";
5638
+ retainedByOtherOwners: boolean;
5639
+ }>;
5640
+ };
5641
+
5642
+ export type UninstallPluginRequest = {
5643
+ expectedInstallationVersion: number;
5644
+ idempotencyKey: string;
5645
+ };
5646
+
5647
+ export type UninstallPluginResult = {
5648
+ pluginKey: string;
5649
+ status: "not_installed" | "uninstalled";
5650
+ retainedComponents: string[];
5651
+ };
5652
+
4131
5653
  // --- GitHub ---------------------------------------------------------------------
4132
5654
 
4133
5655
  export type GitHubRepository = {
@@ -4224,6 +5746,10 @@ export const KNOWN_USAGE_EVENT_TYPES = [
4224
5746
  "file.deleted",
4225
5747
  "document.indexed",
4226
5748
  "scheduled_task.fired",
5749
+ "knowledge_source_sync.fired",
5750
+ "knowledge_source_sync.completed",
5751
+ "knowledge_source_sync.items",
5752
+ "knowledge_source_sync.bytes",
4227
5753
  "api_key.request",
4228
5754
  // sandbox warm-time metering (P2.1) — mirrors contracts UsageEventType.
4229
5755
  "sandbox.warm_seconds",
@@ -4269,6 +5795,8 @@ export type InsightsRange = "today" | "week" | "month" | "ytd";
4269
5795
 
4270
5796
  export type InsightsBillingPath = "opengeni_credits" | "external";
4271
5797
 
5798
+ export type InsightsPricingSource = "configured_list_price" | "gateway_reported";
5799
+
4272
5800
  export type InsightsModelUsageRow = {
4273
5801
  id: string;
4274
5802
  model: string;
@@ -4278,17 +5806,32 @@ export type InsightsModelUsageRow = {
4278
5806
  inputTokens: number;
4279
5807
  outputTokens: number;
4280
5808
  cachedTokens: number;
5809
+ cacheInputTokens: number;
4281
5810
  cacheWriteTokens: number;
4282
5811
  reasoningTokens: number;
5812
+ totalTokens: number;
5813
+ tokenKnownCalls: number;
5814
+ cacheKnownCalls: number;
4283
5815
  creditUsd: number;
5816
+ estimatedProviderUsd: number;
5817
+ estimatedProviderCostKnownCalls: number;
4284
5818
  };
4285
5819
 
4286
5820
  export type InsightsSeriesPoint = {
4287
5821
  label: string;
4288
5822
  modelCostUsd: number;
5823
+ estimatedProviderUsd: number;
5824
+ estimatedProviderCostKnownCalls: number;
4289
5825
  warmSeconds: number;
4290
5826
  inputTokens: number;
5827
+ outputTokens: number;
4291
5828
  cachedTokens: number;
5829
+ cacheInputTokens: number;
5830
+ cacheWriteTokens: number;
5831
+ reasoningTokens: number;
5832
+ totalTokens: number;
5833
+ tokenKnownCalls: number;
5834
+ cacheKnownCalls: number;
4292
5835
  cacheHitPct: number;
4293
5836
  calls: number;
4294
5837
  };
@@ -4308,9 +5851,12 @@ export type InsightsSpendDriver = {
4308
5851
  groupBy: "root_session" | "schedule";
4309
5852
  label: string;
4310
5853
  creditUsd: number;
5854
+ estimatedProviderUsd: number;
5855
+ estimatedProviderCostKnownCalls: number;
4311
5856
  tokens: number;
4312
5857
  cacheHitPct: number;
4313
5858
  pctOfCreditUsd: number;
5859
+ pctOfTokens: number;
4314
5860
  deltaUsdVsPrior: number;
4315
5861
  };
4316
5862
 
@@ -4350,17 +5896,44 @@ export type InsightsScheduleRow = {
4350
5896
  name: string;
4351
5897
  fires: number;
4352
5898
  creditUsd: number | null;
5899
+ estimatedProviderUsd: number | null;
5900
+ estimatedProviderCostKnownCalls: number | null;
4353
5901
  tokens: number | null;
4354
5902
  cacheHitPct: number | null;
4355
5903
  billing: InsightsBillingPath | null;
4356
5904
  };
4357
5905
 
5906
+ export type InsightsModelCallRow = {
5907
+ id: string;
5908
+ occurredAt: string;
5909
+ recordedAt: string;
5910
+ sessionId: string;
5911
+ sessionTitle: string;
5912
+ turnId: string;
5913
+ provider: string;
5914
+ providerApi: string;
5915
+ model: string;
5916
+ billing: InsightsBillingPath;
5917
+ inputTokens: number | null;
5918
+ outputTokens: number | null;
5919
+ cachedTokens: number | null;
5920
+ cacheWriteTokens: number | null;
5921
+ reasoningTokens: number | null;
5922
+ totalTokens: number | null;
5923
+ creditUsd: number;
5924
+ estimatedProviderUsd: number | null;
5925
+ pricingSource: InsightsPricingSource | null;
5926
+ };
5927
+
4358
5928
  export type WorkspaceInsightsSnapshot = {
4359
5929
  range: InsightsRange;
4360
5930
  rangeLabel: string;
4361
5931
  priorLabel: string;
4362
5932
  seriesLabel: string;
4363
5933
  cacheSeriesLabel: string;
5934
+ windowStart: string;
5935
+ windowEnd: string;
5936
+ generatedAt: string;
4364
5937
  timezone: "UTC";
4365
5938
  models: InsightsModelUsageRow[];
4366
5939
  facets: InsightsModelFacet[];
@@ -4368,6 +5941,7 @@ export type WorkspaceInsightsSnapshot = {
4368
5941
  depth: InsightsDepthBucket[];
4369
5942
  drivers: InsightsSpendDriver[];
4370
5943
  schedules: InsightsScheduleRow[];
5944
+ recentCalls: InsightsModelCallRow[];
4371
5945
  warmSeconds: number;
4372
5946
  priorWarmSeconds: number;
4373
5947
  warmGroups: InsightsWarmGroupRow[];
@@ -4379,7 +5953,13 @@ export type WorkspaceInsightsSnapshot = {
4379
5953
  priorWorkspaceCreditUsd: number;
4380
5954
  creditUsd: number;
4381
5955
  priorCreditUsd: number;
5956
+ estimatedProviderUsd: number;
5957
+ priorEstimatedProviderUsd: number;
5958
+ estimatedProviderCostKnownCalls: number;
5959
+ priorEstimatedProviderCostKnownCalls: number;
5960
+ modelCalls: number;
4382
5961
  priorInputTokens: number;
5962
+ priorTotalTokens: number;
4383
5963
  priorCacheHitPct: number;
4384
5964
  priorCalls: number;
4385
5965
  goalsActive: number;
@@ -4425,6 +6005,7 @@ export type UserMessageEventInput = {
4425
6005
  clientEventId?: string | undefined;
4426
6006
  payload: {
4427
6007
  text: string;
6008
+ annotations?: SubmittedTimelineAnnotation[] | undefined;
4428
6009
  turnInstructions?: string | undefined;
4429
6010
  resources?: ResourceRef[] | undefined;
4430
6011
  model?: string | undefined;
@@ -4552,12 +6133,14 @@ export type RemoveEnrollmentResponse = {
4552
6133
  code:
4553
6134
  | "active_route"
4554
6135
  | "active_commands"
6136
+ | "machine_home"
4555
6137
  | "active_lease"
4556
6138
  | "recovery_pending"
4557
6139
  | "not_selfhosted"
4558
6140
  | null;
4559
6141
  message: string;
4560
6142
  action: string;
6143
+ dependentSessions: Array<{ id: string; title: string | null }>;
4561
6144
  };
4562
6145
 
4563
6146
  /** POST /v1/workspaces/:ws/sessions/:sessionId/active-sandbox — swap a session's
@@ -4590,8 +6173,9 @@ export type SwapActiveSandboxResponse = {
4590
6173
 
4591
6174
  // ── Self-hosted enrollment UX (design 11) ────────────────────────────────────
4592
6175
  // Hand-written mirrors of the `@opengeni/contracts` enrollment-UX request/response
4593
- // shapes (the SDK keeps zero runtime deps). The click-Grant approve-page
4594
- // lookup/deny + the headless enroll-token mint/exchange.
6176
+ // shapes. They remain type-only so ordinary SDK entries do not reach the contracts
6177
+ // runtime. The click-Grant approve-page lookup/deny + the headless enroll-token
6178
+ // mint/exchange.
4595
6179
 
4596
6180
  /** Mirror of `@opengeni/contracts` EnrollmentOs. */
4597
6181
  export type EnrollmentOs = "linux" | "macos" | "windows";