@neta-art/cohub 1.16.1 → 1.18.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/dist/chunks/http.d.ts +62 -17
- package/dist/chunks/http.js +32 -186
- package/dist/http.d.ts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +232 -1
- package/package.json +1 -1
package/dist/chunks/http.d.ts
CHANGED
|
@@ -336,10 +336,61 @@ type GenerateRequest = {
|
|
|
336
336
|
metadata?: Record<string, unknown>;
|
|
337
337
|
};
|
|
338
338
|
//#endregion
|
|
339
|
+
//#region ../protocol/src/generation/policy.d.ts
|
|
340
|
+
type GenerationPolicy = {
|
|
341
|
+
version: 1;
|
|
342
|
+
mode: "auto" | "limited";
|
|
343
|
+
models?: GenerationModelPolicy[];
|
|
344
|
+
};
|
|
345
|
+
type GenerationModelPolicy = {
|
|
346
|
+
model: string;
|
|
347
|
+
/**
|
|
348
|
+
* Generic constraints keyed by generation declaration parameter name.
|
|
349
|
+
* Missing parameters are not restricted by policy.
|
|
350
|
+
*/
|
|
351
|
+
parameters?: Record<string, GenerationParameterConstraint>;
|
|
352
|
+
};
|
|
353
|
+
type GenerationParameterConstraint = {
|
|
354
|
+
kind: "enum";
|
|
355
|
+
values: Array<string | number | boolean>;
|
|
356
|
+
} | {
|
|
357
|
+
kind: "number";
|
|
358
|
+
min?: number;
|
|
359
|
+
max?: number;
|
|
360
|
+
values?: number[];
|
|
361
|
+
} | {
|
|
362
|
+
kind: "integer";
|
|
363
|
+
min?: number;
|
|
364
|
+
max?: number;
|
|
365
|
+
values?: number[];
|
|
366
|
+
} | {
|
|
367
|
+
kind: "boolean";
|
|
368
|
+
value?: boolean;
|
|
369
|
+
};
|
|
370
|
+
declare class GenerationPolicyError extends Error {
|
|
371
|
+
constructor(message: string);
|
|
372
|
+
}
|
|
373
|
+
type EnvLike = Record<string, string | undefined>;
|
|
374
|
+
type PublicDeclaration = Omit<GenerationModelDeclaration, "adapter">;
|
|
375
|
+
declare function normalizeGenerationPolicy(value: unknown): GenerationPolicy | null;
|
|
376
|
+
declare function encodeGenerationPolicy(policy: GenerationPolicy): string;
|
|
377
|
+
declare function decodeGenerationPolicy(value: string): GenerationPolicy | null;
|
|
378
|
+
declare function parseGenerationPolicyFromEnv(env: EnvLike): GenerationPolicy | null;
|
|
379
|
+
declare function getAllowedGenerationModelIds(policy: GenerationPolicy | null): string[] | null;
|
|
380
|
+
declare function findGenerationModelPolicy(policy: GenerationPolicy | null, model: string): GenerationModelPolicy | null;
|
|
381
|
+
declare function assertGenerationRequestAllowedByPolicy(input: {
|
|
382
|
+
policy: GenerationPolicy | null;
|
|
383
|
+
model: string;
|
|
384
|
+
parameters?: Record<string, unknown>;
|
|
385
|
+
}): void;
|
|
386
|
+
declare function filterGenerationDeclarationsByPolicy<T extends PublicDeclaration>(declarations: T[], policy: GenerationPolicy | null): T[];
|
|
387
|
+
//#endregion
|
|
339
388
|
//#region ../protocol/src/generation/index.d.ts
|
|
340
389
|
declare const GENERATION_TASK_TYPE: "generation";
|
|
341
390
|
type CreateGenerationTaskRequest = {
|
|
342
391
|
spaceId: string;
|
|
392
|
+
sessionId?: string | null;
|
|
393
|
+
turnId?: string | null;
|
|
343
394
|
model: string;
|
|
344
395
|
content: GenerationContentBlock[];
|
|
345
396
|
parameters?: Record<string, unknown>;
|
|
@@ -838,6 +889,7 @@ type CreateSpacePromptInput = {
|
|
|
838
889
|
model?: string | null;
|
|
839
890
|
provider?: string | null;
|
|
840
891
|
clientMessageId?: string | null;
|
|
892
|
+
generationPolicy?: GenerationPolicy | null;
|
|
841
893
|
schedule?: {
|
|
842
894
|
mode?: "immediate";
|
|
843
895
|
} | {
|
|
@@ -904,6 +956,7 @@ type TaskRunRecord = {
|
|
|
904
956
|
attemptCount: number;
|
|
905
957
|
spaceId: string | null;
|
|
906
958
|
sessionId: string | null;
|
|
959
|
+
turnId: string | null;
|
|
907
960
|
userUuid: string | null;
|
|
908
961
|
scheduledAt: string | null;
|
|
909
962
|
startedAt: string | null;
|
|
@@ -1300,7 +1353,7 @@ type GenerationStreamIntermediateMessage = {
|
|
|
1300
1353
|
};
|
|
1301
1354
|
type GenerationStreamStateEvent = {
|
|
1302
1355
|
type: "state";
|
|
1303
|
-
source: "
|
|
1356
|
+
source: "patch";
|
|
1304
1357
|
state: SessionPatchState;
|
|
1305
1358
|
messageId: string | null;
|
|
1306
1359
|
messageOrdinal: number | null;
|
|
@@ -1329,7 +1382,7 @@ type GenerationStreamErrorEvent = {
|
|
|
1329
1382
|
};
|
|
1330
1383
|
type GenerationStreamOutOfSyncEvent = {
|
|
1331
1384
|
type: "out_of_sync";
|
|
1332
|
-
source: "
|
|
1385
|
+
source: "patch";
|
|
1333
1386
|
reason: "duplicate" | "version_mismatch" | "invalid";
|
|
1334
1387
|
state: SessionPatchState;
|
|
1335
1388
|
rawEvent: WebsocketEventPayload;
|
|
@@ -1353,7 +1406,7 @@ declare class SessionGenerationStreamClient {
|
|
|
1353
1406
|
private messageId;
|
|
1354
1407
|
private messageOrdinal;
|
|
1355
1408
|
private intermediateMessages;
|
|
1356
|
-
private
|
|
1409
|
+
private patchState;
|
|
1357
1410
|
constructor(websocketClient: WebsocketClient | null, spaceId: string, sessionId: string);
|
|
1358
1411
|
subscribe(handlers: GenerationStreamSubscriptionHandlers): () => void;
|
|
1359
1412
|
private emit;
|
|
@@ -1362,9 +1415,7 @@ declare class SessionGenerationStreamClient {
|
|
|
1362
1415
|
private addIntermediateMessage;
|
|
1363
1416
|
private handleAppliedState;
|
|
1364
1417
|
private prepareMessageBoundary;
|
|
1365
|
-
private handleSnapshot;
|
|
1366
1418
|
private handlePatch;
|
|
1367
|
-
private handleProgress;
|
|
1368
1419
|
private handlePersisted;
|
|
1369
1420
|
private handleFinalized;
|
|
1370
1421
|
private handleEvent;
|
|
@@ -1397,28 +1448,22 @@ declare class PublicInviteApi {
|
|
|
1397
1448
|
//#endregion
|
|
1398
1449
|
//#region src/apis/spaces.d.ts
|
|
1399
1450
|
type SessionSubscriptionHandlers = {
|
|
1400
|
-
patch?: (event: WebsocketEventPayload) => void;
|
|
1401
|
-
|
|
1402
|
-
* @deprecated Use `session.subscribeGeneration({ state })` for normalized
|
|
1403
|
-
* snapshot/patch/progress generation state.
|
|
1404
|
-
*/
|
|
1405
|
-
patchState?: (result: SessionPatchApplyResult) => void; /** @deprecated Use `session.subscribeGeneration({ state })`. */
|
|
1406
|
-
snapshot?: (event: WebsocketEventPayload) => void; /** @deprecated Legacy progress events are normalized by `subscribeGeneration`. */
|
|
1407
|
-
progress?: (event: WebsocketEventPayload) => void; /** @deprecated Use `session.subscribeGeneration({ commit, finalized })`. */
|
|
1408
|
-
final?: (event: WebsocketEventPayload) => void;
|
|
1451
|
+
patch?: (event: WebsocketEventPayload) => void; /** @deprecated Use `session.subscribeGeneration({ state })`. */
|
|
1452
|
+
patchState?: (result: SessionPatchApplyResult) => void;
|
|
1409
1453
|
turnUpdated?: (event: WebsocketEventPayload) => void;
|
|
1410
1454
|
turnFinalized?: (event: WebsocketEventPayload) => void;
|
|
1411
1455
|
error?: (event: WebsocketEventPayload) => void;
|
|
1412
1456
|
persisted?: (event: WebsocketEventPayload) => void;
|
|
1413
1457
|
event?: (event: WebsocketEventPayload) => void;
|
|
1414
1458
|
};
|
|
1415
|
-
type SessionEventName = "
|
|
1416
|
-
type SpaceEventName = SessionEventName | "ports.changed" | "event";
|
|
1459
|
+
type SessionEventName = "created" | "updated" | "turn.created" | "turn.patch" | "turn.updated" | "turn.finalized" | "turn.error" | "message.persisted";
|
|
1460
|
+
type SpaceEventName = SessionEventName | "fs.changed" | "ports.changed" | "task.created" | "task.updated" | "event";
|
|
1417
1461
|
type SessionSendMessageInput = {
|
|
1418
1462
|
content: ContentBlock[];
|
|
1419
1463
|
model?: string;
|
|
1420
1464
|
provider?: string;
|
|
1421
1465
|
clientMessageId?: string;
|
|
1466
|
+
generationPolicy?: GenerationPolicy | null;
|
|
1422
1467
|
};
|
|
1423
1468
|
declare class SpacesApi {
|
|
1424
1469
|
private readonly transport;
|
|
@@ -1861,4 +1906,4 @@ declare class CohubHttpClient {
|
|
|
1861
1906
|
}
|
|
1862
1907
|
declare const createHttpClient: (options?: CohubClientOptions) => CohubHttpClient;
|
|
1863
1908
|
//#endregion
|
|
1864
|
-
export { CreateInvitationInput as $, SpaceFsReadFilesInput as $t, SessionPatchStatus as A, TaskRunRecord as An, SessionTurnWindowResponse as At, GenerationsApi as B,
|
|
1909
|
+
export { CreateInvitationInput as $, DiscordChannelConfig as $n, SpaceFsReadFilesInput as $t, SessionPatchStatus as A, TaskRunRecord as An, SessionTurnWindowResponse as At, GenerationsApi as B, GenerationParameterConstraint as Bn, SpaceCreateResponse as Bt, SessionGenerationStreamClient as C, SpaceSandboxAutoDestroyPolicy as Cn, SessionMessagesPaginatedResponse as Ct, SessionPatchApplyResult as D, SpaceUsageResponse as Dn, SessionTurnResponse as Dt, SessionPatchApplyInput as E, SpaceUsageHourlyStat as En, SessionTurnIndexResponse as Et, CreatePublicAssetUploadResponse as F, CreateGenerationTaskResponse as Fn, SpaceChannelBindingInput as Ft, BillingCreditExpiryGroup as G, encodeGenerationPolicy as Gn, SpaceFsCreateUploadResponse as Gt, ChannelsApi as H, GenerationPolicyError as Hn, SpaceFsCompleteUploadInput as Ht, PublicAssetPurpose as I, GenerationTaskResult as In, SpaceCheckpointDetailResponse as It, BillingCreditUnit as J, getAllowedGenerationModelIds as Jn, SpaceFsFileKind as Jt, BillingCreditGrantStatus as K, filterGenerationDeclarationsByPolicy as Kn, SpaceFsEncoding as Kt, PublicAssetsApi as L, ListGenerationModelsResponse as Ln, SpaceConfig as Lt, SessionAccessApi as M, UserRulesResponse as Mn, SpaceAccess as Mt, SearchApi as N, UserSshKey as Nn, SpaceAccessPolicy as Nt, SessionPatchReducer as O, SpaceUsageSummary as On, SessionTurnSignedUrlsResponse as Ot, CreatePublicAssetUploadInput as P, CreateGenerationTaskRequest as Pn, SpaceBootstrapSource as Pt, CheckpointRecord as Q, ChannelConfig as Qn, SpaceFsReadFilesError as Qt, PromptsApi as R, PublicGenerationDeclaration as Rn, SpaceConfigInput as Rt, GenerationStreamTurnUpdatedEvent as S, SpaceRole as Sn, SessionMessageResponse as St, parseAssistantMessageCommit as T, SpaceSessionsResponse as Tn, SessionRecord as Tt, AcceptInvitationResponse as U, assertGenerationRequestAllowedByPolicy as Un, SpaceFsCompleteUploadResponse as Ut, CronJobsApi as V, GenerationPolicy as Vn, SpaceEnvInput as Vt, ApiError as W, decodeGenerationPolicy as Wn, SpaceFsCreateUploadInput as Wt, BillingPluginStatus as X, parseGenerationPolicyFromEnv as Xn, SpaceFsMoveInput as Xt, BillingOpenOverageStatus as Y, normalizeGenerationPolicy as Yn, SpaceFsFileResponse as Yt, Channel as Z, GenerationContentBlock as Zn, SpaceFsPreparingFile as Zt, GenerationStreamFinalizedEvent as _, SpaceMember as _n, ModelCatalogEntry as _t, SessionEventName as a, SpaceFsUploadPlanEntry as an, CohubClientOptions as ar, CronJobRecord as at, GenerationStreamStateEvent as b, SpacePublicProfile as bn, PromptTemplateCatalogResponse as bt, SpaceClient as c, SpaceFsUploadResponse as cn, HttpTransport as cr, ExploreSpacesResponse as ct, WebSocketConnectionState as d, SpaceInvitation as dn, GlobalSearchType as dt, SpaceFsReadFilesResponse as en, MessageRecord as er, CreateInvitationResponse as et, PublicInviteApi as f, SpaceListItem as fn, InvitationDetail as ft, GenerationStreamEvent as g, SpaceMarkResourceType as gn, MeResponse as gt, GenerationStreamErrorEvent as h, SpaceMarkRecord as hn, JsonValue as ht, TasksApi as i, SpaceFsUploadError as in, SessionTurnRecord as ir, CreateSpacePromptResponse as it, createSessionPatchReducer as j, UserProfile as jn, SessionTurnsPaginatedResponse as jt, SessionPatchState as k, TaskRunDetailResponse as kn, SessionTurnStreamSnapshotResponse as kt, SpaceEventName as l, SpaceFsWriteFileInput as ln, RawHttpResponse as lr, GlobalSearchResponse as lt, GenerationStreamCommitEvent as m, SpaceMarkListItem as mn, JsonPrimitive as mt, createHttpClient as n, SpaceFsUploadDestination as nn, SessionTurnSegmentRecord as nr, CreateSpaceModInput as nt, SessionSubscriptionHandlers as o, SpaceFsUploadPlanEntryInput as on, Fetch as or, ExploreSection as ot, AssistantMessageCommit as p, SpaceMarkKind as pn, JsonObject as pt, BillingCreditStatus as q, findGenerationModelPolicy as qn, SpaceFsEntry as qt, UserApi as r, SpaceFsUploadEntry as rn, SessionTurnIndexItem as rr, CreateSpacePromptInput as rt, SpaceChannelBindingRecord as s, SpaceFsUploadProgress as sn, HttpError as sr, ExploreSpaceItem as st, CohubHttpClient as t, SpaceFsTreeResponse as tn, SessionForkRecord as tr, CreateSpaceInput as tt, SpacesApi as u, SpaceGitInfo as un, GlobalSearchResult as ut, GenerationStreamIntermediateMessage as v, SpaceMeta as vn, Permission as vt, createSessionGenerationStreamClient as w, SpaceSandboxConfig as wn, SessionMessagesResponse as wt, GenerationStreamSubscriptionHandlers as x, SpaceRecord as xn, SessionBindingRecord as xt, GenerationStreamOutOfSyncEvent as y, SpaceModListItem as yn, PromptTemplateCatalogEntry as yt, ModelsApi as z, GenerationModelPolicy as zn, SpaceConfigResponse as zt };
|
package/dist/chunks/http.js
CHANGED
|
@@ -320,7 +320,7 @@ const createIdleState = (input) => ({
|
|
|
320
320
|
function cloneBlock(block) {
|
|
321
321
|
return structuredClone(block);
|
|
322
322
|
}
|
|
323
|
-
function getStreamIndex
|
|
323
|
+
function getStreamIndex(block) {
|
|
324
324
|
const value = block._meta?.streamIndex;
|
|
325
325
|
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
326
326
|
}
|
|
@@ -331,19 +331,19 @@ function blockIdentityCompatible(prev, next) {
|
|
|
331
331
|
return true;
|
|
332
332
|
}
|
|
333
333
|
function findBlockByStreamIndex(blocks, streamIndex) {
|
|
334
|
-
return blocks.findIndex((block) => getStreamIndex
|
|
334
|
+
return blocks.findIndex((block) => getStreamIndex(block) === streamIndex);
|
|
335
335
|
}
|
|
336
336
|
function findBlockForReplacement(blocks, streamIndex, nextBlock) {
|
|
337
|
-
const compatibleIndex = blocks.findIndex((block) => getStreamIndex
|
|
337
|
+
const compatibleIndex = blocks.findIndex((block) => getStreamIndex(block) === streamIndex && blockIdentityCompatible(block, nextBlock));
|
|
338
338
|
if (compatibleIndex >= 0) return compatibleIndex;
|
|
339
|
-
const sameStreamIndex = blocks.findIndex((block) => getStreamIndex
|
|
339
|
+
const sameStreamIndex = blocks.findIndex((block) => getStreamIndex(block) === streamIndex);
|
|
340
340
|
if (sameStreamIndex >= 0 && nextBlock.type !== "tool_use" && nextBlock.type !== "tool_result") return sameStreamIndex;
|
|
341
341
|
return -1;
|
|
342
342
|
}
|
|
343
343
|
function sortBlocksByStreamIndex(blocks) {
|
|
344
344
|
return [...blocks].sort((a, b) => {
|
|
345
|
-
const aIndex = getStreamIndex
|
|
346
|
-
const bIndex = getStreamIndex
|
|
345
|
+
const aIndex = getStreamIndex(a);
|
|
346
|
+
const bIndex = getStreamIndex(b);
|
|
347
347
|
if (aIndex == null && bIndex == null) return 0;
|
|
348
348
|
if (aIndex == null) return 1;
|
|
349
349
|
if (bIndex == null) return -1;
|
|
@@ -697,14 +697,6 @@ const createSessionPatchReducer = () => new SessionPatchReducer();
|
|
|
697
697
|
//#region src/session-generation-stream.ts
|
|
698
698
|
const isRecord = (value) => Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
699
699
|
const isContentBlockArray = (value) => Array.isArray(value) && value.every((item) => isRecord(item) && typeof item.type === "string");
|
|
700
|
-
const stringField = (record, key) => {
|
|
701
|
-
const value = record[key];
|
|
702
|
-
return typeof value === "string" ? value : null;
|
|
703
|
-
};
|
|
704
|
-
const numberField = (record, key) => {
|
|
705
|
-
const value = record[key];
|
|
706
|
-
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
707
|
-
};
|
|
708
700
|
const getMessageKind = (message) => {
|
|
709
701
|
const kind = message.meta?.messageKind;
|
|
710
702
|
return typeof kind === "string" ? kind : null;
|
|
@@ -737,68 +729,6 @@ function parseAssistantMessageCommit(message) {
|
|
|
737
729
|
isFinal: false
|
|
738
730
|
};
|
|
739
731
|
}
|
|
740
|
-
function cloneContentBlock(block) {
|
|
741
|
-
return structuredClone(block);
|
|
742
|
-
}
|
|
743
|
-
function getStreamIndex(block) {
|
|
744
|
-
const value = block._meta?.streamIndex;
|
|
745
|
-
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
746
|
-
}
|
|
747
|
-
function findMergeTargetIndex(result, block) {
|
|
748
|
-
const streamIndex = getStreamIndex(block);
|
|
749
|
-
if (streamIndex != null) return result.findIndex((existing) => existing.type === block.type && getStreamIndex(existing) === streamIndex);
|
|
750
|
-
if (block.type === "tool_use") return result.findIndex((existing) => existing.type === "tool_use" && existing.id === block.id);
|
|
751
|
-
if (block.type === "tool_result") return result.findIndex((existing) => existing.type === "tool_result" && existing.tool_use_id === block.tool_use_id);
|
|
752
|
-
return -1;
|
|
753
|
-
}
|
|
754
|
-
function mergeStreamingDeltaBlocks(existing, delta) {
|
|
755
|
-
if (delta.length === 0) return existing;
|
|
756
|
-
const result = existing.map(cloneContentBlock);
|
|
757
|
-
for (const block of delta) {
|
|
758
|
-
const targetIndex = findMergeTargetIndex(result, block);
|
|
759
|
-
if (targetIndex === -1) {
|
|
760
|
-
result.push(cloneContentBlock(block));
|
|
761
|
-
continue;
|
|
762
|
-
}
|
|
763
|
-
const target = result[targetIndex];
|
|
764
|
-
if (block.type === "text" && target?.type === "text") {
|
|
765
|
-
target.text += block.text;
|
|
766
|
-
continue;
|
|
767
|
-
}
|
|
768
|
-
if (block.type === "thinking" && target?.type === "thinking") {
|
|
769
|
-
target.thinking += block.thinking;
|
|
770
|
-
if (block.signature) target.signature = block.signature;
|
|
771
|
-
if (block._meta) target._meta = {
|
|
772
|
-
...target._meta ?? {},
|
|
773
|
-
...block._meta
|
|
774
|
-
};
|
|
775
|
-
continue;
|
|
776
|
-
}
|
|
777
|
-
result[targetIndex] = Object.assign(target ?? {}, cloneContentBlock(block));
|
|
778
|
-
}
|
|
779
|
-
return result;
|
|
780
|
-
}
|
|
781
|
-
function parseSnapshotMessage(value) {
|
|
782
|
-
if (!isRecord(value) || !isContentBlockArray(value.content)) return null;
|
|
783
|
-
return {
|
|
784
|
-
messageId: stringField(value, "messageId"),
|
|
785
|
-
messageOrdinal: numberField(value, "messageOrdinal"),
|
|
786
|
-
content: value.content,
|
|
787
|
-
...typeof value.id === "string" ? { id: value.id } : {},
|
|
788
|
-
...typeof value.sessionId === "string" ? { sessionId: value.sessionId } : {},
|
|
789
|
-
...value.role === "user" || value.role === "assistant" || value.role === "system" ? { role: value.role } : {},
|
|
790
|
-
...typeof value.text === "string" ? { text: value.text } : {},
|
|
791
|
-
...typeof value.provider === "string" ? { provider: value.provider } : {},
|
|
792
|
-
...typeof value.model === "string" ? { model: value.model } : {},
|
|
793
|
-
...typeof value.stopReason === "string" ? { stopReason: value.stopReason } : {},
|
|
794
|
-
...typeof value.errorMessage === "string" ? { errorMessage: value.errorMessage } : {},
|
|
795
|
-
...isRecord(value.usage) ? { usage: value.usage } : {},
|
|
796
|
-
...typeof value.durationMs === "number" ? { durationMs: value.durationMs } : {},
|
|
797
|
-
...typeof value.toolCallsObjectKey === "string" ? { toolCallsObjectKey: value.toolCallsObjectKey } : {},
|
|
798
|
-
...isRecord(value.meta) ? { meta: value.meta } : {},
|
|
799
|
-
...typeof value.createdAt === "string" ? { createdAt: value.createdAt } : {}
|
|
800
|
-
};
|
|
801
|
-
}
|
|
802
732
|
function messageRecordToIntermediate(message) {
|
|
803
733
|
if (!isContentBlockArray(message.content) || message.content.length === 0) return null;
|
|
804
734
|
const meta = isRecord(message.meta) ? message.meta : {};
|
|
@@ -838,7 +768,7 @@ var SessionGenerationStreamClient = class SessionGenerationStreamClient {
|
|
|
838
768
|
messageId = null;
|
|
839
769
|
messageOrdinal = null;
|
|
840
770
|
intermediateMessages = [];
|
|
841
|
-
|
|
771
|
+
patchState = null;
|
|
842
772
|
constructor(websocketClient, spaceId, sessionId) {
|
|
843
773
|
this.websocketClient = websocketClient;
|
|
844
774
|
this.spaceId = spaceId;
|
|
@@ -866,7 +796,7 @@ var SessionGenerationStreamClient = class SessionGenerationStreamClient {
|
|
|
866
796
|
resetCurrentMessage() {
|
|
867
797
|
this.messageId = null;
|
|
868
798
|
this.messageOrdinal = null;
|
|
869
|
-
this.
|
|
799
|
+
this.patchState = null;
|
|
870
800
|
}
|
|
871
801
|
appendCurrentMessage(state) {
|
|
872
802
|
if (state.contentBlocks.length === 0) return;
|
|
@@ -894,14 +824,14 @@ var SessionGenerationStreamClient = class SessionGenerationStreamClient {
|
|
|
894
824
|
if (!result.applied) {
|
|
895
825
|
this.emit(handlers, {
|
|
896
826
|
type: "out_of_sync",
|
|
897
|
-
source
|
|
827
|
+
source,
|
|
898
828
|
reason: result.reason,
|
|
899
829
|
state: result.state,
|
|
900
830
|
rawEvent
|
|
901
831
|
});
|
|
902
832
|
return;
|
|
903
833
|
}
|
|
904
|
-
this.
|
|
834
|
+
this.patchState = result.state;
|
|
905
835
|
this.messageId = messageId;
|
|
906
836
|
this.messageOrdinal = messageOrdinal;
|
|
907
837
|
this.emit(handlers, {
|
|
@@ -915,7 +845,7 @@ var SessionGenerationStreamClient = class SessionGenerationStreamClient {
|
|
|
915
845
|
});
|
|
916
846
|
}
|
|
917
847
|
prepareMessageBoundary(input) {
|
|
918
|
-
const current = this.
|
|
848
|
+
const current = this.patchState ?? this.reducer.get({
|
|
919
849
|
spaceId: this.spaceId,
|
|
920
850
|
sessionId: this.sessionId
|
|
921
851
|
});
|
|
@@ -947,45 +877,6 @@ var SessionGenerationStreamClient = class SessionGenerationStreamClient {
|
|
|
947
877
|
}
|
|
948
878
|
return nextMessageId;
|
|
949
879
|
}
|
|
950
|
-
handleSnapshot(event, handlers) {
|
|
951
|
-
const payload = event.payload;
|
|
952
|
-
const current = isRecord(payload.current) ? payload.current : null;
|
|
953
|
-
const content = current ? current.content : null;
|
|
954
|
-
const seq = typeof payload.seq === "number" ? payload.seq : null;
|
|
955
|
-
if (!current || !isContentBlockArray(content) || seq === null) {
|
|
956
|
-
this.emit(handlers, {
|
|
957
|
-
type: "out_of_sync",
|
|
958
|
-
source: "snapshot",
|
|
959
|
-
reason: "invalid",
|
|
960
|
-
state: this.reducer.get({
|
|
961
|
-
spaceId: this.spaceId,
|
|
962
|
-
sessionId: this.sessionId
|
|
963
|
-
}),
|
|
964
|
-
rawEvent: event
|
|
965
|
-
});
|
|
966
|
-
return;
|
|
967
|
-
}
|
|
968
|
-
const turnId = typeof payload.turnId === "string" ? payload.turnId : null;
|
|
969
|
-
const anchorUserMessageId = typeof payload.anchorUserMessageId === "string" ? payload.anchorUserMessageId : null;
|
|
970
|
-
const messageOrdinal = numberField(current, "messageOrdinal");
|
|
971
|
-
const messageId = this.prepareMessageBoundary({
|
|
972
|
-
turnId,
|
|
973
|
-
messageId: stringField(current, "messageId"),
|
|
974
|
-
messageOrdinal,
|
|
975
|
-
anchorUserMessageId
|
|
976
|
-
});
|
|
977
|
-
this.intermediateMessages = Array.isArray(payload.intermediateMessages) ? payload.intermediateMessages.map(parseSnapshotMessage).filter((message) => message !== null) : [];
|
|
978
|
-
const result = this.reducer.applySnapshot({
|
|
979
|
-
spaceId: this.spaceId,
|
|
980
|
-
sessionId: this.sessionId,
|
|
981
|
-
turnId,
|
|
982
|
-
seq,
|
|
983
|
-
contentBlocks: content,
|
|
984
|
-
anchorUserMessageId,
|
|
985
|
-
appendPath: stringField(current, "appendPath")
|
|
986
|
-
});
|
|
987
|
-
this.handleAppliedState(handlers, "snapshot", result, event, messageId, messageOrdinal);
|
|
988
|
-
}
|
|
989
880
|
handlePatch(event, handlers) {
|
|
990
881
|
const payload = event.payload;
|
|
991
882
|
const seq = typeof payload.seq === "number" ? payload.seq : null;
|
|
@@ -1024,45 +915,6 @@ var SessionGenerationStreamClient = class SessionGenerationStreamClient {
|
|
|
1024
915
|
const result = this.reducer.applyPatch(input);
|
|
1025
916
|
this.handleAppliedState(handlers, "patch", result, event, messageId, messageOrdinal);
|
|
1026
917
|
}
|
|
1027
|
-
handleProgress(event, handlers) {
|
|
1028
|
-
const payload = event.payload;
|
|
1029
|
-
if (!isContentBlockArray(payload.content)) return;
|
|
1030
|
-
const current = this.progressState ?? this.reducer.get({
|
|
1031
|
-
spaceId: this.spaceId,
|
|
1032
|
-
sessionId: this.sessionId
|
|
1033
|
-
});
|
|
1034
|
-
const turnId = typeof payload.turnId === "string" ? payload.turnId : current.turnId;
|
|
1035
|
-
const anchorUserMessageId = typeof payload.anchorUserMessageId === "string" ? payload.anchorUserMessageId : current.anchorUserMessageId;
|
|
1036
|
-
const messageOrdinal = typeof payload.messageOrdinal === "number" ? payload.messageOrdinal : this.messageOrdinal;
|
|
1037
|
-
const messageId = this.prepareMessageBoundary({
|
|
1038
|
-
turnId,
|
|
1039
|
-
messageId: typeof payload.messageId === "string" ? payload.messageId : this.messageId,
|
|
1040
|
-
messageOrdinal,
|
|
1041
|
-
anchorUserMessageId
|
|
1042
|
-
});
|
|
1043
|
-
const base = this.progressState?.turnId === turnId ? this.progressState : current;
|
|
1044
|
-
const state = {
|
|
1045
|
-
...base,
|
|
1046
|
-
spaceId: this.spaceId,
|
|
1047
|
-
sessionId: this.sessionId,
|
|
1048
|
-
status: "streaming",
|
|
1049
|
-
contentBlocks: mergeStreamingDeltaBlocks(base.contentBlocks, payload.content),
|
|
1050
|
-
anchorUserMessageId,
|
|
1051
|
-
turnId
|
|
1052
|
-
};
|
|
1053
|
-
this.progressState = state;
|
|
1054
|
-
this.messageId = messageId;
|
|
1055
|
-
this.messageOrdinal = messageOrdinal;
|
|
1056
|
-
this.emit(handlers, {
|
|
1057
|
-
type: "state",
|
|
1058
|
-
source: "progress",
|
|
1059
|
-
state,
|
|
1060
|
-
messageId,
|
|
1061
|
-
messageOrdinal,
|
|
1062
|
-
intermediateMessages: [...this.intermediateMessages],
|
|
1063
|
-
rawEvent: event
|
|
1064
|
-
});
|
|
1065
|
-
}
|
|
1066
918
|
handlePersisted(event, handlers) {
|
|
1067
919
|
const message = event.payload.message;
|
|
1068
920
|
if (!isRecord(message)) return;
|
|
@@ -1121,15 +973,9 @@ var SessionGenerationStreamClient = class SessionGenerationStreamClient {
|
|
|
1121
973
|
}
|
|
1122
974
|
handleEvent(event, handlers) {
|
|
1123
975
|
switch (event.type) {
|
|
1124
|
-
case "session.turn.snapshot":
|
|
1125
|
-
this.handleSnapshot(event, handlers);
|
|
1126
|
-
return;
|
|
1127
976
|
case "session.turn.patch":
|
|
1128
977
|
this.handlePatch(event, handlers);
|
|
1129
978
|
return;
|
|
1130
|
-
case "session.turn.progress":
|
|
1131
|
-
this.handleProgress(event, handlers);
|
|
1132
|
-
return;
|
|
1133
979
|
case "session.message.persisted":
|
|
1134
980
|
this.handlePersisted(event, handlers);
|
|
1135
981
|
return;
|
|
@@ -1217,12 +1063,13 @@ const getFilenameFromContentDisposition = (value) => {
|
|
|
1217
1063
|
};
|
|
1218
1064
|
const toSessionEventName = (type) => {
|
|
1219
1065
|
switch (type) {
|
|
1066
|
+
case "session.created": return "created";
|
|
1067
|
+
case "session.updated": return "updated";
|
|
1068
|
+
case "session.turn.created": return "turn.created";
|
|
1220
1069
|
case "session.turn.patch": return "turn.patch";
|
|
1221
|
-
case "session.turn.snapshot": return "turn.snapshot";
|
|
1222
|
-
case "session.turn.progress": return "turn.progress";
|
|
1223
1070
|
case "session.turn.error": return "turn.error";
|
|
1224
1071
|
case "session.turn.updated": return "turn.updated";
|
|
1225
|
-
case "session.turn.finalized": return "turn.
|
|
1072
|
+
case "session.turn.finalized": return "turn.finalized";
|
|
1226
1073
|
case "session.message.persisted": return "message.persisted";
|
|
1227
1074
|
default: return null;
|
|
1228
1075
|
}
|
|
@@ -1418,7 +1265,8 @@ var SessionMessagesClient = class {
|
|
|
1418
1265
|
content: input.content,
|
|
1419
1266
|
model: input.model,
|
|
1420
1267
|
provider: input.provider,
|
|
1421
|
-
clientMessageId: input.clientMessageId
|
|
1268
|
+
clientMessageId: input.clientMessageId,
|
|
1269
|
+
generationPolicy: input.generationPolicy
|
|
1422
1270
|
})
|
|
1423
1271
|
});
|
|
1424
1272
|
}
|
|
@@ -1500,8 +1348,6 @@ var SessionRealtimeClient = class {
|
|
|
1500
1348
|
}));
|
|
1501
1349
|
}
|
|
1502
1350
|
}
|
|
1503
|
-
if (eventName === "turn.snapshot") handlers.snapshot?.(event);
|
|
1504
|
-
if (eventName === "turn.progress") handlers.progress?.(event);
|
|
1505
1351
|
if (eventName === "turn.error") {
|
|
1506
1352
|
this.patchReducer.fail({
|
|
1507
1353
|
spaceId: this.spaceId,
|
|
@@ -1517,32 +1363,24 @@ var SessionRealtimeClient = class {
|
|
|
1517
1363
|
});
|
|
1518
1364
|
}
|
|
1519
1365
|
if (eventName === "turn.updated") handlers.turnUpdated?.(event);
|
|
1520
|
-
if (eventName === "turn.
|
|
1366
|
+
if (eventName === "turn.finalized") {
|
|
1521
1367
|
this.patchReducer.complete({
|
|
1522
1368
|
spaceId: this.spaceId,
|
|
1523
1369
|
sessionId: this.sessionId,
|
|
1524
1370
|
turnId: typeof event.payload.turn === "object" && event.payload.turn && "id" in event.payload.turn ? String(event.payload.turn.id) : null
|
|
1525
1371
|
});
|
|
1526
1372
|
handlers.turnFinalized?.(event);
|
|
1527
|
-
handlers.final?.(event);
|
|
1528
|
-
}
|
|
1529
|
-
if (isAssistantFinalPersistedEvent(event)) {
|
|
1530
|
-
this.patchReducer.complete({
|
|
1531
|
-
spaceId: this.spaceId,
|
|
1532
|
-
sessionId: this.sessionId,
|
|
1533
|
-
turnId: getPersistedMessageTurnId(event)
|
|
1534
|
-
});
|
|
1535
|
-
handlers.final?.(event);
|
|
1536
1373
|
}
|
|
1374
|
+
if (isAssistantFinalPersistedEvent(event)) this.patchReducer.complete({
|
|
1375
|
+
spaceId: this.spaceId,
|
|
1376
|
+
sessionId: this.sessionId,
|
|
1377
|
+
turnId: getPersistedMessageTurnId(event)
|
|
1378
|
+
});
|
|
1537
1379
|
});
|
|
1538
1380
|
return () => unsubscribe();
|
|
1539
1381
|
}
|
|
1540
1382
|
on(type, handler) {
|
|
1541
1383
|
return this.subscribe({ event: (event) => {
|
|
1542
|
-
if (type === "turn.final" && isAssistantFinalPersistedEvent(event)) {
|
|
1543
|
-
handler(event);
|
|
1544
|
-
return;
|
|
1545
|
-
}
|
|
1546
1384
|
if (toSessionEventName(event.type) === type) handler(event);
|
|
1547
1385
|
} });
|
|
1548
1386
|
}
|
|
@@ -1652,11 +1490,19 @@ var SpaceEventsApi = class {
|
|
|
1652
1490
|
handler(event);
|
|
1653
1491
|
return;
|
|
1654
1492
|
}
|
|
1493
|
+
if (type === "fs.changed" && event.type === "space.fs.changed") {
|
|
1494
|
+
handler(event);
|
|
1495
|
+
return;
|
|
1496
|
+
}
|
|
1655
1497
|
if (type === "ports.changed" && event.type === "space.ports.changed") {
|
|
1656
1498
|
handler(event);
|
|
1657
1499
|
return;
|
|
1658
1500
|
}
|
|
1659
|
-
if (type === "
|
|
1501
|
+
if (type === "task.created" && event.type === "task.created") {
|
|
1502
|
+
handler(event);
|
|
1503
|
+
return;
|
|
1504
|
+
}
|
|
1505
|
+
if (type === "task.updated" && event.type === "task.updated") {
|
|
1660
1506
|
handler(event);
|
|
1661
1507
|
return;
|
|
1662
1508
|
}
|
package/dist/http.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { l as ContentBlock } from "./chunks/websocket.js";
|
|
2
|
-
import { $ as CreateInvitationInput, $t as SpaceFsReadFilesInput, An as TaskRunRecord, At as SessionTurnWindowResponse,
|
|
3
|
-
export { AcceptInvitationResponse, ApiError, BillingCreditExpiryGroup, BillingCreditGrantStatus, BillingCreditStatus, BillingCreditUnit, BillingOpenOverageStatus, BillingPluginStatus, Channel, ChannelConfig, CheckpointRecord, CohubClientOptions, CohubHttpClient, ContentBlock, CreateGenerationTaskRequest, CreateGenerationTaskResponse, CreateInvitationInput, CreateInvitationResponse, CreateSpaceInput, CreateSpaceModInput, CreateSpacePromptInput, CreateSpacePromptResponse, CronJobRecord, DiscordChannelConfig, ExploreSection, ExploreSpaceItem, ExploreSpacesResponse, Fetch, GenerationContentBlock, GenerationTaskResult, GlobalSearchResponse, GlobalSearchResult, GlobalSearchType, HttpError, HttpTransport, InvitationDetail, JsonObject, JsonPrimitive, JsonValue, ListGenerationModelsResponse, MeResponse, MessageRecord, ModelCatalogEntry, Permission, PromptTemplateCatalogEntry, PromptTemplateCatalogResponse, PublicGenerationDeclaration, SessionBindingRecord, SessionForkRecord, SessionMessageResponse, SessionMessagesPaginatedResponse, SessionMessagesResponse, SessionRecord, SessionTurnIndexItem, SessionTurnIndexResponse, SessionTurnRecord, SessionTurnResponse, SessionTurnSegmentRecord, SessionTurnSignedUrlsResponse, SessionTurnStreamSnapshotResponse, SessionTurnWindowResponse, SessionTurnsPaginatedResponse, SpaceAccess, SpaceAccessPolicy, SpaceBootstrapSource, SpaceChannelBindingInput, SpaceCheckpointDetailResponse, SpaceConfig, SpaceConfigInput, SpaceConfigResponse, SpaceCreateResponse, SpaceEnvInput, SpaceFsCompleteUploadInput, SpaceFsCompleteUploadResponse, SpaceFsCreateUploadInput, SpaceFsCreateUploadResponse, SpaceFsEncoding, SpaceFsEntry, SpaceFsFileKind, SpaceFsFileResponse, SpaceFsMoveInput, SpaceFsPreparingFile, SpaceFsReadFilesError, SpaceFsReadFilesInput, SpaceFsReadFilesResponse, SpaceFsTreeResponse, SpaceFsUploadDestination, SpaceFsUploadEntry, SpaceFsUploadError, SpaceFsUploadPlanEntry, SpaceFsUploadPlanEntryInput, SpaceFsUploadProgress, SpaceFsUploadResponse, SpaceFsWriteFileInput, SpaceGitInfo, SpaceInvitation, SpaceListItem, SpaceMarkKind, SpaceMarkListItem, SpaceMarkRecord, SpaceMarkResourceType, SpaceMember, SpaceMeta, SpaceModListItem, SpacePublicProfile, SpaceRecord, SpaceRole, SpaceSandboxAutoDestroyPolicy, SpaceSandboxConfig, SpaceSessionsResponse, SpaceUsageHourlyStat, SpaceUsageResponse, SpaceUsageSummary, TaskRunDetailResponse, TaskRunRecord, UserProfile, UserRulesResponse, UserSshKey, createHttpClient };
|
|
2
|
+
import { $ as CreateInvitationInput, $n as DiscordChannelConfig, $t as SpaceFsReadFilesInput, An as TaskRunRecord, At as SessionTurnWindowResponse, Bt as SpaceCreateResponse, Cn as SpaceSandboxAutoDestroyPolicy, Ct as SessionMessagesPaginatedResponse, Dn as SpaceUsageResponse, Dt as SessionTurnResponse, En as SpaceUsageHourlyStat, Et as SessionTurnIndexResponse, Fn as CreateGenerationTaskResponse, Ft as SpaceChannelBindingInput, G as BillingCreditExpiryGroup, Gt as SpaceFsCreateUploadResponse, Ht as SpaceFsCompleteUploadInput, In as GenerationTaskResult, It as SpaceCheckpointDetailResponse, J as BillingCreditUnit, Jt as SpaceFsFileKind, K as BillingCreditGrantStatus, Kt as SpaceFsEncoding, Ln as ListGenerationModelsResponse, Lt as SpaceConfig, Mn as UserRulesResponse, Mt as SpaceAccess, Nn as UserSshKey, Nt as SpaceAccessPolicy, On as SpaceUsageSummary, Ot as SessionTurnSignedUrlsResponse, Pn as CreateGenerationTaskRequest, Pt as SpaceBootstrapSource, Q as CheckpointRecord, Qn as ChannelConfig, Qt as SpaceFsReadFilesError, Rn as PublicGenerationDeclaration, Rt as SpaceConfigInput, Sn as SpaceRole, St as SessionMessageResponse, Tn as SpaceSessionsResponse, Tt as SessionRecord, U as AcceptInvitationResponse, Ut as SpaceFsCompleteUploadResponse, Vn as GenerationPolicy, Vt as SpaceEnvInput, W as ApiError, Wt as SpaceFsCreateUploadInput, X as BillingPluginStatus, Xt as SpaceFsMoveInput, Y as BillingOpenOverageStatus, Yt as SpaceFsFileResponse, Z as Channel, Zn as GenerationContentBlock, Zt as SpaceFsPreparingFile, _n as SpaceMember, _t as ModelCatalogEntry, an as SpaceFsUploadPlanEntry, ar as CohubClientOptions, at as CronJobRecord, bn as SpacePublicProfile, bt as PromptTemplateCatalogResponse, cn as SpaceFsUploadResponse, cr as HttpTransport, ct as ExploreSpacesResponse, dn as SpaceInvitation, dt as GlobalSearchType, en as SpaceFsReadFilesResponse, er as MessageRecord, et as CreateInvitationResponse, fn as SpaceListItem, ft as InvitationDetail, gn as SpaceMarkResourceType, gt as MeResponse, hn as SpaceMarkRecord, ht as JsonValue, in as SpaceFsUploadError, ir as SessionTurnRecord, it as CreateSpacePromptResponse, jn as UserProfile, jt as SessionTurnsPaginatedResponse, kn as TaskRunDetailResponse, kt as SessionTurnStreamSnapshotResponse, ln as SpaceFsWriteFileInput, lt as GlobalSearchResponse, mn as SpaceMarkListItem, mt as JsonPrimitive, n as createHttpClient, nn as SpaceFsUploadDestination, nr as SessionTurnSegmentRecord, nt as CreateSpaceModInput, on as SpaceFsUploadPlanEntryInput, or as Fetch, ot as ExploreSection, pn as SpaceMarkKind, pt as JsonObject, q as BillingCreditStatus, qt as SpaceFsEntry, rn as SpaceFsUploadEntry, rr as SessionTurnIndexItem, rt as CreateSpacePromptInput, sn as SpaceFsUploadProgress, sr as HttpError, st as ExploreSpaceItem, t as CohubHttpClient, tn as SpaceFsTreeResponse, tr as SessionForkRecord, tt as CreateSpaceInput, un as SpaceGitInfo, ut as GlobalSearchResult, vn as SpaceMeta, vt as Permission, wn as SpaceSandboxConfig, wt as SessionMessagesResponse, xn as SpaceRecord, xt as SessionBindingRecord, yn as SpaceModListItem, yt as PromptTemplateCatalogEntry, zt as SpaceConfigResponse } from "./chunks/http.js";
|
|
3
|
+
export { AcceptInvitationResponse, ApiError, BillingCreditExpiryGroup, BillingCreditGrantStatus, BillingCreditStatus, BillingCreditUnit, BillingOpenOverageStatus, BillingPluginStatus, Channel, ChannelConfig, CheckpointRecord, CohubClientOptions, CohubHttpClient, ContentBlock, CreateGenerationTaskRequest, CreateGenerationTaskResponse, CreateInvitationInput, CreateInvitationResponse, CreateSpaceInput, CreateSpaceModInput, CreateSpacePromptInput, CreateSpacePromptResponse, CronJobRecord, DiscordChannelConfig, ExploreSection, ExploreSpaceItem, ExploreSpacesResponse, Fetch, GenerationContentBlock, GenerationPolicy, GenerationTaskResult, GlobalSearchResponse, GlobalSearchResult, GlobalSearchType, HttpError, HttpTransport, InvitationDetail, JsonObject, JsonPrimitive, JsonValue, ListGenerationModelsResponse, MeResponse, MessageRecord, ModelCatalogEntry, Permission, PromptTemplateCatalogEntry, PromptTemplateCatalogResponse, PublicGenerationDeclaration, SessionBindingRecord, SessionForkRecord, SessionMessageResponse, SessionMessagesPaginatedResponse, SessionMessagesResponse, SessionRecord, SessionTurnIndexItem, SessionTurnIndexResponse, SessionTurnRecord, SessionTurnResponse, SessionTurnSegmentRecord, SessionTurnSignedUrlsResponse, SessionTurnStreamSnapshotResponse, SessionTurnWindowResponse, SessionTurnsPaginatedResponse, SpaceAccess, SpaceAccessPolicy, SpaceBootstrapSource, SpaceChannelBindingInput, SpaceCheckpointDetailResponse, SpaceConfig, SpaceConfigInput, SpaceConfigResponse, SpaceCreateResponse, SpaceEnvInput, SpaceFsCompleteUploadInput, SpaceFsCompleteUploadResponse, SpaceFsCreateUploadInput, SpaceFsCreateUploadResponse, SpaceFsEncoding, SpaceFsEntry, SpaceFsFileKind, SpaceFsFileResponse, SpaceFsMoveInput, SpaceFsPreparingFile, SpaceFsReadFilesError, SpaceFsReadFilesInput, SpaceFsReadFilesResponse, SpaceFsTreeResponse, SpaceFsUploadDestination, SpaceFsUploadEntry, SpaceFsUploadError, SpaceFsUploadPlanEntry, SpaceFsUploadPlanEntryInput, SpaceFsUploadProgress, SpaceFsUploadResponse, SpaceFsWriteFileInput, SpaceGitInfo, SpaceInvitation, SpaceListItem, SpaceMarkKind, SpaceMarkListItem, SpaceMarkRecord, SpaceMarkResourceType, SpaceMember, SpaceMeta, SpaceModListItem, SpacePublicProfile, SpaceRecord, SpaceRole, SpaceSandboxAutoDestroyPolicy, SpaceSandboxConfig, SpaceSessionsResponse, SpaceUsageHourlyStat, SpaceUsageResponse, SpaceUsageSummary, TaskRunDetailResponse, TaskRunRecord, UserProfile, UserRulesResponse, UserSshKey, createHttpClient };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { _ as resolveCohubEnvironment, c as createWebsocketClient, f as COHUB_ENVIRONMENTS, g as resolveApiBaseUrl, h as normalizeWebsocketUrl, l as ContentBlock, m as normalizeBaseUrl, p as CohubEnvironment, r as WebsocketClient, v as resolveWebsocketUrl } from "./chunks/websocket.js";
|
|
2
|
-
import { $ as CreateInvitationInput, $t as SpaceFsReadFilesInput, A as SessionPatchStatus, An as TaskRunRecord, At as SessionTurnWindowResponse, B as GenerationsApi, Bn as
|
|
2
|
+
import { $ as CreateInvitationInput, $n as DiscordChannelConfig, $t as SpaceFsReadFilesInput, A as SessionPatchStatus, An as TaskRunRecord, At as SessionTurnWindowResponse, B as GenerationsApi, Bn as GenerationParameterConstraint, Bt as SpaceCreateResponse, C as SessionGenerationStreamClient, Cn as SpaceSandboxAutoDestroyPolicy, Ct as SessionMessagesPaginatedResponse, D as SessionPatchApplyResult, Dn as SpaceUsageResponse, Dt as SessionTurnResponse, E as SessionPatchApplyInput, En as SpaceUsageHourlyStat, Et as SessionTurnIndexResponse, F as CreatePublicAssetUploadResponse, Fn as CreateGenerationTaskResponse, Ft as SpaceChannelBindingInput, G as BillingCreditExpiryGroup, Gn as encodeGenerationPolicy, Gt as SpaceFsCreateUploadResponse, H as ChannelsApi, Hn as GenerationPolicyError, Ht as SpaceFsCompleteUploadInput, I as PublicAssetPurpose, In as GenerationTaskResult, It as SpaceCheckpointDetailResponse, J as BillingCreditUnit, Jn as getAllowedGenerationModelIds, Jt as SpaceFsFileKind, K as BillingCreditGrantStatus, Kn as filterGenerationDeclarationsByPolicy, Kt as SpaceFsEncoding, L as PublicAssetsApi, Ln as ListGenerationModelsResponse, Lt as SpaceConfig, M as SessionAccessApi, Mn as UserRulesResponse, Mt as SpaceAccess, N as SearchApi, Nn as UserSshKey, Nt as SpaceAccessPolicy, O as SessionPatchReducer, On as SpaceUsageSummary, Ot as SessionTurnSignedUrlsResponse, P as CreatePublicAssetUploadInput, Pn as CreateGenerationTaskRequest, Pt as SpaceBootstrapSource, Q as CheckpointRecord, Qn as ChannelConfig, Qt as SpaceFsReadFilesError, R as PromptsApi, Rn as PublicGenerationDeclaration, Rt as SpaceConfigInput, S as GenerationStreamTurnUpdatedEvent, Sn as SpaceRole, St as SessionMessageResponse, T as parseAssistantMessageCommit, Tn as SpaceSessionsResponse, Tt as SessionRecord, U as AcceptInvitationResponse, Un as assertGenerationRequestAllowedByPolicy, Ut as SpaceFsCompleteUploadResponse, V as CronJobsApi, Vn as GenerationPolicy, Vt as SpaceEnvInput, W as ApiError, Wn as decodeGenerationPolicy, Wt as SpaceFsCreateUploadInput, X as BillingPluginStatus, Xn as parseGenerationPolicyFromEnv, Xt as SpaceFsMoveInput, Y as BillingOpenOverageStatus, Yn as normalizeGenerationPolicy, Yt as SpaceFsFileResponse, Z as Channel, Zn as GenerationContentBlock, Zt as SpaceFsPreparingFile, _ as GenerationStreamFinalizedEvent, _n as SpaceMember, _t as ModelCatalogEntry, a as SessionEventName, an as SpaceFsUploadPlanEntry, ar as CohubClientOptions, at as CronJobRecord, b as GenerationStreamStateEvent, bn as SpacePublicProfile, bt as PromptTemplateCatalogResponse, c as SpaceClient, cn as SpaceFsUploadResponse, cr as HttpTransport, ct as ExploreSpacesResponse, d as WebSocketConnectionState, dn as SpaceInvitation, dt as GlobalSearchType, en as SpaceFsReadFilesResponse, er as MessageRecord, et as CreateInvitationResponse, f as PublicInviteApi, fn as SpaceListItem, ft as InvitationDetail, g as GenerationStreamEvent, gn as SpaceMarkResourceType, gt as MeResponse, h as GenerationStreamErrorEvent, hn as SpaceMarkRecord, ht as JsonValue, i as TasksApi, in as SpaceFsUploadError, ir as SessionTurnRecord, it as CreateSpacePromptResponse, j as createSessionPatchReducer, jn as UserProfile, jt as SessionTurnsPaginatedResponse, k as SessionPatchState, kn as TaskRunDetailResponse, kt as SessionTurnStreamSnapshotResponse, l as SpaceEventName, ln as SpaceFsWriteFileInput, lr as RawHttpResponse, lt as GlobalSearchResponse, m as GenerationStreamCommitEvent, mn as SpaceMarkListItem, mt as JsonPrimitive, n as createHttpClient, nn as SpaceFsUploadDestination, nr as SessionTurnSegmentRecord, nt as CreateSpaceModInput, o as SessionSubscriptionHandlers, on as SpaceFsUploadPlanEntryInput, or as Fetch, ot as ExploreSection, p as AssistantMessageCommit, pn as SpaceMarkKind, pt as JsonObject, q as BillingCreditStatus, qn as findGenerationModelPolicy, qt as SpaceFsEntry, r as UserApi, rn as SpaceFsUploadEntry, rr as SessionTurnIndexItem, rt as CreateSpacePromptInput, s as SpaceChannelBindingRecord, sn as SpaceFsUploadProgress, sr as HttpError, st as ExploreSpaceItem, t as CohubHttpClient, tn as SpaceFsTreeResponse, tr as SessionForkRecord, tt as CreateSpaceInput, u as SpacesApi, un as SpaceGitInfo, ut as GlobalSearchResult, v as GenerationStreamIntermediateMessage, vn as SpaceMeta, vt as Permission, w as createSessionGenerationStreamClient, wn as SpaceSandboxConfig, wt as SessionMessagesResponse, x as GenerationStreamSubscriptionHandlers, xn as SpaceRecord, xt as SessionBindingRecord, y as GenerationStreamOutOfSyncEvent, yn as SpaceModListItem, yt as PromptTemplateCatalogEntry, z as ModelsApi, zn as GenerationModelPolicy, zt as SpaceConfigResponse } from "./chunks/http.js";
|
|
3
3
|
|
|
4
4
|
//#region src/apis/billing.d.ts
|
|
5
5
|
declare class BillingApi {
|
|
@@ -43,4 +43,4 @@ declare class CohubClient {
|
|
|
43
43
|
}
|
|
44
44
|
declare const createCohubClient: (options?: CohubClientOptions) => CohubClient;
|
|
45
45
|
//#endregion
|
|
46
|
-
export { AcceptInvitationResponse, ApiError, type AssistantMessageCommit, BillingApi, BillingCreditExpiryGroup, BillingCreditGrantStatus, BillingCreditStatus, BillingCreditUnit, BillingOpenOverageStatus, BillingPluginStatus, COHUB_ENVIRONMENTS, Channel, ChannelConfig, CheckpointRecord, CohubClient, type CohubClientOptions, type CohubEnvironment, CohubHttpClient, ContentBlock, CreateGenerationTaskRequest, CreateGenerationTaskResponse, CreateInvitationInput, CreateInvitationResponse, type CreatePublicAssetUploadInput, type CreatePublicAssetUploadResponse, CreateSpaceInput, CreateSpaceModInput, CreateSpacePromptInput, CreateSpacePromptResponse, CronJobRecord, DiscordChannelConfig, ExploreSection, ExploreSpaceItem, ExploreSpacesResponse, type Fetch, GenerationContentBlock, type GenerationStreamCommitEvent, type GenerationStreamErrorEvent, type GenerationStreamEvent, type GenerationStreamFinalizedEvent, type GenerationStreamIntermediateMessage, type GenerationStreamOutOfSyncEvent, type GenerationStreamStateEvent, type GenerationStreamSubscriptionHandlers, type GenerationStreamTurnUpdatedEvent, GenerationTaskResult, GlobalSearchResponse, GlobalSearchResult, GlobalSearchType, HttpError, InvitationDetail, JsonObject, JsonPrimitive, JsonValue, ListGenerationModelsResponse, MeResponse, MessageRecord, ModelCatalogEntry, Permission, PromptTemplateCatalogEntry, PromptTemplateCatalogResponse, type PublicAssetPurpose, PublicGenerationDeclaration, type RawHttpResponse, SessionBindingRecord, type SessionEventName, SessionForkRecord, SessionGenerationStreamClient, SessionMessageResponse, SessionMessagesPaginatedResponse, SessionMessagesResponse, type SessionPatchApplyInput, type SessionPatchApplyResult, SessionPatchReducer, type SessionPatchState, type SessionPatchStatus, SessionRecord, type SessionSubscriptionHandlers, SessionTurnIndexItem, SessionTurnIndexResponse, SessionTurnRecord, SessionTurnResponse, SessionTurnSegmentRecord, SessionTurnSignedUrlsResponse, SessionTurnStreamSnapshotResponse, SessionTurnWindowResponse, SessionTurnsPaginatedResponse, SpaceAccess, SpaceAccessPolicy, SpaceBootstrapSource, SpaceChannelBindingInput, type SpaceChannelBindingRecord, SpaceCheckpointDetailResponse, SpaceConfig, SpaceConfigInput, SpaceConfigResponse, SpaceCreateResponse, SpaceEnvInput, type SpaceEventName, SpaceFsCompleteUploadInput, SpaceFsCompleteUploadResponse, SpaceFsCreateUploadInput, SpaceFsCreateUploadResponse, SpaceFsEncoding, SpaceFsEntry, SpaceFsFileKind, SpaceFsFileResponse, SpaceFsMoveInput, SpaceFsPreparingFile, SpaceFsReadFilesError, SpaceFsReadFilesInput, SpaceFsReadFilesResponse, SpaceFsTreeResponse, SpaceFsUploadDestination, SpaceFsUploadEntry, SpaceFsUploadError, SpaceFsUploadPlanEntry, SpaceFsUploadPlanEntryInput, SpaceFsUploadProgress, SpaceFsUploadResponse, SpaceFsWriteFileInput, SpaceGitInfo, SpaceInvitation, SpaceListItem, SpaceMarkKind, SpaceMarkListItem, SpaceMarkRecord, SpaceMarkResourceType, SpaceMember, SpaceMeta, SpaceModListItem, SpacePublicProfile, SpaceRecord, SpaceRole, SpaceSandboxAutoDestroyPolicy, SpaceSandboxConfig, SpaceSessionsResponse, SpaceUsageHourlyStat, SpaceUsageResponse, SpaceUsageSummary, TaskRunDetailResponse, TaskRunRecord, UserProfile, UserRulesResponse, UserSshKey, type WebSocketConnectionState, WebsocketClient, createCohubClient, createHttpClient, createSessionGenerationStreamClient, createSessionPatchReducer, createWebsocketClient, normalizeBaseUrl, normalizeWebsocketUrl, parseAssistantMessageCommit, resolveApiBaseUrl, resolveCohubEnvironment, resolveWebsocketUrl };
|
|
46
|
+
export { AcceptInvitationResponse, ApiError, type AssistantMessageCommit, BillingApi, BillingCreditExpiryGroup, BillingCreditGrantStatus, BillingCreditStatus, BillingCreditUnit, BillingOpenOverageStatus, BillingPluginStatus, COHUB_ENVIRONMENTS, Channel, ChannelConfig, CheckpointRecord, CohubClient, type CohubClientOptions, type CohubEnvironment, CohubHttpClient, ContentBlock, CreateGenerationTaskRequest, CreateGenerationTaskResponse, CreateInvitationInput, CreateInvitationResponse, type CreatePublicAssetUploadInput, type CreatePublicAssetUploadResponse, CreateSpaceInput, CreateSpaceModInput, CreateSpacePromptInput, CreateSpacePromptResponse, CronJobRecord, DiscordChannelConfig, ExploreSection, ExploreSpaceItem, ExploreSpacesResponse, type Fetch, GenerationContentBlock, type GenerationModelPolicy, type GenerationParameterConstraint, type GenerationPolicy, GenerationPolicyError, type GenerationStreamCommitEvent, type GenerationStreamErrorEvent, type GenerationStreamEvent, type GenerationStreamFinalizedEvent, type GenerationStreamIntermediateMessage, type GenerationStreamOutOfSyncEvent, type GenerationStreamStateEvent, type GenerationStreamSubscriptionHandlers, type GenerationStreamTurnUpdatedEvent, GenerationTaskResult, GlobalSearchResponse, GlobalSearchResult, GlobalSearchType, HttpError, InvitationDetail, JsonObject, JsonPrimitive, JsonValue, ListGenerationModelsResponse, MeResponse, MessageRecord, ModelCatalogEntry, Permission, PromptTemplateCatalogEntry, PromptTemplateCatalogResponse, type PublicAssetPurpose, PublicGenerationDeclaration, type RawHttpResponse, SessionBindingRecord, type SessionEventName, SessionForkRecord, SessionGenerationStreamClient, SessionMessageResponse, SessionMessagesPaginatedResponse, SessionMessagesResponse, type SessionPatchApplyInput, type SessionPatchApplyResult, SessionPatchReducer, type SessionPatchState, type SessionPatchStatus, SessionRecord, type SessionSubscriptionHandlers, SessionTurnIndexItem, SessionTurnIndexResponse, SessionTurnRecord, SessionTurnResponse, SessionTurnSegmentRecord, SessionTurnSignedUrlsResponse, SessionTurnStreamSnapshotResponse, SessionTurnWindowResponse, SessionTurnsPaginatedResponse, SpaceAccess, SpaceAccessPolicy, SpaceBootstrapSource, SpaceChannelBindingInput, type SpaceChannelBindingRecord, SpaceCheckpointDetailResponse, SpaceConfig, SpaceConfigInput, SpaceConfigResponse, SpaceCreateResponse, SpaceEnvInput, type SpaceEventName, SpaceFsCompleteUploadInput, SpaceFsCompleteUploadResponse, SpaceFsCreateUploadInput, SpaceFsCreateUploadResponse, SpaceFsEncoding, SpaceFsEntry, SpaceFsFileKind, SpaceFsFileResponse, SpaceFsMoveInput, SpaceFsPreparingFile, SpaceFsReadFilesError, SpaceFsReadFilesInput, SpaceFsReadFilesResponse, SpaceFsTreeResponse, SpaceFsUploadDestination, SpaceFsUploadEntry, SpaceFsUploadError, SpaceFsUploadPlanEntry, SpaceFsUploadPlanEntryInput, SpaceFsUploadProgress, SpaceFsUploadResponse, SpaceFsWriteFileInput, SpaceGitInfo, SpaceInvitation, SpaceListItem, SpaceMarkKind, SpaceMarkListItem, SpaceMarkRecord, SpaceMarkResourceType, SpaceMember, SpaceMeta, SpaceModListItem, SpacePublicProfile, SpaceRecord, SpaceRole, SpaceSandboxAutoDestroyPolicy, SpaceSandboxConfig, SpaceSessionsResponse, SpaceUsageHourlyStat, SpaceUsageResponse, SpaceUsageSummary, TaskRunDetailResponse, TaskRunRecord, UserProfile, UserRulesResponse, UserSshKey, type WebSocketConnectionState, WebsocketClient, assertGenerationRequestAllowedByPolicy, createCohubClient, createHttpClient, createSessionGenerationStreamClient, createSessionPatchReducer, createWebsocketClient, decodeGenerationPolicy, encodeGenerationPolicy, filterGenerationDeclarationsByPolicy, findGenerationModelPolicy, getAllowedGenerationModelIds, normalizeBaseUrl, normalizeGenerationPolicy, normalizeWebsocketUrl, parseAssistantMessageCommit, parseGenerationPolicyFromEnv, resolveApiBaseUrl, resolveCohubEnvironment, resolveWebsocketUrl };
|
package/dist/index.js
CHANGED
|
@@ -118,4 +118,235 @@ var CohubClient = class {
|
|
|
118
118
|
};
|
|
119
119
|
const createCohubClient = (options) => new CohubClient(options);
|
|
120
120
|
//#endregion
|
|
121
|
-
|
|
121
|
+
//#region ../protocol/src/generation/policy.ts
|
|
122
|
+
const GENERATION_POLICY_ENV_KEY = "COHUB_GENERATION_POLICY_B64";
|
|
123
|
+
var GenerationPolicyError = class extends Error {
|
|
124
|
+
constructor(message) {
|
|
125
|
+
super(message);
|
|
126
|
+
this.name = "GenerationPolicyError";
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
function isRecord(value) {
|
|
130
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
131
|
+
}
|
|
132
|
+
function isPrimitiveEnumValue(value) {
|
|
133
|
+
return typeof value === "string" || typeof value === "number" || typeof value === "boolean";
|
|
134
|
+
}
|
|
135
|
+
function normalizeConstraint(value) {
|
|
136
|
+
if (!isRecord(value) || typeof value.kind !== "string") return null;
|
|
137
|
+
if (value.kind === "enum") {
|
|
138
|
+
if (!Array.isArray(value.values) || value.values.length === 0 || !value.values.every(isPrimitiveEnumValue)) return null;
|
|
139
|
+
return {
|
|
140
|
+
kind: "enum",
|
|
141
|
+
values: value.values
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
if (value.kind === "number" || value.kind === "integer") {
|
|
145
|
+
const result = { kind: value.kind };
|
|
146
|
+
if (typeof value.min === "number" && Number.isFinite(value.min)) result.min = value.min;
|
|
147
|
+
if (typeof value.max === "number" && Number.isFinite(value.max)) result.max = value.max;
|
|
148
|
+
if (result.min !== void 0 && result.max !== void 0 && result.min > result.max) return null;
|
|
149
|
+
if (Array.isArray(value.values) && value.values.every((item) => typeof item === "number" && Number.isFinite(item))) {
|
|
150
|
+
if (value.kind === "integer" && !value.values.every(Number.isInteger)) return null;
|
|
151
|
+
const min = result.min;
|
|
152
|
+
const max = result.max;
|
|
153
|
+
if (min !== void 0 && value.values.some((item) => item < min)) return null;
|
|
154
|
+
if (max !== void 0 && value.values.some((item) => item > max)) return null;
|
|
155
|
+
result.values = value.values;
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
if (value.kind === "boolean") return typeof value.value === "boolean" ? {
|
|
160
|
+
kind: "boolean",
|
|
161
|
+
value: value.value
|
|
162
|
+
} : { kind: "boolean" };
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
function normalizeGenerationPolicy(value) {
|
|
166
|
+
if (!isRecord(value) || value.version !== 1) return null;
|
|
167
|
+
if (value.mode === "auto") return {
|
|
168
|
+
version: 1,
|
|
169
|
+
mode: "auto"
|
|
170
|
+
};
|
|
171
|
+
if (value.mode !== "limited" || !Array.isArray(value.models) || value.models.length === 0) return null;
|
|
172
|
+
const models = [];
|
|
173
|
+
for (const item of value.models) {
|
|
174
|
+
if (!isRecord(item) || typeof item.model !== "string" || !item.model.trim()) return null;
|
|
175
|
+
const modelPolicy = { model: item.model.trim() };
|
|
176
|
+
if (item.parameters !== void 0) {
|
|
177
|
+
if (!isRecord(item.parameters)) return null;
|
|
178
|
+
const parameters = {};
|
|
179
|
+
for (const [key, rawConstraint] of Object.entries(item.parameters)) {
|
|
180
|
+
if (!key.trim()) return null;
|
|
181
|
+
const constraint = normalizeConstraint(rawConstraint);
|
|
182
|
+
if (!constraint) return null;
|
|
183
|
+
parameters[key] = constraint;
|
|
184
|
+
}
|
|
185
|
+
if (Object.keys(parameters).length > 0) modelPolicy.parameters = parameters;
|
|
186
|
+
}
|
|
187
|
+
models.push(modelPolicy);
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
version: 1,
|
|
191
|
+
mode: "limited",
|
|
192
|
+
models
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
function bytesToBase64(bytes) {
|
|
196
|
+
let binary = "";
|
|
197
|
+
for (const byte of bytes) binary += String.fromCharCode(byte);
|
|
198
|
+
return btoa(binary);
|
|
199
|
+
}
|
|
200
|
+
function base64ToBytes(value) {
|
|
201
|
+
const binary = atob(value);
|
|
202
|
+
const bytes = new Uint8Array(binary.length);
|
|
203
|
+
for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
|
|
204
|
+
return bytes;
|
|
205
|
+
}
|
|
206
|
+
function toBase64Url(value) {
|
|
207
|
+
return bytesToBase64(new TextEncoder().encode(value)).replaceAll("+", "-").replaceAll("/", "_").replaceAll("=", "");
|
|
208
|
+
}
|
|
209
|
+
function fromBase64Url(value) {
|
|
210
|
+
const base64 = value.replaceAll("-", "+").replaceAll("_", "/");
|
|
211
|
+
const padded = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, "=");
|
|
212
|
+
return new TextDecoder().decode(base64ToBytes(padded));
|
|
213
|
+
}
|
|
214
|
+
function encodeGenerationPolicy(policy) {
|
|
215
|
+
return toBase64Url(JSON.stringify(policy));
|
|
216
|
+
}
|
|
217
|
+
function decodeGenerationPolicy(value) {
|
|
218
|
+
try {
|
|
219
|
+
return normalizeGenerationPolicy(JSON.parse(fromBase64Url(value)));
|
|
220
|
+
} catch {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function parseGenerationPolicyFromEnv(env) {
|
|
225
|
+
const value = env[GENERATION_POLICY_ENV_KEY]?.trim();
|
|
226
|
+
return value ? decodeGenerationPolicy(value) : null;
|
|
227
|
+
}
|
|
228
|
+
function getAllowedGenerationModelIds(policy) {
|
|
229
|
+
if (!policy || policy.mode === "auto") return null;
|
|
230
|
+
return [...new Set((policy.models ?? []).map((item) => item.model))];
|
|
231
|
+
}
|
|
232
|
+
function findGenerationModelPolicy(policy, model) {
|
|
233
|
+
if (!policy || policy.mode === "auto") return null;
|
|
234
|
+
return policy.models?.find((item) => item.model === model) ?? null;
|
|
235
|
+
}
|
|
236
|
+
function formatList(values) {
|
|
237
|
+
return values.map((value) => `- ${String(value)}`).join("\n");
|
|
238
|
+
}
|
|
239
|
+
function modelNotSupportedMessage(allowedModels) {
|
|
240
|
+
return [
|
|
241
|
+
"This turn supports the following generation models:",
|
|
242
|
+
"",
|
|
243
|
+
formatList(allowedModels),
|
|
244
|
+
"",
|
|
245
|
+
"Choose one of these models or update Generation settings in the Models panel."
|
|
246
|
+
].join("\n");
|
|
247
|
+
}
|
|
248
|
+
function valuesNotSupportedMessage(model, name, values, received) {
|
|
249
|
+
return [
|
|
250
|
+
`This turn supports selected values for ${model}.${name}:`,
|
|
251
|
+
"",
|
|
252
|
+
formatList(values),
|
|
253
|
+
"",
|
|
254
|
+
"Received:",
|
|
255
|
+
`- ${String(received)}`
|
|
256
|
+
].join("\n");
|
|
257
|
+
}
|
|
258
|
+
function rangeNotSupportedMessage(model, name, min, max, received) {
|
|
259
|
+
return [
|
|
260
|
+
`This turn supports ${model}.${name} in the range ${min !== void 0 && max !== void 0 ? `${min}–${max}` : min !== void 0 ? `at least ${min}` : `at most ${max}`}.`,
|
|
261
|
+
"",
|
|
262
|
+
"Received:",
|
|
263
|
+
`- ${String(received)}`
|
|
264
|
+
].join("\n");
|
|
265
|
+
}
|
|
266
|
+
function booleanNotSupportedMessage(model, name, expected, received) {
|
|
267
|
+
return [
|
|
268
|
+
`This turn supports ${model}.${name}=${String(expected)}.`,
|
|
269
|
+
"",
|
|
270
|
+
"Received:",
|
|
271
|
+
`- ${String(received)}`
|
|
272
|
+
].join("\n");
|
|
273
|
+
}
|
|
274
|
+
function sameEnumValue(a, b) {
|
|
275
|
+
return typeof a === typeof b && a === b;
|
|
276
|
+
}
|
|
277
|
+
function validateConstraint(input) {
|
|
278
|
+
const { model, name, value, constraint } = input;
|
|
279
|
+
if (constraint.kind === "enum") {
|
|
280
|
+
if (!constraint.values.some((item) => sameEnumValue(item, value))) throw new GenerationPolicyError(valuesNotSupportedMessage(model, name, constraint.values, value));
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (constraint.kind === "number" || constraint.kind === "integer") {
|
|
284
|
+
if (typeof value !== "number" || !Number.isFinite(value)) throw new GenerationPolicyError(rangeNotSupportedMessage(model, name, constraint.min, constraint.max, value));
|
|
285
|
+
if (constraint.kind === "integer" && !Number.isInteger(value)) throw new GenerationPolicyError(rangeNotSupportedMessage(model, name, constraint.min, constraint.max, value));
|
|
286
|
+
if (constraint.values?.length && !constraint.values.includes(value)) throw new GenerationPolicyError(valuesNotSupportedMessage(model, name, constraint.values, value));
|
|
287
|
+
if (constraint.min !== void 0 && value < constraint.min) throw new GenerationPolicyError(rangeNotSupportedMessage(model, name, constraint.min, constraint.max, value));
|
|
288
|
+
if (constraint.max !== void 0 && value > constraint.max) throw new GenerationPolicyError(rangeNotSupportedMessage(model, name, constraint.min, constraint.max, value));
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (constraint.kind === "boolean" && constraint.value !== void 0 && value !== constraint.value) throw new GenerationPolicyError(booleanNotSupportedMessage(model, name, constraint.value, value));
|
|
292
|
+
}
|
|
293
|
+
function assertGenerationRequestAllowedByPolicy(input) {
|
|
294
|
+
const allowedModels = getAllowedGenerationModelIds(input.policy);
|
|
295
|
+
if (!allowedModels) return;
|
|
296
|
+
const modelPolicy = findGenerationModelPolicy(input.policy, input.model);
|
|
297
|
+
if (!modelPolicy) throw new GenerationPolicyError(modelNotSupportedMessage(allowedModels));
|
|
298
|
+
const parameters = input.parameters ?? {};
|
|
299
|
+
for (const [name, value] of Object.entries(parameters)) {
|
|
300
|
+
const constraint = modelPolicy.parameters?.[name];
|
|
301
|
+
if (!constraint) continue;
|
|
302
|
+
validateConstraint({
|
|
303
|
+
model: input.model,
|
|
304
|
+
name,
|
|
305
|
+
value,
|
|
306
|
+
constraint
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
function cloneDeclaration(declaration) {
|
|
311
|
+
return {
|
|
312
|
+
...declaration,
|
|
313
|
+
content: {
|
|
314
|
+
...declaration.content,
|
|
315
|
+
input: [...declaration.content.input]
|
|
316
|
+
},
|
|
317
|
+
parameters: declaration.parameters ? Object.fromEntries(Object.entries(declaration.parameters).map(([key, value]) => [key, { ...value }])) : declaration.parameters,
|
|
318
|
+
examples: declaration.examples ? [...declaration.examples] : declaration.examples
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
function narrowParameterSpec(spec, constraint) {
|
|
322
|
+
const next = { ...spec };
|
|
323
|
+
if (constraint.kind === "enum") {
|
|
324
|
+
if ("enum" in next && Array.isArray(next.enum)) next.enum = next.enum.filter((value) => constraint.values.some((allowed) => sameEnumValue(allowed, value)));
|
|
325
|
+
return next;
|
|
326
|
+
}
|
|
327
|
+
if (constraint.kind === "number" || constraint.kind === "integer") {
|
|
328
|
+
if ("min" in next && typeof next.min === "number" && constraint.min !== void 0) next.min = Math.max(next.min, constraint.min);
|
|
329
|
+
else if ("min" in next && constraint.min !== void 0) next.min = constraint.min;
|
|
330
|
+
if ("max" in next && typeof next.max === "number" && constraint.max !== void 0) next.max = Math.min(next.max, constraint.max);
|
|
331
|
+
else if ("max" in next && constraint.max !== void 0) next.max = constraint.max;
|
|
332
|
+
if (constraint.values?.length && "enum" in next && Array.isArray(next.enum)) next.enum = next.enum.filter((value) => constraint.values?.some((allowed) => sameEnumValue(allowed, value)));
|
|
333
|
+
}
|
|
334
|
+
return next;
|
|
335
|
+
}
|
|
336
|
+
function filterGenerationDeclarationsByPolicy(declarations, policy) {
|
|
337
|
+
const allowedModels = getAllowedGenerationModelIds(policy);
|
|
338
|
+
if (!allowedModels) return declarations;
|
|
339
|
+
const allowedSet = new Set(allowedModels);
|
|
340
|
+
return declarations.filter((declaration) => allowedSet.has(declaration.model)).map((declaration) => {
|
|
341
|
+
const cloned = cloneDeclaration(declaration);
|
|
342
|
+
const modelPolicy = findGenerationModelPolicy(policy, declaration.model);
|
|
343
|
+
if (!modelPolicy?.parameters || !cloned.parameters) return cloned;
|
|
344
|
+
for (const [name, constraint] of Object.entries(modelPolicy.parameters)) {
|
|
345
|
+
const spec = cloned.parameters[name];
|
|
346
|
+
if (spec) cloned.parameters[name] = narrowParameterSpec(spec, constraint);
|
|
347
|
+
}
|
|
348
|
+
return cloned;
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
//#endregion
|
|
352
|
+
export { BillingApi, COHUB_ENVIRONMENTS, CohubClient, CohubHttpClient, GenerationPolicyError, HttpError, SessionGenerationStreamClient, SessionPatchReducer, WebsocketClient, assertGenerationRequestAllowedByPolicy, createCohubClient, createHttpClient, createSessionGenerationStreamClient, createSessionPatchReducer, createWebsocketClient, decodeGenerationPolicy, encodeGenerationPolicy, filterGenerationDeclarationsByPolicy, findGenerationModelPolicy, getAllowedGenerationModelIds, normalizeBaseUrl, normalizeGenerationPolicy, normalizeWebsocketUrl, parseAssistantMessageCommit, parseGenerationPolicyFromEnv, resolveApiBaseUrl, resolveCohubEnvironment, resolveWebsocketUrl };
|