@opengeni/sdk 1.0.1 → 2.3.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 (92) hide show
  1. package/README.md +117 -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-YGH5P47G.js → chunk-6IPZY27S.js} +744 -57
  8. package/dist/chunk-6IPZY27S.js.map +1 -0
  9. package/dist/{chunk-TYZ4JL4J.js → chunk-AGUKZAXR.js} +2 -2
  10. package/dist/{chunk-A5DC5WEM.js → chunk-C2H7HBNP.js} +22 -2
  11. package/dist/chunk-C2H7HBNP.js.map +1 -0
  12. package/dist/{chunk-GU6JF75T.js → chunk-C4DJPZRU.js} +1 -1
  13. package/dist/{chunk-GU6JF75T.js.map → chunk-C4DJPZRU.js.map} +1 -1
  14. package/dist/{chunk-ST5DDKJP.js → chunk-GW3EJ2GP.js} +52 -1
  15. package/dist/chunk-GW3EJ2GP.js.map +1 -0
  16. package/dist/{chunk-4DV37UUA.js → chunk-TW5MNHUX.js} +16 -2
  17. package/dist/chunk-TW5MNHUX.js.map +1 -0
  18. package/dist/{chunk-VWE2QIVO.js → chunk-XNG7YGR3.js} +23 -6
  19. package/dist/chunk-XNG7YGR3.js.map +1 -0
  20. package/dist/client.d.ts +159 -26
  21. package/dist/codex-realtime-controller.d.ts +1 -0
  22. package/dist/codex-realtime-controller.js +2 -2
  23. package/dist/company-brain.d.ts +32 -0
  24. package/dist/company-profile.d.ts +1 -1
  25. package/dist/core.js +4 -4
  26. package/dist/editable-artifacts/browser-session.d.ts +7 -3
  27. package/dist/editable-artifacts/controller.d.ts +4 -1
  28. package/dist/editable-artifacts/errors.d.ts +1 -1
  29. package/dist/editable-artifacts/http-live-transport.d.ts +6 -2
  30. package/dist/editable-artifacts/index.d.ts +2 -0
  31. package/dist/editable-artifacts/open-failure.d.ts +9 -0
  32. package/dist/editable-artifacts/types.d.ts +4 -3
  33. package/dist/editable-artifacts/worker/kernel-adapter.d.ts +1 -1
  34. package/dist/editable-artifacts-worker.js +44 -17
  35. package/dist/editable-artifacts-worker.js.map +1 -1
  36. package/dist/editable-artifacts.js +222 -119
  37. package/dist/editable-artifacts.js.map +1 -1
  38. package/dist/errors.d.ts +1 -1
  39. package/dist/index.d.ts +7 -4
  40. package/dist/index.js +61 -12
  41. package/dist/index.js.map +1 -1
  42. package/dist/interaction.d.ts +23 -0
  43. package/dist/interaction.js +4 -1
  44. package/dist/organization-private-session-settings.d.ts +6 -0
  45. package/dist/organization-private-session-settings.js +22 -0
  46. package/dist/organization-private-session-settings.js.map +1 -0
  47. package/dist/pr-review-client.d.ts +15 -0
  48. package/dist/pr-review.d.ts +4 -0
  49. package/dist/pr-review.js +56 -0
  50. package/dist/pr-review.js.map +1 -0
  51. package/dist/preference-registry.d.ts +8 -0
  52. package/dist/realtime.js +2 -2
  53. package/dist/retained-artifacts.d.ts +5 -1
  54. package/dist/types.d.ts +1023 -13
  55. package/dist/workspace-instruction-policies.d.ts +22 -0
  56. package/dist/workspace-learning.d.ts +124 -0
  57. package/package.json +14 -2
  58. package/src/automations-client.ts +118 -0
  59. package/src/automations.ts +15 -0
  60. package/src/client.ts +1049 -71
  61. package/src/codex-realtime-controller.ts +21 -0
  62. package/src/company-brain.ts +99 -0
  63. package/src/company-profile.ts +4 -1
  64. package/src/editable-artifacts/browser-session.ts +36 -22
  65. package/src/editable-artifacts/controller.ts +66 -45
  66. package/src/editable-artifacts/errors.ts +2 -0
  67. package/src/editable-artifacts/http-live-transport.ts +62 -37
  68. package/src/editable-artifacts/index.ts +6 -0
  69. package/src/editable-artifacts/open-failure.ts +79 -0
  70. package/src/editable-artifacts/storage.ts +31 -40
  71. package/src/editable-artifacts/types.ts +4 -3
  72. package/src/editable-artifacts/worker/kernel-adapter.ts +23 -7
  73. package/src/editable-artifacts/worker/runtime.ts +26 -13
  74. package/src/editable-artifacts/worker/wire-codec.ts +23 -5
  75. package/src/errors.ts +1 -1
  76. package/src/index.ts +134 -0
  77. package/src/interaction.ts +95 -0
  78. package/src/organization-private-session-settings.ts +33 -0
  79. package/src/pr-review-client.ts +84 -0
  80. package/src/pr-review.ts +15 -0
  81. package/src/preference-registry.ts +9 -0
  82. package/src/retained-artifacts.ts +101 -0
  83. package/src/stream.ts +13 -2
  84. package/src/types.ts +1174 -12
  85. package/src/workspace-instruction-policies.ts +24 -0
  86. package/src/workspace-learning.ts +138 -0
  87. package/dist/chunk-4DV37UUA.js.map +0 -1
  88. package/dist/chunk-A5DC5WEM.js.map +0 -1
  89. package/dist/chunk-ST5DDKJP.js.map +0 -1
  90. package/dist/chunk-VWE2QIVO.js.map +0 -1
  91. package/dist/chunk-YGH5P47G.js.map +0 -1
  92. /package/dist/{chunk-TYZ4JL4J.js.map → chunk-AGUKZAXR.js.map} +0 -0
@@ -5,9 +5,13 @@ import {
5
5
  decodeEditableArtifactMutationIntent,
6
6
  hashEditableArtifactMutationIntent,
7
7
  } from "@opengeni/contracts/editable-artifacts";
8
- import { decodeCommittedTransactionSummary } from "@opengeni/contracts/editable-artifact-committed-transaction";
8
+ import {
9
+ COMMITTED_TRANSACTION_PROTOCOL_VERSION,
10
+ decodeCommittedTransactionSummary,
11
+ } from "@opengeni/contracts/editable-artifact-committed-transaction";
9
12
  import { editableArtifactCodecFor } from "@opengeni/contracts/editable-artifact-codec-registry";
10
13
  import { decodeEditableArtifactSerializedCommit } from "@opengeni/contracts/editable-artifact-serialized-commit";
14
+ import { SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION } from "@opengeni/contracts/editable-artifact-versions";
11
15
  import type {
12
16
  EditableArtifactBlockedPending,
13
17
  EditableArtifactCausalFrontier,
@@ -269,18 +273,20 @@ export class ArtifactWorkerRuntime {
269
273
  snapshot.modality !== initialization.modality ||
270
274
  snapshot.modality !== adapter.modality ||
271
275
  (snapshot.modality === "spreadsheet" &&
272
- snapshot.protocolVersion !== adapter.protocolVersion) ||
273
- snapshot.kernelVersion !== adapter.kernelVersion ||
276
+ (snapshot.operationProtocolVersion !== COMMITTED_TRANSACTION_PROTOCOL_VERSION ||
277
+ snapshot.snapshotVersion !== SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION)) ||
274
278
  snapshot.modelSchemaVersion !== adapter.modelSchemaVersion
275
279
  ) {
276
280
  throw runtimeError(
277
281
  "unsupported_protocol",
278
- "snapshot protocol/kernel/schema is incompatible with the loaded collaboration kernel",
282
+ "snapshot protocol/schema is incompatible with the loaded collaboration kernel",
279
283
  );
280
284
  }
281
285
  const digest = await sha256Hex(ownedBytes);
282
286
  this.throwIfCancelled(frame.requestId);
283
- requireMatchingHash(digest, snapshot.digest, "snapshot digest");
287
+ if (digest !== snapshot.digest) {
288
+ throw runtimeError("byte_corruption", "snapshot digest does not match its bytes");
289
+ }
284
290
  const canonical = requireBytesWithin(
285
291
  adapter.canonicalizeSnapshot(ownedBytes),
286
292
  initialization.maximumSnapshotBytes,
@@ -298,7 +304,12 @@ export class ArtifactWorkerRuntime {
298
304
  try {
299
305
  stateHash = await nextConfirmed.stateHash();
300
306
  this.throwIfCancelled(frame.requestId);
301
- requireMatchingHash(stateHash, snapshot.stateHash, "snapshot state");
307
+ if (stateHash !== snapshot.stateHash) {
308
+ throw runtimeError(
309
+ "authored_causal_mismatch",
310
+ "snapshot authored state does not match its state hash",
311
+ );
312
+ }
302
313
  if (
303
314
  snapshot.modality !== "spreadsheet" &&
304
315
  nextConfirmed.nativeRevision() !== snapshot.nativeRevision
@@ -324,7 +335,7 @@ export class ArtifactWorkerRuntime {
324
335
  artifactId: snapshot.artifactId,
325
336
  modality: "spreadsheet",
326
337
  sequence: snapshot.sequence,
327
- protocolVersion: snapshot.protocolVersion,
338
+ protocolVersion: adapter.protocolVersion,
328
339
  kernelVersion: snapshot.kernelVersion,
329
340
  modelSchemaVersion: snapshot.modelSchemaVersion,
330
341
  stateHash,
@@ -566,7 +577,7 @@ export class ArtifactWorkerRuntime {
566
577
  }
567
578
  if (
568
579
  transaction.modality === "spreadsheet" &&
569
- transaction.protocolVersion !== installed.protocolVersion
580
+ transaction.operationProtocolVersion !== COMMITTED_TRANSACTION_PROTOCOL_VERSION
570
581
  )
571
582
  throw runtimeError("unsupported_protocol", "committed transaction protocol is incompatible");
572
583
  if (transaction.startSequence !== installed.sequence + 1) {
@@ -1046,12 +1057,12 @@ function assertCommittedEnvelopeMatchesOuter(
1046
1057
  } catch (error) {
1047
1058
  throw new ArtifactWorkerProtocolError(
1048
1059
  "invalid_committed_transaction",
1049
- "committed transaction is not canonical OGACO001",
1060
+ "committed transaction is not canonical OGACO002",
1050
1061
  { cause: error },
1051
1062
  );
1052
1063
  }
1053
1064
  if (
1054
- summary.operationProtocolVersion !== transaction.protocolVersion ||
1065
+ summary.operationProtocolVersion !== transaction.operationProtocolVersion ||
1055
1066
  summary.transactionId !== transaction.transactionId ||
1056
1067
  summary.priorStateHash !== transaction.priorStateHash ||
1057
1068
  summary.stateHash !== transaction.stateHash ||
@@ -1059,7 +1070,7 @@ function assertCommittedEnvelopeMatchesOuter(
1059
1070
  ) {
1060
1071
  throw runtimeError(
1061
1072
  "committed_metadata_mismatch",
1062
- "outer committed metadata disagrees with its exact OGACO001 envelope",
1073
+ "outer committed metadata disagrees with its exact OGACO002 envelope",
1063
1074
  );
1064
1075
  }
1065
1076
  }
@@ -1156,8 +1167,9 @@ function asWorkerFailure(error: unknown): WorkerFailure {
1156
1167
  };
1157
1168
  }
1158
1169
  if (error instanceof Error) {
1170
+ const rawCode = (error as Error & { code?: unknown }).code;
1159
1171
  return {
1160
- code: "kernel_failed",
1172
+ code: typeof rawCode === "string" ? normalizeErrorCode(rawCode) : "kernel_failed",
1161
1173
  message: sanitizeErrorMessage(error.message || "artifact kernel failed"),
1162
1174
  retryable: false,
1163
1175
  };
@@ -1175,7 +1187,8 @@ function asProtocolError(error: unknown): ArtifactWorkerProtocolError {
1175
1187
  }
1176
1188
 
1177
1189
  function normalizeErrorCode(value: string): string {
1178
- return /^[a-z][a-z0-9_]{0,127}$/.test(value) ? value : "kernel_failed";
1190
+ const normalized = value.toLowerCase();
1191
+ return /^[a-z][a-z0-9_]{0,127}$/.test(normalized) ? normalized : "kernel_failed";
1179
1192
  }
1180
1193
 
1181
1194
  function sanitizeErrorMessage(value: string): string {
@@ -126,7 +126,10 @@ export function encodeSnapshotMetadata(snapshot: EditableArtifactSnapshot): Uint
126
126
  if (snapshot.modality === "spreadsheet") {
127
127
  writer
128
128
  .frontier(snapshot.causalFrontier)
129
- .u32(positiveSafeInteger(snapshot.protocolVersion, "snapshot.protocolVersion"));
129
+ .u32(
130
+ positiveSafeInteger(snapshot.operationProtocolVersion, "snapshot.operationProtocolVersion"),
131
+ )
132
+ .u32(positiveSafeInteger(snapshot.snapshotVersion, "snapshot.snapshotVersion"));
130
133
  } else {
131
134
  writer.safeUint(nonNegativeSafeInteger(snapshot.nativeRevision, "snapshot.nativeRevision"));
132
135
  }
@@ -154,7 +157,11 @@ export function decodeSnapshotMetadata(
154
157
  ...common,
155
158
  modality,
156
159
  causalFrontier: reader.frontier(),
157
- protocolVersion: positiveSafeInteger(reader.u32(), "snapshot.protocolVersion"),
160
+ operationProtocolVersion: positiveSafeInteger(
161
+ reader.u32(),
162
+ "snapshot.operationProtocolVersion",
163
+ ),
164
+ snapshotVersion: positiveSafeInteger(reader.u32(), "snapshot.snapshotVersion"),
158
165
  }
159
166
  : {
160
167
  ...common,
@@ -195,7 +202,10 @@ export function decodeCommittedMetadata(
195
202
  ...common,
196
203
  modality,
197
204
  causalFrontier: reader.frontier(),
198
- protocolVersion: positiveSafeInteger(reader.u32(), "transaction.protocolVersion"),
205
+ operationProtocolVersion: positiveSafeInteger(
206
+ reader.u32(),
207
+ "transaction.operationProtocolVersion",
208
+ ),
199
209
  }
200
210
  : {
201
211
  ...common,
@@ -427,7 +437,12 @@ function encodeCommittedFields(
427
437
  if (transaction.modality === "spreadsheet") {
428
438
  writer
429
439
  .frontier(transaction.causalFrontier)
430
- .u32(positiveSafeInteger(transaction.protocolVersion, "transaction.protocolVersion"));
440
+ .u32(
441
+ positiveSafeInteger(
442
+ transaction.operationProtocolVersion,
443
+ "transaction.operationProtocolVersion",
444
+ ),
445
+ );
431
446
  } else {
432
447
  writer
433
448
  .safeUint(
@@ -461,7 +476,10 @@ function decodeCommittedFields(
461
476
  ...common,
462
477
  modality,
463
478
  causalFrontier: reader.frontier(),
464
- protocolVersion: positiveSafeInteger(reader.u32(), "transaction.protocolVersion"),
479
+ operationProtocolVersion: positiveSafeInteger(
480
+ reader.u32(),
481
+ "transaction.operationProtocolVersion",
482
+ ),
465
483
  }
466
484
  : {
467
485
  ...common,
package/src/errors.ts CHANGED
@@ -128,7 +128,7 @@ function boundedCorrelationId(value: unknown): string | undefined {
128
128
  return value;
129
129
  }
130
130
 
131
- /** A short-lived session-list snapshot cursor can no longer be continued. */
131
+ /** A legacy short-lived session-list snapshot cursor can no longer be continued. */
132
132
  export class OpenGeniSessionListCursorError extends OpenGeniApiError {}
133
133
 
134
134
  /** The browser bundle and API disagree about their state-changing wire contract. */
package/src/index.ts CHANGED
@@ -48,6 +48,8 @@ export {
48
48
  parseMediaGenerationResult,
49
49
  parseRetainedGeneratedImageReference,
50
50
  parseRetainedGeneratedVideoReference,
51
+ parseRetainedWorkspaceFileReference,
52
+ parseSandboxFileArtifactReceipt,
51
53
  } from "./retained-artifacts";
52
54
  export {
53
55
  CodexRealtimeMicrophoneError,
@@ -158,6 +160,25 @@ export {
158
160
  normalizeWorkspaceInstructionPolicyRoleKey,
159
161
  WORKSPACE_INSTRUCTION_POLICY_CONTENT_MAX_CHARS,
160
162
  } from "./workspace-instruction-policies";
163
+ export type {
164
+ ActivateWorkspaceLearningPolicyRevisionRequest,
165
+ CreateWorkspaceLearningPolicyRevisionRequest,
166
+ GovernedLearningActivationReceipt,
167
+ GovernedLearningActivationUndoReceipt,
168
+ GovernedLearningDecisionReceipt,
169
+ RollbackWorkspaceLearningPolicyRevisionRequest,
170
+ WorkspaceLearningHistoryOptions,
171
+ WorkspaceLearningHistoryResponse,
172
+ WorkspaceLearningMode,
173
+ WorkspaceLearningOverrideMode,
174
+ WorkspaceLearningPolicyEvent,
175
+ WorkspaceLearningPolicyHead,
176
+ WorkspaceLearningPolicyMutationResponse,
177
+ WorkspaceLearningPolicyRevision,
178
+ WorkspaceLearningPolicyRevisionIdentity,
179
+ WorkspaceLearningSourceOverride,
180
+ WorkspaceLearningSourceOverrideInput,
181
+ } from "./workspace-learning";
161
182
  export {
162
183
  COMPANY_PROFILE_ENTRY_MAX_CHARS,
163
184
  COMPANY_PROFILE_ENTRY_MAX_COUNT,
@@ -225,6 +246,28 @@ export type {
225
246
  WorkspaceStateResponse,
226
247
  WorkspaceStateSourceKindCounts,
227
248
  } from "./workspace-state";
249
+ export type {
250
+ CompanyBrainContextReceiptListOptions,
251
+ CompanyBrainContextReceiptPage,
252
+ CompanyBrainInspectorTransport,
253
+ CompanyBrainKnowledgeBrowseRequest,
254
+ CompanyBrainKnowledgeBrowseResponse,
255
+ CompanyBrainKnowledgeGetResponse,
256
+ CompanyBrainKnowledgeRecord,
257
+ CompanyBrainKnowledgeProposalListOptions,
258
+ CompanyBrainKnowledgeProposalPage,
259
+ CompanyBrainKnowledgeSearchRequest,
260
+ CompanyBrainKnowledgeSearchResponse,
261
+ CompanyBrainOkfDownload,
262
+ CompanyBrainOkfPackage,
263
+ } from "./company-brain";
264
+ export {
265
+ browseCompanyBrainKnowledge,
266
+ getCompanyBrainKnowledge,
267
+ listCompanyBrainContextReceipts,
268
+ listCompanyBrainKnowledgeProposals,
269
+ searchCompanyBrainKnowledge,
270
+ } from "./company-brain";
228
271
  export type {
229
272
  MemorySlackImportance,
230
273
  MemorySlackPublication,
@@ -250,6 +293,7 @@ export type {
250
293
  DeactivatePreferenceRegistryRequest,
251
294
  PreferenceRegistryConflictStrategy,
252
295
  PreferenceRegistryDescriptor,
296
+ PreferenceRegistryActivationAuthority,
253
297
  PreferenceRegistryDescriptorProvenance,
254
298
  PreferenceRegistryDetailResponse,
255
299
  PreferenceRegistryEvent,
@@ -305,9 +349,12 @@ export {
305
349
  OPENGENI_API_CONTRACT_HEADER,
306
350
  OPENGENI_API_CONTRACT_REVISION,
307
351
  OPENGENI_CORRELATION_HEADER,
352
+ PERSONAL_RESOURCE_SHARED_OUTPUT_WARNING,
353
+ PERSONAL_RESOURCE_SHARED_OUTPUT_WARNING_VERSION,
308
354
  GENERATED_VIDEO_MAX_BYTES,
309
355
  RETAINED_OUTPUT_DEFAULT_PAGE_BYTES,
310
356
  RETAINED_OUTPUT_MAX_PAGE_BYTES,
357
+ SANDBOX_FILE_ARTIFACT_MAX_BYTES,
311
358
  SESSION_EVENT_TYPES,
312
359
  } from "./types";
313
360
  export type {
@@ -330,10 +377,21 @@ export type {
330
377
  BillingSummary,
331
378
  ListManagedOrganizationMembershipsResponse,
332
379
  ManagedOrganizationMembership,
380
+ OrganizationAdministrationOverview,
381
+ OrganizationPrivateSessionSettings,
382
+ OrganizationSummary,
383
+ OrganizationWorkspaceAccess,
384
+ OrganizationWorkspaceAccessMember,
385
+ CreateOrganizationWorkspaceRequest,
386
+ UpdateOrganizationNameRequest,
387
+ UpdateOrganizationPrivateSessionSettingsRequest,
333
388
  BillingUsageResponse,
334
389
  InsightsRange,
335
390
  InsightsBillingPath,
336
391
  InsightsPricingSource,
392
+ ModelContextContributionSource,
393
+ InsightsPromptContributionRow,
394
+ InsightsPromptContributions,
337
395
  InsightsModelUsageRow,
338
396
  InsightsModelCallRow,
339
397
  InsightsSeriesPoint,
@@ -397,6 +455,7 @@ export type {
397
455
  SessionRealtimeState,
398
456
  WorkspaceModelCatalogModel,
399
457
  WorkspaceModelCatalogResponse,
458
+ WorkspaceModelAccessPolicy,
400
459
  WorkspaceRealtimeModelCatalogItem,
401
460
  WorkspaceRealtimeModelCatalogResponse,
402
461
  CodexAccount,
@@ -436,6 +495,22 @@ export type {
436
495
  ConnectionOwnership,
437
496
  ConnectionResponse,
438
497
  ConnectionStatus,
498
+ PersonalGitHubConnectionMetadata,
499
+ PersonalGitHubConnectionStatusResponse,
500
+ PersonalGitHubDisconnectRequest,
501
+ PersonalGitHubOAuthStartRequest,
502
+ PersonalGitHubOAuthStartResponse,
503
+ ListPersonalGitHubRepositoriesOptions,
504
+ ListPersonalGitHubRepositoriesResponse,
505
+ PersonalGitHubRepository,
506
+ PersonalGitHubRepositoryAccess,
507
+ PersonalGitHubRepositoryCatalogItem,
508
+ PersonalGitHubRepositoryPermissions,
509
+ PersonalGitHubRepositorySelectionInput,
510
+ PersonalGitHubRepositorySelectionState,
511
+ PersonalGitHubSelectedRepository,
512
+ ReplacePersonalGitHubRepositorySelectionsRequest,
513
+ VerifyPersonalGitHubRepositorySelectionsRequest,
439
514
  ConnectorDocumentDestination,
440
515
  ConnectorDocumentDestinationAuthority,
441
516
  ConnectorDocumentDestinationSelection,
@@ -451,9 +526,14 @@ export type {
451
526
  SlackInstallationBinding,
452
527
  SlackInstallationBindingState,
453
528
  ListSlackInstallationBindingsResponse,
529
+ SlackChannelRoute,
530
+ SlackChannelRouteListResponse,
531
+ UpdateSlackChannelRoutesRequest,
454
532
  SlackReactionChannel,
455
533
  SlackReactionChannelListResponse,
456
534
  CreateConnectionRequest,
535
+ CreateBillingPortalRequest,
536
+ CreateBillingPortalResponse,
457
537
  CreateCheckoutRequest,
458
538
  CreateCheckoutResponse,
459
539
  CreateDocumentBaseRequest,
@@ -552,6 +632,16 @@ export type {
552
632
  GitCredentialProvider,
553
633
  GitCredentialBindingId,
554
634
  GitRepositoryAccess,
635
+ PrReviewProvider,
636
+ PrReviewCredentialKind,
637
+ PrReviewWebhookAuthKind,
638
+ PrReviewAppRegistration,
639
+ PrReviewRepositoryBinding,
640
+ CreatePrReviewAppRegistrationRequest,
641
+ UpdatePrReviewAppRegistrationRequest,
642
+ CreatePrReviewRepositoryBindingRequest,
643
+ UpdatePrReviewRepositoryBindingRequest,
644
+ ListPrReviewConfigurationResponse,
555
645
  ListApiKeysResponse,
556
646
  ListConnectionsResponse,
557
647
  ListPacksResponse,
@@ -635,6 +725,17 @@ export type {
635
725
  ScheduledTaskStatus,
636
726
  ScheduledTaskTriggerType,
637
727
  Session,
728
+ SessionBackgroundCommand,
729
+ SessionBackgroundCommandActivity,
730
+ SessionBackgroundCommandListResponse,
731
+ CancelSessionBackgroundCommandResult,
732
+ SessionVisibility,
733
+ SessionTenancyCreateCapabilities,
734
+ SessionTenancyPublicProjection,
735
+ UpdateSessionVisibilityRequest,
736
+ UpdateSessionVisibilityResponse,
737
+ ForkSessionRequest,
738
+ ForkSessionResponse,
638
739
  SessionCapabilities,
639
740
  AgentTopologyPageResponse,
640
741
  AgentTopologySession,
@@ -653,9 +754,13 @@ export type {
653
754
  MoveSessionQueueItemRequest,
654
755
  NewSessionDraft,
655
756
  NewSessionDraftOptions,
757
+ NewSessionSelectionHistory,
656
758
  SaveComposerDraftRequest,
759
+ SubmitComposerDraftRequest,
760
+ SubmitComposerDraftResponse,
657
761
  SaveNewSessionDraftRequest,
658
762
  SessionCommandReceipt,
763
+ SessionPromptRouting,
659
764
  SteerSessionQueueItemRequest,
660
765
  WorkspaceInferenceControlResponse,
661
766
  SessionPendingInputPreview,
@@ -702,6 +807,12 @@ export type {
702
807
  SessionEventSemanticClass,
703
808
  SessionEventType,
704
809
  SessionGoal,
810
+ SessionGoalRevision,
811
+ ListSessionGoalRevisionsOptions,
812
+ ListSessionGoalRevisionsResponse,
813
+ RejectSessionGoalRevisionRequest,
814
+ RejectSessionGoalRevisionResponse,
815
+ RollbackSessionGoalRevisionRequest,
705
816
  SessionGoalCreatedBy,
706
817
  SessionGoalStatus,
707
818
  SessionHumanInputRequest,
@@ -741,6 +852,8 @@ export type {
741
852
  FsListBatchResponse,
742
853
  FsReadRequest,
743
854
  FsReadResponse,
855
+ PublishSandboxFileArtifactRequest,
856
+ SandboxFileArtifactReceipt,
744
857
  FsWriteRequest,
745
858
  FsWriteResponse,
746
859
  FsDeleteRequest,
@@ -795,6 +908,8 @@ export type {
795
908
  UpdateSessionGoalRequest,
796
909
  UpdateSessionMcpApprovalPolicyRequest,
797
910
  UpdateSessionMcpApprovalPolicyResponse,
911
+ UpdateSessionAttentionRequest,
912
+ UpdateSessionArchiveRequest,
798
913
  UpdateSessionPinRequest,
799
914
  UpdateSessionRequest,
800
915
  UpdateSessionToolPolicyRequest,
@@ -802,6 +917,7 @@ export type {
802
917
  UpdateWorkspaceEnvironmentRequest,
803
918
  UpdateWorkspaceMemberRequest,
804
919
  UpdateWorkspaceRequest,
920
+ UpdateWorkspaceModelAccessPolicyRequest,
805
921
  UpdateWorkspaceSettingsRequest,
806
922
  WorkspaceSlackReactionSummonSettings,
807
923
  TranscribeAudioResponse,
@@ -811,6 +927,13 @@ export type {
811
927
  UserApprovalDecisionEventInput,
812
928
  UserHumanInputResponseEventInput,
813
929
  UserMessageEventInput,
930
+ PersonalResourceAttachmentIntent,
931
+ PersonalResourceAttachmentSummary,
932
+ UserResourceAuthoritySummary,
933
+ UserResourceAuthorityGrant,
934
+ UserResourceKind,
935
+ ListUserResourceAuthoritiesOptions,
936
+ ListUserResourceAuthoritiesResponse,
814
937
  Workspace,
815
938
  WorkspaceControlEvent,
816
939
  VariableSet,
@@ -818,6 +941,7 @@ export type {
818
941
  VariableSetVariableMetadata,
819
942
  Channel,
820
943
  CreateChannelRequest,
944
+ ReorderChannelsRequest,
821
945
  UpdateChannelRequest,
822
946
  UpdateSessionChannelRequest,
823
947
  Rig,
@@ -887,6 +1011,7 @@ export type {
887
1011
  WorkspaceMemorySearchRequest,
888
1012
  WorkspaceMemorySearchResult,
889
1013
  WorkspaceMemorySearchResponse,
1014
+ WorkspaceSessionDefaults,
890
1015
  WorkspaceSettings,
891
1016
  WorkspaceVideoGenerationSettings,
892
1017
  WorkspaceVoiceInputSettings,
@@ -895,6 +1020,14 @@ export type {
895
1020
  MetricSample,
896
1021
  MachineState,
897
1022
  MachineKind,
1023
+ MachineConnectionAuthority,
1024
+ MachineRuntimeCapabilities,
1025
+ MachineUpdateStatus,
1026
+ MachineUpdateState,
1027
+ MachineRuntime,
1028
+ UpdateMachineAgentResponse,
1029
+ MachineOperationPolicy,
1030
+ UpdateMachineOperationPolicyRequest,
898
1031
  MachineView,
899
1032
  MachinesResponse,
900
1033
  MachineMetricsSeriesResponse,
@@ -906,6 +1039,7 @@ export type {
906
1039
  // Self-hosted enrollment UX (design 11): click-Grant approve-page lookup/deny +
907
1040
  // headless enroll-token mint/exchange.
908
1041
  EnrollmentOs,
1042
+ ResourceAuthorityScope,
909
1043
  DeviceEnrollmentLookupRequest,
910
1044
  DeviceEnrollmentLookupResponse,
911
1045
  DeviceEnrollmentLookupMachine,
@@ -1,4 +1,5 @@
1
1
  import type { OpenGeniRequestOptions } from "./client";
2
+ import { OpenGeniApiError } from "./errors";
2
3
  import type { RetainedArtifactReference } from "./types";
3
4
 
4
5
  /** Public Browser/Computer protocol version. Driver and provider details stay private. */
@@ -28,6 +29,83 @@ export type InteractionJsonValue =
28
29
  | InteractionJsonValue[]
29
30
  | { [key: string]: InteractionJsonValue };
30
31
 
32
+ export type InteractionControlFailureCode =
33
+ | "unknown"
34
+ | "unsupported"
35
+ | "os"
36
+ | "not_found"
37
+ | "consent_required"
38
+ | "timeout"
39
+ | "draining"
40
+ | "protocol"
41
+ | "stream"
42
+ | "agent_offline"
43
+ | "fenced"
44
+ | "payload_too_large";
45
+
46
+ export type InteractionControlFailure = {
47
+ layer: "connected_machine";
48
+ surface: "browser" | "computer";
49
+ code: InteractionControlFailureCode;
50
+ retryable: boolean;
51
+ outcomeUnknown: boolean;
52
+ requestId: string | undefined;
53
+ controlRequestId: string | undefined;
54
+ message: string;
55
+ };
56
+
57
+ /** Decodes the bounded typed control-failure details emitted by OpenGeni. Raw
58
+ * provider/OS detail is intentionally absent; both correlation ids are opaque. */
59
+ export function interactionControlFailureFromError(
60
+ error: unknown,
61
+ ): InteractionControlFailure | null {
62
+ if (!(error instanceof OpenGeniApiError)) return null;
63
+ const details = error.details;
64
+ if (!details || details.interactionLayer !== "connected_machine") return null;
65
+ const surface = details.interactionSurface;
66
+ const code = details.controlFailureCode;
67
+ if ((surface !== "browser" && surface !== "computer") || !isControlFailureCode(code)) {
68
+ return null;
69
+ }
70
+ const controlRequestId = boundedOpaqueCorrelation(details.controlRequestId);
71
+ return {
72
+ layer: "connected_machine",
73
+ surface,
74
+ code,
75
+ retryable: error.retryable,
76
+ outcomeUnknown: error.outcomeUnknown,
77
+ requestId: error.correlationId,
78
+ controlRequestId,
79
+ message: error.message,
80
+ };
81
+ }
82
+
83
+ function isControlFailureCode(value: unknown): value is InteractionControlFailureCode {
84
+ return (
85
+ typeof value === "string" &&
86
+ [
87
+ "unknown",
88
+ "unsupported",
89
+ "os",
90
+ "not_found",
91
+ "consent_required",
92
+ "timeout",
93
+ "draining",
94
+ "protocol",
95
+ "stream",
96
+ "agent_offline",
97
+ "fenced",
98
+ "payload_too_large",
99
+ ].includes(value)
100
+ );
101
+ }
102
+
103
+ function boundedOpaqueCorrelation(value: unknown): string | undefined {
104
+ return typeof value === "string" && value.length <= 128 && /^[A-Za-z0-9._:-]+$/u.test(value)
105
+ ? value
106
+ : undefined;
107
+ }
108
+
31
109
  export type InteractionPlacement =
32
110
  | { kind: "sandbox_group"; sandboxGroupId: string }
33
111
  | { kind: "connected_machine"; sandboxId: string }
@@ -71,8 +149,18 @@ export type AttachedBrowserDevice = {
71
149
  updatedAt: string;
72
150
  };
73
151
 
152
+ export type AttachedBrowserBridge = {
153
+ enrollmentId: string;
154
+ state: "online" | "offline";
155
+ bridgeGeneration: string;
156
+ inventoryRevision: number;
157
+ connectedProfileCount: number;
158
+ lastSeenAt: string;
159
+ };
160
+
74
161
  export type AttachedBrowserDeviceListResponse = {
75
162
  revision: number;
163
+ bridges: AttachedBrowserBridge[];
76
164
  devices: AttachedBrowserDevice[];
77
165
  };
78
166
 
@@ -2439,6 +2527,7 @@ export function browserFrameSocketUrl(
2439
2527
  else if (url.protocol !== "ws:" && url.protocol !== "wss:") {
2440
2528
  throw new Error("browser frame attachment did not contain an HTTP or WebSocket URL");
2441
2529
  }
2530
+ upgradeMixedContentWebSocket(url);
2442
2531
  if (options.format !== undefined) url.searchParams.set("format", options.format);
2443
2532
  setBoundedIntegerQuery(url, "quality", options.quality, 1, 100);
2444
2533
  setBoundedIntegerQuery(url, "maxWidth", options.maxWidth, 1, 4_096);
@@ -2461,6 +2550,7 @@ export function computerFrameSocketUrl(
2461
2550
  else if (url.protocol !== "ws:" && url.protocol !== "wss:") {
2462
2551
  throw new Error("computer frame attachment did not contain an HTTP or WebSocket URL");
2463
2552
  }
2553
+ upgradeMixedContentWebSocket(url);
2464
2554
  if (options.format !== undefined) url.searchParams.set("format", options.format);
2465
2555
  setBoundedIntegerQuery(url, "quality", options.quality, 1, 100);
2466
2556
  setBoundedIntegerQuery(url, "maxWidth", options.maxWidth, 1, 4_096);
@@ -2754,6 +2844,11 @@ function computerRelevance(session: ComputerSession, associationSessionId: strin
2754
2844
  return Math.max(association, Number.isFinite(used) ? used : 0);
2755
2845
  }
2756
2846
 
2847
+ function upgradeMixedContentWebSocket(url: URL): void {
2848
+ const protocol = (globalThis as { location?: { protocol?: string } }).location?.protocol;
2849
+ if (protocol === "https:" && url.protocol === "ws:") url.protocol = "wss:";
2850
+ }
2851
+
2757
2852
  function setBoundedIntegerQuery(
2758
2853
  url: URL,
2759
2854
  name: string,
@@ -0,0 +1,33 @@
1
+ import type { OpenGeniClient } from "./client";
2
+ import type {
3
+ OrganizationPrivateSessionSettings,
4
+ UpdateOrganizationPrivateSessionSettingsRequest,
5
+ } from "./types";
6
+
7
+ type OrganizationPrivateSessionSettingsClient = Pick<OpenGeniClient, "requestJson">;
8
+
9
+ function settingsPath(organizationId: string): string {
10
+ return `/v1/organizations/${organizationId}/private-session-settings`;
11
+ }
12
+
13
+ export async function getOrganizationPrivateSessionSettings(
14
+ client: OrganizationPrivateSessionSettingsClient,
15
+ organizationId: string,
16
+ ): Promise<OrganizationPrivateSessionSettings> {
17
+ return await client.requestJson<OrganizationPrivateSessionSettings>(
18
+ "GET",
19
+ settingsPath(organizationId),
20
+ );
21
+ }
22
+
23
+ export async function updateOrganizationPrivateSessionSettings(
24
+ client: OrganizationPrivateSessionSettingsClient,
25
+ organizationId: string,
26
+ request: UpdateOrganizationPrivateSessionSettingsRequest,
27
+ ): Promise<OrganizationPrivateSessionSettings> {
28
+ return await client.requestJson<OrganizationPrivateSessionSettings>(
29
+ "PATCH",
30
+ settingsPath(organizationId),
31
+ request,
32
+ );
33
+ }