assistant-cloud 0.1.43 → 0.2.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/README.md +40 -0
- package/dist/AssistantCloud.d.ts +4 -0
- package/dist/AssistantCloud.d.ts.map +1 -1
- package/dist/AssistantCloud.js +11 -5
- package/dist/AssistantCloud.js.map +1 -1
- package/dist/AssistantCloudAPI.d.ts +17 -1
- package/dist/AssistantCloudAPI.d.ts.map +1 -1
- package/dist/AssistantCloudAPI.js +20 -9
- package/dist/AssistantCloudAPI.js.map +1 -1
- package/dist/AssistantCloudAuthStrategy.d.ts +4 -1
- package/dist/AssistantCloudAuthStrategy.d.ts.map +1 -1
- package/dist/AssistantCloudAuthStrategy.js +11 -1
- package/dist/AssistantCloudAuthStrategy.js.map +1 -1
- package/dist/AssistantCloudEvents.d.ts +32 -0
- package/dist/AssistantCloudEvents.d.ts.map +1 -0
- package/dist/AssistantCloudEvents.js +115 -0
- package/dist/AssistantCloudEvents.js.map +1 -0
- package/dist/AssistantCloudFiles.d.ts +12 -1
- package/dist/AssistantCloudFiles.d.ts.map +1 -1
- package/dist/AssistantCloudFiles.js +13 -1
- package/dist/AssistantCloudFiles.js.map +1 -1
- package/dist/AssistantCloudRuns.d.ts +11 -0
- package/dist/AssistantCloudRuns.d.ts.map +1 -1
- package/dist/AssistantCloudRuns.js.map +1 -1
- package/dist/AssistantCloudScores.d.ts +27 -0
- package/dist/AssistantCloudScores.d.ts.map +1 -0
- package/dist/AssistantCloudScores.js +30 -0
- package/dist/AssistantCloudScores.js.map +1 -0
- package/dist/AssistantCloudThreadMessages.d.ts +11 -1
- package/dist/AssistantCloudThreadMessages.d.ts.map +1 -1
- package/dist/AssistantCloudThreadMessages.js +12 -1
- package/dist/AssistantCloudThreadMessages.js.map +1 -1
- package/dist/AssistantCloudThreads.d.ts +8 -0
- package/dist/AssistantCloudThreads.d.ts.map +1 -1
- package/dist/AssistantCloudThreads.js +9 -1
- package/dist/AssistantCloudThreads.js.map +1 -1
- package/dist/CloudMessagePersistence.d.ts +4 -0
- package/dist/CloudMessagePersistence.d.ts.map +1 -1
- package/dist/CloudMessagePersistence.js +38 -11
- package/dist/CloudMessagePersistence.js.map +1 -1
- package/dist/cloudResponse.d.ts +4 -1
- package/dist/cloudResponse.d.ts.map +1 -1
- package/dist/cloudResponse.js +14 -1
- package/dist/cloudResponse.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.js +5 -2
- package/dist/runTelemetry.d.ts +70 -7
- package/dist/runTelemetry.d.ts.map +1 -1
- package/dist/runTelemetry.js +144 -1
- package/dist/runTelemetry.js.map +1 -1
- package/dist/telemetry/index.d.ts +32 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +62 -0
- package/dist/telemetry/index.js.map +1 -0
- package/package.json +28 -4
- package/src/AssistantCloud.ts +20 -8
- package/src/AssistantCloudAPI.ts +42 -10
- package/src/AssistantCloudAuthStrategy.ts +13 -0
- package/src/AssistantCloudEvents.test.ts +124 -0
- package/src/AssistantCloudEvents.ts +185 -0
- package/src/AssistantCloudFiles.test.ts +59 -0
- package/src/AssistantCloudFiles.ts +39 -0
- package/src/AssistantCloudRuns.ts +12 -1
- package/src/AssistantCloudScores.test.ts +113 -0
- package/src/AssistantCloudScores.ts +61 -0
- package/src/AssistantCloudThreadMessages.test.ts +51 -0
- package/src/AssistantCloudThreadMessages.ts +33 -0
- package/src/AssistantCloudThreads.test.ts +21 -0
- package/src/AssistantCloudThreads.ts +21 -0
- package/src/CloudMessagePersistence.ts +48 -16
- package/src/cloudResponse.test.ts +34 -1
- package/src/cloudResponse.ts +30 -0
- package/src/index.ts +24 -1
- package/src/runTelemetry.test.ts +325 -0
- package/src/runTelemetry.ts +257 -6
- package/src/telemetry/index.test.ts +252 -0
- package/src/telemetry/index.ts +98 -0
- package/src/tests/AssistantCloud.test.ts +22 -0
- package/src/tests/AssistantCloudAPI.test.ts +44 -4
- package/src/tests/AssistantCloudAuthStrategy.test.ts +71 -2
- package/src/tests/CloudMessagePersistence.test.ts +115 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantCloudFiles.js","names":[],"sources":["../src/AssistantCloudFiles.ts"],"sourcesContent":["import type { AssistantCloudAPI } from \"./AssistantCloudAPI\";\nimport {\n readCloudArray,\n readCloudBoolean,\n readCloudRecord,\n readCloudString,\n} from \"./cloudResponse\";\n\ntype PdfToImagesRequestBody = {\n file_blob?: string | undefined;\n file_url?: string | undefined;\n};\n\ntype PdfToImagesResponse = {\n success: boolean;\n urls: string[];\n message: string;\n};\n\ntype GeneratePresignedUploadUrlRequestBody = {\n filename: string;\n};\n\ntype GeneratePresignedUploadUrlResponse = {\n success: boolean;\n signedUrl: string;\n expiresAt: string;\n publicUrl: string;\n};\n\nexport class AssistantCloudFiles {\n private cloud: AssistantCloudAPI;\n\n constructor(cloud: AssistantCloudAPI) {\n this.cloud = cloud;\n }\n\n public async pdfToImages(\n body: PdfToImagesRequestBody,\n ): Promise<PdfToImagesResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\"/files/pdf-to-images\", {\n method: \"POST\",\n body,\n }),\n \"PDF conversion response\",\n );\n\n return {\n success: readCloudBoolean(\n response.success,\n \"PDF conversion response.success\",\n ),\n urls: readCloudArray(response.urls, \"PDF conversion response.urls\").map(\n (url, index) =>\n readCloudString(url, `PDF conversion response.urls[${index}]`),\n ),\n message: readCloudString(\n response.message,\n \"PDF conversion response.message\",\n ),\n };\n }\n\n public async generatePresignedUploadUrl(\n body: GeneratePresignedUploadUrlRequestBody,\n ): Promise<GeneratePresignedUploadUrlResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\n \"/files/attachments/generate-presigned-upload-url\",\n {\n method: \"POST\",\n body,\n },\n ),\n \"presigned upload response\",\n );\n\n return {\n success: readCloudBoolean(\n response.success,\n \"presigned upload response.success\",\n ),\n signedUrl: readCloudString(\n response.signedUrl,\n \"presigned upload response.signedUrl\",\n ),\n expiresAt: readCloudString(\n response.expiresAt,\n \"presigned upload response.expiresAt\",\n ),\n publicUrl: readCloudString(\n response.publicUrl,\n \"presigned upload response.publicUrl\",\n ),\n };\n }\n}\n"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"AssistantCloudFiles.js","names":[],"sources":["../src/AssistantCloudFiles.ts"],"sourcesContent":["import type { AssistantCloudAPI } from \"./AssistantCloudAPI\";\nimport {\n readCloudArray,\n readCloudBoolean,\n readCloudRecord,\n readCloudString,\n} from \"./cloudResponse\";\n\ntype PdfToImagesRequestBody = {\n file_blob?: string | undefined;\n file_url?: string | undefined;\n};\n\ntype PdfToImagesResponse = {\n success: boolean;\n urls: string[];\n message: string;\n};\n\ntype GeneratePresignedUploadUrlRequestBody = {\n filename: string;\n};\n\ntype GeneratePresignedUploadUrlResponse = {\n success: boolean;\n signedUrl: string;\n expiresAt: string;\n publicUrl: string;\n key?: string;\n};\n\nexport type GeneratePresignedDownloadUrlResponse = {\n signedUrl: string;\n expiresAt: string;\n key: string;\n};\n\nexport class AssistantCloudFiles {\n private cloud: AssistantCloudAPI;\n\n constructor(cloud: AssistantCloudAPI) {\n this.cloud = cloud;\n }\n\n public async pdfToImages(\n body: PdfToImagesRequestBody,\n ): Promise<PdfToImagesResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\"/files/pdf-to-images\", {\n method: \"POST\",\n body,\n }),\n \"PDF conversion response\",\n );\n\n return {\n success: readCloudBoolean(\n response.success,\n \"PDF conversion response.success\",\n ),\n urls: readCloudArray(response.urls, \"PDF conversion response.urls\").map(\n (url, index) =>\n readCloudString(url, `PDF conversion response.urls[${index}]`),\n ),\n message: readCloudString(\n response.message,\n \"PDF conversion response.message\",\n ),\n };\n }\n\n public async generatePresignedUploadUrl(\n body: GeneratePresignedUploadUrlRequestBody,\n ): Promise<GeneratePresignedUploadUrlResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\n \"/files/attachments/generate-presigned-upload-url\",\n {\n method: \"POST\",\n body,\n },\n ),\n \"presigned upload response\",\n );\n\n return {\n success: readCloudBoolean(\n response.success,\n \"presigned upload response.success\",\n ),\n signedUrl: readCloudString(\n response.signedUrl,\n \"presigned upload response.signedUrl\",\n ),\n expiresAt: readCloudString(\n response.expiresAt,\n \"presigned upload response.expiresAt\",\n ),\n publicUrl: readCloudString(\n response.publicUrl,\n \"presigned upload response.publicUrl\",\n ),\n ...(\"key\" in response\n ? {\n key: readCloudString(response.key, \"presigned upload response.key\"),\n }\n : {}),\n };\n }\n\n public async generatePresignedDownloadUrl(\n body: { key: string } | { url: string },\n ): Promise<GeneratePresignedDownloadUrlResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\n \"/files/attachments/generate-presigned-download-url\",\n {\n method: \"POST\",\n body,\n },\n ),\n \"presigned download response\",\n );\n\n return {\n signedUrl: readCloudString(\n response.signedUrl,\n \"presigned download response.signedUrl\",\n ),\n expiresAt: readCloudString(\n response.expiresAt,\n \"presigned download response.expiresAt\",\n ),\n key: readCloudString(response.key, \"presigned download response.key\"),\n };\n }\n}\n"],"mappings":";;AAqCA,IAAa,sBAAb,MAAiC;CAC/B;CAEA,YAAY,OAA0B;EACpC,KAAK,QAAQ;CACf;CAEA,MAAa,YACX,MAC8B;EAC9B,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YAAY,wBAAwB;GACnD,QAAQ;GACR;EACF,CAAC,GACD,yBACF;EAEA,OAAO;GACL,SAAS,iBACP,SAAS,SACT,iCACF;GACA,MAAM,eAAe,SAAS,MAAM,8BAA8B,CAAC,CAAC,KACjE,KAAK,UACJ,gBAAgB,KAAK,gCAAgC,MAAM,EAAE,CACjE;GACA,SAAS,gBACP,SAAS,SACT,iCACF;EACF;CACF;CAEA,MAAa,2BACX,MAC6C;EAC7C,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YACf,oDACA;GACE,QAAQ;GACR;EACF,CACF,GACA,2BACF;EAEA,OAAO;GACL,SAAS,iBACP,SAAS,SACT,mCACF;GACA,WAAW,gBACT,SAAS,WACT,qCACF;GACA,WAAW,gBACT,SAAS,WACT,qCACF;GACA,WAAW,gBACT,SAAS,WACT,qCACF;GACA,GAAI,SAAS,WACT,EACE,KAAK,gBAAgB,SAAS,KAAK,+BAA+B,EACpE,IACA,CAAC;EACP;CACF;CAEA,MAAa,6BACX,MAC+C;EAC/C,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YACf,sDACA;GACE,QAAQ;GACR;EACF,CACF,GACA,6BACF;EAEA,OAAO;GACL,WAAW,gBACT,SAAS,WACT,uCACF;GACA,WAAW,gBACT,SAAS,WACT,uCACF;GACA,KAAK,gBAAgB,SAAS,KAAK,iCAAiC;EACtE;CACF;AACF"}
|
|
@@ -10,6 +10,16 @@ type AssistantCloudRunsStreamBody = {
|
|
|
10
10
|
type AssistantCloudRunReport = {
|
|
11
11
|
thread_id: string;
|
|
12
12
|
status: "completed" | "incomplete" | "error";
|
|
13
|
+
outcome_type?: "aborted" | "disconnected" | "length" | "content_filter";
|
|
14
|
+
message_id?: string;
|
|
15
|
+
first_token_ms?: number;
|
|
16
|
+
release?: string;
|
|
17
|
+
environment?: string;
|
|
18
|
+
tags?: string[];
|
|
19
|
+
provider?: string;
|
|
20
|
+
trace_id?: string;
|
|
21
|
+
error_code?: string;
|
|
22
|
+
error?: string;
|
|
13
23
|
total_steps?: number;
|
|
14
24
|
tool_calls?: AssistantCloudRunReportToolCall[];
|
|
15
25
|
steps?: {
|
|
@@ -20,6 +30,7 @@ type AssistantCloudRunReport = {
|
|
|
20
30
|
tool_calls?: AssistantCloudRunReportToolCall[];
|
|
21
31
|
start_ms?: number;
|
|
22
32
|
end_ms?: number;
|
|
33
|
+
finish_reason?: string;
|
|
23
34
|
}[];
|
|
24
35
|
input_tokens?: number;
|
|
25
36
|
output_tokens?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantCloudRuns.d.ts","names":[],"sources":["../src/AssistantCloudRuns.ts"],"mappings":";;;;KASK;EACH;EACA;EACA;;KAMU;EACV;EACA;EACA;EACA,aAAa;EACb;IACE;IACA;IACA;IACA;IACA,aAAa;IACb;IACA;;EAEF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;;cAGA;UACH;EAEI,YAAA,OAAO;EAIZ,+BAA+B;;;;;;;;;;;EAmBzB,OACX,MAAM,+BACL,QAAQ;EAkCE,OACX,MAAM,0BACL;IAAU"}
|
|
1
|
+
{"version":3,"file":"AssistantCloudRuns.d.ts","names":[],"sources":["../src/AssistantCloudRuns.ts"],"mappings":";;;;KASK;EACH;EACA;EACA;;KAMU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa;EACb;IACE;IACA;IACA;IACA;IACA,aAAa;IACb;IACA;IACA;;EAEF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;;cAGA;UACH;EAEI,YAAA,OAAO;EAIZ,+BAA+B;;;;;;;;;;;EAmBzB,OACX,MAAM,+BACL,QAAQ;EAkCE,OACX,MAAM,0BACL;IAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantCloudRuns.js","names":[],"sources":["../src/AssistantCloudRuns.ts"],"sourcesContent":["import type { AssistantCloudAPI } from \"./AssistantCloudAPI\";\nimport type { AssistantCloudRunReportToolCall } from \"./runTelemetry\";\nimport { AssistantStream, PlainTextDecoder } from \"assistant-stream\";\nimport {\n CloudResponseError,\n readCloudRecord,\n readCloudString,\n} from \"./cloudResponse\";\n\ntype AssistantCloudRunsStreamBody = {\n thread_id: string;\n assistant_id: \"system/thread_title\";\n messages: readonly unknown[]; // TODO type\n};\n\n// NOTE: Keep this payload shape aligned with the strict runtime validator in\n// assistant-cloud: apps/
|
|
1
|
+
{"version":3,"file":"AssistantCloudRuns.js","names":[],"sources":["../src/AssistantCloudRuns.ts"],"sourcesContent":["import type { AssistantCloudAPI } from \"./AssistantCloudAPI\";\nimport type { AssistantCloudRunReportToolCall } from \"./runTelemetry\";\nimport { AssistantStream, PlainTextDecoder } from \"assistant-stream\";\nimport {\n CloudResponseError,\n readCloudRecord,\n readCloudString,\n} from \"./cloudResponse\";\n\ntype AssistantCloudRunsStreamBody = {\n thread_id: string;\n assistant_id: \"system/thread_title\";\n messages: readonly unknown[]; // TODO type\n};\n\n// NOTE: Keep this payload shape aligned with the strict runtime validator in\n// assistant-cloud: apps/api/src/endpoints/runs/create.ts\n// (createRunSchema). New telemetry fields must be added in both repos together.\nexport type AssistantCloudRunReport = {\n thread_id: string;\n status: \"completed\" | \"incomplete\" | \"error\";\n outcome_type?: \"aborted\" | \"disconnected\" | \"length\" | \"content_filter\";\n message_id?: string;\n first_token_ms?: number;\n release?: string;\n environment?: string;\n tags?: string[];\n provider?: string;\n trace_id?: string;\n error_code?: string;\n error?: string;\n total_steps?: number;\n tool_calls?: AssistantCloudRunReportToolCall[];\n steps?: {\n input_tokens?: number;\n output_tokens?: number;\n reasoning_tokens?: number;\n cached_input_tokens?: number;\n tool_calls?: AssistantCloudRunReportToolCall[];\n start_ms?: number;\n end_ms?: number;\n finish_reason?: string;\n }[];\n input_tokens?: number;\n output_tokens?: number;\n reasoning_tokens?: number;\n cached_input_tokens?: number;\n model_id?: string;\n provider_type?: string;\n duration_ms?: number;\n output_text?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport class AssistantCloudRuns {\n private cloud: AssistantCloudAPI;\n\n constructor(cloud: AssistantCloudAPI) {\n this.cloud = cloud;\n }\n\n public __internal_getAssistantOptions(assistantId: string) {\n return {\n api: `${this.cloud._baseUrl}/v1/runs/stream`,\n headers: async () => {\n const headers = await this.cloud._auth.getAuthHeaders();\n if (!headers) throw new Error(\"Authorization failed\");\n return {\n ...headers,\n Accept: \"text/plain\",\n };\n },\n body: {\n assistant_id: assistantId,\n response_format: \"vercel-ai-data-stream/v1\",\n thread_id: \"unstable_todo\",\n },\n };\n }\n\n public async stream(\n body: AssistantCloudRunsStreamBody,\n ): Promise<AssistantStream> {\n const response = await this.cloud.makeRawRequest(\"/runs/stream\", {\n method: \"POST\",\n headers: {\n Accept: \"text/plain\",\n },\n body,\n });\n\n if (!response.body) {\n throw new CloudResponseError(\n 'Invalid Assistant Cloud response for \"run stream\": expected a response body',\n );\n }\n\n const receivedContentType = response.headers.get(\"content-type\");\n const contentType = receivedContentType\n ?.split(\";\", 1)[0]\n ?.trim()\n .toLowerCase();\n if (contentType !== \"text/plain\") {\n await response.body.cancel().catch(() => undefined);\n throw new CloudResponseError(\n `Invalid Assistant Cloud response for \"run stream\": expected a \"text/plain\" content type, received ${\n receivedContentType\n ? `\"${receivedContentType}\"`\n : \"no Content-Type header\"\n }`,\n );\n }\n\n return AssistantStream.fromResponse(response, new PlainTextDecoder());\n }\n\n public async report(\n body: AssistantCloudRunReport,\n ): Promise<{ run_id: string }> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\"/runs\", { method: \"POST\", body }),\n \"run report response\",\n );\n\n return { run_id: readCloudString(response.run_id, \"run_id\") };\n }\n}\n"],"mappings":";;;AAsDA,IAAa,qBAAb,MAAgC;CAC9B;CAEA,YAAY,OAA0B;EACpC,KAAK,QAAQ;CACf;CAEA,+BAAsC,aAAqB;EACzD,OAAO;GACL,KAAK,GAAG,KAAK,MAAM,SAAS;GAC5B,SAAS,YAAY;IACnB,MAAM,UAAU,MAAM,KAAK,MAAM,MAAM,eAAe;IACtD,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,sBAAsB;IACpD,OAAO;KACL,GAAG;KACH,QAAQ;IACV;GACF;GACA,MAAM;IACJ,cAAc;IACd,iBAAiB;IACjB,WAAW;GACb;EACF;CACF;CAEA,MAAa,OACX,MAC0B;EAC1B,MAAM,WAAW,MAAM,KAAK,MAAM,eAAe,gBAAgB;GAC/D,QAAQ;GACR,SAAS,EACP,QAAQ,aACV;GACA;EACF,CAAC;EAED,IAAI,CAAC,SAAS,MACZ,MAAM,IAAI,mBACR,+EACF;EAGF,MAAM,sBAAsB,SAAS,QAAQ,IAAI,cAAc;EAK/D,IAJoB,qBAChB,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,EAChB,KAAK,CAAC,CACP,YAAY,MACK,cAAc;GAChC,MAAM,SAAS,KAAK,OAAO,CAAC,CAAC,YAAY,KAAA,CAAS;GAClD,MAAM,IAAI,mBACR,qGACE,sBACI,IAAI,oBAAoB,KACxB,0BAER;EACF;EAEA,OAAO,gBAAgB,aAAa,UAAU,IAAI,iBAAiB,CAAC;CACtE;CAEA,MAAa,OACX,MAC6B;EAC7B,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YAAY,SAAS;GAAE,QAAQ;GAAQ;EAAK,CAAC,GAC9D,qBACF;EAEA,OAAO,EAAE,QAAQ,gBAAgB,SAAS,QAAQ,QAAQ,EAAE;CAC9D;AACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AssistantCloudAPI } from "./AssistantCloudAPI.js";
|
|
2
|
+
//#region src/AssistantCloudScores.d.ts
|
|
3
|
+
type AssistantCloudScoreBody = {
|
|
4
|
+
name: string;
|
|
5
|
+
data_type: "numeric" | "categorical" | "boolean";
|
|
6
|
+
value?: number | boolean;
|
|
7
|
+
string_value?: string;
|
|
8
|
+
comment?: string;
|
|
9
|
+
thread_id?: string;
|
|
10
|
+
message_id?: string;
|
|
11
|
+
run_id?: string;
|
|
12
|
+
};
|
|
13
|
+
type AssistantCloudScoreResponse = {
|
|
14
|
+
score_id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
data_type: "numeric" | "categorical" | "boolean";
|
|
17
|
+
value: number | null;
|
|
18
|
+
string_value: string | null;
|
|
19
|
+
};
|
|
20
|
+
declare class AssistantCloudScores {
|
|
21
|
+
private cloud;
|
|
22
|
+
constructor(cloud: AssistantCloudAPI);
|
|
23
|
+
create(body: AssistantCloudScoreBody): Promise<AssistantCloudScoreResponse>;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { AssistantCloudScoreBody, AssistantCloudScoreResponse, AssistantCloudScores };
|
|
27
|
+
//# sourceMappingURL=AssistantCloudScores.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssistantCloudScores.d.ts","names":[],"sources":["../src/AssistantCloudScores.ts"],"mappings":";;KAWY;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;;cAGW;UACH;EAEI,YAAA,OAAO;EAIN,OACX,MAAM,0BACL,QAAQ"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { readCloudEnum, readCloudNullableNumber, readCloudNullableString, readCloudRecord, readCloudString } from "./cloudResponse.js";
|
|
2
|
+
//#region src/AssistantCloudScores.ts
|
|
3
|
+
const SCORE_DATA_TYPES = [
|
|
4
|
+
"numeric",
|
|
5
|
+
"categorical",
|
|
6
|
+
"boolean"
|
|
7
|
+
];
|
|
8
|
+
var AssistantCloudScores = class {
|
|
9
|
+
cloud;
|
|
10
|
+
constructor(cloud) {
|
|
11
|
+
this.cloud = cloud;
|
|
12
|
+
}
|
|
13
|
+
async create(body) {
|
|
14
|
+
const response = readCloudRecord(await this.cloud.makeRequest("/scores", {
|
|
15
|
+
method: "POST",
|
|
16
|
+
body
|
|
17
|
+
}), "score response");
|
|
18
|
+
return {
|
|
19
|
+
score_id: readCloudString(response.score_id, "score response.score_id"),
|
|
20
|
+
name: readCloudString(response.name, "score response.name"),
|
|
21
|
+
data_type: readCloudEnum(response.data_type, "score response.data_type", SCORE_DATA_TYPES),
|
|
22
|
+
value: readCloudNullableNumber(response.value, "score response.value"),
|
|
23
|
+
string_value: readCloudNullableString(response.string_value, "score response.string_value")
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
//#endregion
|
|
28
|
+
export { AssistantCloudScores };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=AssistantCloudScores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssistantCloudScores.js","names":[],"sources":["../src/AssistantCloudScores.ts"],"sourcesContent":["import type { AssistantCloudAPI } from \"./AssistantCloudAPI\";\nimport {\n readCloudEnum,\n readCloudNullableNumber,\n readCloudNullableString,\n readCloudRecord,\n readCloudString,\n} from \"./cloudResponse\";\n\nconst SCORE_DATA_TYPES = [\"numeric\", \"categorical\", \"boolean\"] as const;\n\nexport type AssistantCloudScoreBody = {\n name: string;\n data_type: \"numeric\" | \"categorical\" | \"boolean\";\n value?: number | boolean;\n string_value?: string;\n comment?: string;\n thread_id?: string;\n message_id?: string;\n run_id?: string;\n};\n\nexport type AssistantCloudScoreResponse = {\n score_id: string;\n name: string;\n data_type: \"numeric\" | \"categorical\" | \"boolean\";\n value: number | null;\n string_value: string | null;\n};\n\nexport class AssistantCloudScores {\n private cloud: AssistantCloudAPI;\n\n constructor(cloud: AssistantCloudAPI) {\n this.cloud = cloud;\n }\n\n public async create(\n body: AssistantCloudScoreBody,\n ): Promise<AssistantCloudScoreResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\"/scores\", { method: \"POST\", body }),\n \"score response\",\n );\n\n return {\n score_id: readCloudString(response.score_id, \"score response.score_id\"),\n name: readCloudString(response.name, \"score response.name\"),\n data_type: readCloudEnum(\n response.data_type,\n \"score response.data_type\",\n SCORE_DATA_TYPES,\n ),\n value: readCloudNullableNumber(response.value, \"score response.value\"),\n string_value: readCloudNullableString(\n response.string_value,\n \"score response.string_value\",\n ),\n };\n }\n}\n"],"mappings":";;AASA,MAAM,mBAAmB;CAAC;CAAW;CAAe;AAAS;AAqB7D,IAAa,uBAAb,MAAkC;CAChC;CAEA,YAAY,OAA0B;EACpC,KAAK,QAAQ;CACf;CAEA,MAAa,OACX,MACsC;EACtC,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YAAY,WAAW;GAAE,QAAQ;GAAQ;EAAK,CAAC,GAChE,gBACF;EAEA,OAAO;GACL,UAAU,gBAAgB,SAAS,UAAU,yBAAyB;GACtE,MAAM,gBAAgB,SAAS,MAAM,qBAAqB;GAC1D,WAAW,cACT,SAAS,WACT,4BACA,gBACF;GACA,OAAO,wBAAwB,SAAS,OAAO,sBAAsB;GACrE,cAAc,wBACZ,SAAS,cACT,6BACF;EACF;CACF;AACF"}
|
|
@@ -12,6 +12,8 @@ type CloudMessage = {
|
|
|
12
12
|
};
|
|
13
13
|
type AssistantCloudThreadMessageListQuery = {
|
|
14
14
|
format?: string;
|
|
15
|
+
limit?: number;
|
|
16
|
+
after?: string;
|
|
15
17
|
};
|
|
16
18
|
type AssistantCloudThreadMessageListResponse = {
|
|
17
19
|
messages: CloudMessage[];
|
|
@@ -27,6 +29,13 @@ type AssistantCloudMessageCreateResponse = {
|
|
|
27
29
|
type AssistantCloudThreadMessageUpdateBody = {
|
|
28
30
|
content: ReadonlyJSONObject;
|
|
29
31
|
};
|
|
32
|
+
type AssistantCloudThreadMessageFeedbackBody = {
|
|
33
|
+
type: "positive" | "negative";
|
|
34
|
+
};
|
|
35
|
+
type AssistantCloudThreadMessageFeedbackResponse = {
|
|
36
|
+
feedback_id: string;
|
|
37
|
+
type: "positive" | "negative";
|
|
38
|
+
};
|
|
30
39
|
declare const decodeCloudMessage: (value: unknown, field: string) => CloudMessage;
|
|
31
40
|
declare class AssistantCloudThreadMessages {
|
|
32
41
|
private cloud;
|
|
@@ -34,7 +43,8 @@ declare class AssistantCloudThreadMessages {
|
|
|
34
43
|
list(threadId: string, query?: AssistantCloudThreadMessageListQuery): Promise<AssistantCloudThreadMessageListResponse>;
|
|
35
44
|
create(threadId: string, body: AssistantCloudThreadMessageCreateBody): Promise<AssistantCloudMessageCreateResponse>;
|
|
36
45
|
update(threadId: string, messageId: string, body: AssistantCloudThreadMessageUpdateBody): Promise<void>;
|
|
46
|
+
feedback(threadId: string, messageId: string, body: AssistantCloudThreadMessageFeedbackBody): Promise<AssistantCloudThreadMessageFeedbackResponse>;
|
|
37
47
|
}
|
|
38
48
|
//#endregion
|
|
39
|
-
export { AssistantCloudThreadMessages, CloudMessage, decodeCloudMessage };
|
|
49
|
+
export { AssistantCloudThreadMessageFeedbackBody, AssistantCloudThreadMessageFeedbackResponse, AssistantCloudThreadMessages, CloudMessage, decodeCloudMessage };
|
|
40
50
|
//# sourceMappingURL=AssistantCloudThreadMessages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantCloudThreadMessages.d.ts","names":[],"sources":["../src/AssistantCloudThreadMessages.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AssistantCloudThreadMessages.d.ts","names":[],"sources":["../src/AssistantCloudThreadMessages.ts"],"mappings":";;;KAaY;EACV;EACA;EACA;EACA,YAAY;EACZ,YAAY;EACZ;EACA,SAAS;;KAGN;EACH;EACA;EACA;;KAGG;EACH,UAAU;;KAGP;EACH;EACA;EACA,SAAS;;KAGN;EACH;;KAGG;EACH,SAAS;;KAKC;EACV;;KAGU;EACV;EACA;;cAGW,qBACX,gBACA,kBACC;cAaU;UACH;EAEI,YAAA,OAAO;EAIN,KACX,kBACA,QAAQ,uCACP,QAAQ;EAiBE,OACX,kBACA,MAAM,wCACL,QAAQ;EAcE,OACX,kBACA,mBACA,MAAM,wCACL;EAOU,SACX,kBACA,mBACA,MAAM,0CACL,QAAQ"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { readCloudArray, readCloudInteger, readCloudJSONObject, readCloudNullableString, readCloudRecord, readCloudString, readCloudTimestamp } from "./cloudResponse.js";
|
|
1
|
+
import { readCloudArray, readCloudEnum, readCloudInteger, readCloudJSONObject, readCloudNullableString, readCloudRecord, readCloudString, readCloudTimestamp } from "./cloudResponse.js";
|
|
2
2
|
//#region src/AssistantCloudThreadMessages.ts
|
|
3
|
+
const MESSAGE_FEEDBACK_TYPES = ["positive", "negative"];
|
|
3
4
|
const decodeCloudMessage = (value, field) => {
|
|
4
5
|
const message = readCloudRecord(value, field);
|
|
5
6
|
return {
|
|
@@ -34,6 +35,16 @@ var AssistantCloudThreadMessages = class {
|
|
|
34
35
|
body
|
|
35
36
|
});
|
|
36
37
|
}
|
|
38
|
+
async feedback(threadId, messageId, body) {
|
|
39
|
+
const response = readCloudRecord(await this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}/messages/${encodeURIComponent(messageId)}/feedback`, {
|
|
40
|
+
method: "POST",
|
|
41
|
+
body
|
|
42
|
+
}), "thread message feedback response");
|
|
43
|
+
return {
|
|
44
|
+
feedback_id: readCloudString(response.feedback_id, "feedback_id"),
|
|
45
|
+
type: readCloudEnum(response.type, "type", MESSAGE_FEEDBACK_TYPES)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
37
48
|
};
|
|
38
49
|
//#endregion
|
|
39
50
|
export { AssistantCloudThreadMessages, decodeCloudMessage };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantCloudThreadMessages.js","names":[],"sources":["../src/AssistantCloudThreadMessages.ts"],"sourcesContent":["import type { ReadonlyJSONObject } from \"assistant-stream/utils\";\nimport type { AssistantCloudAPI } from \"./AssistantCloudAPI\";\nimport {\n readCloudArray,\n readCloudInteger,\n readCloudJSONObject,\n readCloudNullableString,\n readCloudRecord,\n readCloudString,\n readCloudTimestamp,\n} from \"./cloudResponse\";\n\nexport type CloudMessage = {\n id: string;\n parent_id: string | null;\n height: number;\n created_at: Date;\n updated_at: Date;\n format: \"aui/v0\" | string;\n content: ReadonlyJSONObject;\n};\n\ntype AssistantCloudThreadMessageListQuery = {\n format?: string;\n};\n\ntype AssistantCloudThreadMessageListResponse = {\n messages: CloudMessage[];\n};\n\ntype AssistantCloudThreadMessageCreateBody = {\n parent_id: string | null;\n format: \"aui/v0\" | string;\n content: ReadonlyJSONObject;\n};\n\ntype AssistantCloudMessageCreateResponse = {\n message_id: string;\n};\n\ntype AssistantCloudThreadMessageUpdateBody = {\n content: ReadonlyJSONObject;\n};\n\nexport const decodeCloudMessage = (\n value: unknown,\n field: string,\n): CloudMessage => {\n const message = readCloudRecord(value, field);\n return {\n id: readCloudString(message.id, `${field}.id`),\n parent_id: readCloudNullableString(message.parent_id, `${field}.parent_id`),\n height: readCloudInteger(message.height, `${field}.height`),\n created_at: readCloudTimestamp(message.created_at, `${field}.created_at`),\n updated_at: readCloudTimestamp(message.updated_at, `${field}.updated_at`),\n format: readCloudString(message.format, `${field}.format`),\n content: readCloudJSONObject(message.content, `${field}.content`),\n };\n};\n\nexport class AssistantCloudThreadMessages {\n private cloud: AssistantCloudAPI;\n\n constructor(cloud: AssistantCloudAPI) {\n this.cloud = cloud;\n }\n\n public async list(\n threadId: string,\n query?: AssistantCloudThreadMessageListQuery,\n ): Promise<AssistantCloudThreadMessageListResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\n `/threads/${encodeURIComponent(threadId)}/messages`,\n { query },\n ),\n \"thread message list response\",\n );\n const messages = readCloudArray(response.messages, \"messages\");\n\n return {\n messages: messages.map((message, index) =>\n decodeCloudMessage(message, `messages[${index}]`),\n ),\n };\n }\n\n public async create(\n threadId: string,\n body: AssistantCloudThreadMessageCreateBody,\n ): Promise<AssistantCloudMessageCreateResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\n `/threads/${encodeURIComponent(threadId)}/messages`,\n { method: \"POST\", body },\n ),\n \"thread message create response\",\n );\n\n return {\n message_id: readCloudString(response.message_id, \"message_id\"),\n };\n }\n\n public async update(\n threadId: string,\n messageId: string,\n body: AssistantCloudThreadMessageUpdateBody,\n ): Promise<void> {\n return this.cloud.makeRequest(\n `/threads/${encodeURIComponent(threadId)}/messages/${encodeURIComponent(messageId)}`,\n { method: \"PUT\", body },\n );\n }\n}\n"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"AssistantCloudThreadMessages.js","names":[],"sources":["../src/AssistantCloudThreadMessages.ts"],"sourcesContent":["import type { ReadonlyJSONObject } from \"assistant-stream/utils\";\nimport type { AssistantCloudAPI } from \"./AssistantCloudAPI\";\nimport {\n readCloudArray,\n readCloudEnum,\n readCloudInteger,\n readCloudJSONObject,\n readCloudNullableString,\n readCloudRecord,\n readCloudString,\n readCloudTimestamp,\n} from \"./cloudResponse\";\n\nexport type CloudMessage = {\n id: string;\n parent_id: string | null;\n height: number;\n created_at: Date;\n updated_at: Date;\n format: \"aui/v0\" | string;\n content: ReadonlyJSONObject;\n};\n\ntype AssistantCloudThreadMessageListQuery = {\n format?: string;\n limit?: number;\n after?: string;\n};\n\ntype AssistantCloudThreadMessageListResponse = {\n messages: CloudMessage[];\n};\n\ntype AssistantCloudThreadMessageCreateBody = {\n parent_id: string | null;\n format: \"aui/v0\" | string;\n content: ReadonlyJSONObject;\n};\n\ntype AssistantCloudMessageCreateResponse = {\n message_id: string;\n};\n\ntype AssistantCloudThreadMessageUpdateBody = {\n content: ReadonlyJSONObject;\n};\n\nconst MESSAGE_FEEDBACK_TYPES = [\"positive\", \"negative\"] as const;\n\nexport type AssistantCloudThreadMessageFeedbackBody = {\n type: \"positive\" | \"negative\";\n};\n\nexport type AssistantCloudThreadMessageFeedbackResponse = {\n feedback_id: string;\n type: \"positive\" | \"negative\";\n};\n\nexport const decodeCloudMessage = (\n value: unknown,\n field: string,\n): CloudMessage => {\n const message = readCloudRecord(value, field);\n return {\n id: readCloudString(message.id, `${field}.id`),\n parent_id: readCloudNullableString(message.parent_id, `${field}.parent_id`),\n height: readCloudInteger(message.height, `${field}.height`),\n created_at: readCloudTimestamp(message.created_at, `${field}.created_at`),\n updated_at: readCloudTimestamp(message.updated_at, `${field}.updated_at`),\n format: readCloudString(message.format, `${field}.format`),\n content: readCloudJSONObject(message.content, `${field}.content`),\n };\n};\n\nexport class AssistantCloudThreadMessages {\n private cloud: AssistantCloudAPI;\n\n constructor(cloud: AssistantCloudAPI) {\n this.cloud = cloud;\n }\n\n public async list(\n threadId: string,\n query?: AssistantCloudThreadMessageListQuery,\n ): Promise<AssistantCloudThreadMessageListResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\n `/threads/${encodeURIComponent(threadId)}/messages`,\n { query },\n ),\n \"thread message list response\",\n );\n const messages = readCloudArray(response.messages, \"messages\");\n\n return {\n messages: messages.map((message, index) =>\n decodeCloudMessage(message, `messages[${index}]`),\n ),\n };\n }\n\n public async create(\n threadId: string,\n body: AssistantCloudThreadMessageCreateBody,\n ): Promise<AssistantCloudMessageCreateResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\n `/threads/${encodeURIComponent(threadId)}/messages`,\n { method: \"POST\", body },\n ),\n \"thread message create response\",\n );\n\n return {\n message_id: readCloudString(response.message_id, \"message_id\"),\n };\n }\n\n public async update(\n threadId: string,\n messageId: string,\n body: AssistantCloudThreadMessageUpdateBody,\n ): Promise<void> {\n return this.cloud.makeRequest(\n `/threads/${encodeURIComponent(threadId)}/messages/${encodeURIComponent(messageId)}`,\n { method: \"PUT\", body },\n );\n }\n\n public async feedback(\n threadId: string,\n messageId: string,\n body: AssistantCloudThreadMessageFeedbackBody,\n ): Promise<AssistantCloudThreadMessageFeedbackResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\n `/threads/${encodeURIComponent(threadId)}/messages/${encodeURIComponent(messageId)}/feedback`,\n { method: \"POST\", body },\n ),\n \"thread message feedback response\",\n );\n\n return {\n feedback_id: readCloudString(response.feedback_id, \"feedback_id\"),\n type: readCloudEnum(response.type, \"type\", MESSAGE_FEEDBACK_TYPES),\n };\n }\n}\n"],"mappings":";;AA+CA,MAAM,yBAAyB,CAAC,YAAY,UAAU;AAWtD,MAAa,sBACX,OACA,UACiB;CACjB,MAAM,UAAU,gBAAgB,OAAO,KAAK;CAC5C,OAAO;EACL,IAAI,gBAAgB,QAAQ,IAAI,GAAG,MAAM,IAAI;EAC7C,WAAW,wBAAwB,QAAQ,WAAW,GAAG,MAAM,WAAW;EAC1E,QAAQ,iBAAiB,QAAQ,QAAQ,GAAG,MAAM,QAAQ;EAC1D,YAAY,mBAAmB,QAAQ,YAAY,GAAG,MAAM,YAAY;EACxE,YAAY,mBAAmB,QAAQ,YAAY,GAAG,MAAM,YAAY;EACxE,QAAQ,gBAAgB,QAAQ,QAAQ,GAAG,MAAM,QAAQ;EACzD,SAAS,oBAAoB,QAAQ,SAAS,GAAG,MAAM,SAAS;CAClE;AACF;AAEA,IAAa,+BAAb,MAA0C;CACxC;CAEA,YAAY,OAA0B;EACpC,KAAK,QAAQ;CACf;CAEA,MAAa,KACX,UACA,OACkD;EAClD,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YACf,YAAY,mBAAmB,QAAQ,EAAE,YACzC,EAAE,MAAM,CACV,GACA,8BACF;EAGA,OAAO,EACL,UAHe,eAAe,SAAS,UAAU,UAGhC,CAAC,CAAC,KAAK,SAAS,UAC/B,mBAAmB,SAAS,YAAY,MAAM,EAAE,CAClD,EACF;CACF;CAEA,MAAa,OACX,UACA,MAC8C;EAC9C,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YACf,YAAY,mBAAmB,QAAQ,EAAE,YACzC;GAAE,QAAQ;GAAQ;EAAK,CACzB,GACA,gCACF;EAEA,OAAO,EACL,YAAY,gBAAgB,SAAS,YAAY,YAAY,EAC/D;CACF;CAEA,MAAa,OACX,UACA,WACA,MACe;EACf,OAAO,KAAK,MAAM,YAChB,YAAY,mBAAmB,QAAQ,EAAE,YAAY,mBAAmB,SAAS,KACjF;GAAE,QAAQ;GAAO;EAAK,CACxB;CACF;CAEA,MAAa,SACX,UACA,WACA,MACsD;EACtD,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YACf,YAAY,mBAAmB,QAAQ,EAAE,YAAY,mBAAmB,SAAS,EAAE,YACnF;GAAE,QAAQ;GAAQ;EAAK,CACzB,GACA,kCACF;EAEA,OAAO;GACL,aAAa,gBAAgB,SAAS,aAAa,aAAa;GAChE,MAAM,cAAc,SAAS,MAAM,QAAQ,sBAAsB;EACnE;CACF;AACF"}
|
|
@@ -30,6 +30,12 @@ type AssistantCloudThreadsCreateBody = {
|
|
|
30
30
|
type AssistantCloudThreadsCreateResponse = {
|
|
31
31
|
thread_id: string;
|
|
32
32
|
};
|
|
33
|
+
type AssistantCloudThreadsClaimBody = {
|
|
34
|
+
refresh_token: string;
|
|
35
|
+
};
|
|
36
|
+
type AssistantCloudThreadsClaimResponse = {
|
|
37
|
+
moved: number;
|
|
38
|
+
};
|
|
33
39
|
type AssistantCloudThreadsUpdateBody = {
|
|
34
40
|
title?: string | undefined;
|
|
35
41
|
last_message_at?: Date | undefined;
|
|
@@ -45,6 +51,8 @@ declare class AssistantCloudThreads {
|
|
|
45
51
|
get(threadId: string): Promise<CloudThread>;
|
|
46
52
|
create(body: AssistantCloudThreadsCreateBody): Promise<AssistantCloudThreadsCreateResponse>;
|
|
47
53
|
update(threadId: string, body: AssistantCloudThreadsUpdateBody): Promise<void>;
|
|
54
|
+
/** Moves every thread of the anonymous identity behind `refresh_token` into the caller's workspace. */
|
|
55
|
+
claim(body: AssistantCloudThreadsClaimBody): Promise<AssistantCloudThreadsClaimResponse>;
|
|
48
56
|
delete(threadId: string): Promise<void>;
|
|
49
57
|
}
|
|
50
58
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantCloudThreads.d.ts","names":[],"sources":["../src/AssistantCloudThreads.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AssistantCloudThreads.d.ts","names":[],"sources":["../src/AssistantCloudThreads.ts"],"mappings":";;;KAYK;EACH;EACA;EACA;;KAGU;EACV;EACA,iBAAiB;EACjB;EACA;EACA;EACA;EACA,YAAY;EACZ,YAAY;EACZ;EACA;;KAGG;EACH,SAAS;;KAGN;EACH;EACA,iBAAiB;EACjB;EACA;;KAGG;EACH;;KAGG;EACH;;KAGG;EACH;;KAGG;EACH;EACA,kBAAkB;EAClB;EACA;;cAGW,oBACX,gBACA,kBACC;cAsBU;WACK,UAAU;UAElB;EAEI,YAAA,OAAO;EAKN,KACX,QAAQ,iCACP,QAAQ;EAkBE,IAAI,mBAAmB,QAAQ;EAS/B,OACX,MAAM,kCACL,QAAQ;EASE,OACX,kBACA,MAAM,kCACL;;EAQU,MACX,MAAM,iCACL,QAAQ;EASE,OAAO,mBAAmB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { readCloudArray, readCloudBoolean, readCloudNullableString, readCloudRecord, readCloudString, readCloudTimestamp } from "./cloudResponse.js";
|
|
1
|
+
import { readCloudArray, readCloudBoolean, readCloudInteger, readCloudNullableString, readCloudRecord, readCloudString, readCloudTimestamp } from "./cloudResponse.js";
|
|
2
2
|
import { AssistantCloudThreadMessages } from "./AssistantCloudThreadMessages.js";
|
|
3
3
|
//#region src/AssistantCloudThreads.ts
|
|
4
4
|
const decodeCloudThread = (value, field) => {
|
|
@@ -48,6 +48,14 @@ var AssistantCloudThreads = class {
|
|
|
48
48
|
body
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
+
/** Moves every thread of the anonymous identity behind `refresh_token` into the caller's workspace. */
|
|
52
|
+
async claim(body) {
|
|
53
|
+
const response = readCloudRecord(await this.cloud.makeRequest("/threads/claim", {
|
|
54
|
+
method: "POST",
|
|
55
|
+
body
|
|
56
|
+
}), "thread claim response");
|
|
57
|
+
return { moved: readCloudInteger(response.moved, "moved") };
|
|
58
|
+
}
|
|
51
59
|
async delete(threadId) {
|
|
52
60
|
return this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}`, { method: "DELETE" });
|
|
53
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantCloudThreads.js","names":[],"sources":["../src/AssistantCloudThreads.ts"],"sourcesContent":["import type { AssistantCloudAPI } from \"./AssistantCloudAPI\";\nimport { AssistantCloudThreadMessages } from \"./AssistantCloudThreadMessages\";\nimport {\n readCloudArray,\n readCloudBoolean,\n readCloudNullableString,\n readCloudRecord,\n readCloudString,\n readCloudTimestamp,\n} from \"./cloudResponse\";\n\ntype AssistantCloudThreadsListQuery = {\n is_archived?: boolean;\n limit?: number;\n after?: string;\n};\n\nexport type CloudThread = {\n title: string;\n last_message_at: Date;\n metadata: unknown;\n external_id: string | null;\n id: string;\n project_id: string;\n created_at: Date;\n updated_at: Date;\n workspace_id: string;\n is_archived: boolean;\n};\n\ntype AssistantCloudThreadsListResponse = {\n threads: CloudThread[];\n};\n\ntype AssistantCloudThreadsCreateBody = {\n title?: string | undefined;\n last_message_at: Date;\n metadata?: unknown | undefined;\n external_id?: string | undefined;\n};\n\ntype AssistantCloudThreadsCreateResponse = {\n thread_id: string;\n};\n\ntype AssistantCloudThreadsUpdateBody = {\n title?: string | undefined;\n last_message_at?: Date | undefined;\n metadata?: unknown | undefined;\n is_archived?: boolean | undefined;\n};\n\nexport const decodeCloudThread = (\n value: unknown,\n field: string,\n): CloudThread => {\n const thread = readCloudRecord(value, field);\n return {\n title: readCloudNullableString(thread.title, `${field}.title`) ?? \"\",\n last_message_at: readCloudTimestamp(\n thread.last_message_at,\n `${field}.last_message_at`,\n ),\n metadata: thread.metadata,\n external_id: readCloudNullableString(\n thread.external_id,\n `${field}.external_id`,\n ),\n id: readCloudString(thread.id, `${field}.id`),\n project_id: readCloudString(thread.project_id, `${field}.project_id`),\n created_at: readCloudTimestamp(thread.created_at, `${field}.created_at`),\n updated_at: readCloudTimestamp(thread.updated_at, `${field}.updated_at`),\n workspace_id: readCloudString(thread.workspace_id, `${field}.workspace_id`),\n is_archived: readCloudBoolean(thread.is_archived, `${field}.is_archived`),\n };\n};\n\nexport class AssistantCloudThreads {\n public readonly messages: AssistantCloudThreadMessages;\n\n private cloud: AssistantCloudAPI;\n\n constructor(cloud: AssistantCloudAPI) {\n this.cloud = cloud;\n this.messages = new AssistantCloudThreadMessages(cloud);\n }\n\n public async list(\n query?: AssistantCloudThreadsListQuery,\n ): Promise<AssistantCloudThreadsListResponse> {\n const requestQuery =\n query?.is_archived === undefined\n ? query\n : { ...query, is_archived: String(query.is_archived) };\n const response = readCloudRecord(\n await this.cloud.makeRequest(\"/threads\", { query: requestQuery }),\n \"thread list response\",\n );\n const threads = readCloudArray(response.threads, \"threads\");\n\n return {\n threads: threads.map((thread, index) =>\n decodeCloudThread(thread, `threads[${index}]`),\n ),\n };\n }\n\n public async get(threadId: string): Promise<CloudThread> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}`),\n \"thread response\",\n );\n\n return decodeCloudThread(response.thread, \"thread\");\n }\n\n public async create(\n body: AssistantCloudThreadsCreateBody,\n ): Promise<AssistantCloudThreadsCreateResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\"/threads\", { method: \"POST\", body }),\n \"thread create response\",\n );\n\n return { thread_id: readCloudString(response.thread_id, \"thread_id\") };\n }\n\n public async update(\n threadId: string,\n body: AssistantCloudThreadsUpdateBody,\n ): Promise<void> {\n return this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}`, {\n method: \"PUT\",\n body,\n });\n }\n\n public async delete(threadId: string): Promise<void> {\n return this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}`, {\n method: \"DELETE\",\n });\n }\n}\n"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AssistantCloudThreads.js","names":[],"sources":["../src/AssistantCloudThreads.ts"],"sourcesContent":["import type { AssistantCloudAPI } from \"./AssistantCloudAPI\";\nimport { AssistantCloudThreadMessages } from \"./AssistantCloudThreadMessages\";\nimport {\n readCloudArray,\n readCloudBoolean,\n readCloudInteger,\n readCloudNullableString,\n readCloudRecord,\n readCloudString,\n readCloudTimestamp,\n} from \"./cloudResponse\";\n\ntype AssistantCloudThreadsListQuery = {\n is_archived?: boolean;\n limit?: number;\n after?: string;\n};\n\nexport type CloudThread = {\n title: string;\n last_message_at: Date;\n metadata: unknown;\n external_id: string | null;\n id: string;\n project_id: string;\n created_at: Date;\n updated_at: Date;\n workspace_id: string;\n is_archived: boolean;\n};\n\ntype AssistantCloudThreadsListResponse = {\n threads: CloudThread[];\n};\n\ntype AssistantCloudThreadsCreateBody = {\n title?: string | undefined;\n last_message_at: Date;\n metadata?: unknown | undefined;\n external_id?: string | undefined;\n};\n\ntype AssistantCloudThreadsCreateResponse = {\n thread_id: string;\n};\n\ntype AssistantCloudThreadsClaimBody = {\n refresh_token: string;\n};\n\ntype AssistantCloudThreadsClaimResponse = {\n moved: number;\n};\n\ntype AssistantCloudThreadsUpdateBody = {\n title?: string | undefined;\n last_message_at?: Date | undefined;\n metadata?: unknown | undefined;\n is_archived?: boolean | undefined;\n};\n\nexport const decodeCloudThread = (\n value: unknown,\n field: string,\n): CloudThread => {\n const thread = readCloudRecord(value, field);\n return {\n title: readCloudNullableString(thread.title, `${field}.title`) ?? \"\",\n last_message_at: readCloudTimestamp(\n thread.last_message_at,\n `${field}.last_message_at`,\n ),\n metadata: thread.metadata,\n external_id: readCloudNullableString(\n thread.external_id,\n `${field}.external_id`,\n ),\n id: readCloudString(thread.id, `${field}.id`),\n project_id: readCloudString(thread.project_id, `${field}.project_id`),\n created_at: readCloudTimestamp(thread.created_at, `${field}.created_at`),\n updated_at: readCloudTimestamp(thread.updated_at, `${field}.updated_at`),\n workspace_id: readCloudString(thread.workspace_id, `${field}.workspace_id`),\n is_archived: readCloudBoolean(thread.is_archived, `${field}.is_archived`),\n };\n};\n\nexport class AssistantCloudThreads {\n public readonly messages: AssistantCloudThreadMessages;\n\n private cloud: AssistantCloudAPI;\n\n constructor(cloud: AssistantCloudAPI) {\n this.cloud = cloud;\n this.messages = new AssistantCloudThreadMessages(cloud);\n }\n\n public async list(\n query?: AssistantCloudThreadsListQuery,\n ): Promise<AssistantCloudThreadsListResponse> {\n const requestQuery =\n query?.is_archived === undefined\n ? query\n : { ...query, is_archived: String(query.is_archived) };\n const response = readCloudRecord(\n await this.cloud.makeRequest(\"/threads\", { query: requestQuery }),\n \"thread list response\",\n );\n const threads = readCloudArray(response.threads, \"threads\");\n\n return {\n threads: threads.map((thread, index) =>\n decodeCloudThread(thread, `threads[${index}]`),\n ),\n };\n }\n\n public async get(threadId: string): Promise<CloudThread> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}`),\n \"thread response\",\n );\n\n return decodeCloudThread(response.thread, \"thread\");\n }\n\n public async create(\n body: AssistantCloudThreadsCreateBody,\n ): Promise<AssistantCloudThreadsCreateResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\"/threads\", { method: \"POST\", body }),\n \"thread create response\",\n );\n\n return { thread_id: readCloudString(response.thread_id, \"thread_id\") };\n }\n\n public async update(\n threadId: string,\n body: AssistantCloudThreadsUpdateBody,\n ): Promise<void> {\n return this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}`, {\n method: \"PUT\",\n body,\n });\n }\n\n /** Moves every thread of the anonymous identity behind `refresh_token` into the caller's workspace. */\n public async claim(\n body: AssistantCloudThreadsClaimBody,\n ): Promise<AssistantCloudThreadsClaimResponse> {\n const response = readCloudRecord(\n await this.cloud.makeRequest(\"/threads/claim\", { method: \"POST\", body }),\n \"thread claim response\",\n );\n\n return { moved: readCloudInteger(response.moved, \"moved\") };\n }\n\n public async delete(threadId: string): Promise<void> {\n return this.cloud.makeRequest(`/threads/${encodeURIComponent(threadId)}`, {\n method: \"DELETE\",\n });\n }\n}\n"],"mappings":";;;AA6DA,MAAa,qBACX,OACA,UACgB;CAChB,MAAM,SAAS,gBAAgB,OAAO,KAAK;CAC3C,OAAO;EACL,OAAO,wBAAwB,OAAO,OAAO,GAAG,MAAM,OAAO,KAAK;EAClE,iBAAiB,mBACf,OAAO,iBACP,GAAG,MAAM,iBACX;EACA,UAAU,OAAO;EACjB,aAAa,wBACX,OAAO,aACP,GAAG,MAAM,aACX;EACA,IAAI,gBAAgB,OAAO,IAAI,GAAG,MAAM,IAAI;EAC5C,YAAY,gBAAgB,OAAO,YAAY,GAAG,MAAM,YAAY;EACpE,YAAY,mBAAmB,OAAO,YAAY,GAAG,MAAM,YAAY;EACvE,YAAY,mBAAmB,OAAO,YAAY,GAAG,MAAM,YAAY;EACvE,cAAc,gBAAgB,OAAO,cAAc,GAAG,MAAM,cAAc;EAC1E,aAAa,iBAAiB,OAAO,aAAa,GAAG,MAAM,aAAa;CAC1E;AACF;AAEA,IAAa,wBAAb,MAAmC;CACjC;CAEA;CAEA,YAAY,OAA0B;EACpC,KAAK,QAAQ;EACb,KAAK,WAAW,IAAI,6BAA6B,KAAK;CACxD;CAEA,MAAa,KACX,OAC4C;EAC5C,MAAM,eACJ,OAAO,gBAAgB,KAAA,IACnB,QACA;GAAE,GAAG;GAAO,aAAa,OAAO,MAAM,WAAW;EAAE;EACzD,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YAAY,YAAY,EAAE,OAAO,aAAa,CAAC,GAChE,sBACF;EAGA,OAAO,EACL,SAHc,eAAe,SAAS,SAAS,SAGhC,CAAC,CAAC,KAAK,QAAQ,UAC5B,kBAAkB,QAAQ,WAAW,MAAM,EAAE,CAC/C,EACF;CACF;CAEA,MAAa,IAAI,UAAwC;EACvD,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YAAY,YAAY,mBAAmB,QAAQ,GAAG,GACvE,iBACF;EAEA,OAAO,kBAAkB,SAAS,QAAQ,QAAQ;CACpD;CAEA,MAAa,OACX,MAC8C;EAC9C,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YAAY,YAAY;GAAE,QAAQ;GAAQ;EAAK,CAAC,GACjE,wBACF;EAEA,OAAO,EAAE,WAAW,gBAAgB,SAAS,WAAW,WAAW,EAAE;CACvE;CAEA,MAAa,OACX,UACA,MACe;EACf,OAAO,KAAK,MAAM,YAAY,YAAY,mBAAmB,QAAQ,KAAK;GACxE,QAAQ;GACR;EACF,CAAC;CACH;;CAGA,MAAa,MACX,MAC6C;EAC7C,MAAM,WAAW,gBACf,MAAM,KAAK,MAAM,YAAY,kBAAkB;GAAE,QAAQ;GAAQ;EAAK,CAAC,GACvE,uBACF;EAEA,OAAO,EAAE,OAAO,iBAAiB,SAAS,OAAO,OAAO,EAAE;CAC5D;CAEA,MAAa,OAAO,UAAiC;EACnD,OAAO,KAAK,MAAM,YAAY,YAAY,mBAAmB,QAAQ,KAAK,EACxE,QAAQ,SACV,CAAC;CACH;AACF"}
|
|
@@ -41,9 +41,13 @@ declare class CloudMessagePersistence {
|
|
|
41
41
|
* Returns undefined if not persisted.
|
|
42
42
|
*/
|
|
43
43
|
getRemoteId(messageId: string): Promise<string | undefined>;
|
|
44
|
+
getResolvedRemoteId(messageId: string): string | undefined;
|
|
44
45
|
/**
|
|
45
46
|
* Load messages from the cloud and populate the ID mapping.
|
|
46
47
|
*
|
|
48
|
+
* The list endpoint caps a response at 200 rows, so pages are followed by
|
|
49
|
+
* message ID cursor until a short page and concatenated in server order.
|
|
50
|
+
*
|
|
47
51
|
* The ID mapping is populated so that `isPersisted()` returns true for
|
|
48
52
|
* loaded messages, preventing re-persistence of already-stored messages.
|
|
49
53
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudMessagePersistence.d.ts","names":[],"sources":["../src/CloudMessagePersistence.ts"],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"CloudMessagePersistence.d.ts","names":[],"sources":["../src/CloudMessagePersistence.ts"],"mappings":";;;;;;;;;;;;;;;cAiBa;UACH;UACA;EAEI,YAAA,OAAO;EACP,YAAA,gBAAgB;;;;;;;;;;EActB,OACJ,kBACA,mBACA,yBACA,gBACA,SAAS,qBACR;;;;EAsCG,OACJ,kBACA,mBACA,iBACA,SAAS,qBACR;;;;EAeH,YAAY;;;;;EAQN,YAAY,oBAAoB;EAMtC,oBAAoB;;;;;;;;;;;;;;EAkBd,KAAK,kBAAkB,kBAAe,QAAA;;;;EAoC5C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
//#region src/CloudMessagePersistence.ts
|
|
2
|
+
const CLOUD_MESSAGE_PAGE_SIZE = 200;
|
|
2
3
|
/**
|
|
3
4
|
* Shared persistence logic for cloud message storage.
|
|
4
5
|
*
|
|
@@ -11,7 +12,7 @@
|
|
|
11
12
|
* to get its remote ID before creating B.
|
|
12
13
|
*/
|
|
13
14
|
var CloudMessagePersistence = class {
|
|
14
|
-
idMapping =
|
|
15
|
+
idMapping = /* @__PURE__ */ new Map();
|
|
15
16
|
getCloud;
|
|
16
17
|
constructor(cloud) {
|
|
17
18
|
this.getCloud = typeof cloud === "function" ? cloud : () => cloud;
|
|
@@ -27,13 +28,14 @@ var CloudMessagePersistence = class {
|
|
|
27
28
|
*/
|
|
28
29
|
async append(threadId, messageId, parentId, format, content) {
|
|
29
30
|
const cloud = this.getCloud();
|
|
30
|
-
const existing = this.idMapping
|
|
31
|
+
const existing = this.idMapping.get(messageId);
|
|
31
32
|
if (existing instanceof Promise) {
|
|
32
33
|
await existing;
|
|
33
34
|
return;
|
|
34
35
|
}
|
|
35
36
|
const task = (async () => {
|
|
36
|
-
const
|
|
37
|
+
const parentEntry = parentId ? this.idMapping.get(parentId) : void 0;
|
|
38
|
+
const resolvedParentId = parentId ? await parentEntry ?? parentId : null;
|
|
37
39
|
const { message_id } = await cloud.threads.messages.create(threadId, {
|
|
38
40
|
parent_id: resolvedParentId,
|
|
39
41
|
format,
|
|
@@ -41,12 +43,12 @@ var CloudMessagePersistence = class {
|
|
|
41
43
|
});
|
|
42
44
|
return message_id;
|
|
43
45
|
})();
|
|
44
|
-
this.idMapping
|
|
46
|
+
this.idMapping.set(messageId, task);
|
|
45
47
|
try {
|
|
46
48
|
const remoteId = await task;
|
|
47
|
-
if (this.idMapping
|
|
49
|
+
if (this.idMapping.get(messageId) === task) this.idMapping.set(messageId, remoteId);
|
|
48
50
|
} catch (err) {
|
|
49
|
-
if (this.idMapping
|
|
51
|
+
if (this.idMapping.get(messageId) === task) this.idMapping.delete(messageId);
|
|
50
52
|
throw err;
|
|
51
53
|
}
|
|
52
54
|
}
|
|
@@ -66,20 +68,27 @@ var CloudMessagePersistence = class {
|
|
|
66
68
|
* Check if a message has been persisted (or is currently being persisted).
|
|
67
69
|
*/
|
|
68
70
|
isPersisted(messageId) {
|
|
69
|
-
return
|
|
71
|
+
return this.idMapping.has(messageId);
|
|
70
72
|
}
|
|
71
73
|
/**
|
|
72
74
|
* Get the remote ID for a local message ID (resolved).
|
|
73
75
|
* Returns undefined if not persisted.
|
|
74
76
|
*/
|
|
75
77
|
async getRemoteId(messageId) {
|
|
76
|
-
const entry = this.idMapping
|
|
78
|
+
const entry = this.idMapping.get(messageId);
|
|
77
79
|
if (!entry) return void 0;
|
|
78
80
|
return entry;
|
|
79
81
|
}
|
|
82
|
+
getResolvedRemoteId(messageId) {
|
|
83
|
+
const entry = this.idMapping.get(messageId);
|
|
84
|
+
return typeof entry === "string" ? entry : void 0;
|
|
85
|
+
}
|
|
80
86
|
/**
|
|
81
87
|
* Load messages from the cloud and populate the ID mapping.
|
|
82
88
|
*
|
|
89
|
+
* The list endpoint caps a response at 200 rows, so pages are followed by
|
|
90
|
+
* message ID cursor until a short page and concatenated in server order.
|
|
91
|
+
*
|
|
83
92
|
* The ID mapping is populated so that `isPersisted()` returns true for
|
|
84
93
|
* loaded messages, preventing re-persistence of already-stored messages.
|
|
85
94
|
*
|
|
@@ -88,15 +97,33 @@ var CloudMessagePersistence = class {
|
|
|
88
97
|
* @returns Array of cloud messages
|
|
89
98
|
*/
|
|
90
99
|
async load(threadId, format) {
|
|
91
|
-
const
|
|
92
|
-
|
|
100
|
+
const cloud = this.getCloud();
|
|
101
|
+
const messages = [];
|
|
102
|
+
const seen = /* @__PURE__ */ new Set();
|
|
103
|
+
let after;
|
|
104
|
+
while (true) {
|
|
105
|
+
const page = await cloud.threads.messages.list(threadId, {
|
|
106
|
+
...format ? { format } : void 0,
|
|
107
|
+
limit: CLOUD_MESSAGE_PAGE_SIZE,
|
|
108
|
+
...after ? { after } : void 0
|
|
109
|
+
});
|
|
110
|
+
const last = page.messages.at(-1);
|
|
111
|
+
if (!last) break;
|
|
112
|
+
const fresh = page.messages.filter((m) => !seen.has(m.id));
|
|
113
|
+
if (fresh.length === 0) break;
|
|
114
|
+
for (const m of fresh) seen.add(m.id);
|
|
115
|
+
messages.push(...fresh);
|
|
116
|
+
if (page.messages.length < CLOUD_MESSAGE_PAGE_SIZE) break;
|
|
117
|
+
after = last.id;
|
|
118
|
+
}
|
|
119
|
+
for (const m of messages) this.idMapping.set(m.id, m.id);
|
|
93
120
|
return messages;
|
|
94
121
|
}
|
|
95
122
|
/**
|
|
96
123
|
* Reset the ID mapping (call when switching threads).
|
|
97
124
|
*/
|
|
98
125
|
reset() {
|
|
99
|
-
this.idMapping
|
|
126
|
+
this.idMapping.clear();
|
|
100
127
|
}
|
|
101
128
|
};
|
|
102
129
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudMessagePersistence.js","names":[],"sources":["../src/CloudMessagePersistence.ts"],"sourcesContent":["import type { ReadonlyJSONObject } from \"assistant-stream/utils\";\nimport type { AssistantCloud } from \"./AssistantCloud\";\n\n/**\n * Shared persistence logic for cloud message storage.\n *\n * Handles ID mapping (local → remote) and parent_id chaining for both:\n * - AssistantCloudThreadHistoryAdapter (assistant-ui runtime)\n * - useCloudChat (standalone AI SDK hook)\n *\n * The promise-based ID resolution handles concurrent appends — if message B's\n * parent is message A, and A is still being created, we await A's promise\n * to get its remote ID before creating B.\n */\nexport class CloudMessagePersistence {\n private idMapping
|
|
1
|
+
{"version":3,"file":"CloudMessagePersistence.js","names":[],"sources":["../src/CloudMessagePersistence.ts"],"sourcesContent":["import type { ReadonlyJSONObject } from \"assistant-stream/utils\";\nimport type { AssistantCloud } from \"./AssistantCloud\";\nimport type { CloudMessage } from \"./AssistantCloudThreadMessages\";\n\nconst CLOUD_MESSAGE_PAGE_SIZE = 200;\n\n/**\n * Shared persistence logic for cloud message storage.\n *\n * Handles ID mapping (local → remote) and parent_id chaining for both:\n * - AssistantCloudThreadHistoryAdapter (assistant-ui runtime)\n * - useCloudChat (standalone AI SDK hook)\n *\n * The promise-based ID resolution handles concurrent appends — if message B's\n * parent is message A, and A is still being created, we await A's promise\n * to get its remote ID before creating B.\n */\nexport class CloudMessagePersistence {\n private idMapping = new Map<string, string | Promise<string>>();\n private getCloud: () => AssistantCloud;\n\n constructor(cloud: AssistantCloud);\n constructor(getCloud: () => AssistantCloud);\n constructor(cloud: AssistantCloud | (() => AssistantCloud)) {\n this.getCloud = typeof cloud === \"function\" ? cloud : () => cloud;\n }\n\n /**\n * Persist a message to the cloud.\n *\n * @param threadId - Remote thread ID\n * @param messageId - Local message ID (used for tracking)\n * @param parentId - Local parent message ID (or null for first message)\n * @param format - Message format (e.g., \"aui/v0\", \"ai-sdk/v6\")\n * @param content - Message content (format-specific)\n */\n async append(\n threadId: string,\n messageId: string,\n parentId: string | null,\n format: string,\n content: ReadonlyJSONObject,\n ): Promise<void> {\n const cloud = this.getCloud();\n const existing = this.idMapping.get(messageId);\n if (existing instanceof Promise) {\n await existing;\n return;\n }\n\n const task = (async () => {\n const parentEntry = parentId ? this.idMapping.get(parentId) : undefined;\n const resolvedParentId = parentId\n ? ((await parentEntry) ?? parentId)\n : null;\n const { message_id } = await cloud.threads.messages.create(threadId, {\n parent_id: resolvedParentId,\n format,\n content,\n });\n return message_id;\n })();\n\n this.idMapping.set(messageId, task);\n try {\n const remoteId = await task;\n if (this.idMapping.get(messageId) === task) {\n this.idMapping.set(messageId, remoteId);\n }\n } catch (err) {\n if (this.idMapping.get(messageId) === task) {\n this.idMapping.delete(messageId);\n }\n throw err;\n }\n }\n\n /**\n * Update an already-persisted message in the cloud.\n */\n async update(\n threadId: string,\n messageId: string,\n _format: string,\n content: ReadonlyJSONObject,\n ): Promise<void> {\n const cloud = this.getCloud();\n const remoteId = await this.getRemoteId(messageId);\n if (!remoteId) {\n console.warn(\n `Skipping update for message ${messageId}: no remote id is mapped.`,\n );\n return;\n }\n await cloud.threads.messages.update(threadId, remoteId, { content });\n }\n\n /**\n * Check if a message has been persisted (or is currently being persisted).\n */\n isPersisted(messageId: string): boolean {\n return this.idMapping.has(messageId);\n }\n\n /**\n * Get the remote ID for a local message ID (resolved).\n * Returns undefined if not persisted.\n */\n async getRemoteId(messageId: string): Promise<string | undefined> {\n const entry = this.idMapping.get(messageId);\n if (!entry) return undefined;\n return entry;\n }\n\n getResolvedRemoteId(messageId: string): string | undefined {\n const entry = this.idMapping.get(messageId);\n return typeof entry === \"string\" ? entry : undefined;\n }\n\n /**\n * Load messages from the cloud and populate the ID mapping.\n *\n * The list endpoint caps a response at 200 rows, so pages are followed by\n * message ID cursor until a short page and concatenated in server order.\n *\n * The ID mapping is populated so that `isPersisted()` returns true for\n * loaded messages, preventing re-persistence of already-stored messages.\n *\n * @param threadId - Remote thread ID\n * @param format - Optional format filter\n * @returns Array of cloud messages\n */\n async load(threadId: string, format?: string) {\n const cloud = this.getCloud();\n const messages: CloudMessage[] = [];\n const seen = new Set<string>();\n let after: string | undefined;\n\n while (true) {\n const page = await cloud.threads.messages.list(threadId, {\n ...(format ? { format } : undefined),\n limit: CLOUD_MESSAGE_PAGE_SIZE,\n ...(after ? { after } : undefined),\n });\n const last = page.messages.at(-1);\n if (!last) break;\n\n // A cursor the server cannot resolve drops the keyset filter and replays\n // an earlier page, so already-seen rows end the walk instead of repeating.\n const fresh = page.messages.filter((m) => !seen.has(m.id));\n if (fresh.length === 0) break;\n for (const m of fresh) seen.add(m.id);\n\n messages.push(...fresh);\n if (page.messages.length < CLOUD_MESSAGE_PAGE_SIZE) break;\n after = last.id;\n }\n\n // Populate ID mapping so isPersisted() recognizes loaded messages\n for (const m of messages) {\n this.idMapping.set(m.id, m.id);\n }\n return messages;\n }\n\n /**\n * Reset the ID mapping (call when switching threads).\n */\n reset() {\n this.idMapping.clear();\n }\n}\n"],"mappings":";AAIA,MAAM,0BAA0B;;;;;;;;;;;;AAahC,IAAa,0BAAb,MAAqC;CACnC,4BAAoB,IAAI,IAAsC;CAC9D;CAIA,YAAY,OAAgD;EAC1D,KAAK,WAAW,OAAO,UAAU,aAAa,cAAc;CAC9D;;;;;;;;;;CAWA,MAAM,OACJ,UACA,WACA,UACA,QACA,SACe;EACf,MAAM,QAAQ,KAAK,SAAS;EAC5B,MAAM,WAAW,KAAK,UAAU,IAAI,SAAS;EAC7C,IAAI,oBAAoB,SAAS;GAC/B,MAAM;GACN;EACF;EAEA,MAAM,QAAQ,YAAY;GACxB,MAAM,cAAc,WAAW,KAAK,UAAU,IAAI,QAAQ,IAAI,KAAA;GAC9D,MAAM,mBAAmB,WACnB,MAAM,eAAgB,WACxB;GACJ,MAAM,EAAE,eAAe,MAAM,MAAM,QAAQ,SAAS,OAAO,UAAU;IACnE,WAAW;IACX;IACA;GACF,CAAC;GACD,OAAO;EACT,EAAA,CAAG;EAEH,KAAK,UAAU,IAAI,WAAW,IAAI;EAClC,IAAI;GACF,MAAM,WAAW,MAAM;GACvB,IAAI,KAAK,UAAU,IAAI,SAAS,MAAM,MACpC,KAAK,UAAU,IAAI,WAAW,QAAQ;EAE1C,SAAS,KAAK;GACZ,IAAI,KAAK,UAAU,IAAI,SAAS,MAAM,MACpC,KAAK,UAAU,OAAO,SAAS;GAEjC,MAAM;EACR;CACF;;;;CAKA,MAAM,OACJ,UACA,WACA,SACA,SACe;EACf,MAAM,QAAQ,KAAK,SAAS;EAC5B,MAAM,WAAW,MAAM,KAAK,YAAY,SAAS;EACjD,IAAI,CAAC,UAAU;GACb,QAAQ,KACN,+BAA+B,UAAU,0BAC3C;GACA;EACF;EACA,MAAM,MAAM,QAAQ,SAAS,OAAO,UAAU,UAAU,EAAE,QAAQ,CAAC;CACrE;;;;CAKA,YAAY,WAA4B;EACtC,OAAO,KAAK,UAAU,IAAI,SAAS;CACrC;;;;;CAMA,MAAM,YAAY,WAAgD;EAChE,MAAM,QAAQ,KAAK,UAAU,IAAI,SAAS;EAC1C,IAAI,CAAC,OAAO,OAAO,KAAA;EACnB,OAAO;CACT;CAEA,oBAAoB,WAAuC;EACzD,MAAM,QAAQ,KAAK,UAAU,IAAI,SAAS;EAC1C,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAA;CAC7C;;;;;;;;;;;;;;CAeA,MAAM,KAAK,UAAkB,QAAiB;EAC5C,MAAM,QAAQ,KAAK,SAAS;EAC5B,MAAM,WAA2B,CAAC;EAClC,MAAM,uBAAO,IAAI,IAAY;EAC7B,IAAI;EAEJ,OAAO,MAAM;GACX,MAAM,OAAO,MAAM,MAAM,QAAQ,SAAS,KAAK,UAAU;IACvD,GAAI,SAAS,EAAE,OAAO,IAAI,KAAA;IAC1B,OAAO;IACP,GAAI,QAAQ,EAAE,MAAM,IAAI,KAAA;GAC1B,CAAC;GACD,MAAM,OAAO,KAAK,SAAS,GAAG,EAAE;GAChC,IAAI,CAAC,MAAM;GAIX,MAAM,QAAQ,KAAK,SAAS,QAAQ,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;GACzD,IAAI,MAAM,WAAW,GAAG;GACxB,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE,EAAE;GAEpC,SAAS,KAAK,GAAG,KAAK;GACtB,IAAI,KAAK,SAAS,SAAS,yBAAyB;GACpD,QAAQ,KAAK;EACf;EAGA,KAAK,MAAM,KAAK,UACd,KAAK,UAAU,IAAI,EAAE,IAAI,EAAE,EAAE;EAE/B,OAAO;CACT;;;;CAKA,QAAQ;EACN,KAAK,UAAU,MAAM;CACvB;AACF"}
|
package/dist/cloudResponse.d.ts
CHANGED
|
@@ -6,11 +6,14 @@ declare class CloudResponseError extends Error {
|
|
|
6
6
|
declare const readCloudRecord: (value: unknown, field: string) => Record<string, unknown>;
|
|
7
7
|
declare const readCloudArray: (value: unknown, field: string) => unknown[];
|
|
8
8
|
declare const readCloudString: (value: unknown, field: string) => string;
|
|
9
|
+
declare const readCloudNumber: (value: unknown, field: string) => number;
|
|
10
|
+
declare const readCloudNullableNumber: (value: unknown, field: string) => number | null;
|
|
11
|
+
declare const readCloudEnum: <const T extends readonly string[]>(value: unknown, field: string, allowed: T) => T[number];
|
|
9
12
|
declare const readCloudNullableString: (value: unknown, field: string) => string | null;
|
|
10
13
|
declare const readCloudBoolean: (value: unknown, field: string) => boolean;
|
|
11
14
|
declare const readCloudInteger: (value: unknown, field: string) => number;
|
|
12
15
|
declare const readCloudTimestamp: (value: unknown, field: string) => Date;
|
|
13
16
|
declare const readCloudJSONObject: (value: unknown, field: string) => ReadonlyJSONObject;
|
|
14
17
|
//#endregion
|
|
15
|
-
export { CloudResponseError, readCloudArray, readCloudBoolean, readCloudInteger, readCloudJSONObject, readCloudNullableString, readCloudRecord, readCloudString, readCloudTimestamp };
|
|
18
|
+
export { CloudResponseError, readCloudArray, readCloudBoolean, readCloudEnum, readCloudInteger, readCloudJSONObject, readCloudNullableNumber, readCloudNullableString, readCloudNumber, readCloudRecord, readCloudString, readCloudTimestamp };
|
|
16
19
|
//# sourceMappingURL=cloudResponse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudResponse.d.ts","names":[],"sources":["../src/cloudResponse.ts"],"mappings":";;cAEa,2BAA2B;EAC1B,YAAA;;cAWD,kBACX,gBACA,kBACC;cAOU,iBAAkB,gBAAgB;cAKlC,kBAAmB,gBAAgB;cAKnC,0BACX,gBACA;cAMW,mBAAoB,gBAAgB;cAOpC,mBAAoB,gBAAgB;cAKpC,qBAAsB,gBAAgB,kBAAgB;cActD,sBACX,gBACA,kBACC"}
|
|
1
|
+
{"version":3,"file":"cloudResponse.d.ts","names":[],"sources":["../src/cloudResponse.ts"],"mappings":";;cAEa,2BAA2B;EAC1B,YAAA;;cAWD,kBACX,gBACA,kBACC;cAOU,iBAAkB,gBAAgB;cAKlC,kBAAmB,gBAAgB;cAKnC,kBAAmB,gBAAgB;cAOnC,0BACX,gBACA;cAMW,sBAAuB,6BAClC,gBACA,eACA,SAAS,MACR;cAWU,0BACX,gBACA;cAMW,mBAAoB,gBAAgB;cAOpC,mBAAoB,gBAAgB;cAKpC,qBAAsB,gBAAgB,kBAAgB;cActD,sBACX,gBACA,kBACC"}
|
package/dist/cloudResponse.js
CHANGED
|
@@ -18,6 +18,19 @@ const readCloudString = (value, field) => {
|
|
|
18
18
|
if (typeof value !== "string") throw invalidCloudResponse(field, "a string");
|
|
19
19
|
return value;
|
|
20
20
|
};
|
|
21
|
+
const readCloudNumber = (value, field) => {
|
|
22
|
+
if (typeof value !== "number" || !Number.isFinite(value)) throw invalidCloudResponse(field, "a number");
|
|
23
|
+
return value;
|
|
24
|
+
};
|
|
25
|
+
const readCloudNullableNumber = (value, field) => {
|
|
26
|
+
if (value === null) return null;
|
|
27
|
+
return readCloudNumber(value, field);
|
|
28
|
+
};
|
|
29
|
+
const readCloudEnum = (value, field, allowed) => {
|
|
30
|
+
const text = readCloudString(value, field);
|
|
31
|
+
if (!allowed.includes(text)) throw invalidCloudResponse(field, `one of ${allowed.map((entry) => `"${entry}"`).join(", ")}`);
|
|
32
|
+
return text;
|
|
33
|
+
};
|
|
21
34
|
const readCloudNullableString = (value, field) => {
|
|
22
35
|
if (value === null) return null;
|
|
23
36
|
return readCloudString(value, field);
|
|
@@ -38,6 +51,6 @@ const readCloudTimestamp = (value, field) => {
|
|
|
38
51
|
};
|
|
39
52
|
const readCloudJSONObject = (value, field) => readCloudRecord(value, field);
|
|
40
53
|
//#endregion
|
|
41
|
-
export { CloudResponseError, readCloudArray, readCloudBoolean, readCloudInteger, readCloudJSONObject, readCloudNullableString, readCloudRecord, readCloudString, readCloudTimestamp };
|
|
54
|
+
export { CloudResponseError, readCloudArray, readCloudBoolean, readCloudEnum, readCloudInteger, readCloudJSONObject, readCloudNullableNumber, readCloudNullableString, readCloudNumber, readCloudRecord, readCloudString, readCloudTimestamp };
|
|
42
55
|
|
|
43
56
|
//# sourceMappingURL=cloudResponse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudResponse.js","names":[],"sources":["../src/cloudResponse.ts"],"sourcesContent":["import type { ReadonlyJSONObject } from \"assistant-stream/utils\";\n\nexport class CloudResponseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CloudResponseError\";\n }\n}\n\nconst invalidCloudResponse = (field: string, expected: string) =>\n new CloudResponseError(\n `Invalid Assistant Cloud response for \"${field}\": expected ${expected}`,\n );\n\nexport const readCloudRecord = (\n value: unknown,\n field: string,\n): Record<string, unknown> => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw invalidCloudResponse(field, \"an object\");\n }\n return value as Record<string, unknown>;\n};\n\nexport const readCloudArray = (value: unknown, field: string): unknown[] => {\n if (!Array.isArray(value)) throw invalidCloudResponse(field, \"an array\");\n return value;\n};\n\nexport const readCloudString = (value: unknown, field: string): string => {\n if (typeof value !== \"string\") throw invalidCloudResponse(field, \"a string\");\n return value;\n};\n\nexport const readCloudNullableString = (\n value: unknown,\n field: string,\n): string | null => {\n if (value === null) return null;\n return readCloudString(value, field);\n};\n\nexport const readCloudBoolean = (value: unknown, field: string): boolean => {\n if (typeof value !== \"boolean\") {\n throw invalidCloudResponse(field, \"a boolean\");\n }\n return value;\n};\n\nexport const readCloudInteger = (value: unknown, field: string): number => {\n if (!Number.isInteger(value)) throw invalidCloudResponse(field, \"an integer\");\n return value as number;\n};\n\nexport const readCloudTimestamp = (value: unknown, field: string): Date => {\n if (typeof value !== \"string\") {\n throw invalidCloudResponse(field, \"a canonical ISO timestamp\");\n }\n\n const date = new Date(value);\n // The round trip pins the backend DTO's Date#toISOString() wire contract.\n if (Number.isNaN(date.getTime()) || date.toISOString() !== value) {\n throw invalidCloudResponse(field, \"a canonical ISO timestamp\");\n }\n\n return date;\n};\n\nexport const readCloudJSONObject = (\n value: unknown,\n field: string,\n): ReadonlyJSONObject => readCloudRecord(value, field) as ReadonlyJSONObject;\n"],"mappings":";AAEA,IAAa,qBAAb,cAAwC,MAAM;CAC5C,YAAY,SAAiB;EAC3B,MAAM,OAAO;EACb,KAAK,OAAO;CACd;AACF;AAEA,MAAM,wBAAwB,OAAe,aAC3C,IAAI,mBACF,yCAAyC,MAAM,cAAc,UAC/D;AAEF,MAAa,mBACX,OACA,UAC4B;CAC5B,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,MAAM,qBAAqB,OAAO,WAAW;CAE/C,OAAO;AACT;AAEA,MAAa,kBAAkB,OAAgB,UAA6B;CAC1E,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG,MAAM,qBAAqB,OAAO,UAAU;CACvE,OAAO;AACT;AAEA,MAAa,mBAAmB,OAAgB,UAA0B;CACxE,IAAI,OAAO,UAAU,UAAU,MAAM,qBAAqB,OAAO,UAAU;CAC3E,OAAO;AACT;AAEA,MAAa,2BACX,OACA,UACkB;CAClB,IAAI,UAAU,MAAM,OAAO;CAC3B,OAAO,gBAAgB,OAAO,KAAK;AACrC;AAEA,MAAa,oBAAoB,OAAgB,UAA2B;CAC1E,IAAI,OAAO,UAAU,WACnB,MAAM,qBAAqB,OAAO,WAAW;CAE/C,OAAO;AACT;AAEA,MAAa,oBAAoB,OAAgB,UAA0B;CACzE,IAAI,CAAC,OAAO,UAAU,KAAK,GAAG,MAAM,qBAAqB,OAAO,YAAY;CAC5E,OAAO;AACT;AAEA,MAAa,sBAAsB,OAAgB,UAAwB;CACzE,IAAI,OAAO,UAAU,UACnB,MAAM,qBAAqB,OAAO,2BAA2B;CAG/D,MAAM,OAAO,IAAI,KAAK,KAAK;CAE3B,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,KAAK,KAAK,YAAY,MAAM,OACzD,MAAM,qBAAqB,OAAO,2BAA2B;CAG/D,OAAO;AACT;AAEA,MAAa,uBACX,OACA,UACuB,gBAAgB,OAAO,KAAK"}
|
|
1
|
+
{"version":3,"file":"cloudResponse.js","names":[],"sources":["../src/cloudResponse.ts"],"sourcesContent":["import type { ReadonlyJSONObject } from \"assistant-stream/utils\";\n\nexport class CloudResponseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CloudResponseError\";\n }\n}\n\nconst invalidCloudResponse = (field: string, expected: string) =>\n new CloudResponseError(\n `Invalid Assistant Cloud response for \"${field}\": expected ${expected}`,\n );\n\nexport const readCloudRecord = (\n value: unknown,\n field: string,\n): Record<string, unknown> => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw invalidCloudResponse(field, \"an object\");\n }\n return value as Record<string, unknown>;\n};\n\nexport const readCloudArray = (value: unknown, field: string): unknown[] => {\n if (!Array.isArray(value)) throw invalidCloudResponse(field, \"an array\");\n return value;\n};\n\nexport const readCloudString = (value: unknown, field: string): string => {\n if (typeof value !== \"string\") throw invalidCloudResponse(field, \"a string\");\n return value;\n};\n\nexport const readCloudNumber = (value: unknown, field: string): number => {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw invalidCloudResponse(field, \"a number\");\n }\n return value;\n};\n\nexport const readCloudNullableNumber = (\n value: unknown,\n field: string,\n): number | null => {\n if (value === null) return null;\n return readCloudNumber(value, field);\n};\n\nexport const readCloudEnum = <const T extends readonly string[]>(\n value: unknown,\n field: string,\n allowed: T,\n): T[number] => {\n const text = readCloudString(value, field);\n if (!allowed.includes(text)) {\n throw invalidCloudResponse(\n field,\n `one of ${allowed.map((entry) => `\"${entry}\"`).join(\", \")}`,\n );\n }\n return text;\n};\n\nexport const readCloudNullableString = (\n value: unknown,\n field: string,\n): string | null => {\n if (value === null) return null;\n return readCloudString(value, field);\n};\n\nexport const readCloudBoolean = (value: unknown, field: string): boolean => {\n if (typeof value !== \"boolean\") {\n throw invalidCloudResponse(field, \"a boolean\");\n }\n return value;\n};\n\nexport const readCloudInteger = (value: unknown, field: string): number => {\n if (!Number.isInteger(value)) throw invalidCloudResponse(field, \"an integer\");\n return value as number;\n};\n\nexport const readCloudTimestamp = (value: unknown, field: string): Date => {\n if (typeof value !== \"string\") {\n throw invalidCloudResponse(field, \"a canonical ISO timestamp\");\n }\n\n const date = new Date(value);\n // The round trip pins the backend DTO's Date#toISOString() wire contract.\n if (Number.isNaN(date.getTime()) || date.toISOString() !== value) {\n throw invalidCloudResponse(field, \"a canonical ISO timestamp\");\n }\n\n return date;\n};\n\nexport const readCloudJSONObject = (\n value: unknown,\n field: string,\n): ReadonlyJSONObject => readCloudRecord(value, field) as ReadonlyJSONObject;\n"],"mappings":";AAEA,IAAa,qBAAb,cAAwC,MAAM;CAC5C,YAAY,SAAiB;EAC3B,MAAM,OAAO;EACb,KAAK,OAAO;CACd;AACF;AAEA,MAAM,wBAAwB,OAAe,aAC3C,IAAI,mBACF,yCAAyC,MAAM,cAAc,UAC/D;AAEF,MAAa,mBACX,OACA,UAC4B;CAC5B,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,MAAM,qBAAqB,OAAO,WAAW;CAE/C,OAAO;AACT;AAEA,MAAa,kBAAkB,OAAgB,UAA6B;CAC1E,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG,MAAM,qBAAqB,OAAO,UAAU;CACvE,OAAO;AACT;AAEA,MAAa,mBAAmB,OAAgB,UAA0B;CACxE,IAAI,OAAO,UAAU,UAAU,MAAM,qBAAqB,OAAO,UAAU;CAC3E,OAAO;AACT;AAEA,MAAa,mBAAmB,OAAgB,UAA0B;CACxE,IAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,GACrD,MAAM,qBAAqB,OAAO,UAAU;CAE9C,OAAO;AACT;AAEA,MAAa,2BACX,OACA,UACkB;CAClB,IAAI,UAAU,MAAM,OAAO;CAC3B,OAAO,gBAAgB,OAAO,KAAK;AACrC;AAEA,MAAa,iBACX,OACA,OACA,YACc;CACd,MAAM,OAAO,gBAAgB,OAAO,KAAK;CACzC,IAAI,CAAC,QAAQ,SAAS,IAAI,GACxB,MAAM,qBACJ,OACA,UAAU,QAAQ,KAAK,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,GAC1D;CAEF,OAAO;AACT;AAEA,MAAa,2BACX,OACA,UACkB;CAClB,IAAI,UAAU,MAAM,OAAO;CAC3B,OAAO,gBAAgB,OAAO,KAAK;AACrC;AAEA,MAAa,oBAAoB,OAAgB,UAA2B;CAC1E,IAAI,OAAO,UAAU,WACnB,MAAM,qBAAqB,OAAO,WAAW;CAE/C,OAAO;AACT;AAEA,MAAa,oBAAoB,OAAgB,UAA0B;CACzE,IAAI,CAAC,OAAO,UAAU,KAAK,GAAG,MAAM,qBAAqB,OAAO,YAAY;CAC5E,OAAO;AACT;AAEA,MAAa,sBAAsB,OAAgB,UAAwB;CACzE,IAAI,OAAO,UAAU,UACnB,MAAM,qBAAqB,OAAO,2BAA2B;CAG/D,MAAM,OAAO,IAAI,KAAK,KAAK;CAE3B,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,KAAK,KAAK,YAAY,MAAM,OACzD,MAAM,qBAAqB,OAAO,2BAA2B;CAG/D,OAAO;AACT;AAEA,MAAa,uBACX,OACA,UACuB,gBAAgB,OAAO,KAAK"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import { readAnonymousRefreshToken } from "./AssistantCloudAuthStrategy.js";
|
|
1
2
|
import { McpSamplingHandler, SamplingCallData, createSamplingCollector, wrapSamplingHandler } from "./instrumentMcpSampling.js";
|
|
2
|
-
import { AssistantCloudRunReportToolCall, RunTelemetryToolCallInit, RunTelemetryUsage, RunTelemetryUsageInit, createRunTelemetryToolCall, normalizeRunTelemetryUsage, truncateRunTelemetryText } from "./runTelemetry.js";
|
|
3
|
+
import { AssistantCloudRunReportToolCall, RunReportInit, RunReportOutcome, RunReportStepInit, RunTelemetryToolCallInit, RunTelemetryUsage, RunTelemetryUsageInit, createRunReport, createRunTelemetryToolCall, deriveRunOutcome, describeRunError, extractRunTelemetryModelId, normalizeRunTelemetryUsage, truncateRunTelemetryText } from "./runTelemetry.js";
|
|
3
4
|
import { AssistantCloudRunReport } from "./AssistantCloudRuns.js";
|
|
4
5
|
import { AssistantCloudTelemetryConfig, CloudAPIError } from "./AssistantCloudAPI.js";
|
|
5
|
-
import { CloudMessage } from "./AssistantCloudThreadMessages.js";
|
|
6
|
+
import { AssistantCloudThreadMessageFeedbackBody, AssistantCloudThreadMessageFeedbackResponse, CloudMessage } from "./AssistantCloudThreadMessages.js";
|
|
7
|
+
import { GeneratePresignedDownloadUrlResponse } from "./AssistantCloudFiles.js";
|
|
8
|
+
import { AssistantCloudEvent, AssistantCloudEventKind, AssistantCloudEvents } from "./AssistantCloudEvents.js";
|
|
9
|
+
import { AssistantCloudScoreBody, AssistantCloudScoreResponse, AssistantCloudScores } from "./AssistantCloudScores.js";
|
|
6
10
|
import { AssistantCloud } from "./AssistantCloud.js";
|
|
7
11
|
import { CloudMessagePersistence } from "./CloudMessagePersistence.js";
|
|
8
12
|
import { MessageFormatAdapter, createFormattedPersistence } from "./FormattedCloudPersistence.js";
|
|
9
13
|
import { CloudResponseError } from "./cloudResponse.js";
|
|
10
14
|
import { generateThreadTitle } from "./generateThreadTitle.js";
|
|
11
|
-
export { AssistantCloud, type AssistantCloudRunReport, type AssistantCloudRunReportToolCall, type AssistantCloudTelemetryConfig, CloudAPIError, type CloudMessage, CloudMessagePersistence, CloudResponseError, type McpSamplingHandler, type MessageFormatAdapter, type RunTelemetryToolCallInit, type RunTelemetryUsage, type RunTelemetryUsageInit, type SamplingCallData, createFormattedPersistence, createRunTelemetryToolCall, createSamplingCollector, generateThreadTitle, normalizeRunTelemetryUsage, truncateRunTelemetryText, wrapSamplingHandler };
|
|
15
|
+
export { AssistantCloud, type AssistantCloudEvent, type AssistantCloudEventKind, AssistantCloudEvents, type AssistantCloudRunReport, type AssistantCloudRunReportToolCall, type AssistantCloudScoreBody, type AssistantCloudScoreResponse, AssistantCloudScores, type AssistantCloudTelemetryConfig, type AssistantCloudThreadMessageFeedbackBody, type AssistantCloudThreadMessageFeedbackResponse, CloudAPIError, type CloudMessage, CloudMessagePersistence, CloudResponseError, type GeneratePresignedDownloadUrlResponse, type McpSamplingHandler, type MessageFormatAdapter, type RunReportInit, type RunReportOutcome, type RunReportStepInit, type RunTelemetryToolCallInit, type RunTelemetryUsage, type RunTelemetryUsageInit, type SamplingCallData, createFormattedPersistence, createRunReport, createRunTelemetryToolCall, createSamplingCollector, deriveRunOutcome, describeRunError, extractRunTelemetryModelId, generateThreadTitle, normalizeRunTelemetryUsage, readAnonymousRefreshToken, truncateRunTelemetryText, wrapSamplingHandler };
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { CloudResponseError } from "./cloudResponse.js";
|
|
2
|
+
import { readAnonymousRefreshToken } from "./AssistantCloudAuthStrategy.js";
|
|
2
3
|
import { CloudAPIError } from "./AssistantCloudAPI.js";
|
|
4
|
+
import { AssistantCloudEvents } from "./AssistantCloudEvents.js";
|
|
5
|
+
import { AssistantCloudScores } from "./AssistantCloudScores.js";
|
|
3
6
|
import { AssistantCloud } from "./AssistantCloud.js";
|
|
4
7
|
import { CloudMessagePersistence } from "./CloudMessagePersistence.js";
|
|
5
8
|
import { createFormattedPersistence } from "./FormattedCloudPersistence.js";
|
|
6
9
|
import { generateThreadTitle } from "./generateThreadTitle.js";
|
|
7
|
-
import { createRunTelemetryToolCall, normalizeRunTelemetryUsage, truncateRunTelemetryText } from "./runTelemetry.js";
|
|
10
|
+
import { createRunReport, createRunTelemetryToolCall, deriveRunOutcome, describeRunError, extractRunTelemetryModelId, normalizeRunTelemetryUsage, truncateRunTelemetryText } from "./runTelemetry.js";
|
|
8
11
|
import { createSamplingCollector, wrapSamplingHandler } from "./instrumentMcpSampling.js";
|
|
9
|
-
export { AssistantCloud, CloudAPIError, CloudMessagePersistence, CloudResponseError, createFormattedPersistence, createRunTelemetryToolCall, createSamplingCollector, generateThreadTitle, normalizeRunTelemetryUsage, truncateRunTelemetryText, wrapSamplingHandler };
|
|
12
|
+
export { AssistantCloud, AssistantCloudEvents, AssistantCloudScores, CloudAPIError, CloudMessagePersistence, CloudResponseError, createFormattedPersistence, createRunReport, createRunTelemetryToolCall, createSamplingCollector, deriveRunOutcome, describeRunError, extractRunTelemetryModelId, generateThreadTitle, normalizeRunTelemetryUsage, readAnonymousRefreshToken, truncateRunTelemetryText, wrapSamplingHandler };
|