assistant-cloud 0.1.43 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -0
- package/dist/AssistantCloud.d.ts +6 -1
- package/dist/AssistantCloud.d.ts.map +1 -1
- package/dist/AssistantCloud.js +13 -5
- package/dist/AssistantCloud.js.map +1 -1
- package/dist/AssistantCloudAPI.d.ts +28 -3
- package/dist/AssistantCloudAPI.d.ts.map +1 -1
- package/dist/AssistantCloudAPI.js +37 -10
- 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 +15 -3
- 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 +119 -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 +12 -0
- package/dist/AssistantCloudRuns.d.ts.map +1 -1
- package/dist/AssistantCloudRuns.js +2 -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/CloudEngagementReporter.d.ts +74 -0
- package/dist/CloudEngagementReporter.d.ts.map +1 -0
- package/dist/CloudEngagementReporter.js +132 -0
- package/dist/CloudEngagementReporter.js.map +1 -0
- package/dist/CloudMessagePersistence.d.ts +12 -9
- package/dist/CloudMessagePersistence.d.ts.map +1 -1
- package/dist/CloudMessagePersistence.js +54 -20
- package/dist/CloudMessagePersistence.js.map +1 -1
- package/dist/CloudRunReporter.d.ts +20 -0
- package/dist/CloudRunReporter.d.ts.map +1 -0
- package/dist/CloudRunReporter.js +38 -0
- package/dist/CloudRunReporter.js.map +1 -0
- package/dist/FormattedCloudPersistence.d.ts +3 -8
- package/dist/FormattedCloudPersistence.d.ts.map +1 -1
- package/dist/FormattedCloudPersistence.js +3 -8
- package/dist/FormattedCloudPersistence.js.map +1 -1
- package/dist/ai-sdk/index.d.ts +33 -0
- package/dist/ai-sdk/index.d.ts.map +1 -0
- package/dist/ai-sdk/index.js +147 -0
- package/dist/ai-sdk/index.js.map +1 -0
- 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/generateThreadTitle.js +1 -0
- package/dist/generateThreadTitle.js.map +1 -1
- package/dist/index.d.ts +10 -4
- package/dist/index.js +7 -2
- package/dist/instrumentMcpSampling.d.ts.map +1 -1
- package/dist/instrumentMcpSampling.js +12 -2
- package/dist/instrumentMcpSampling.js.map +1 -1
- package/dist/runTelemetry.d.ts +86 -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/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +43 -6
- package/src/AssistantCloud.ts +23 -8
- package/src/AssistantCloudAPI.ts +72 -10
- package/src/AssistantCloudAuthStrategy.ts +17 -2
- package/src/AssistantCloudEvents.test.ts +149 -0
- package/src/AssistantCloudEvents.ts +190 -0
- package/src/AssistantCloudFiles.test.ts +59 -0
- package/src/AssistantCloudFiles.ts +39 -0
- package/src/AssistantCloudRuns.ts +13 -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/CloudEngagementReporter.ts +231 -0
- package/src/CloudMessagePersistence.ts +70 -27
- package/src/CloudRunReporter.ts +38 -0
- package/src/FormattedCloudPersistence.ts +3 -8
- package/src/ai-sdk/index.test.ts +258 -0
- package/src/ai-sdk/index.ts +222 -0
- package/src/cloudResponse.test.ts +34 -1
- package/src/cloudResponse.ts +30 -0
- package/src/generateThreadTitle.test.ts +32 -0
- package/src/generateThreadTitle.ts +1 -0
- package/src/index.ts +35 -2
- package/src/instrumentMcpSampling.test.ts +102 -0
- package/src/instrumentMcpSampling.ts +16 -2
- package/src/runTelemetry.test.ts +325 -0
- package/src/runTelemetry.ts +274 -6
- package/src/telemetry/index.test.ts +252 -0
- package/src/telemetry/index.ts +98 -0
- package/src/tests/AssistantCloud.test.ts +55 -1
- package/src/tests/AssistantCloudAPI.test.ts +95 -4
- package/src/tests/AssistantCloudAuthStrategy.test.ts +93 -2
- package/src/tests/AssistantCloudProjects.test.ts +1 -5
- package/src/tests/CloudEngagementReporter.test.ts +184 -0
- package/src/tests/CloudMessagePersistence.test.ts +350 -0
- package/src/tests/CloudRunReporter.test.ts +100 -0
- package/src/version.ts +4 -0
|
@@ -0,0 +1,119 @@
|
|
|
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
|
+
if (!this.isEnabled()) {
|
|
70
|
+
this.buffer = [];
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const events = this.buffer.splice(0, MAX_BATCH_SIZE);
|
|
74
|
+
try {
|
|
75
|
+
await this.cloud.makeRequest("/events", {
|
|
76
|
+
method: "POST",
|
|
77
|
+
body: { events },
|
|
78
|
+
keepalive: true
|
|
79
|
+
});
|
|
80
|
+
} catch {}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
scheduleFlush() {
|
|
84
|
+
if (this.timer !== void 0) return;
|
|
85
|
+
this.timer = setTimeout(() => {
|
|
86
|
+
this.timer = void 0;
|
|
87
|
+
this.flush();
|
|
88
|
+
}, FLUSH_DELAY_MS);
|
|
89
|
+
}
|
|
90
|
+
clearFlushTimer() {
|
|
91
|
+
if (this.timer === void 0) return;
|
|
92
|
+
clearTimeout(this.timer);
|
|
93
|
+
this.timer = void 0;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const normalizeEvent = (event) => {
|
|
97
|
+
const props = normalizeProps(event.props);
|
|
98
|
+
return {
|
|
99
|
+
kind: event.kind,
|
|
100
|
+
...normalizeId(event.thread_id) ? { thread_id: event.thread_id } : {},
|
|
101
|
+
...normalizeId(event.message_id) ? { message_id: event.message_id } : {},
|
|
102
|
+
...normalizeId(event.run_id) ? { run_id: event.run_id } : {},
|
|
103
|
+
...isNonNegativeInteger(event.value) ? { value: event.value } : {},
|
|
104
|
+
...props ? { props } : {}
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
const normalizeId = (value) => value && value.length <= 48 ? value : void 0;
|
|
108
|
+
const isNonNegativeInteger = (value) => value !== void 0 && Number.isInteger(value) && value >= 0;
|
|
109
|
+
const normalizeProps = (props) => {
|
|
110
|
+
if (!props) return void 0;
|
|
111
|
+
const entries = Object.entries(props);
|
|
112
|
+
if (entries.some(([, value]) => typeof value === "string" && value.length > 256 || typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean")) return;
|
|
113
|
+
const value = Object.fromEntries(entries);
|
|
114
|
+
return new TextEncoder().encode(JSON.stringify(value)).byteLength <= 1024 ? value : void 0;
|
|
115
|
+
};
|
|
116
|
+
//#endregion
|
|
117
|
+
export { AssistantCloudEvents };
|
|
118
|
+
|
|
119
|
+
//# 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 if (!this.isEnabled()) {\n this.buffer = [];\n return;\n }\n\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,IAAI,CAAC,KAAK,UAAU,GAAG;IACrB,KAAK,SAAS,CAAC;IACf;GACF;GAEA,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;
|
|
@@ -38,6 +49,7 @@ declare class AssistantCloudRuns {
|
|
|
38
49
|
api: string;
|
|
39
50
|
headers: () => Promise<{
|
|
40
51
|
Accept: string;
|
|
52
|
+
"Aui-Sdk": string;
|
|
41
53
|
}>;
|
|
42
54
|
body: {
|
|
43
55
|
assistant_id: string;
|
|
@@ -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
|
|
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;;;;;;;;;;;;EAoBzB,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 \"Aui-Sdk\": this.cloud.sdkHeader(),\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;KACR,WAAW,KAAK,MAAM,UAAU;IAClC;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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { AssistantCloudEvent } from "./AssistantCloudEvents.js";
|
|
2
|
+
import { AssistantCloud } from "./AssistantCloud.js";
|
|
3
|
+
//#region src/CloudEngagementReporter.d.ts
|
|
4
|
+
type EngagementEventIds = Pick<AssistantCloudEvent, "thread_id" | "message_id" | "run_id">;
|
|
5
|
+
/**
|
|
6
|
+
* Turns the ids an integration knows (its own thread and message ids) into the
|
|
7
|
+
* ids the cloud stores. A send is the one event that may create the remote
|
|
8
|
+
* thread, so it asks for `awaitThread`; every other event reads the ids that
|
|
9
|
+
* already exist.
|
|
10
|
+
*/
|
|
11
|
+
type EngagementIdResolver = (threadId: string, messageId: string | undefined, options: {
|
|
12
|
+
awaitThread: boolean;
|
|
13
|
+
}) => EngagementEventIds | Promise<EngagementEventIds>;
|
|
14
|
+
/**
|
|
15
|
+
* Derives engagement events from what a chat integration observes and keeps
|
|
16
|
+
* the per thread state the events need: a run's start for the stop duration,
|
|
17
|
+
* a run's end for the time to the next message, one error and one suggestion
|
|
18
|
+
* list per run or thread. A started run is kept until it ends or stops; the
|
|
19
|
+
* rest is kept for the 256 most recently touched threads, so a long session
|
|
20
|
+
* does not grow it without bound. Delivery goes through the cloud's event
|
|
21
|
+
* buffer, so a disabled telemetry setting drops everything here as well.
|
|
22
|
+
*/
|
|
23
|
+
declare class CloudEngagementReporter {
|
|
24
|
+
private readonly runStartedAt;
|
|
25
|
+
private readonly runEndedAt;
|
|
26
|
+
private readonly shownErrors;
|
|
27
|
+
private readonly shownSuggestions;
|
|
28
|
+
private readonly getCloud;
|
|
29
|
+
private readonly resolveIds;
|
|
30
|
+
constructor(cloud: AssistantCloud | (() => AssistantCloud), resolveIds?: EngagementIdResolver);
|
|
31
|
+
runStarted(threadId: string): void;
|
|
32
|
+
runEnded(threadId: string): void;
|
|
33
|
+
/** Reported once per started run, with the time the run had been going. */
|
|
34
|
+
runStopped(threadId: string): void;
|
|
35
|
+
/** Carries the time since the previous run of the thread ended, when known. */
|
|
36
|
+
messageSent(threadId: string, init: {
|
|
37
|
+
messageId?: string | undefined;
|
|
38
|
+
chars: number;
|
|
39
|
+
attachments: number;
|
|
40
|
+
}): void;
|
|
41
|
+
messageEdited(threadId: string, init: {
|
|
42
|
+
messageId: string;
|
|
43
|
+
chars: number;
|
|
44
|
+
}): void;
|
|
45
|
+
messageRegenerated(threadId: string, messageId?: string): void;
|
|
46
|
+
/** Reported once per run, so a retried render of the same error stays one event. */
|
|
47
|
+
errorShown(threadId: string, init: {
|
|
48
|
+
messageId?: string | undefined;
|
|
49
|
+
reason: string;
|
|
50
|
+
}): void;
|
|
51
|
+
/** Reported once per thread, with the number of suggestions on offer. */
|
|
52
|
+
suggestionsShown(threadId: string, count: number): void;
|
|
53
|
+
suggestionClicked(threadId: string): void;
|
|
54
|
+
attachmentAdded(threadId: string, init: {
|
|
55
|
+
messageId?: string | undefined;
|
|
56
|
+
contentType?: string | undefined;
|
|
57
|
+
}): void;
|
|
58
|
+
attachmentFailed(threadId: string, init: {
|
|
59
|
+
messageId?: string | undefined;
|
|
60
|
+
contentType?: string | undefined;
|
|
61
|
+
}): void;
|
|
62
|
+
voiceStarted(threadId: string): void;
|
|
63
|
+
speechStarted(threadId: string, messageId?: string): void;
|
|
64
|
+
branchSwitched(threadId: string, messageId?: string): void;
|
|
65
|
+
messageCopied(threadId: string, messageId?: string): void;
|
|
66
|
+
toolApproved(threadId: string, messageId: string, toolCallId: string, toolName: string): void;
|
|
67
|
+
toolRejected(threadId: string, messageId: string, toolCallId: string, toolName: string): void;
|
|
68
|
+
/** Reported only for a thread the cloud already knows. */
|
|
69
|
+
threadSwitched(threadId: string): void;
|
|
70
|
+
private track;
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export { CloudEngagementReporter, EngagementEventIds, EngagementIdResolver };
|
|
74
|
+
//# sourceMappingURL=CloudEngagementReporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudEngagementReporter.d.ts","names":[],"sources":["../src/CloudEngagementReporter.ts"],"mappings":";;;KAMY,qBAAqB,KAC/B;;;;;;;KAUU,wBACV,kBACA,+BACA;EAAW;MACR,qBAAqB,QAAQ;;;;;;;;;;cAoCrB;mBACM;mBACA;mBACA;mBACA;mBAEA;mBACA;EAGf,YAAA,OAAO,wBAAwB,iBAC/B,aAAY;EAMP,WAAW;EAKX,SAAS;;EAMT,WAAW;;EAUX,YACL,kBACA;IACE;IACA;IACA;;EAkBG,cACL,kBACA;IAAQ;IAAmB;;EAOtB,mBAAmB,kBAAkB;;EAKrC,WACL,kBACA;IAAQ;IAAgC;;;EAUnC,iBAAiB,kBAAkB;EAMnC,kBAAkB;EAIlB,gBACL,kBACA;IAAQ;IAAgC;;EAOnC,iBACL,kBACA;IAAQ;IAAgC;;EAOnC,aAAa;EAIb,cAAc,kBAAkB;EAIhC,eAAe,kBAAkB;EAIjC,cAAc,kBAAkB;EAIhC,aACL,kBACA,mBACA,oBACA;EAOK,aACL,kBACA,mBACA,oBACA;;EAQK,eAAe;UAId"}
|