@opengeni/sdk 0.11.0 → 0.15.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.
package/src/errors.ts CHANGED
@@ -11,6 +11,19 @@ export class OpenGeniApiError extends Error {
11
11
  }
12
12
  }
13
13
 
14
+ /** The browser bundle and API disagree about their state-changing wire contract. */
15
+ export class OpenGeniApiContractMismatchError extends Error {
16
+ readonly expected: string;
17
+ readonly actual: string;
18
+
19
+ constructor(expected: string, actual: string) {
20
+ super(`OpenGeni API contract mismatch: client expects ${expected}, API serves ${actual}`);
21
+ this.name = "OpenGeniApiContractMismatchError";
22
+ this.expected = expected;
23
+ this.actual = actual;
24
+ }
25
+ }
26
+
14
27
  /** Error for an unrecoverable event-stream condition (not a transient drop). */
15
28
  export class OpenGeniStreamError extends Error {
16
29
  constructor(message: string) {
@@ -34,7 +47,13 @@ export function isAbortError(error: unknown): boolean {
34
47
  */
35
48
  export function isRetryableStreamError(error: unknown): boolean {
36
49
  if (error instanceof OpenGeniApiError) {
37
- return error.status === 408 || error.status === 409 || error.status === 425 || error.status === 429 || error.status >= 500;
50
+ return (
51
+ error.status === 408 ||
52
+ error.status === 409 ||
53
+ error.status === 425 ||
54
+ error.status === 429 ||
55
+ error.status >= 500
56
+ );
38
57
  }
39
58
  return error instanceof TypeError;
40
59
  }
package/src/index.ts CHANGED
@@ -1,6 +1,16 @@
1
1
  export { OpenGeniClient } from "./client";
2
- export type { FetchLike, OpenGeniClientOptions, SendMessageInput, SteerMessageResult } from "./client";
3
- export { OpenGeniApiError, OpenGeniStreamError, isRetryableStreamError } from "./errors";
2
+ export type {
3
+ FetchLike,
4
+ OpenGeniClientOptions,
5
+ SendMessageInput,
6
+ SteerMessageResult,
7
+ } from "./client";
8
+ export {
9
+ OpenGeniApiContractMismatchError,
10
+ OpenGeniApiError,
11
+ OpenGeniStreamError,
12
+ isRetryableStreamError,
13
+ } from "./errors";
4
14
  export {
5
15
  formatSseEvent,
6
16
  proxySessionEventStream,
@@ -38,7 +48,15 @@ export type {
38
48
  StreamConnectionState,
39
49
  StreamSessionEventsOptions,
40
50
  } from "./stream";
41
- export { KNOWN_PERMISSIONS, KNOWN_USAGE_EVENT_TYPES, SESSION_EVENT_TYPES } from "./types";
51
+ export { streamWorkspaceControlEvents } from "./workspace-control-stream";
52
+ export type { WorkspaceControlStreamTransport } from "./workspace-control-stream";
53
+ export {
54
+ KNOWN_PERMISSIONS,
55
+ KNOWN_USAGE_EVENT_TYPES,
56
+ OPENGENI_API_CONTRACT_HEADER,
57
+ OPENGENI_API_CONTRACT_REVISION,
58
+ SESSION_EVENT_TYPES,
59
+ } from "./types";
42
60
  export type {
43
61
  AccessContext,
44
62
  AccessGrant,
@@ -63,7 +81,7 @@ export type {
63
81
  CapabilityPack,
64
82
  CapabilityPackConnector,
65
83
  CapabilityPackConnectorAuthModel,
66
- CapabilityPackEnvironmentSpec,
84
+ CapabilityPackVariableSetSpec,
67
85
  CapabilityPackKnowledge,
68
86
  CapabilityPackScheduledTaskTemplate,
69
87
  CapabilityPackSkill,
@@ -106,6 +124,7 @@ export type {
106
124
  CreateKnowledgeMemoryRequest,
107
125
  CreateScheduledTaskRequest,
108
126
  CreateSessionRequest,
127
+ CreateVariableSetRequest,
109
128
  CreateWorkspaceEnvironmentRequest,
110
129
  CreateWorkspaceRequest,
111
130
  DiscoverMcpCapabilitiesResponse,
@@ -141,6 +160,7 @@ export type {
141
160
  KnowledgeMemoryStatus,
142
161
  KnowledgeSourceKind,
143
162
  KnowledgeSourceRef,
163
+ GitCredentialProvider,
144
164
  ListApiKeysResponse,
145
165
  ListConnectionsResponse,
146
166
  ListPacksResponse,
@@ -179,6 +199,27 @@ export type {
179
199
  ScheduledTaskTriggerType,
180
200
  Session,
181
201
  SessionCapabilities,
202
+ SessionListResponse,
203
+ SessionLineageResponse,
204
+ SessionQueueMutationResponse,
205
+ SessionQueueSnapshot,
206
+ SessionControlResponse,
207
+ ComposerDraft,
208
+ DeleteSessionQueueItemRequest,
209
+ EditSessionQueueItemRequest,
210
+ EffectiveControlBlocker,
211
+ EffectiveControlResumeOption,
212
+ EffectiveSessionControl,
213
+ MoveSessionQueueItemRequest,
214
+ SaveComposerDraftRequest,
215
+ SessionCommandReceipt,
216
+ SteerSessionQueueItemRequest,
217
+ WorkspaceInferenceControlResponse,
218
+ SessionSystemUpdate,
219
+ SessionSystemUpdateKind,
220
+ SessionSystemUpdateState,
221
+ SessionSummary,
222
+ LineageNode,
182
223
  SessionMcpCredentialUpdateInput,
183
224
  SessionMcpServerInput,
184
225
  SessionMcpServerMetadata,
@@ -253,6 +294,17 @@ export type {
253
294
  GitLogResponse,
254
295
  GitShowRequest,
255
296
  GitShowResponse,
297
+ SetWorkspaceEnvironmentVariableRequest,
298
+ WorkspaceCaptureFile,
299
+ WorkspaceCaptureRepo,
300
+ WorkspaceCaptureDegradedReason,
301
+ WorkspaceCaptureStats,
302
+ WorkspaceCaptureManifest,
303
+ WorkspaceRevisionCapturedPayload,
304
+ WorkspaceRevisionDegradedPayload,
305
+ WorkspaceCaptureSignedUrl,
306
+ GetWorkspaceCaptureResponse,
307
+ GetWorkspaceCaptureFileResponse,
256
308
  TerminalExecRequest,
257
309
  TerminalExecResponse,
258
310
  PtyOpenRequest,
@@ -264,21 +316,43 @@ export type {
264
316
  UpdateKnowledgeMemoryRequest,
265
317
  UpdateScheduledTaskRequest,
266
318
  UpdateSessionGoalRequest,
319
+ UpdateSessionPinRequest,
267
320
  UpdateSessionRequest,
268
- UpdateSessionTurnRequest,
321
+ UpdateVariableSetRequest,
269
322
  UpdateWorkspaceEnvironmentRequest,
270
323
  UpdateWorkspaceMemberRequest,
271
324
  UpdateWorkspaceRequest,
325
+ UpdateWorkspaceSettingsRequest,
272
326
  UploadFileInput,
273
327
  UsageEvent,
274
328
  UsageEventType,
275
329
  UserApprovalDecisionEventInput,
276
- UserInterruptEventInput,
277
330
  UserMessageEventInput,
278
331
  Workspace,
332
+ WorkspaceControlEvent,
333
+ VariableSet,
334
+ VariableSetVariableMetadata,
335
+ Rig,
336
+ RigVersion,
337
+ RigCheck,
338
+ RigChange,
339
+ RigChangeKind,
340
+ RigChangeStatus,
341
+ RigCheckResult,
342
+ RigChangeVerification,
343
+ CreateRigRequest,
344
+ UpdateRigRequest,
345
+ RigSetupAppendPayload,
346
+ RigDefinitionEditPayload,
347
+ ProposeRigChangeRequest,
279
348
  WorkspaceEnvironment,
280
349
  WorkspaceEnvironmentVariableMetadata,
281
350
  WorkspaceMember,
351
+ WorkspaceMemorySearchMode,
352
+ WorkspaceMemorySearchRequest,
353
+ WorkspaceMemorySearchResult,
354
+ WorkspaceMemorySearchResponse,
355
+ WorkspaceSettings,
282
356
  WorkspaceRegisteredPack,
283
357
  // Bring-your-own-compute: Machines dashboard + per-machine metrics (M10).
284
358
  MetricSample,
package/src/proxy.ts CHANGED
@@ -158,7 +158,7 @@ export function proxySessionEventStream(
158
158
  } else {
159
159
  signal?.addEventListener("abort", () => upstream.abort(), { once: true });
160
160
  }
161
- const resolvedAfter = after instanceof Request ? resumeSequenceFromRequest(after) : after ?? 0;
161
+ const resolvedAfter = after instanceof Request ? resumeSequenceFromRequest(after) : (after ?? 0);
162
162
  const events = client.streamEvents(workspaceId, sessionId, {
163
163
  ...streamOptions,
164
164
  after: resolvedAfter,
package/src/sse.ts CHANGED
@@ -12,7 +12,9 @@ export type SseMessage = {
12
12
  data: string;
13
13
  };
14
14
 
15
- export async function* parseSseStream(stream: ReadableStream<Uint8Array>): AsyncGenerator<SseMessage, void, void> {
15
+ export async function* parseSseStream(
16
+ stream: ReadableStream<Uint8Array>,
17
+ ): AsyncGenerator<SseMessage, void, void> {
16
18
  const reader = stream.getReader();
17
19
  const decoder = new TextDecoder();
18
20
  let buffer = "";
@@ -21,13 +23,14 @@ export async function* parseSseStream(stream: ReadableStream<Uint8Array>): Async
21
23
  let dataLines: string[] | null = null;
22
24
 
23
25
  const dispatch = (): SseMessage | null => {
24
- const message = dataLines === null
25
- ? null
26
- : {
27
- ...(id !== undefined ? { id } : {}),
28
- ...(event !== undefined ? { event } : {}),
29
- data: dataLines.join("\n"),
30
- };
26
+ const message =
27
+ dataLines === null
28
+ ? null
29
+ : {
30
+ ...(id !== undefined ? { id } : {}),
31
+ ...(event !== undefined ? { event } : {}),
32
+ data: dataLines.join("\n"),
33
+ };
31
34
  id = undefined;
32
35
  event = undefined;
33
36
  dataLines = null;
package/src/stream.ts CHANGED
@@ -8,7 +8,10 @@ import type { SessionEvent } from "./types";
8
8
  */
9
9
  export type SessionEventStreamTransport = {
10
10
  /** Open the SSE stream, replaying durable events after `after` first. */
11
- openStream: (after: number, signal: AbortSignal | undefined) => Promise<ReadableStream<Uint8Array>>;
11
+ openStream: (
12
+ after: number,
13
+ signal: AbortSignal | undefined,
14
+ ) => Promise<ReadableStream<Uint8Array>>;
12
15
  /** Replay durable events by sequence (`GET .../events?after=&limit=`). */
13
16
  listEvents: (after: number, limit: number) => Promise<SessionEvent[]>;
14
17
  };
@@ -31,6 +34,8 @@ export type StreamSessionEventsOptions = {
31
34
  * reconnects = N+1 total open-stream calls). Defaults to unlimited.
32
35
  */
33
36
  maxReconnectAttempts?: number;
37
+ /** Await authoritative client reconciliation before exposing `live`. */
38
+ beforeLive?: (() => void | Promise<void>) | undefined;
34
39
  onStateChange?: (state: StreamConnectionState) => void;
35
40
  };
36
41
 
@@ -63,7 +68,8 @@ export async function* streamSessionEvents(
63
68
  let delayMs = baseDelayMs;
64
69
  let everConnected = false;
65
70
 
66
- while (!signal?.aborted) {
71
+ while (true) {
72
+ if (signal?.aborted) break;
67
73
  options.onStateChange?.(everConnected || failedAttempts > 0 ? "reconnecting" : "connecting");
68
74
  const cursorAtOpen = cursor;
69
75
  try {
@@ -71,6 +77,7 @@ export async function* streamSessionEvents(
71
77
  everConnected = true;
72
78
  failedAttempts = 0;
73
79
  delayMs = baseDelayMs;
80
+ await options.beforeLive?.();
74
81
  options.onStateChange?.("live");
75
82
  for await (const message of parseSseStream(body)) {
76
83
  // Re-check after every yield resumption: an abort from the consumer