assistant-cloud 0.1.42 → 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 +79 -18
- 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 +53 -18
- 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 +79 -9
- package/dist/runTelemetry.d.ts.map +1 -1
- package/dist/runTelemetry.js +152 -6
- 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 +153 -46
- 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 +65 -29
- package/src/cloudResponse.test.ts +34 -1
- package/src/cloudResponse.ts +30 -0
- package/src/index.ts +24 -1
- package/src/runTelemetry.test.ts +366 -0
- package/src/runTelemetry.ts +271 -16
- 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 +354 -11
- package/src/tests/CloudMessagePersistence.test.ts +208 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
//#region src/AssistantCloudEvents.ts
|
|
2
|
+
const FLUSH_SIZE = 20;
|
|
3
|
+
const MAX_BATCH_SIZE = 50;
|
|
4
|
+
const FLUSH_DELAY_MS = 2e3;
|
|
5
|
+
var AssistantCloudEvents = class {
|
|
6
|
+
buffer = [];
|
|
7
|
+
timer;
|
|
8
|
+
flushing;
|
|
9
|
+
cloud;
|
|
10
|
+
isEnabled;
|
|
11
|
+
listening = false;
|
|
12
|
+
constructor(cloud, isEnabled) {
|
|
13
|
+
this.cloud = cloud;
|
|
14
|
+
this.isEnabled = isEnabled;
|
|
15
|
+
}
|
|
16
|
+
track(event) {
|
|
17
|
+
if (!this.isEnabled()) return;
|
|
18
|
+
this.listen();
|
|
19
|
+
this.buffer.push(normalizeEvent(event));
|
|
20
|
+
if (this.buffer.length >= FLUSH_SIZE) {
|
|
21
|
+
this.flush();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this.scheduleFlush();
|
|
25
|
+
}
|
|
26
|
+
listen() {
|
|
27
|
+
if (this.listening || typeof window === "undefined" || typeof document === "undefined") return;
|
|
28
|
+
this.listening = true;
|
|
29
|
+
window.addEventListener("pagehide", this.flush);
|
|
30
|
+
document.addEventListener("visibilitychange", this.onVisibilityChange);
|
|
31
|
+
}
|
|
32
|
+
unlisten() {
|
|
33
|
+
if (!this.listening) return;
|
|
34
|
+
this.listening = false;
|
|
35
|
+
window.removeEventListener("pagehide", this.flush);
|
|
36
|
+
document.removeEventListener("visibilitychange", this.onVisibilityChange);
|
|
37
|
+
}
|
|
38
|
+
dispose() {
|
|
39
|
+
this.unlisten();
|
|
40
|
+
this.clearFlushTimer();
|
|
41
|
+
this.flush();
|
|
42
|
+
}
|
|
43
|
+
onVisibilityChange = () => {
|
|
44
|
+
if (document.visibilityState === "hidden") this.flush();
|
|
45
|
+
};
|
|
46
|
+
flush = async () => {
|
|
47
|
+
if (!this.isEnabled()) {
|
|
48
|
+
this.buffer = [];
|
|
49
|
+
this.clearFlushTimer();
|
|
50
|
+
this.unlisten();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (this.flushing) return this.flushing;
|
|
54
|
+
this.clearFlushTimer();
|
|
55
|
+
const task = this.flushPending();
|
|
56
|
+
this.flushing = task;
|
|
57
|
+
task.then(() => {
|
|
58
|
+
if (this.flushing !== task) return;
|
|
59
|
+
this.flushing = void 0;
|
|
60
|
+
if (this.buffer.length === 0) {
|
|
61
|
+
this.clearFlushTimer();
|
|
62
|
+
this.unlisten();
|
|
63
|
+
} else this.flush();
|
|
64
|
+
});
|
|
65
|
+
return task;
|
|
66
|
+
};
|
|
67
|
+
async flushPending() {
|
|
68
|
+
while (this.buffer.length > 0) {
|
|
69
|
+
const events = this.buffer.splice(0, MAX_BATCH_SIZE);
|
|
70
|
+
try {
|
|
71
|
+
await this.cloud.makeRequest("/events", {
|
|
72
|
+
method: "POST",
|
|
73
|
+
body: { events },
|
|
74
|
+
keepalive: true
|
|
75
|
+
});
|
|
76
|
+
} catch {}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
scheduleFlush() {
|
|
80
|
+
if (this.timer !== void 0) return;
|
|
81
|
+
this.timer = setTimeout(() => {
|
|
82
|
+
this.timer = void 0;
|
|
83
|
+
this.flush();
|
|
84
|
+
}, FLUSH_DELAY_MS);
|
|
85
|
+
}
|
|
86
|
+
clearFlushTimer() {
|
|
87
|
+
if (this.timer === void 0) return;
|
|
88
|
+
clearTimeout(this.timer);
|
|
89
|
+
this.timer = void 0;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const normalizeEvent = (event) => {
|
|
93
|
+
const props = normalizeProps(event.props);
|
|
94
|
+
return {
|
|
95
|
+
kind: event.kind,
|
|
96
|
+
...normalizeId(event.thread_id) ? { thread_id: event.thread_id } : {},
|
|
97
|
+
...normalizeId(event.message_id) ? { message_id: event.message_id } : {},
|
|
98
|
+
...normalizeId(event.run_id) ? { run_id: event.run_id } : {},
|
|
99
|
+
...isNonNegativeInteger(event.value) ? { value: event.value } : {},
|
|
100
|
+
...props ? { props } : {}
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
const normalizeId = (value) => value && value.length <= 48 ? value : void 0;
|
|
104
|
+
const isNonNegativeInteger = (value) => value !== void 0 && Number.isInteger(value) && value >= 0;
|
|
105
|
+
const normalizeProps = (props) => {
|
|
106
|
+
if (!props) return void 0;
|
|
107
|
+
const entries = Object.entries(props);
|
|
108
|
+
if (entries.some(([, value]) => typeof value === "string" && value.length > 256 || typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean")) return;
|
|
109
|
+
const value = Object.fromEntries(entries);
|
|
110
|
+
return new TextEncoder().encode(JSON.stringify(value)).byteLength <= 1024 ? value : void 0;
|
|
111
|
+
};
|
|
112
|
+
//#endregion
|
|
113
|
+
export { AssistantCloudEvents };
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=AssistantCloudEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssistantCloudEvents.js","names":[],"sources":["../src/AssistantCloudEvents.ts"],"sourcesContent":["import type { AssistantCloudAPI } from \"./AssistantCloudAPI\";\n\nexport type AssistantCloudEventKind =\n | \"message_sent\"\n | \"message_edited\"\n | \"run_stopped\"\n | \"message_regenerated\"\n | \"message_copied\"\n | \"branch_switched\"\n | \"suggestions_shown\"\n | \"suggestion_clicked\"\n | \"attachment_added\"\n | \"attachment_failed\"\n | \"thread_switched\"\n | \"tool_approved\"\n | \"tool_rejected\"\n | \"speech_started\"\n | \"voice_started\"\n | \"error_shown\";\n\nexport type AssistantCloudEvent = {\n kind: AssistantCloudEventKind;\n thread_id?: string | undefined;\n message_id?: string | undefined;\n run_id?: string | undefined;\n value?: number | undefined;\n props?: Readonly<Record<string, string | number | boolean>> | undefined;\n};\n\nconst FLUSH_SIZE = 20;\nconst MAX_BATCH_SIZE = 50;\nconst FLUSH_DELAY_MS = 2_000;\n\nexport class AssistantCloudEvents {\n private buffer: AssistantCloudEvent[] = [];\n private timer: ReturnType<typeof setTimeout> | undefined;\n private flushing: Promise<void> | undefined;\n\n private readonly cloud: AssistantCloudAPI;\n private readonly isEnabled: () => boolean;\n\n private listening = false;\n\n constructor(cloud: AssistantCloudAPI, isEnabled: () => boolean) {\n this.cloud = cloud;\n this.isEnabled = isEnabled;\n }\n\n public track(event: AssistantCloudEvent): void {\n if (!this.isEnabled()) return;\n\n this.listen();\n this.buffer.push(normalizeEvent(event));\n if (this.buffer.length >= FLUSH_SIZE) {\n void this.flush();\n return;\n }\n\n this.scheduleFlush();\n }\n\n private listen(): void {\n if (\n this.listening ||\n typeof window === \"undefined\" ||\n typeof document === \"undefined\"\n ) {\n return;\n }\n this.listening = true;\n window.addEventListener(\"pagehide\", this.flush);\n document.addEventListener(\"visibilitychange\", this.onVisibilityChange);\n }\n\n private unlisten(): void {\n if (!this.listening) return;\n this.listening = false;\n window.removeEventListener(\"pagehide\", this.flush);\n document.removeEventListener(\"visibilitychange\", this.onVisibilityChange);\n }\n\n public dispose(): void {\n this.unlisten();\n this.clearFlushTimer();\n void this.flush();\n }\n\n private onVisibilityChange = () => {\n if (document.visibilityState === \"hidden\") {\n void this.flush();\n }\n };\n\n private flush = async (): Promise<void> => {\n if (!this.isEnabled()) {\n this.buffer = [];\n this.clearFlushTimer();\n this.unlisten();\n return;\n }\n if (this.flushing) return this.flushing;\n\n this.clearFlushTimer();\n const task = this.flushPending();\n this.flushing = task;\n void task.then(() => {\n if (this.flushing !== task) return;\n this.flushing = undefined;\n if (this.buffer.length === 0) {\n this.clearFlushTimer();\n this.unlisten();\n } else {\n void this.flush();\n }\n });\n return task;\n };\n\n private async flushPending(): Promise<void> {\n while (this.buffer.length > 0) {\n const events = this.buffer.splice(0, MAX_BATCH_SIZE);\n try {\n await this.cloud.makeRequest(\"/events\", {\n method: \"POST\",\n body: { events },\n keepalive: true,\n });\n } catch {}\n }\n }\n\n private scheduleFlush() {\n if (this.timer !== undefined) return;\n this.timer = setTimeout(() => {\n this.timer = undefined;\n void this.flush();\n }, FLUSH_DELAY_MS);\n }\n\n private clearFlushTimer() {\n if (this.timer === undefined) return;\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n}\n\nconst normalizeEvent = (event: AssistantCloudEvent): AssistantCloudEvent => {\n const props = normalizeProps(event.props);\n return {\n kind: event.kind,\n ...(normalizeId(event.thread_id) ? { thread_id: event.thread_id } : {}),\n ...(normalizeId(event.message_id) ? { message_id: event.message_id } : {}),\n ...(normalizeId(event.run_id) ? { run_id: event.run_id } : {}),\n ...(isNonNegativeInteger(event.value) ? { value: event.value } : {}),\n ...(props ? { props } : {}),\n };\n};\n\nconst normalizeId = (value: string | undefined): string | undefined =>\n value && value.length <= 48 ? value : undefined;\n\nconst isNonNegativeInteger = (value: number | undefined): value is number =>\n value !== undefined && Number.isInteger(value) && value >= 0;\n\nconst normalizeProps = (\n props: AssistantCloudEvent[\"props\"],\n): AssistantCloudEvent[\"props\"] => {\n if (!props) return undefined;\n const entries = Object.entries(props);\n if (\n entries.some(\n ([, value]) =>\n (typeof value === \"string\" && value.length > 256) ||\n (typeof value !== \"string\" &&\n typeof value !== \"number\" &&\n typeof value !== \"boolean\"),\n )\n ) {\n return undefined;\n }\n const value = Object.fromEntries(entries);\n return new TextEncoder().encode(JSON.stringify(value)).byteLength <= 1024\n ? value\n : undefined;\n};\n"],"mappings":";AA6BA,MAAM,aAAa;AACnB,MAAM,iBAAiB;AACvB,MAAM,iBAAiB;AAEvB,IAAa,uBAAb,MAAkC;CAChC,SAAwC,CAAC;CACzC;CACA;CAEA;CACA;CAEA,YAAoB;CAEpB,YAAY,OAA0B,WAA0B;EAC9D,KAAK,QAAQ;EACb,KAAK,YAAY;CACnB;CAEA,MAAa,OAAkC;EAC7C,IAAI,CAAC,KAAK,UAAU,GAAG;EAEvB,KAAK,OAAO;EACZ,KAAK,OAAO,KAAK,eAAe,KAAK,CAAC;EACtC,IAAI,KAAK,OAAO,UAAU,YAAY;GACpC,KAAU,MAAM;GAChB;EACF;EAEA,KAAK,cAAc;CACrB;CAEA,SAAuB;EACrB,IACE,KAAK,aACL,OAAO,WAAW,eAClB,OAAO,aAAa,aAEpB;EAEF,KAAK,YAAY;EACjB,OAAO,iBAAiB,YAAY,KAAK,KAAK;EAC9C,SAAS,iBAAiB,oBAAoB,KAAK,kBAAkB;CACvE;CAEA,WAAyB;EACvB,IAAI,CAAC,KAAK,WAAW;EACrB,KAAK,YAAY;EACjB,OAAO,oBAAoB,YAAY,KAAK,KAAK;EACjD,SAAS,oBAAoB,oBAAoB,KAAK,kBAAkB;CAC1E;CAEA,UAAuB;EACrB,KAAK,SAAS;EACd,KAAK,gBAAgB;EACrB,KAAU,MAAM;CAClB;CAEA,2BAAmC;EACjC,IAAI,SAAS,oBAAoB,UAC/B,KAAU,MAAM;CAEpB;CAEA,QAAgB,YAA2B;EACzC,IAAI,CAAC,KAAK,UAAU,GAAG;GACrB,KAAK,SAAS,CAAC;GACf,KAAK,gBAAgB;GACrB,KAAK,SAAS;GACd;EACF;EACA,IAAI,KAAK,UAAU,OAAO,KAAK;EAE/B,KAAK,gBAAgB;EACrB,MAAM,OAAO,KAAK,aAAa;EAC/B,KAAK,WAAW;EAChB,KAAU,WAAW;GACnB,IAAI,KAAK,aAAa,MAAM;GAC5B,KAAK,WAAW,KAAA;GAChB,IAAI,KAAK,OAAO,WAAW,GAAG;IAC5B,KAAK,gBAAgB;IACrB,KAAK,SAAS;GAChB,OACE,KAAU,MAAM;EAEpB,CAAC;EACD,OAAO;CACT;CAEA,MAAc,eAA8B;EAC1C,OAAO,KAAK,OAAO,SAAS,GAAG;GAC7B,MAAM,SAAS,KAAK,OAAO,OAAO,GAAG,cAAc;GACnD,IAAI;IACF,MAAM,KAAK,MAAM,YAAY,WAAW;KACtC,QAAQ;KACR,MAAM,EAAE,OAAO;KACf,WAAW;IACb,CAAC;GACH,QAAQ,CAAC;EACX;CACF;CAEA,gBAAwB;EACtB,IAAI,KAAK,UAAU,KAAA,GAAW;EAC9B,KAAK,QAAQ,iBAAiB;GAC5B,KAAK,QAAQ,KAAA;GACb,KAAU,MAAM;EAClB,GAAG,cAAc;CACnB;CAEA,kBAA0B;EACxB,IAAI,KAAK,UAAU,KAAA,GAAW;EAC9B,aAAa,KAAK,KAAK;EACvB,KAAK,QAAQ,KAAA;CACf;AACF;AAEA,MAAM,kBAAkB,UAAoD;CAC1E,MAAM,QAAQ,eAAe,MAAM,KAAK;CACxC,OAAO;EACL,MAAM,MAAM;EACZ,GAAI,YAAY,MAAM,SAAS,IAAI,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;EACrE,GAAI,YAAY,MAAM,UAAU,IAAI,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;EACxE,GAAI,YAAY,MAAM,MAAM,IAAI,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;EAC5D,GAAI,qBAAqB,MAAM,KAAK,IAAI,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;EAClE,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC3B;AACF;AAEA,MAAM,eAAe,UACnB,SAAS,MAAM,UAAU,KAAK,QAAQ,KAAA;AAExC,MAAM,wBAAwB,UAC5B,UAAU,KAAA,KAAa,OAAO,UAAU,KAAK,KAAK,SAAS;AAE7D,MAAM,kBACJ,UACiC;CACjC,IAAI,CAAC,OAAO,OAAO,KAAA;CACnB,MAAM,UAAU,OAAO,QAAQ,KAAK;CACpC,IACE,QAAQ,MACL,GAAG,WACD,OAAO,UAAU,YAAY,MAAM,SAAS,OAC5C,OAAO,UAAU,YAChB,OAAO,UAAU,YACjB,OAAO,UAAU,SACvB,GAEA;CAEF,MAAM,QAAQ,OAAO,YAAY,OAAO;CACxC,OAAO,IAAI,YAAY,CAAC,CAAC,OAAO,KAAK,UAAU,KAAK,CAAC,CAAC,CAAC,cAAc,OACjE,QACA,KAAA;AACN"}
|
|
@@ -17,13 +17,24 @@ type GeneratePresignedUploadUrlResponse = {
|
|
|
17
17
|
signedUrl: string;
|
|
18
18
|
expiresAt: string;
|
|
19
19
|
publicUrl: string;
|
|
20
|
+
key?: string;
|
|
21
|
+
};
|
|
22
|
+
type GeneratePresignedDownloadUrlResponse = {
|
|
23
|
+
signedUrl: string;
|
|
24
|
+
expiresAt: string;
|
|
25
|
+
key: string;
|
|
20
26
|
};
|
|
21
27
|
declare class AssistantCloudFiles {
|
|
22
28
|
private cloud;
|
|
23
29
|
constructor(cloud: AssistantCloudAPI);
|
|
24
30
|
pdfToImages(body: PdfToImagesRequestBody): Promise<PdfToImagesResponse>;
|
|
25
31
|
generatePresignedUploadUrl(body: GeneratePresignedUploadUrlRequestBody): Promise<GeneratePresignedUploadUrlResponse>;
|
|
32
|
+
generatePresignedDownloadUrl(body: {
|
|
33
|
+
key: string;
|
|
34
|
+
} | {
|
|
35
|
+
url: string;
|
|
36
|
+
}): Promise<GeneratePresignedDownloadUrlResponse>;
|
|
26
37
|
}
|
|
27
38
|
//#endregion
|
|
28
|
-
export { AssistantCloudFiles };
|
|
39
|
+
export { AssistantCloudFiles, GeneratePresignedDownloadUrlResponse };
|
|
29
40
|
//# sourceMappingURL=AssistantCloudFiles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantCloudFiles.d.ts","names":[],"sources":["../src/AssistantCloudFiles.ts"],"mappings":";;KAQK;EACH;EACA;;KAGG;EACH;EACA;EACA;;KAGG;EACH;;KAGG;EACH;EACA;EACA;EACA;;cAGW;UACH;EAEI,YAAA,OAAO;EAIN,YACX,MAAM,yBACL,QAAQ;EAyBE,2BACX,MAAM,wCACL,QAAQ"}
|
|
1
|
+
{"version":3,"file":"AssistantCloudFiles.d.ts","names":[],"sources":["../src/AssistantCloudFiles.ts"],"mappings":";;KAQK;EACH;EACA;;KAGG;EACH;EACA;EACA;;KAGG;EACH;;KAGG;EACH;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;;cAGW;UACH;EAEI,YAAA,OAAO;EAIN,YACX,MAAM,yBACL,QAAQ;EAyBE,2BACX,MAAM,wCACL,QAAQ;EAqCE,6BACX;IAAQ;;IAAkB;MACzB,QAAQ"}
|
|
@@ -25,7 +25,19 @@ var AssistantCloudFiles = class {
|
|
|
25
25
|
success: readCloudBoolean(response.success, "presigned upload response.success"),
|
|
26
26
|
signedUrl: readCloudString(response.signedUrl, "presigned upload response.signedUrl"),
|
|
27
27
|
expiresAt: readCloudString(response.expiresAt, "presigned upload response.expiresAt"),
|
|
28
|
-
publicUrl: readCloudString(response.publicUrl, "presigned upload response.publicUrl")
|
|
28
|
+
publicUrl: readCloudString(response.publicUrl, "presigned upload response.publicUrl"),
|
|
29
|
+
..."key" in response ? { key: readCloudString(response.key, "presigned upload response.key") } : {}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
async generatePresignedDownloadUrl(body) {
|
|
33
|
+
const response = readCloudRecord(await this.cloud.makeRequest("/files/attachments/generate-presigned-download-url", {
|
|
34
|
+
method: "POST",
|
|
35
|
+
body
|
|
36
|
+
}), "presigned download response");
|
|
37
|
+
return {
|
|
38
|
+
signedUrl: readCloudString(response.signedUrl, "presigned download response.signedUrl"),
|
|
39
|
+
expiresAt: readCloudString(response.expiresAt, "presigned download response.expiresAt"),
|
|
40
|
+
key: readCloudString(response.key, "presigned download response.key")
|
|
29
41
|
};
|
|
30
42
|
}
|
|
31
43
|
};
|
|
@@ -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"}
|