@opengeni/sdk 0.29.0 → 0.33.1

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.
package/src/client.ts CHANGED
@@ -29,6 +29,8 @@ import type {
29
29
  CodexUsageMap,
30
30
  BillingSummary,
31
31
  BillingUsageResponse,
32
+ InsightsRange,
33
+ WorkspaceInsightsResponse,
32
34
  CapabilityCatalogItem,
33
35
  CapabilityCatalogResponse,
34
36
  CapabilityInstallation,
@@ -92,6 +94,7 @@ import type {
92
94
  SwapActiveSandboxResponse,
93
95
  ListWorkspaceMembersResponse,
94
96
  PackInstallation,
97
+ LatencyMode,
95
98
  ReasoningEffort,
96
99
  RetainedArtifactContent,
97
100
  RetainedArtifactContentOptions,
@@ -169,6 +172,7 @@ import type {
169
172
  PtyResizeRequest,
170
173
  PtyCloseRequest,
171
174
  ToolRef,
175
+ TranscribeAudioResponse,
172
176
  UpdateConnectionRequest,
173
177
  UpdateKnowledgeMemoryRequest,
174
178
  UpdateScheduledTaskRequest,
@@ -210,6 +214,23 @@ import type {
210
214
  WorkspaceInstructionPolicyListResponse,
211
215
  WorkspaceInstructionPolicyRevision,
212
216
  } from "./workspace-instruction-policies";
217
+ import type { WorkspaceStateResponse } from "./workspace-state";
218
+ import type {
219
+ ActivatePreferenceRegistryRevisionRequest,
220
+ ChangePreferenceRegistryScopeRequest,
221
+ CorrectPreferenceRegistryRequest,
222
+ CreatePreferenceRegistryProposalRequest,
223
+ DeactivatePreferenceRegistryRequest,
224
+ PreferenceRegistryDetailResponse,
225
+ PreferenceRegistryFullContent,
226
+ PreferenceRegistryListOptions,
227
+ PreferenceRegistryListResponse,
228
+ PreferenceRegistryMutationResponse,
229
+ PreferenceRegistryRecord,
230
+ PreferenceRegistrySnapshot,
231
+ RejectPreferenceRegistryProposalRequest,
232
+ SupersedePreferenceRegistryRequest,
233
+ } from "./preference-registry";
213
234
  import {
214
235
  OPENGENI_API_CONTRACT_HEADER,
215
236
  OPENGENI_API_CONTRACT_REVISION,
@@ -248,7 +269,7 @@ export type OpenGeniClientOptions = {
248
269
  fetch?: FetchLike;
249
270
  };
250
271
 
251
- /** Per-request cancellation for identity-scoped, side-effect-free reads. */
272
+ /** Per-request cancellation for operations whose caller owns an AbortSignal. */
252
273
  export type OpenGeniRequestOptions = {
253
274
  signal?: AbortSignal | undefined;
254
275
  };
@@ -261,6 +282,7 @@ export type SendMessageInput = {
261
282
  tools?: ToolRef[];
262
283
  model?: string;
263
284
  reasoningEffort?: ReasoningEffort;
285
+ latencyMode?: LatencyMode;
264
286
  clientEventId?: string;
265
287
  controlEtag?: string;
266
288
  expectedDraftRevision?: number;
@@ -274,6 +296,13 @@ export type SteerMessageResult = {
274
296
  turn: SessionTurn;
275
297
  };
276
298
 
299
+ export type TranscribeAudioInput = {
300
+ audio: Blob | File | Uint8Array;
301
+ mimeType: string;
302
+ durationSeconds?: number | undefined;
303
+ signal?: AbortSignal | undefined;
304
+ };
305
+
277
306
  /**
278
307
  * Typed client for the OpenGeni public API. Framework-agnostic: only needs
279
308
  * WHATWG `fetch` + streams, so it runs in Node 18+, Bun, Deno, browsers, and
@@ -293,6 +322,60 @@ export class OpenGeniClient {
293
322
 
294
323
  // --- Session lifecycle ---------------------------------------------------
295
324
 
325
+ /** Upload one ephemeral browser recording. This method never retries. */
326
+ async transcribeAudio(
327
+ workspaceId: string,
328
+ input: TranscribeAudioInput,
329
+ ): Promise<TranscribeAudioResponse> {
330
+ const correlationId = crypto.randomUUID();
331
+ const form = new FormData();
332
+ const filename = filenameForAudioMimeType(input.mimeType);
333
+ const audio =
334
+ input.audio instanceof File
335
+ ? input.audio
336
+ : input.audio instanceof Uint8Array
337
+ ? new File([Uint8Array.from(input.audio)], filename, { type: input.mimeType })
338
+ : new File([input.audio], filename, { type: input.mimeType || input.audio.type });
339
+ form.append("audio", audio, filename);
340
+ form.append("mimeType", input.mimeType);
341
+ if (input.durationSeconds !== undefined) {
342
+ form.append("durationSeconds", String(input.durationSeconds));
343
+ }
344
+ let response: Response;
345
+ try {
346
+ response = await this.fetchImpl(this.url(`/v1/workspaces/${workspaceId}/transcriptions`), {
347
+ method: "POST",
348
+ headers: { ...this.headers(correlationId), Accept: "application/json" },
349
+ body: form,
350
+ ...(input.signal ? { signal: input.signal } : {}),
351
+ });
352
+ } catch (error) {
353
+ if (input.signal?.aborted) throw error;
354
+ throw mutationTransportError(correlationId);
355
+ }
356
+ assertApiContractResponse(response);
357
+ if (!response.ok) throw await apiErrorFromResponse(response, { method: "POST", correlationId });
358
+ await assertJsonResponse(response, { method: "POST", correlationId });
359
+ let body: unknown;
360
+ try {
361
+ body = await response.json();
362
+ } catch {
363
+ throw new OpenGeniApiError(response.status, "Invalid transcription response.", {
364
+ code: "invalid_response",
365
+ mutation: true,
366
+ correlationId,
367
+ });
368
+ }
369
+ if (!isTranscribeAudioResponse(body)) {
370
+ throw new OpenGeniApiError(response.status, "Invalid transcription response.", {
371
+ code: "invalid_response",
372
+ mutation: true,
373
+ correlationId,
374
+ });
375
+ }
376
+ return body;
377
+ }
378
+
296
379
  async createSession(
297
380
  workspaceId: string,
298
381
  request: CreateSessionRequest,
@@ -482,7 +565,7 @@ export class OpenGeniClient {
482
565
  async listTurns(
483
566
  workspaceId: string,
484
567
  sessionId: string,
485
- options: { limit?: number } = {},
568
+ options: { limit?: number; latestStarted?: boolean } = {},
486
569
  ): Promise<SessionTurn[]> {
487
570
  return await this.requestJson<SessionTurn[]>(
488
571
  "GET",
@@ -490,10 +573,17 @@ export class OpenGeniClient {
490
573
  undefined,
491
574
  {
492
575
  ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),
576
+ ...(options.latestStarted ? { latestStarted: "1" } : {}),
493
577
  },
494
578
  );
495
579
  }
496
580
 
581
+ /** Newest turn that durably emitted `turn.started`, or null before any admission. */
582
+ async getLatestStartedTurn(workspaceId: string, sessionId: string): Promise<SessionTurn | null> {
583
+ const turns = await this.listTurns(workspaceId, sessionId, { latestStarted: true });
584
+ return turns[0] ?? null;
585
+ }
586
+
497
587
  // --- Bring-your-own-compute: Machines dashboard + metrics (M10) ------------
498
588
 
499
589
  /**
@@ -1623,6 +1713,14 @@ export class OpenGeniClient {
1623
1713
  return await this.requestJson<Workspace>("GET", `/v1/workspaces/${workspaceId}`);
1624
1714
  }
1625
1715
 
1716
+ /** Read-time, secret-safe inventory of policy heads and visible workspace knowledge. */
1717
+ async getWorkspaceState(workspaceId: string): Promise<WorkspaceStateResponse> {
1718
+ return await this.requestJson<WorkspaceStateResponse>(
1719
+ "GET",
1720
+ `/v1/workspaces/${workspaceId}/workspace-state`,
1721
+ );
1722
+ }
1723
+
1626
1724
  async updateWorkspace(workspaceId: string, request: UpdateWorkspaceRequest): Promise<Workspace> {
1627
1725
  return await this.requestJson<Workspace>("PATCH", `/v1/workspaces/${workspaceId}`, request);
1628
1726
  }
@@ -1717,6 +1815,132 @@ export class OpenGeniClient {
1717
1815
  );
1718
1816
  }
1719
1817
 
1818
+ async listPreferenceRegistry(
1819
+ workspaceId: string,
1820
+ options: PreferenceRegistryListOptions = {},
1821
+ ): Promise<PreferenceRegistryListResponse> {
1822
+ const params = new URLSearchParams();
1823
+ if (options.scope) params.set("scope", options.scope);
1824
+ if (options.status) params.set("status", options.status);
1825
+ if (options.limit !== undefined) params.set("limit", String(options.limit));
1826
+ const query = params.toString();
1827
+ return await this.requestJson<PreferenceRegistryListResponse>(
1828
+ "GET",
1829
+ `/v1/workspaces/${workspaceId}/preferences${query ? `?${query}` : ""}`,
1830
+ );
1831
+ }
1832
+
1833
+ async getPreferenceRegistry(
1834
+ workspaceId: string,
1835
+ preferenceId: string,
1836
+ ): Promise<PreferenceRegistryDetailResponse> {
1837
+ return await this.requestJson<PreferenceRegistryDetailResponse>(
1838
+ "GET",
1839
+ `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}`,
1840
+ );
1841
+ }
1842
+
1843
+ async createPreferenceRegistryProposal(
1844
+ workspaceId: string,
1845
+ request: CreatePreferenceRegistryProposalRequest,
1846
+ ): Promise<PreferenceRegistryRecord> {
1847
+ return await this.requestJson<PreferenceRegistryRecord>(
1848
+ "POST",
1849
+ `/v1/workspaces/${workspaceId}/preferences/proposals`,
1850
+ request,
1851
+ );
1852
+ }
1853
+
1854
+ async activatePreferenceRegistryRevision(
1855
+ workspaceId: string,
1856
+ preferenceId: string,
1857
+ request: ActivatePreferenceRegistryRevisionRequest,
1858
+ ): Promise<PreferenceRegistryMutationResponse> {
1859
+ return await this.requestJson<PreferenceRegistryMutationResponse>(
1860
+ "POST",
1861
+ `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/activate`,
1862
+ request,
1863
+ );
1864
+ }
1865
+
1866
+ async correctPreferenceRegistry(
1867
+ workspaceId: string,
1868
+ preferenceId: string,
1869
+ request: CorrectPreferenceRegistryRequest,
1870
+ ): Promise<PreferenceRegistryMutationResponse> {
1871
+ return await this.requestJson<PreferenceRegistryMutationResponse>(
1872
+ "POST",
1873
+ `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/correct`,
1874
+ request,
1875
+ );
1876
+ }
1877
+
1878
+ async changePreferenceRegistryScope(
1879
+ workspaceId: string,
1880
+ preferenceId: string,
1881
+ request: ChangePreferenceRegistryScopeRequest,
1882
+ ): Promise<PreferenceRegistryMutationResponse> {
1883
+ return await this.requestJson<PreferenceRegistryMutationResponse>(
1884
+ "POST",
1885
+ `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/scope`,
1886
+ request,
1887
+ );
1888
+ }
1889
+
1890
+ async deactivatePreferenceRegistry(
1891
+ workspaceId: string,
1892
+ preferenceId: string,
1893
+ request: DeactivatePreferenceRegistryRequest,
1894
+ ): Promise<PreferenceRegistryMutationResponse> {
1895
+ return await this.requestJson<PreferenceRegistryMutationResponse>(
1896
+ "POST",
1897
+ `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/deactivate`,
1898
+ request,
1899
+ );
1900
+ }
1901
+
1902
+ async supersedePreferenceRegistry(
1903
+ workspaceId: string,
1904
+ preferenceId: string,
1905
+ request: SupersedePreferenceRegistryRequest,
1906
+ ): Promise<PreferenceRegistryMutationResponse> {
1907
+ return await this.requestJson<PreferenceRegistryMutationResponse>(
1908
+ "POST",
1909
+ `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/supersede`,
1910
+ request,
1911
+ );
1912
+ }
1913
+
1914
+ async rejectPreferenceRegistryProposal(
1915
+ workspaceId: string,
1916
+ preferenceId: string,
1917
+ request: RejectPreferenceRegistryProposalRequest,
1918
+ ): Promise<PreferenceRegistryMutationResponse> {
1919
+ return await this.requestJson<PreferenceRegistryMutationResponse>(
1920
+ "POST",
1921
+ `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/reject`,
1922
+ request,
1923
+ );
1924
+ }
1925
+
1926
+ async getPreferenceRegistrySummary(workspaceId: string): Promise<PreferenceRegistrySnapshot> {
1927
+ return await this.requestJson<PreferenceRegistrySnapshot>(
1928
+ "GET",
1929
+ `/v1/workspaces/${workspaceId}/preferences/summary`,
1930
+ );
1931
+ }
1932
+
1933
+ async getPreferenceRegistryFullContent(
1934
+ workspaceId: string,
1935
+ retrievalHandle: string,
1936
+ ): Promise<PreferenceRegistryFullContent> {
1937
+ return await this.requestJson<PreferenceRegistryFullContent>(
1938
+ "POST",
1939
+ `/v1/workspaces/${workspaceId}/preferences/full-content`,
1940
+ { retrievalHandle },
1941
+ );
1942
+ }
1943
+
1720
1944
  /**
1721
1945
  * Delete a workspace and everything in it. Refused (409) for the account's
1722
1946
  * only workspace and while it still has a running session. Irreversible.
@@ -2627,11 +2851,14 @@ export class OpenGeniClient {
2627
2851
  async startConnectionOAuth(
2628
2852
  workspaceId: string,
2629
2853
  request: OAuthStartRequest,
2854
+ options: OpenGeniRequestOptions = {},
2630
2855
  ): Promise<OAuthStartResponse> {
2631
2856
  return await this.requestJson<OAuthStartResponse>(
2632
2857
  "POST",
2633
2858
  `/v1/workspaces/${workspaceId}/connections/oauth/start`,
2634
2859
  request,
2860
+ {},
2861
+ options,
2635
2862
  );
2636
2863
  }
2637
2864
 
@@ -2734,6 +2961,26 @@ export class OpenGeniClient {
2734
2961
  });
2735
2962
  }
2736
2963
 
2964
+ async getWorkspaceInsights(
2965
+ workspaceId: string,
2966
+ options: {
2967
+ range?: InsightsRange;
2968
+ provider?: string;
2969
+ model?: string;
2970
+ } = {},
2971
+ ): Promise<WorkspaceInsightsResponse> {
2972
+ return await this.requestJson<WorkspaceInsightsResponse>(
2973
+ "GET",
2974
+ `/v1/workspaces/${workspaceId}/insights`,
2975
+ undefined,
2976
+ {
2977
+ range: options.range ?? "week",
2978
+ ...(options.provider !== undefined ? { provider: options.provider } : {}),
2979
+ ...(options.model !== undefined ? { model: options.model } : {}),
2980
+ },
2981
+ );
2982
+ }
2983
+
2737
2984
  async getBillingEntitlements(
2738
2985
  options: { accountId?: string } = {},
2739
2986
  ): Promise<BillingEntitlementsResponse> {
@@ -2918,7 +3165,7 @@ export class OpenGeniClient {
2918
3165
  );
2919
3166
  }
2920
3167
 
2921
- private async requestJson<T>(
3168
+ protected async requestJson<T>(
2922
3169
  method: string,
2923
3170
  path: string,
2924
3171
  body?: unknown,
@@ -2993,6 +3240,36 @@ function assertApiContractResponse(response: Response): void {
2993
3240
  }
2994
3241
  }
2995
3242
 
3243
+ function isTranscribeAudioResponse(value: unknown): value is TranscribeAudioResponse {
3244
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
3245
+ const record = value as Record<string, unknown>;
3246
+ return (
3247
+ typeof record.text === "string" &&
3248
+ Array.isArray(record.languages) &&
3249
+ record.languages.every((language) => typeof language === "string")
3250
+ );
3251
+ }
3252
+
3253
+ function filenameForAudioMimeType(mimeType: string): string {
3254
+ const bare = mimeType.trim().toLowerCase().split(";")[0] ?? "audio/webm";
3255
+ switch (bare) {
3256
+ case "audio/mp4":
3257
+ case "audio/m4a":
3258
+ return "audio.mp4";
3259
+ case "audio/ogg":
3260
+ return "audio.ogg";
3261
+ case "audio/mpeg":
3262
+ case "audio/mp3":
3263
+ return "audio.mp3";
3264
+ case "audio/wav":
3265
+ case "audio/x-wav":
3266
+ return "audio.wav";
3267
+ case "audio/webm":
3268
+ default:
3269
+ return "audio.webm";
3270
+ }
3271
+ }
3272
+
2996
3273
  const API_ERROR_MAX_BYTES = 16 * 1024;
2997
3274
 
2998
3275
  type ApiErrorRequestContext = {
package/src/core.ts ADDED
@@ -0,0 +1,19 @@
1
+ export { OpenGeniClient as OpenGeniCoreClient } from "./client";
2
+ export type {
3
+ FetchLike,
4
+ OpenGeniClientOptions,
5
+ OpenGeniRequestOptions,
6
+ SendMessageInput,
7
+ SteerMessageResult,
8
+ TranscribeAudioInput,
9
+ WorkspaceControlEventPage,
10
+ } from "./client";
11
+ export {
12
+ OpenGeniApiContractMismatchError,
13
+ OpenGeniApiError,
14
+ OpenGeniSessionListCursorError,
15
+ OpenGeniStreamError,
16
+ isRetryableStreamError,
17
+ } from "./errors";
18
+ export { resolveWorkspaceVoiceInputEnabled } from "./transcription";
19
+ export { OPENGENI_API_CONTRACT_HEADER, OPENGENI_API_CONTRACT_REVISION } from "./types";
package/src/index.ts CHANGED
@@ -1,10 +1,11 @@
1
- export { OpenGeniClient } from "./client";
1
+ export { OpenGeniClient } from "./artifact-client";
2
2
  export type {
3
3
  FetchLike,
4
4
  OpenGeniClientOptions,
5
5
  OpenGeniRequestOptions,
6
6
  SendMessageInput,
7
7
  SteerMessageResult,
8
+ TranscribeAudioInput,
8
9
  WorkspaceControlEventPage,
9
10
  } from "./client";
10
11
  export {
@@ -55,6 +56,19 @@ export type {
55
56
  } from "./stream";
56
57
  export { streamWorkspaceControlEvents } from "./workspace-control-stream";
57
58
  export type { WorkspaceControlStreamTransport } from "./workspace-control-stream";
59
+ export type {
60
+ CreateWorkspaceArtifactRequest,
61
+ PublishWorkspaceArtifactVersionRequest,
62
+ RollbackWorkspaceArtifactRequest,
63
+ WorkspaceArtifact,
64
+ WorkspaceArtifactContentResponse,
65
+ WorkspaceArtifactDetailResponse,
66
+ WorkspaceArtifactEvent,
67
+ WorkspaceArtifactListOptions,
68
+ WorkspaceArtifactListResponse,
69
+ WorkspaceArtifactMutationResponse,
70
+ WorkspaceArtifactVersion,
71
+ } from "./workspace-artifacts";
58
72
  export { normalizeWorkspaceInstructionPolicyRoleKey } from "./workspace-instruction-policies";
59
73
  export type {
60
74
  ActivateWorkspaceInstructionPolicyRequest,
@@ -78,10 +92,47 @@ export type {
78
92
  WorkspaceInstructionPolicyScope,
79
93
  WorkspaceInstructionPolicyTarget,
80
94
  } from "./workspace-instruction-policies";
95
+ export type {
96
+ WorkspaceStateDocumentStatusCounts,
97
+ WorkspaceStateGapCode,
98
+ WorkspaceStateMemoryKindCounts,
99
+ WorkspaceStateMemoryStatusCounts,
100
+ WorkspaceStateResponse,
101
+ WorkspaceStateSourceKindCounts,
102
+ } from "./workspace-state";
103
+ export { normalizePreferenceRegistryStableKey } from "./preference-registry";
104
+ export type {
105
+ ActivatePreferenceRegistryRevisionRequest,
106
+ ChangePreferenceRegistryScopeRequest,
107
+ CorrectPreferenceRegistryRequest,
108
+ CreatePreferenceRegistryProposalRequest,
109
+ DeactivatePreferenceRegistryRequest,
110
+ PreferenceRegistryConflictStrategy,
111
+ PreferenceRegistryDescriptor,
112
+ PreferenceRegistryDescriptorProvenance,
113
+ PreferenceRegistryDetailResponse,
114
+ PreferenceRegistryEvent,
115
+ PreferenceRegistryFullContent,
116
+ PreferenceRegistryListOptions,
117
+ PreferenceRegistryListResponse,
118
+ PreferenceRegistryMutationResponse,
119
+ PreferenceRegistryPrecedence,
120
+ PreferenceRegistryProvenanceSource,
121
+ PreferenceRegistryRecord,
122
+ PreferenceRegistryRevisionSummary,
123
+ PreferenceRegistryScope,
124
+ PreferenceRegistryScopeTarget,
125
+ PreferenceRegistrySnapshot,
126
+ PreferenceRegistryStatus,
127
+ PreferenceRegistryTrust,
128
+ RejectPreferenceRegistryProposalRequest,
129
+ SupersedePreferenceRegistryRequest,
130
+ } from "./preference-registry";
81
131
  export {
82
132
  DEFAULT_WORKSPACE_TRANSCRIPTION_POLICY,
83
133
  authorizeTranscriptionAdapter,
84
134
  createTranscriptionSessionRequest,
135
+ resolveWorkspaceVoiceInputEnabled,
85
136
  resolveWorkspaceTranscriptionPolicy,
86
137
  } from "./transcription";
87
138
  export type {
@@ -132,6 +183,19 @@ export type {
132
183
  BillingMode,
133
184
  BillingSummary,
134
185
  BillingUsageResponse,
186
+ InsightsRange,
187
+ InsightsBillingPath,
188
+ InsightsModelUsageRow,
189
+ InsightsSeriesPoint,
190
+ InsightsDepthBucket,
191
+ InsightsModelFacet,
192
+ InsightsSpendDriver,
193
+ InsightsWarmGroupRow,
194
+ InsightsLiveWarmLease,
195
+ InsightsFloorSession,
196
+ InsightsScheduleRow,
197
+ WorkspaceInsightsSnapshot,
198
+ WorkspaceInsightsResponse,
135
199
  CapabilityCatalogItem,
136
200
  CapabilityCatalogResponse,
137
201
  CapabilityInstallation,
@@ -149,6 +213,7 @@ export type {
149
213
  CapabilitySource,
150
214
  CapabilityUnavailableReason,
151
215
  ClientConfig,
216
+ ClientVoiceInputConfig,
152
217
  ClientModel,
153
218
  ModelAvailabilityV1,
154
219
  ModelBillingAttributionV1,
@@ -245,6 +310,15 @@ export type {
245
310
  GitHubInstallationBinding,
246
311
  GitHubInstallationLifecycle,
247
312
  GitHubRepositoriesResponse,
313
+ GoogleDriveBrowseItem,
314
+ GoogleDriveBrowseResponse,
315
+ GoogleDriveConnectionMetadata,
316
+ GoogleDriveOAuthStartRequest,
317
+ GoogleDriveOAuthStartResponse,
318
+ GoogleDriveReadPolicy,
319
+ GoogleDriveSelectedSource,
320
+ GoogleDriveSyncCadence,
321
+ GoogleDriveTargetScope,
248
322
  GitHubRepository,
249
323
  GitHubRepositoryScope,
250
324
  GoalSpec,
@@ -272,6 +346,7 @@ export type {
272
346
  PackInstallationStatus,
273
347
  Permission,
274
348
  ProductAccessMode,
349
+ LatencyMode,
275
350
  ReasoningEffort,
276
351
  RetainedArtifactContent,
277
352
  RetainedArtifactContentOptions,
@@ -290,6 +365,7 @@ export type {
290
365
  RegisterCapabilityPackRequest,
291
366
  RepositoryResourceRef,
292
367
  ResourceRef,
368
+ SaveGoogleDriveSourceRequest,
293
369
  SandboxBackend,
294
370
  SandboxCapabilityName,
295
371
  SandboxOs,
@@ -455,6 +531,7 @@ export type {
455
531
  UpdateWorkspaceMemberRequest,
456
532
  UpdateWorkspaceRequest,
457
533
  UpdateWorkspaceSettingsRequest,
534
+ TranscribeAudioResponse,
458
535
  UploadFileInput,
459
536
  UsageEvent,
460
537
  UsageEventType,
@@ -486,6 +563,7 @@ export type {
486
563
  WorkspaceMemorySearchResult,
487
564
  WorkspaceMemorySearchResponse,
488
565
  WorkspaceSettings,
566
+ WorkspaceVoiceInputSettings,
489
567
  WorkspaceRegisteredPack,
490
568
  // Bring-your-own-compute: Machines dashboard + per-machine metrics (M10).
491
569
  MetricSample,