@opengeni/sdk 0.29.0 → 0.32.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/README.md +12 -4
- package/dist/client.d.ts +643 -0
- package/dist/desktop.d.ts +71 -0
- package/dist/errors.d.ts +39 -0
- package/dist/index.d.ts +25 -4211
- package/dist/index.js +195 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp-output.d.ts +15 -0
- package/dist/preference-registry.d.ts +169 -0
- package/dist/proxy.d.ts +64 -0
- package/dist/sse.d.ts +14 -0
- package/dist/stream.d.ts +48 -0
- package/dist/terminal.d.ts +49 -0
- package/dist/transcription.d.ts +189 -0
- package/dist/types.d.ts +3221 -0
- package/dist/workspace-control-stream.d.ts +12 -0
- package/dist/workspace-instruction-policies.d.ts +98 -0
- package/dist/workspace-state.d.ts +122 -0
- package/package.json +3 -3
- package/src/client.ts +279 -2
- package/src/index.ts +65 -0
- package/src/preference-registry.ts +210 -0
- package/src/transcription.ts +16 -0
- package/src/types.ts +254 -1
- package/src/workspace-state.ts +134 -0
package/dist/index.js
CHANGED
|
@@ -350,6 +350,7 @@ var SESSION_EVENT_TYPES = [
|
|
|
350
350
|
"session.requiresAction",
|
|
351
351
|
"session.humanInput.requested",
|
|
352
352
|
"session.context.compaction.requested",
|
|
353
|
+
"session.context.compaction.started",
|
|
353
354
|
"session.context.compacted",
|
|
354
355
|
"session.context.compaction.skipped",
|
|
355
356
|
"session.context.cleared",
|
|
@@ -544,6 +545,51 @@ var OpenGeniClient = class {
|
|
|
544
545
|
this.fetchImpl = options.fetch ?? ((input, init) => fetch(input, init));
|
|
545
546
|
}
|
|
546
547
|
// --- Session lifecycle ---------------------------------------------------
|
|
548
|
+
/** Upload one ephemeral browser recording. This method never retries. */
|
|
549
|
+
async transcribeAudio(workspaceId, input) {
|
|
550
|
+
const correlationId = crypto.randomUUID();
|
|
551
|
+
const form = new FormData();
|
|
552
|
+
const filename = filenameForAudioMimeType(input.mimeType);
|
|
553
|
+
const audio = input.audio instanceof File ? input.audio : input.audio instanceof Uint8Array ? new File([Uint8Array.from(input.audio)], filename, { type: input.mimeType }) : new File([input.audio], filename, { type: input.mimeType || input.audio.type });
|
|
554
|
+
form.append("audio", audio, filename);
|
|
555
|
+
form.append("mimeType", input.mimeType);
|
|
556
|
+
if (input.durationSeconds !== void 0) {
|
|
557
|
+
form.append("durationSeconds", String(input.durationSeconds));
|
|
558
|
+
}
|
|
559
|
+
let response;
|
|
560
|
+
try {
|
|
561
|
+
response = await this.fetchImpl(this.url(`/v1/workspaces/${workspaceId}/transcriptions`), {
|
|
562
|
+
method: "POST",
|
|
563
|
+
headers: { ...this.headers(correlationId), Accept: "application/json" },
|
|
564
|
+
body: form,
|
|
565
|
+
...input.signal ? { signal: input.signal } : {}
|
|
566
|
+
});
|
|
567
|
+
} catch (error) {
|
|
568
|
+
if (input.signal?.aborted) throw error;
|
|
569
|
+
throw mutationTransportError(correlationId);
|
|
570
|
+
}
|
|
571
|
+
assertApiContractResponse(response);
|
|
572
|
+
if (!response.ok) throw await apiErrorFromResponse(response, { method: "POST", correlationId });
|
|
573
|
+
await assertJsonResponse(response, { method: "POST", correlationId });
|
|
574
|
+
let body;
|
|
575
|
+
try {
|
|
576
|
+
body = await response.json();
|
|
577
|
+
} catch {
|
|
578
|
+
throw new OpenGeniApiError(response.status, "Invalid transcription response.", {
|
|
579
|
+
code: "invalid_response",
|
|
580
|
+
mutation: true,
|
|
581
|
+
correlationId
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
if (!isTranscribeAudioResponse(body)) {
|
|
585
|
+
throw new OpenGeniApiError(response.status, "Invalid transcription response.", {
|
|
586
|
+
code: "invalid_response",
|
|
587
|
+
mutation: true,
|
|
588
|
+
correlationId
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
return body;
|
|
592
|
+
}
|
|
547
593
|
async createSession(workspaceId, request) {
|
|
548
594
|
return await this.requestJson(
|
|
549
595
|
"POST",
|
|
@@ -672,10 +718,16 @@ var OpenGeniClient = class {
|
|
|
672
718
|
`/v1/workspaces/${workspaceId}/sessions/${sessionId}/turns`,
|
|
673
719
|
void 0,
|
|
674
720
|
{
|
|
675
|
-
...options.limit !== void 0 ? { limit: String(options.limit) } : {}
|
|
721
|
+
...options.limit !== void 0 ? { limit: String(options.limit) } : {},
|
|
722
|
+
...options.latestStarted ? { latestStarted: "1" } : {}
|
|
676
723
|
}
|
|
677
724
|
);
|
|
678
725
|
}
|
|
726
|
+
/** Newest turn that durably emitted `turn.started`, or null before any admission. */
|
|
727
|
+
async getLatestStartedTurn(workspaceId, sessionId) {
|
|
728
|
+
const turns = await this.listTurns(workspaceId, sessionId, { latestStarted: true });
|
|
729
|
+
return turns[0] ?? null;
|
|
730
|
+
}
|
|
679
731
|
// --- Bring-your-own-compute: Machines dashboard + metrics (M10) ------------
|
|
680
732
|
/**
|
|
681
733
|
* List the workspace's machines (the Machines dashboard). Each enrolled
|
|
@@ -1437,6 +1489,13 @@ var OpenGeniClient = class {
|
|
|
1437
1489
|
async getWorkspace(workspaceId) {
|
|
1438
1490
|
return await this.requestJson("GET", `/v1/workspaces/${workspaceId}`);
|
|
1439
1491
|
}
|
|
1492
|
+
/** Read-time, secret-safe inventory of policy heads and visible workspace knowledge. */
|
|
1493
|
+
async getWorkspaceState(workspaceId) {
|
|
1494
|
+
return await this.requestJson(
|
|
1495
|
+
"GET",
|
|
1496
|
+
`/v1/workspaces/${workspaceId}/workspace-state`
|
|
1497
|
+
);
|
|
1498
|
+
}
|
|
1440
1499
|
async updateWorkspace(workspaceId, request) {
|
|
1441
1500
|
return await this.requestJson("PATCH", `/v1/workspaces/${workspaceId}`, request);
|
|
1442
1501
|
}
|
|
@@ -1501,6 +1560,85 @@ var OpenGeniClient = class {
|
|
|
1501
1560
|
request
|
|
1502
1561
|
);
|
|
1503
1562
|
}
|
|
1563
|
+
async listPreferenceRegistry(workspaceId, options = {}) {
|
|
1564
|
+
const params = new URLSearchParams();
|
|
1565
|
+
if (options.scope) params.set("scope", options.scope);
|
|
1566
|
+
if (options.status) params.set("status", options.status);
|
|
1567
|
+
if (options.limit !== void 0) params.set("limit", String(options.limit));
|
|
1568
|
+
const query = params.toString();
|
|
1569
|
+
return await this.requestJson(
|
|
1570
|
+
"GET",
|
|
1571
|
+
`/v1/workspaces/${workspaceId}/preferences${query ? `?${query}` : ""}`
|
|
1572
|
+
);
|
|
1573
|
+
}
|
|
1574
|
+
async getPreferenceRegistry(workspaceId, preferenceId) {
|
|
1575
|
+
return await this.requestJson(
|
|
1576
|
+
"GET",
|
|
1577
|
+
`/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}`
|
|
1578
|
+
);
|
|
1579
|
+
}
|
|
1580
|
+
async createPreferenceRegistryProposal(workspaceId, request) {
|
|
1581
|
+
return await this.requestJson(
|
|
1582
|
+
"POST",
|
|
1583
|
+
`/v1/workspaces/${workspaceId}/preferences/proposals`,
|
|
1584
|
+
request
|
|
1585
|
+
);
|
|
1586
|
+
}
|
|
1587
|
+
async activatePreferenceRegistryRevision(workspaceId, preferenceId, request) {
|
|
1588
|
+
return await this.requestJson(
|
|
1589
|
+
"POST",
|
|
1590
|
+
`/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/activate`,
|
|
1591
|
+
request
|
|
1592
|
+
);
|
|
1593
|
+
}
|
|
1594
|
+
async correctPreferenceRegistry(workspaceId, preferenceId, request) {
|
|
1595
|
+
return await this.requestJson(
|
|
1596
|
+
"POST",
|
|
1597
|
+
`/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/correct`,
|
|
1598
|
+
request
|
|
1599
|
+
);
|
|
1600
|
+
}
|
|
1601
|
+
async changePreferenceRegistryScope(workspaceId, preferenceId, request) {
|
|
1602
|
+
return await this.requestJson(
|
|
1603
|
+
"POST",
|
|
1604
|
+
`/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/scope`,
|
|
1605
|
+
request
|
|
1606
|
+
);
|
|
1607
|
+
}
|
|
1608
|
+
async deactivatePreferenceRegistry(workspaceId, preferenceId, request) {
|
|
1609
|
+
return await this.requestJson(
|
|
1610
|
+
"POST",
|
|
1611
|
+
`/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/deactivate`,
|
|
1612
|
+
request
|
|
1613
|
+
);
|
|
1614
|
+
}
|
|
1615
|
+
async supersedePreferenceRegistry(workspaceId, preferenceId, request) {
|
|
1616
|
+
return await this.requestJson(
|
|
1617
|
+
"POST",
|
|
1618
|
+
`/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/supersede`,
|
|
1619
|
+
request
|
|
1620
|
+
);
|
|
1621
|
+
}
|
|
1622
|
+
async rejectPreferenceRegistryProposal(workspaceId, preferenceId, request) {
|
|
1623
|
+
return await this.requestJson(
|
|
1624
|
+
"POST",
|
|
1625
|
+
`/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/reject`,
|
|
1626
|
+
request
|
|
1627
|
+
);
|
|
1628
|
+
}
|
|
1629
|
+
async getPreferenceRegistrySummary(workspaceId) {
|
|
1630
|
+
return await this.requestJson(
|
|
1631
|
+
"GET",
|
|
1632
|
+
`/v1/workspaces/${workspaceId}/preferences/summary`
|
|
1633
|
+
);
|
|
1634
|
+
}
|
|
1635
|
+
async getPreferenceRegistryFullContent(workspaceId, retrievalHandle) {
|
|
1636
|
+
return await this.requestJson(
|
|
1637
|
+
"POST",
|
|
1638
|
+
`/v1/workspaces/${workspaceId}/preferences/full-content`,
|
|
1639
|
+
{ retrievalHandle }
|
|
1640
|
+
);
|
|
1641
|
+
}
|
|
1504
1642
|
/**
|
|
1505
1643
|
* Delete a workspace and everything in it. Refused (409) for the account's
|
|
1506
1644
|
* only workspace and while it still has a running session. Irreversible.
|
|
@@ -2153,11 +2291,13 @@ var OpenGeniClient = class {
|
|
|
2153
2291
|
return response.connection;
|
|
2154
2292
|
}
|
|
2155
2293
|
/** Start an OAuth connection flow; redirect the user to the returned `authorizationUrl`. */
|
|
2156
|
-
async startConnectionOAuth(workspaceId, request) {
|
|
2294
|
+
async startConnectionOAuth(workspaceId, request, options = {}) {
|
|
2157
2295
|
return await this.requestJson(
|
|
2158
2296
|
"POST",
|
|
2159
2297
|
`/v1/workspaces/${workspaceId}/connections/oauth/start`,
|
|
2160
|
-
request
|
|
2298
|
+
request,
|
|
2299
|
+
{},
|
|
2300
|
+
options
|
|
2161
2301
|
);
|
|
2162
2302
|
}
|
|
2163
2303
|
/** Public, immutably-cached URL for a catalog item's logo, or null when the item has none. */
|
|
@@ -2236,6 +2376,18 @@ var OpenGeniClient = class {
|
|
|
2236
2376
|
...options.workspaceId !== void 0 ? { workspaceId: options.workspaceId } : {}
|
|
2237
2377
|
});
|
|
2238
2378
|
}
|
|
2379
|
+
async getWorkspaceInsights(workspaceId, options = {}) {
|
|
2380
|
+
return await this.requestJson(
|
|
2381
|
+
"GET",
|
|
2382
|
+
`/v1/workspaces/${workspaceId}/insights`,
|
|
2383
|
+
void 0,
|
|
2384
|
+
{
|
|
2385
|
+
range: options.range ?? "week",
|
|
2386
|
+
...options.provider !== void 0 ? { provider: options.provider } : {},
|
|
2387
|
+
...options.model !== void 0 ? { model: options.model } : {}
|
|
2388
|
+
}
|
|
2389
|
+
);
|
|
2390
|
+
}
|
|
2239
2391
|
async getBillingEntitlements(options = {}) {
|
|
2240
2392
|
return await this.requestJson(
|
|
2241
2393
|
"GET",
|
|
@@ -2438,6 +2590,30 @@ function assertApiContractResponse(response) {
|
|
|
2438
2590
|
throw new OpenGeniApiContractMismatchError(OPENGENI_API_CONTRACT_REVISION, actual);
|
|
2439
2591
|
}
|
|
2440
2592
|
}
|
|
2593
|
+
function isTranscribeAudioResponse(value) {
|
|
2594
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
2595
|
+
const record = value;
|
|
2596
|
+
return typeof record.text === "string" && Array.isArray(record.languages) && record.languages.every((language) => typeof language === "string");
|
|
2597
|
+
}
|
|
2598
|
+
function filenameForAudioMimeType(mimeType) {
|
|
2599
|
+
const bare = mimeType.trim().toLowerCase().split(";")[0] ?? "audio/webm";
|
|
2600
|
+
switch (bare) {
|
|
2601
|
+
case "audio/mp4":
|
|
2602
|
+
case "audio/m4a":
|
|
2603
|
+
return "audio.mp4";
|
|
2604
|
+
case "audio/ogg":
|
|
2605
|
+
return "audio.ogg";
|
|
2606
|
+
case "audio/mpeg":
|
|
2607
|
+
case "audio/mp3":
|
|
2608
|
+
return "audio.mp3";
|
|
2609
|
+
case "audio/wav":
|
|
2610
|
+
case "audio/x-wav":
|
|
2611
|
+
return "audio.wav";
|
|
2612
|
+
case "audio/webm":
|
|
2613
|
+
default:
|
|
2614
|
+
return "audio.webm";
|
|
2615
|
+
}
|
|
2616
|
+
}
|
|
2441
2617
|
var API_ERROR_MAX_BYTES = 16 * 1024;
|
|
2442
2618
|
async function apiErrorFromResponse(response, context) {
|
|
2443
2619
|
return new OpenGeniApiError(response.status, await readBoundedJsonErrorBody(response), {
|
|
@@ -2853,6 +3029,11 @@ function normalizeWorkspaceInstructionPolicyRoleKey(value) {
|
|
|
2853
3029
|
return value.normalize("NFKC").trim().toLowerCase().replace(/\s+/gu, "-").replace(/-+/g, "-");
|
|
2854
3030
|
}
|
|
2855
3031
|
|
|
3032
|
+
// src/preference-registry.ts
|
|
3033
|
+
function normalizePreferenceRegistryStableKey(value) {
|
|
3034
|
+
return value.normalize("NFKC").trim().toLowerCase().replace(/\s+/gu, "-").replace(/-+/g, "-");
|
|
3035
|
+
}
|
|
3036
|
+
|
|
2856
3037
|
// src/transcription.ts
|
|
2857
3038
|
var DEFAULT_WORKSPACE_TRANSCRIPTION_POLICY = {
|
|
2858
3039
|
enabled: false,
|
|
@@ -2866,6 +3047,15 @@ var DEFAULT_WORKSPACE_TRANSCRIPTION_POLICY = {
|
|
|
2866
3047
|
fallback: { mode: "disabled", targets: [] },
|
|
2867
3048
|
cost: { currency: "USD", maxPerHour: null, maxPerMonth: null }
|
|
2868
3049
|
};
|
|
3050
|
+
function resolveWorkspaceVoiceInputEnabled(settings) {
|
|
3051
|
+
if (!isRecord(settings)) return null;
|
|
3052
|
+
const voiceInput = settings.voiceInput;
|
|
3053
|
+
if (isRecord(voiceInput) && typeof voiceInput.enabled === "boolean") {
|
|
3054
|
+
return voiceInput.enabled;
|
|
3055
|
+
}
|
|
3056
|
+
const legacy = settings.transcription;
|
|
3057
|
+
return isRecord(legacy) && typeof legacy.enabled === "boolean" ? legacy.enabled : null;
|
|
3058
|
+
}
|
|
2869
3059
|
function resolveWorkspaceTranscriptionPolicy(settings) {
|
|
2870
3060
|
if (!isRecord(settings)) return cloneDefaultPolicy();
|
|
2871
3061
|
const candidate = settings.transcription;
|
|
@@ -3091,10 +3281,12 @@ export {
|
|
|
3091
3281
|
isRetryableStreamError,
|
|
3092
3282
|
nextDesktopState,
|
|
3093
3283
|
normalizeMcpOutput,
|
|
3284
|
+
normalizePreferenceRegistryStableKey,
|
|
3094
3285
|
normalizeWorkspaceInstructionPolicyRoleKey,
|
|
3095
3286
|
parseSseStream,
|
|
3096
3287
|
proxySessionEventStream,
|
|
3097
3288
|
resolveWorkspaceTranscriptionPolicy,
|
|
3289
|
+
resolveWorkspaceVoiceInputEnabled,
|
|
3098
3290
|
resumeSequenceFromRequest,
|
|
3099
3291
|
sessionEventsToSseResponse,
|
|
3100
3292
|
sessionEventsToSseStream,
|