@opengeni/sdk 3.3.2 → 3.5.1-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 (58) hide show
  1. package/README.md +15 -2
  2. package/dist/artifact-client.d.ts +2 -1
  3. package/dist/artifacts.d.ts +1 -1
  4. package/dist/artifacts.js +6 -6
  5. package/dist/browser.d.ts +3 -2
  6. package/dist/browser.js +6 -4
  7. package/dist/{chunk-QT3KFVDP.js → chunk-3VIQGNRX.js} +2 -2
  8. package/dist/chunk-3VIQGNRX.js.map +1 -0
  9. package/dist/{chunk-C2H7HBNP.js → chunk-7S2MZ65L.js} +6 -6
  10. package/dist/{chunk-TRNI7KEO.js → chunk-GXC4RESV.js} +164 -15
  11. package/dist/chunk-GXC4RESV.js.map +1 -0
  12. package/dist/{chunk-JUS2UYRP.js → chunk-HILHQEZD.js} +1 -1
  13. package/dist/chunk-HILHQEZD.js.map +1 -0
  14. package/dist/{chunk-C4DJPZRU.js → chunk-OO5LPTO7.js} +14 -1
  15. package/dist/chunk-OO5LPTO7.js.map +1 -0
  16. package/dist/{chunk-YXQX7RQT.js → chunk-PPWKSUDS.js} +2 -2
  17. package/dist/{chunk-KKRO2VCP.js → chunk-QTBAMHEF.js} +2 -2
  18. package/dist/client.d.ts +43 -4
  19. package/dist/codex-realtime-controller.js +2 -2
  20. package/dist/core.d.ts +3 -2
  21. package/dist/core.js +9 -7
  22. package/dist/document-authority.js +5 -5
  23. package/dist/editable-artifacts.js +4 -4
  24. package/dist/errors.d.ts +12 -0
  25. package/dist/github-repositories.d.ts +10 -0
  26. package/dist/github-repositories.js +36 -0
  27. package/dist/github-repositories.js.map +1 -0
  28. package/dist/index.d.ts +6 -5
  29. package/dist/index.js +62 -52
  30. package/dist/index.js.map +1 -1
  31. package/dist/interaction.js +2 -2
  32. package/dist/model-picker-order.d.ts +1 -0
  33. package/dist/model-picker-order.js +10 -0
  34. package/dist/model-picker-order.js.map +1 -0
  35. package/dist/realtime.js +2 -2
  36. package/dist/session-titles.d.ts +2 -28
  37. package/dist/stream.d.ts +2 -0
  38. package/dist/types.d.ts +121 -3
  39. package/package.json +10 -2
  40. package/src/artifact-client.ts +2 -1
  41. package/src/artifacts.ts +1 -0
  42. package/src/browser.ts +3 -0
  43. package/src/client.ts +261 -15
  44. package/src/core.ts +3 -0
  45. package/src/errors.ts +23 -0
  46. package/src/github-repositories.ts +60 -0
  47. package/src/index.ts +27 -1
  48. package/src/model-picker-order.ts +6 -0
  49. package/src/session-titles.ts +8 -82
  50. package/src/stream.ts +29 -8
  51. package/src/types.ts +147 -4
  52. package/dist/chunk-C4DJPZRU.js.map +0 -1
  53. package/dist/chunk-JUS2UYRP.js.map +0 -1
  54. package/dist/chunk-QT3KFVDP.js.map +0 -1
  55. package/dist/chunk-TRNI7KEO.js.map +0 -1
  56. /package/dist/{chunk-C2H7HBNP.js.map → chunk-7S2MZ65L.js.map} +0 -0
  57. /package/dist/{chunk-YXQX7RQT.js.map → chunk-PPWKSUDS.js.map} +0 -0
  58. /package/dist/{chunk-KKRO2VCP.js.map → chunk-QTBAMHEF.js.map} +0 -0
package/README.md CHANGED
@@ -84,10 +84,22 @@ session. There is no organization-wide Skill registry or Skill inheritance in
84
84
  this integration contract. See the canonical guide for the complete route map,
85
85
  security boundary, and delivery checklist.
86
86
 
87
+ Installed Pack Skills normally remain workspace-managed. A Pack may instead
88
+ mark guidance as `session_selected`; installation then exposes it to no agent
89
+ until `createSession` names the reviewed immutable component in
90
+ `installedSkillIds`. OpenGeni copies that exact artifact into the new session,
91
+ so omitting the field from customer-facing creates is a real contamination
92
+ boundary rather than a prompt convention.
93
+ The ordered selection is part of keyed-create identity: reusing an
94
+ `idempotencyKey` with a different selection returns a conflict instead of the
95
+ session configured by the earlier request.
96
+
87
97
  For session lists, `deriveSessionDisplayTitle(session)` returns the durable
88
98
  agent/user title when available. While the automatic title is still pending, it
89
- shows a short, sensitive-safe preview of the opening prompt and automatically
90
- yields to the later `session.title_set` value.
99
+ shows the first short, sensitive-safe line of the opening prompt, skipping an
100
+ unsafe pasted URL or identifier when later safe text exists. If no safe line is
101
+ available, a short session reference keeps rows distinguishable. The display
102
+ automatically yields to the later `session.title_set` value.
91
103
 
92
104
  Browser consoles that do not need operator-only surfaces can import
93
105
  `OpenGeniBrowserClient` from `@opengeni/sdk/browser`. Document authority migration
@@ -748,6 +760,7 @@ Every public endpoint group has typed methods:
748
760
  | Group | Methods |
749
761
  | --- | --- |
750
762
  | Access + workspaces | `getAccessContext`, `listWorkspaces`, `createWorkspace`, `ensureWorkspace`, `getWorkspace`, `updateWorkspace` |
763
+ | Managed organizations | `createOrganization` for first-time compatibility; `createAdditionalOrganization` for an already-onboarded human; `listOrganizationMemberships`, `listOrganizationInvitations`, `acceptOrganizationInvitation` |
751
764
  | Sessions + events | `createSession`, `listSessions`, `listSessionPage`, `listAgentTopology`, `getSession`, `getSessionLineage`, `updateSession`, `listEvents`, `sendEvent`, `sendMessage`, `steerMessage`, `pauseSession`, `resumeSession`, `cancelSession`, `sendApprovalDecision`, `streamEvents`, `openEventStream` |
752
765
  | Machines (bring-your-own-compute) | `listMachines`, `machineMetricsSeries`, `swapActiveSandbox`, `mintEnrollToken`, `lookupDeviceEnrollment`, `approveDeviceEnrollment`, `denyDeviceEnrollment` |
753
766
  | Turn queue | `getQueue`, `moveQueueItem`, `editQueueItem`, `steerQueueItem`, `deleteQueueItem` |
@@ -1,4 +1,5 @@
1
1
  import { OpenGeniDocumentAuthorityClient } from "./document-authority-client.js";
2
+ import type { FetchResponse } from "./client.js";
2
3
  import type { CreateEditableArtifactMaterializationRequest, CreateEditableArtifactResourceRequest, EditableArtifactListResource, EditableArtifactMaterializationJobResource, EditableArtifactPinnedVersionResource, EditableArtifactResource, ImportEditableArtifactResourceRequest, ListSessionEditableArtifactResourcesOptions, PinEditableArtifactVersionRequest, ReadEditableArtifactMaterializationOptions, ReadEditableArtifactResourceOptions } from "./editable-artifact-resources.js";
3
4
  import type { CreateWorkspaceArtifactRequest, PublishWorkspaceArtifactVersionRequest, RollbackWorkspaceArtifactRequest, WorkspaceArtifactContentResponse, WorkspaceArtifactDetailResponse, WorkspaceArtifactListOptions, WorkspaceArtifactListResponse, WorkspaceArtifactMutationResponse } from "./workspace-artifacts.js";
4
5
  /** Public SDK client. Optional operator and artifact operations stay out of the console core. */
@@ -19,7 +20,7 @@ export declare class OpenGeniClient extends OpenGeniDocumentAuthorityClient {
19
20
  }>): Promise<EditableArtifactMaterializationJobResource>;
20
21
  getEditableArtifactMaterialization(workspaceId: string, artifactId: string, jobId: string, options: ReadEditableArtifactMaterializationOptions): Promise<EditableArtifactMaterializationJobResource>;
21
22
  /** The caller owns the returned bounded response stream. */
22
- downloadEditableArtifactMaterialization(workspaceId: string, artifactId: string, jobId: string, options: ReadEditableArtifactMaterializationOptions): Promise<Response>;
23
+ downloadEditableArtifactMaterialization(workspaceId: string, artifactId: string, jobId: string, options: ReadEditableArtifactMaterializationOptions): Promise<FetchResponse>;
23
24
  listWorkspaceArtifacts(workspaceId: string, options?: WorkspaceArtifactListOptions): Promise<WorkspaceArtifactListResponse>;
24
25
  getWorkspaceArtifact(workspaceId: string, artifactId: string): Promise<WorkspaceArtifactDetailResponse>;
25
26
  getWorkspaceArtifactContent(workspaceId: string, artifactId: string, versionId?: string): Promise<WorkspaceArtifactContentResponse>;
@@ -1,4 +1,4 @@
1
1
  /** Artifact-only API client entry; keeps unrelated SDK surfaces out of editor bundles. */
2
2
  export { OpenGeniClient } from "./artifact-client.js";
3
3
  export type { CreateEditableArtifactMaterializationRequest, CreateEditableArtifactResourceRequest, EditableArtifactListResource, EditableArtifactMaterializationFormat, EditableArtifactMaterializationJobResource, EditableArtifactMaterializationResultResource, EditableArtifactPinnedVersionResource, EditableArtifactResource, ListSessionEditableArtifactResourcesOptions, PinEditableArtifactVersionRequest, ReadEditableArtifactMaterializationOptions, ReadEditableArtifactResourceOptions, } from "./editable-artifact-resources.js";
4
- export type { FetchLike, GetSessionOptions, OpenGeniClientOptions, OpenGeniRequestOptions, } from "./client.js";
4
+ export type { FetchLike, FetchResponse, GetSessionOptions, OpenGeniClientOptions, OpenGeniRequestOptions, } from "./client.js";
package/dist/artifacts.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  OpenGeniClient
3
- } from "./chunk-QT3KFVDP.js";
4
- import "./chunk-YXQX7RQT.js";
5
- import "./chunk-TRNI7KEO.js";
6
- import "./chunk-JUS2UYRP.js";
7
- import "./chunk-KKRO2VCP.js";
8
- import "./chunk-C4DJPZRU.js";
3
+ } from "./chunk-3VIQGNRX.js";
4
+ import "./chunk-PPWKSUDS.js";
5
+ import "./chunk-GXC4RESV.js";
6
+ import "./chunk-QTBAMHEF.js";
7
+ import "./chunk-HILHQEZD.js";
8
+ import "./chunk-OO5LPTO7.js";
9
9
  export {
10
10
  OpenGeniClient
11
11
  };
package/dist/browser.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /** Browser-console client. Optional SDK surfaces must not enter this eager graph. */
2
2
  export { OpenGeniClient as OpenGeniBrowserClient } from "./client.js";
3
- export type { FetchLike, GetSessionOptions, OpenGeniClientOptions, OpenGeniRequestOptions, SendMessageInput, SteerMessageResult, TranscribeAudioInput, WorkspaceControlEventPage, } from "./client.js";
4
- export { OpenGeniApiContractMismatchError, OpenGeniApiError, OpenGeniSessionListCursorError, OpenGeniStreamError, isRetryableStreamError, } from "./errors.js";
3
+ export type { FetchLike, FetchResponse, GetSessionOptions, OpenGeniClientOptions, OpenGeniRequestOptions, SendMessageInput, SteerMessageResult, TranscribeAudioInput, WorkspaceControlEventPage, } from "./client.js";
4
+ export { OpenGeniApiContractMismatchError, OpenGeniApiError, OpenGeniSecureContextRequiredError, OpenGeniSessionListCursorError, OpenGeniStreamError, isRetryableStreamError, } from "./errors.js";
5
+ export type { OpenGeniSecureContextRequiredReason } from "./errors.js";
5
6
  export { resolveWorkspaceVoiceInputEnabled } from "./transcription.js";
6
7
  export { OPENGENI_API_CONTRACT_HEADER, OPENGENI_API_CONTRACT_REVISION } from "./types.js";
package/dist/browser.js CHANGED
@@ -3,25 +3,27 @@ import {
3
3
  } from "./chunk-VYCTL62C.js";
4
4
  import {
5
5
  OpenGeniClient
6
- } from "./chunk-TRNI7KEO.js";
6
+ } from "./chunk-GXC4RESV.js";
7
+ import "./chunk-QTBAMHEF.js";
7
8
  import {
8
9
  OPENGENI_API_CONTRACT_HEADER,
9
10
  OPENGENI_API_CONTRACT_REVISION
10
- } from "./chunk-JUS2UYRP.js";
11
- import "./chunk-KKRO2VCP.js";
11
+ } from "./chunk-HILHQEZD.js";
12
12
  import {
13
13
  OpenGeniApiContractMismatchError,
14
14
  OpenGeniApiError,
15
+ OpenGeniSecureContextRequiredError,
15
16
  OpenGeniSessionListCursorError,
16
17
  OpenGeniStreamError,
17
18
  isRetryableStreamError
18
- } from "./chunk-C4DJPZRU.js";
19
+ } from "./chunk-OO5LPTO7.js";
19
20
  export {
20
21
  OPENGENI_API_CONTRACT_HEADER,
21
22
  OPENGENI_API_CONTRACT_REVISION,
22
23
  OpenGeniApiContractMismatchError,
23
24
  OpenGeniApiError,
24
25
  OpenGeniClient as OpenGeniBrowserClient,
26
+ OpenGeniSecureContextRequiredError,
25
27
  OpenGeniSessionListCursorError,
26
28
  OpenGeniStreamError,
27
29
  isRetryableStreamError,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  OpenGeniDocumentAuthorityClient
3
- } from "./chunk-YXQX7RQT.js";
3
+ } from "./chunk-PPWKSUDS.js";
4
4
 
5
5
  // src/artifact-client.ts
6
6
  var OpenGeniClient = class extends OpenGeniDocumentAuthorityClient {
@@ -125,4 +125,4 @@ var OpenGeniClient = class extends OpenGeniDocumentAuthorityClient {
125
125
  export {
126
126
  OpenGeniClient
127
127
  };
128
- //# sourceMappingURL=chunk-QT3KFVDP.js.map
128
+ //# sourceMappingURL=chunk-3VIQGNRX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/artifact-client.ts"],"sourcesContent":["import { OpenGeniDocumentAuthorityClient } from \"./document-authority-client\";\nimport type { FetchResponse } from \"./client\";\nimport type {\n CreateEditableArtifactMaterializationRequest,\n CreateEditableArtifactResourceRequest,\n EditableArtifactListResource,\n EditableArtifactMaterializationJobResource,\n EditableArtifactPinnedVersionResource,\n EditableArtifactResource,\n ImportEditableArtifactResourceRequest,\n ListSessionEditableArtifactResourcesOptions,\n PinEditableArtifactVersionRequest,\n ReadEditableArtifactMaterializationOptions,\n ReadEditableArtifactResourceOptions,\n} from \"./editable-artifact-resources\";\nimport type {\n CreateWorkspaceArtifactRequest,\n PublishWorkspaceArtifactVersionRequest,\n RollbackWorkspaceArtifactRequest,\n WorkspaceArtifactContentResponse,\n WorkspaceArtifactDetailResponse,\n WorkspaceArtifactListOptions,\n WorkspaceArtifactListResponse,\n WorkspaceArtifactMutationResponse,\n} from \"./workspace-artifacts\";\n\n/** Public SDK client. Optional operator and artifact operations stay out of the console core. */\nexport class OpenGeniClient extends OpenGeniDocumentAuthorityClient {\n async createEditableArtifact(\n workspaceId: string,\n request: CreateEditableArtifactResourceRequest,\n options: Readonly<{ signal?: AbortSignal | undefined }> = {},\n ): Promise<EditableArtifactResource> {\n return await this.requestJson<EditableArtifactResource>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts`,\n request,\n {},\n options,\n );\n }\n\n async importEditableArtifact(\n workspaceId: string,\n request: ImportEditableArtifactResourceRequest,\n options: Readonly<{ signal?: AbortSignal | undefined }> = {},\n ): Promise<EditableArtifactResource> {\n return await this.requestJson<EditableArtifactResource>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/imports`,\n request,\n {},\n options,\n );\n }\n\n async getEditableArtifact(\n workspaceId: string,\n artifactId: string,\n options: ReadEditableArtifactResourceOptions,\n ): Promise<EditableArtifactResource> {\n return await this.requestJson<EditableArtifactResource>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}`,\n undefined,\n { replicaId: options.replicaId },\n options,\n );\n }\n\n async listSessionEditableArtifacts(\n workspaceId: string,\n sourceSessionId: string,\n options: ListSessionEditableArtifactResourcesOptions,\n ): Promise<EditableArtifactListResource> {\n return await this.requestJson<EditableArtifactListResource>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts`,\n undefined,\n { sourceSessionId, replicaId: options.replicaId },\n options,\n );\n }\n\n async pinEditableArtifactVersion(\n workspaceId: string,\n artifactId: string,\n request: PinEditableArtifactVersionRequest,\n options: Readonly<{ signal?: AbortSignal | undefined }> = {},\n ): Promise<EditableArtifactPinnedVersionResource> {\n return await this.requestJson<EditableArtifactPinnedVersionResource>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}/versions`,\n request,\n {},\n options,\n );\n }\n\n async createEditableArtifactMaterialization(\n workspaceId: string,\n artifactId: string,\n request: CreateEditableArtifactMaterializationRequest,\n options: Readonly<{ signal?: AbortSignal | undefined }> = {},\n ): Promise<EditableArtifactMaterializationJobResource> {\n return await this.requestJson<EditableArtifactMaterializationJobResource>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}/materializations`,\n request,\n {},\n options,\n );\n }\n\n async getEditableArtifactMaterialization(\n workspaceId: string,\n artifactId: string,\n jobId: string,\n options: ReadEditableArtifactMaterializationOptions,\n ): Promise<EditableArtifactMaterializationJobResource> {\n return await this.requestJson<EditableArtifactMaterializationJobResource>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}/materializations/${encodeURIComponent(jobId)}`,\n undefined,\n { replicaId: options.replicaId },\n options,\n );\n }\n\n /** The caller owns the returned bounded response stream. */\n async downloadEditableArtifactMaterialization(\n workspaceId: string,\n artifactId: string,\n jobId: string,\n options: ReadEditableArtifactMaterializationOptions,\n ): Promise<FetchResponse> {\n return await this.requestResponse(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}/materializations/${encodeURIComponent(jobId)}/download`,\n { replicaId: options.replicaId },\n options,\n );\n }\n\n async listWorkspaceArtifacts(\n workspaceId: string,\n options: WorkspaceArtifactListOptions = {},\n ): Promise<WorkspaceArtifactListResponse> {\n const query = new URLSearchParams();\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n if (options.cursor) query.set(\"cursor\", options.cursor);\n const suffix = query.size > 0 ? `?${query.toString()}` : \"\";\n return await this.requestJson<WorkspaceArtifactListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/published-artifacts${suffix}`,\n );\n }\n\n async getWorkspaceArtifact(\n workspaceId: string,\n artifactId: string,\n ): Promise<WorkspaceArtifactDetailResponse> {\n return await this.requestJson<WorkspaceArtifactDetailResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}`,\n );\n }\n\n async getWorkspaceArtifactContent(\n workspaceId: string,\n artifactId: string,\n versionId?: string,\n ): Promise<WorkspaceArtifactContentResponse> {\n const query = versionId ? `?versionId=${encodeURIComponent(versionId)}` : \"\";\n return await this.requestJson<WorkspaceArtifactContentResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}/content${query}`,\n );\n }\n\n async createWorkspaceArtifact(\n workspaceId: string,\n request: CreateWorkspaceArtifactRequest,\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/published-artifacts`,\n request,\n );\n }\n\n async publishWorkspaceArtifactVersion(\n workspaceId: string,\n artifactId: string,\n request: PublishWorkspaceArtifactVersionRequest,\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}/versions`,\n request,\n );\n }\n\n async rollbackWorkspaceArtifact(\n workspaceId: string,\n artifactId: string,\n request: RollbackWorkspaceArtifactRequest,\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}/rollback`,\n request,\n );\n }\n}\n"],"mappings":";;;;;AA2BO,IAAM,iBAAN,cAA6B,gCAAgC;AAAA,EAClE,MAAM,uBACJ,aACA,SACA,UAA0D,CAAC,GACxB;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC;AAAA,MACjD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,SACA,UAA0D,CAAC,GACxB;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC;AAAA,MACjD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,aACA,YACA,SACmC;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC,uBAAuB,mBAAmB,UAAU,CAAC;AAAA,MACtG;AAAA,MACA,EAAE,WAAW,QAAQ,UAAU;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,6BACJ,aACA,iBACA,SACuC;AACvC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC;AAAA,MACjD;AAAA,MACA,EAAE,iBAAiB,WAAW,QAAQ,UAAU;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,2BACJ,aACA,YACA,SACA,UAA0D,CAAC,GACX;AAChD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC,uBAAuB,mBAAmB,UAAU,CAAC;AAAA,MACtG;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sCACJ,aACA,YACA,SACA,UAA0D,CAAC,GACN;AACrD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC,uBAAuB,mBAAmB,UAAU,CAAC;AAAA,MACtG;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mCACJ,aACA,YACA,OACA,SACqD;AACrD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC,uBAAuB,mBAAmB,UAAU,CAAC,qBAAqB,mBAAmB,KAAK,CAAC;AAAA,MACpJ;AAAA,MACA,EAAE,WAAW,QAAQ,UAAU;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wCACJ,aACA,YACA,OACA,SACwB;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC,uBAAuB,mBAAmB,UAAU,CAAC,qBAAqB,mBAAmB,KAAK,CAAC;AAAA,MACpJ,EAAE,WAAW,QAAQ,UAAU;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,UAAwC,CAAC,GACD;AACxC,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,UAAU,OAAW,OAAM,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AACzE,QAAI,QAAQ,OAAQ,OAAM,IAAI,UAAU,QAAQ,MAAM;AACtD,UAAM,SAAS,MAAM,OAAO,IAAI,IAAI,MAAM,SAAS,CAAC,KAAK;AACzD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,MAAM;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,YAC0C;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,wBAAwB,mBAAmB,UAAU,CAAC;AAAA,IACrF;AAAA,EACF;AAAA,EAEA,MAAM,4BACJ,aACA,YACA,WAC2C;AAC3C,UAAM,QAAQ,YAAY,cAAc,mBAAmB,SAAS,CAAC,KAAK;AAC1E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,wBAAwB,mBAAmB,UAAU,CAAC,WAAW,KAAK;AAAA,IACrG;AAAA,EACF;AAAA,EAEA,MAAM,wBACJ,aACA,SAC4C;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gCACJ,aACA,YACA,SAC4C;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,wBAAwB,mBAAmB,UAAU,CAAC;AAAA,MACnF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,0BACJ,aACA,YACA,SAC4C;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,wBAAwB,mBAAmB,UAAU,CAAC;AAAA,MACnF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  OpenGeniApiError
3
- } from "./chunk-C4DJPZRU.js";
3
+ } from "./chunk-OO5LPTO7.js";
4
4
 
5
5
  // src/codex-realtime-v3-wire.ts
6
6
  var CODEX_REALTIME_INITIAL_ITEMS_MAX_COUNT = 128;
@@ -2253,10 +2253,6 @@ function safeError2(error) {
2253
2253
  }
2254
2254
 
2255
2255
  export {
2256
- CodexRealtimeMicrophoneError,
2257
- startCodexRealtimeWebrtc,
2258
- acquireCodexRealtimeMicrophone,
2259
- codexRealtimeMicrophoneHealthy,
2260
2256
  CODEX_REALTIME_INITIAL_ITEMS_MAX_COUNT,
2261
2257
  CODEX_REALTIME_INITIAL_ITEMS_MAX_TOKENS,
2262
2258
  CODEX_REALTIME_CONTEXT_APPEND_MAX_BYTES,
@@ -2271,6 +2267,10 @@ export {
2271
2267
  CODEX_REALTIME_V3_PENDING_MAX_ENTRIES,
2272
2268
  CODEX_REALTIME_V3_PENDING_MAX_BYTES,
2273
2269
  createCodexRealtimeV3Bridge,
2270
+ CodexRealtimeMicrophoneError,
2271
+ startCodexRealtimeWebrtc,
2272
+ acquireCodexRealtimeMicrophone,
2273
+ codexRealtimeMicrophoneHealthy,
2274
2274
  projectSessionRealtimeLifecycle,
2275
2275
  CODEX_REALTIME_NEGOTIATION_TIMEOUT_MS,
2276
2276
  sessionRealtimeOwnerStorageNamespace,
@@ -2278,4 +2278,4 @@ export {
2278
2278
  hasStoredSessionRealtimeOwnerProof,
2279
2279
  createCodexRealtimeController
2280
2280
  };
2281
- //# sourceMappingURL=chunk-C2H7HBNP.js.map
2281
+ //# sourceMappingURL=chunk-7S2MZ65L.js.map
@@ -1,3 +1,7 @@
1
+ import {
2
+ OpenGeniInteractionClient,
3
+ decodeComputerFrameMetadataHeader
4
+ } from "./chunk-QTBAMHEF.js";
1
5
  import {
2
6
  COMPUTER_SCREENSHOT_MAX_BYTES,
3
7
  GENERATED_VIDEO_MAX_BYTES,
@@ -5,19 +9,16 @@ import {
5
9
  OPENGENI_API_CONTRACT_REVISION,
6
10
  OPENGENI_CORRELATION_HEADER,
7
11
  RETAINED_OUTPUT_MAX_PAGE_BYTES
8
- } from "./chunk-JUS2UYRP.js";
9
- import {
10
- OpenGeniInteractionClient,
11
- decodeComputerFrameMetadataHeader
12
- } from "./chunk-KKRO2VCP.js";
12
+ } from "./chunk-HILHQEZD.js";
13
13
  import {
14
14
  OpenGeniApiContractMismatchError,
15
15
  OpenGeniApiError,
16
+ OpenGeniSecureContextRequiredError,
16
17
  OpenGeniSessionListCursorError,
17
18
  OpenGeniStreamError,
18
19
  isAbortError,
19
20
  isRetryableStreamError
20
- } from "./chunk-C4DJPZRU.js";
21
+ } from "./chunk-OO5LPTO7.js";
21
22
 
22
23
  // src/sse.ts
23
24
  async function* parseSseStream(stream) {
@@ -89,6 +90,9 @@ async function* parseSseStream(stream) {
89
90
  }
90
91
 
91
92
  // src/stream.ts
93
+ var SESSION_EVENT_STREAM_COVERAGE = Symbol.for(
94
+ "@opengeni/sdk/session-event-stream-covered-through"
95
+ );
92
96
  async function* streamSessionEvents(transport, options = {}) {
93
97
  const signal = options.signal;
94
98
  const reconnect = options.reconnect ?? true;
@@ -127,7 +131,8 @@ async function* streamSessionEvents(transport, options = {}) {
127
131
  if (!event) {
128
132
  continue;
129
133
  }
130
- const coveredSequence = eventResumeSequence(event);
134
+ const coveredSequence = trustedSseSequence(message.id, event.sequence);
135
+ markSessionEventStreamCoverage(event, coveredSequence);
131
136
  if (coveredSequence <= cursor) continue;
132
137
  if (event.sequence > cursor + 1) {
133
138
  for await (const missed of backfillEvents(transport, cursor, event.sequence - 1)) {
@@ -265,12 +270,22 @@ function parseSessionEvent(data) {
265
270
  }
266
271
  return parsed;
267
272
  }
268
- function eventResumeSequence(event) {
269
- if (!event.payload || typeof event.payload !== "object" || Array.isArray(event.payload)) {
270
- return event.sequence;
271
- }
272
- const covered = Number(event.payload.coalescedUntil);
273
- return Math.max(event.sequence, Number.isFinite(covered) ? Math.floor(covered) : event.sequence);
273
+ function sessionEventStreamCoveredThrough(event) {
274
+ const covered = event[SESSION_EVENT_STREAM_COVERAGE];
275
+ return typeof covered === "number" && Number.isSafeInteger(covered) && covered >= event.sequence ? covered : null;
276
+ }
277
+ function trustedSseSequence(id, sequence) {
278
+ if (id === void 0 || !/^\d+$/.test(id)) return sequence;
279
+ const covered = Number(id);
280
+ return Number.isSafeInteger(covered) && covered >= sequence ? covered : sequence;
281
+ }
282
+ function markSessionEventStreamCoverage(event, covered) {
283
+ Object.defineProperty(event, SESSION_EVENT_STREAM_COVERAGE, {
284
+ value: covered,
285
+ enumerable: false,
286
+ configurable: false,
287
+ writable: false
288
+ });
274
289
  }
275
290
  async function sleep(delayMs, signal) {
276
291
  if (signal?.aborted || delayMs <= 0) {
@@ -3019,6 +3034,113 @@ var OpenGeniClient = class {
3019
3034
  options
3020
3035
  );
3021
3036
  }
3037
+ /** List workspace-owned unpinned Vercel AI Gateway model slugs. */
3038
+ async listWorkspaceGatewayCustomModels(workspaceId) {
3039
+ return await this.requestJson(
3040
+ "GET",
3041
+ `/v1/workspaces/${workspaceId}/gateway-custom-models`
3042
+ );
3043
+ }
3044
+ /** Add one exact upstream Vercel AI Gateway slug. */
3045
+ async createWorkspaceGatewayCustomModel(workspaceId, request) {
3046
+ return await this.requestJson(
3047
+ "POST",
3048
+ `/v1/workspaces/${workspaceId}/gateway-custom-models`,
3049
+ request
3050
+ );
3051
+ }
3052
+ /** Remove one workspace custom Gateway model by its stable row id. */
3053
+ async deleteWorkspaceGatewayCustomModel(workspaceId, customModelId, request) {
3054
+ if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(
3055
+ customModelId
3056
+ )) {
3057
+ throw new TypeError("customModelId must be a UUID");
3058
+ }
3059
+ await this.requestVoid(
3060
+ "DELETE",
3061
+ `/v1/workspaces/${workspaceId}/gateway-custom-models/${encodeURIComponent(customModelId)}`,
3062
+ request
3063
+ );
3064
+ }
3065
+ /** List workspace-owned unpinned OpenRouter model slugs. */
3066
+ async listWorkspaceOpenRouterCustomModels(workspaceId) {
3067
+ return await this.requestJson(
3068
+ "GET",
3069
+ `/v1/workspaces/${workspaceId}/openrouter-custom-models`
3070
+ );
3071
+ }
3072
+ /** Add one exact upstream OpenRouter slug. */
3073
+ async createWorkspaceOpenRouterCustomModel(workspaceId, request) {
3074
+ return await this.requestJson(
3075
+ "POST",
3076
+ `/v1/workspaces/${workspaceId}/openrouter-custom-models`,
3077
+ request
3078
+ );
3079
+ }
3080
+ /** Remove one workspace custom OpenRouter model by its stable row id. */
3081
+ async deleteWorkspaceOpenRouterCustomModel(workspaceId, customModelId, request) {
3082
+ if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(
3083
+ customModelId
3084
+ )) {
3085
+ throw new TypeError("customModelId must be a UUID");
3086
+ }
3087
+ await this.requestVoid(
3088
+ "DELETE",
3089
+ `/v1/workspaces/${workspaceId}/openrouter-custom-models/${encodeURIComponent(customModelId)}`,
3090
+ request
3091
+ );
3092
+ }
3093
+ /** Read metadata for one organization-owned model-provider connection. */
3094
+ async getOrganizationModelProviderConnection(organizationId, providerKind) {
3095
+ return await this.requestJson(
3096
+ "GET",
3097
+ `/v1/organizations/${organizationId}/model-providers/${providerKind}`
3098
+ );
3099
+ }
3100
+ /** Connect or rotate one organization-owned provider credential. */
3101
+ async upsertOrganizationModelProviderConnection(organizationId, providerKind, request) {
3102
+ return await this.requestJson(
3103
+ "PUT",
3104
+ `/v1/organizations/${organizationId}/model-providers/${providerKind}`,
3105
+ request
3106
+ );
3107
+ }
3108
+ /** Revoke one organization-owned provider credential. */
3109
+ async revokeOrganizationModelProviderConnection(organizationId, providerKind, request) {
3110
+ return await this.requestJson(
3111
+ "DELETE",
3112
+ `/v1/organizations/${organizationId}/model-providers/${providerKind}`,
3113
+ request
3114
+ );
3115
+ }
3116
+ /** List organization-owned exact upstream model slugs. */
3117
+ async listOrganizationProviderCustomModels(organizationId, providerKind) {
3118
+ return await this.requestJson(
3119
+ "GET",
3120
+ `/v1/organizations/${organizationId}/model-providers/${providerKind}/custom-models`
3121
+ );
3122
+ }
3123
+ /** Add one organization-owned exact upstream model slug. */
3124
+ async createOrganizationProviderCustomModel(organizationId, providerKind, request) {
3125
+ return await this.requestJson(
3126
+ "POST",
3127
+ `/v1/organizations/${organizationId}/model-providers/${providerKind}/custom-models`,
3128
+ request
3129
+ );
3130
+ }
3131
+ /** Retire one organization-owned custom model. */
3132
+ async deleteOrganizationProviderCustomModel(organizationId, providerKind, customModelId, request) {
3133
+ if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(
3134
+ customModelId
3135
+ )) {
3136
+ throw new TypeError("customModelId must be a UUID");
3137
+ }
3138
+ return await this.requestJson(
3139
+ "DELETE",
3140
+ `/v1/organizations/${organizationId}/model-providers/${providerKind}/custom-models/${encodeURIComponent(customModelId)}`,
3141
+ request
3142
+ );
3143
+ }
3022
3144
  /** Read the workspace's hard provider/model allowlist. */
3023
3145
  async getWorkspaceModelAccessPolicy(workspaceId) {
3024
3146
  return await this.requestJson(
@@ -3087,6 +3209,14 @@ var OpenGeniClient = class {
3087
3209
  async createOrganization(request) {
3088
3210
  return await this.requestJson("POST", "/v1/organizations", request);
3089
3211
  }
3212
+ /** Create another organization owned by the current managed human. */
3213
+ async createAdditionalOrganization(request) {
3214
+ return await this.requestJson(
3215
+ "POST",
3216
+ "/v1/organizations/additional",
3217
+ request
3218
+ );
3219
+ }
3090
3220
  /** Pending and historical invitations addressed to the current managed human. */
3091
3221
  async listOrganizationInvitations(options = {}) {
3092
3222
  const query = new URLSearchParams();
@@ -3147,7 +3277,7 @@ var OpenGeniClient = class {
3147
3277
  `/v1/organizations/${organizationId}/overview`
3148
3278
  );
3149
3279
  }
3150
- /** Create a shared workspace without implicitly granting the actor access. */
3280
+ /** Create a shared workspace and grant its creator explicit workspace-admin access. */
3151
3281
  async createOrganizationWorkspace(organizationId, request) {
3152
3282
  return await this.requestJson(
3153
3283
  "POST",
@@ -3170,6 +3300,13 @@ var OpenGeniClient = class {
3170
3300
  request
3171
3301
  );
3172
3302
  }
3303
+ /** Delete a shared workspace through organization-administrator authority. */
3304
+ async deleteOrganizationWorkspace(organizationId, workspaceId) {
3305
+ await this.requestVoid(
3306
+ "DELETE",
3307
+ `/v1/organizations/${organizationId}/workspaces/${workspaceId}`
3308
+ );
3309
+ }
3173
3310
  async putOrganizationWorkspaceMember(organizationId, workspaceId, membershipId, request) {
3174
3311
  return await this.requestJson(
3175
3312
  "PUT",
@@ -3992,6 +4129,7 @@ var OpenGeniClient = class {
3992
4129
  if (input.timeoutMs !== void 0 && (!Number.isFinite(input.timeoutMs) || input.timeoutMs <= 0)) {
3993
4130
  throw new Error("File upload timeout must be a positive number");
3994
4131
  }
4132
+ assertBrowserFileUploadSecureContext();
3995
4133
  const withTimeout = async (timeoutMs, operation) => {
3996
4134
  const controller = new AbortController();
3997
4135
  let timeout;
@@ -5538,6 +5676,16 @@ function mutationTransportError(correlationId) {
5538
5676
  displayMessage: "OpenGeni could not confirm the request \u2014 reconcile before retrying."
5539
5677
  });
5540
5678
  }
5679
+ function assertBrowserFileUploadSecureContext() {
5680
+ const secureContext = typeof window !== "undefined" ? window.isSecureContext : typeof globalThis.isSecureContext === "boolean" ? globalThis.isSecureContext : void 0;
5681
+ if (secureContext === void 0) return;
5682
+ if (!secureContext) {
5683
+ throw new OpenGeniSecureContextRequiredError("insecure_context");
5684
+ }
5685
+ if (typeof globalThis.crypto === "undefined" || typeof globalThis.crypto.subtle?.digest !== "function") {
5686
+ throw new OpenGeniSecureContextRequiredError("web_crypto_unavailable");
5687
+ }
5688
+ }
5541
5689
  async function sha256ForUpload(body) {
5542
5690
  const bytes = typeof body === "string" ? new TextEncoder().encode(body) : body instanceof Blob ? new Uint8Array(await body.arrayBuffer()) : new Uint8Array(body);
5543
5691
  const digest = await globalThis.crypto.subtle.digest("SHA-256", bytes);
@@ -5635,6 +5783,7 @@ async function readBoundedResponseBytes(response, maxBytes, expectedBytes) {
5635
5783
  export {
5636
5784
  parseSseStream,
5637
5785
  streamSessionEvents,
5786
+ sessionEventStreamCoveredThrough,
5638
5787
  streamWorkspaceControlEvents,
5639
5788
  streamWorkspaceInteractionRevisions,
5640
5789
  streamWorkspaceLiveEvents,
@@ -5649,4 +5798,4 @@ export {
5649
5798
  parseMediaGenerationResult,
5650
5799
  OpenGeniClient
5651
5800
  };
5652
- //# sourceMappingURL=chunk-TRNI7KEO.js.map
5801
+ //# sourceMappingURL=chunk-GXC4RESV.js.map