assistant-cloud 0.2.1 → 0.2.3

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.
Files changed (91) hide show
  1. package/README.md +24 -8
  2. package/dist/AssistantCloud.d.ts +16 -19
  3. package/dist/AssistantCloud.d.ts.map +1 -1
  4. package/dist/AssistantCloud.js +7 -2
  5. package/dist/AssistantCloud.js.map +1 -1
  6. package/dist/AssistantCloudAPI.d.ts +74 -72
  7. package/dist/AssistantCloudAPI.d.ts.map +1 -1
  8. package/dist/AssistantCloudAPI.js.map +1 -1
  9. package/dist/AssistantCloudAuthStrategy.d.ts +29 -32
  10. package/dist/AssistantCloudAuthStrategy.d.ts.map +1 -1
  11. package/dist/AssistantCloudAuthTokens.d.ts +7 -9
  12. package/dist/AssistantCloudAuthTokens.d.ts.map +1 -1
  13. package/dist/AssistantCloudEvents.d.ts +35 -29
  14. package/dist/AssistantCloudEvents.d.ts.map +1 -1
  15. package/dist/AssistantCloudEvents.js +66 -17
  16. package/dist/AssistantCloudEvents.js.map +1 -1
  17. package/dist/AssistantCloudFiles.d.ts +27 -29
  18. package/dist/AssistantCloudFiles.d.ts.map +1 -1
  19. package/dist/AssistantCloudProjectThreadMessages.d.ts +11 -13
  20. package/dist/AssistantCloudProjectThreadMessages.d.ts.map +1 -1
  21. package/dist/AssistantCloudProjectThreads.d.ts +12 -14
  22. package/dist/AssistantCloudProjectThreads.d.ts.map +1 -1
  23. package/dist/AssistantCloudProjects.d.ts +4 -7
  24. package/dist/AssistantCloudProjects.d.ts.map +1 -1
  25. package/dist/AssistantCloudRuns.d.ts +67 -56
  26. package/dist/AssistantCloudRuns.d.ts.map +1 -1
  27. package/dist/AssistantCloudRuns.js +9 -4
  28. package/dist/AssistantCloudRuns.js.map +1 -1
  29. package/dist/AssistantCloudScores.d.ts +20 -23
  30. package/dist/AssistantCloudScores.d.ts.map +1 -1
  31. package/dist/AssistantCloudThreadMessages.d.ts +41 -38
  32. package/dist/AssistantCloudThreadMessages.d.ts.map +1 -1
  33. package/dist/AssistantCloudThreadMessages.js +16 -4
  34. package/dist/AssistantCloudThreadMessages.js.map +1 -1
  35. package/dist/AssistantCloudThreads.d.ts +42 -44
  36. package/dist/AssistantCloudThreads.d.ts.map +1 -1
  37. package/dist/CloudEngagementReporter.d.ts +56 -58
  38. package/dist/CloudEngagementReporter.d.ts.map +1 -1
  39. package/dist/CloudEngagementReporter.js +4 -1
  40. package/dist/CloudEngagementReporter.js.map +1 -1
  41. package/dist/CloudMessagePersistence.d.ts +56 -58
  42. package/dist/CloudMessagePersistence.d.ts.map +1 -1
  43. package/dist/CloudMessagePersistence.js +3 -0
  44. package/dist/CloudMessagePersistence.js.map +1 -1
  45. package/dist/CloudRunReporter.d.ts +10 -13
  46. package/dist/CloudRunReporter.d.ts.map +1 -1
  47. package/dist/CloudRunReporter.js +13 -4
  48. package/dist/CloudRunReporter.js.map +1 -1
  49. package/dist/FormattedCloudPersistence.d.ts +36 -39
  50. package/dist/FormattedCloudPersistence.d.ts.map +1 -1
  51. package/dist/ai-sdk/index.d.ts +14 -17
  52. package/dist/ai-sdk/index.d.ts.map +1 -1
  53. package/dist/cloudResponse.d.ts +14 -17
  54. package/dist/cloudResponse.d.ts.map +1 -1
  55. package/dist/generateThreadTitle.d.ts +9 -12
  56. package/dist/generateThreadTitle.d.ts.map +1 -1
  57. package/dist/index.d.ts +18 -17
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/instrumentMcpSampling.d.ts +36 -39
  60. package/dist/instrumentMcpSampling.d.ts.map +1 -1
  61. package/dist/runTelemetry.d.ts +101 -94
  62. package/dist/runTelemetry.d.ts.map +1 -1
  63. package/dist/runTelemetry.js +57 -15
  64. package/dist/runTelemetry.js.map +1 -1
  65. package/dist/telemetry/index.d.ts +20 -23
  66. package/dist/telemetry/index.d.ts.map +1 -1
  67. package/dist/version.d.ts +1 -4
  68. package/dist/version.d.ts.map +1 -1
  69. package/dist/version.js +1 -1
  70. package/package.json +10 -9
  71. package/src/AssistantCloud.ts +17 -2
  72. package/src/AssistantCloudAPI.ts +4 -0
  73. package/src/AssistantCloudEvents.test.ts +157 -0
  74. package/src/AssistantCloudEvents.ts +82 -20
  75. package/src/AssistantCloudRuns.ts +35 -5
  76. package/src/AssistantCloudThreadMessages.test.ts +53 -2
  77. package/src/AssistantCloudThreadMessages.ts +34 -2
  78. package/src/BackendTranscriptCopy.test.ts +79 -0
  79. package/src/CloudEngagementReporter.ts +9 -3
  80. package/src/CloudMessagePersistence.ts +4 -0
  81. package/src/CloudRunReporter.ts +16 -4
  82. package/src/ai-sdk/index.test.ts +2 -2
  83. package/src/runTelemetry.test.ts +226 -2
  84. package/src/runTelemetry.ts +121 -17
  85. package/src/tests/AssistantCloud.test.ts +22 -0
  86. package/src/tests/AssistantCloudRuns.test.ts +28 -0
  87. package/src/tests/CloudEngagementReporter.test.ts +45 -0
  88. package/src/tests/CloudRunReporter.test.ts +49 -2
  89. package/dist/tests/setup.d.ts +0 -1
  90. package/dist/tests/setup.js +0 -7
  91. package/dist/tests/setup.js.map +0 -1
@@ -2,23 +2,33 @@
2
2
  const FLUSH_SIZE = 20;
3
3
  const MAX_BATCH_SIZE = 50;
4
4
  const FLUSH_DELAY_MS = 2e3;
5
+ const RETRY_DELAYS_MS = [250, 1e3];
6
+ const pendingClearers = /* @__PURE__ */ new WeakMap();
7
+ const clearPendingAssistantCloudEvents = (events) => {
8
+ pendingClearers.get(events)?.();
9
+ };
5
10
  var AssistantCloudEvents = class {
6
11
  buffer = [];
7
12
  timer;
8
13
  flushing;
14
+ retryTimer;
15
+ resolveRetryDelay;
16
+ bestEffortRequested = false;
17
+ generation = 0;
9
18
  cloud;
10
19
  isEnabled;
11
20
  listening = false;
12
21
  constructor(cloud, isEnabled) {
13
22
  this.cloud = cloud;
14
23
  this.isEnabled = isEnabled;
24
+ pendingClearers.set(this, () => this.clearPending());
15
25
  }
16
26
  track(event) {
17
27
  if (!this.isEnabled()) return;
18
28
  this.listen();
19
29
  this.buffer.push(normalizeEvent(event));
20
30
  if (this.buffer.length >= FLUSH_SIZE) {
21
- this.flush();
31
+ this.flush(true);
22
32
  return;
23
33
  }
24
34
  this.scheduleFlush();
@@ -26,65 +36,104 @@ var AssistantCloudEvents = class {
26
36
  listen() {
27
37
  if (this.listening || typeof window === "undefined" || typeof document === "undefined") return;
28
38
  this.listening = true;
29
- window.addEventListener("pagehide", this.flush);
39
+ window.addEventListener("pagehide", this.flushBestEffort);
30
40
  document.addEventListener("visibilitychange", this.onVisibilityChange);
31
41
  }
32
42
  unlisten() {
33
43
  if (!this.listening) return;
34
44
  this.listening = false;
35
- window.removeEventListener("pagehide", this.flush);
45
+ window.removeEventListener("pagehide", this.flushBestEffort);
36
46
  document.removeEventListener("visibilitychange", this.onVisibilityChange);
37
47
  }
38
48
  dispose() {
39
49
  this.unlisten();
40
50
  this.clearFlushTimer();
41
- this.flush();
51
+ this.flushBestEffort();
52
+ }
53
+ clearPending() {
54
+ this.generation++;
55
+ this.buffer = [];
56
+ this.clearFlushTimer();
57
+ this.interruptRetryDelay();
58
+ this.unlisten();
42
59
  }
43
60
  onVisibilityChange = () => {
44
- if (document.visibilityState === "hidden") this.flush();
61
+ if (document.visibilityState === "hidden") this.flushBestEffort();
62
+ };
63
+ flushBestEffort = () => {
64
+ if (this.flushing) {
65
+ this.bestEffortRequested = true;
66
+ this.interruptRetryDelay();
67
+ }
68
+ return this.flush(false);
45
69
  };
46
- flush = async () => {
70
+ flush = async (retryFailures) => {
47
71
  if (!this.isEnabled()) {
48
- this.buffer = [];
49
- this.clearFlushTimer();
50
- this.unlisten();
72
+ this.clearPending();
51
73
  return;
52
74
  }
53
75
  if (this.flushing) return this.flushing;
54
76
  this.clearFlushTimer();
55
- const task = this.flushPending();
77
+ const task = this.flushPending(retryFailures);
56
78
  this.flushing = task;
57
79
  task.then(() => {
58
80
  if (this.flushing !== task) return;
59
81
  this.flushing = void 0;
82
+ this.bestEffortRequested = false;
60
83
  if (this.buffer.length === 0) {
61
84
  this.clearFlushTimer();
62
85
  this.unlisten();
63
- } else this.flush();
86
+ } else this.flush(true);
64
87
  });
65
88
  return task;
66
89
  };
67
- async flushPending() {
90
+ async flushPending(retryFailures) {
68
91
  while (this.buffer.length > 0) {
69
92
  if (!this.isEnabled()) {
70
93
  this.buffer = [];
71
94
  return;
72
95
  }
73
96
  const events = this.buffer.splice(0, MAX_BATCH_SIZE);
74
- try {
97
+ const generation = this.generation;
98
+ for (let attempt = 0;; attempt++) try {
75
99
  await this.cloud.makeRequest("/events", {
76
100
  method: "POST",
77
101
  body: { events },
78
102
  keepalive: true
79
103
  });
80
- } catch {}
104
+ if (generation !== this.generation) return;
105
+ break;
106
+ } catch {
107
+ if (generation !== this.generation) return;
108
+ const delay = retryFailures && !this.bestEffortRequested ? RETRY_DELAYS_MS[attempt] : void 0;
109
+ if (delay === void 0) break;
110
+ await this.waitForRetry(delay);
111
+ if (generation !== this.generation) return;
112
+ if (!this.isEnabled()) return this.clearPending();
113
+ if (this.bestEffortRequested) break;
114
+ }
81
115
  }
82
116
  }
117
+ waitForRetry(delay) {
118
+ return new Promise((resolve) => {
119
+ const finish = () => {
120
+ this.retryTimer = void 0;
121
+ this.resolveRetryDelay = void 0;
122
+ resolve();
123
+ };
124
+ this.resolveRetryDelay = finish;
125
+ this.retryTimer = setTimeout(finish, delay);
126
+ });
127
+ }
128
+ interruptRetryDelay() {
129
+ if (this.retryTimer !== void 0) clearTimeout(this.retryTimer);
130
+ this.resolveRetryDelay?.();
131
+ }
83
132
  scheduleFlush() {
84
133
  if (this.timer !== void 0) return;
85
134
  this.timer = setTimeout(() => {
86
135
  this.timer = void 0;
87
- this.flush();
136
+ this.flush(true);
88
137
  }, FLUSH_DELAY_MS);
89
138
  }
90
139
  clearFlushTimer() {
@@ -109,11 +158,11 @@ const isNonNegativeInteger = (value) => value !== void 0 && Number.isInteger(val
109
158
  const normalizeProps = (props) => {
110
159
  if (!props) return void 0;
111
160
  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;
161
+ if (entries.some(([, value]) => typeof value === "string" && value.length > 256 || typeof value === "number" && !Number.isFinite(value) || typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean")) return;
113
162
  const value = Object.fromEntries(entries);
114
163
  return new TextEncoder().encode(JSON.stringify(value)).byteLength <= 1024 ? value : void 0;
115
164
  };
116
165
  //#endregion
117
- export { AssistantCloudEvents };
166
+ export { AssistantCloudEvents, clearPendingAssistantCloudEvents };
118
167
 
119
168
  //# sourceMappingURL=AssistantCloudEvents.js.map
@@ -1 +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":"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"}
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;\nconst RETRY_DELAYS_MS = [250, 1_000] as const;\nconst pendingClearers = new WeakMap<AssistantCloudEvents, () => void>();\n\nexport const clearPendingAssistantCloudEvents = (\n events: AssistantCloudEvents,\n): void => {\n pendingClearers.get(events)?.();\n};\n\nexport class AssistantCloudEvents {\n private buffer: AssistantCloudEvent[] = [];\n private timer: ReturnType<typeof setTimeout> | undefined;\n private flushing: Promise<void> | undefined;\n private retryTimer: ReturnType<typeof setTimeout> | undefined;\n private resolveRetryDelay: (() => void) | undefined;\n private bestEffortRequested = false;\n private generation = 0;\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 pendingClearers.set(this, () => this.clearPending());\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(true);\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.flushBestEffort);\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.flushBestEffort);\n document.removeEventListener(\"visibilitychange\", this.onVisibilityChange);\n }\n\n public dispose(): void {\n this.unlisten();\n this.clearFlushTimer();\n void this.flushBestEffort();\n }\n\n private clearPending(): void {\n this.generation++;\n this.buffer = [];\n this.clearFlushTimer();\n this.interruptRetryDelay();\n this.unlisten();\n }\n\n private onVisibilityChange = () => {\n if (document.visibilityState === \"hidden\") {\n void this.flushBestEffort();\n }\n };\n\n private flushBestEffort = () => {\n if (this.flushing) {\n this.bestEffortRequested = true;\n this.interruptRetryDelay();\n }\n return this.flush(false);\n };\n\n private flush = async (retryFailures: boolean): Promise<void> => {\n if (!this.isEnabled()) {\n this.clearPending();\n return;\n }\n if (this.flushing) return this.flushing;\n\n this.clearFlushTimer();\n const task = this.flushPending(retryFailures);\n this.flushing = task;\n void task.then(() => {\n if (this.flushing !== task) return;\n this.flushing = undefined;\n this.bestEffortRequested = false;\n if (this.buffer.length === 0) {\n this.clearFlushTimer();\n this.unlisten();\n } else {\n void this.flush(true);\n }\n });\n return task;\n };\n\n private async flushPending(retryFailures: boolean): 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 const generation = this.generation;\n for (let attempt = 0; ; attempt++) {\n try {\n await this.cloud.makeRequest(\"/events\", {\n method: \"POST\",\n body: { events },\n keepalive: true,\n });\n if (generation !== this.generation) return;\n break;\n } catch {\n if (generation !== this.generation) return;\n const delay =\n retryFailures && !this.bestEffortRequested\n ? RETRY_DELAYS_MS[attempt]\n : undefined;\n if (delay === undefined) break;\n await this.waitForRetry(delay);\n if (generation !== this.generation) return;\n if (!this.isEnabled()) return this.clearPending();\n if (this.bestEffortRequested) break;\n }\n }\n }\n }\n\n private waitForRetry(delay: number): Promise<void> {\n return new Promise((resolve) => {\n const finish = () => {\n this.retryTimer = undefined;\n this.resolveRetryDelay = undefined;\n resolve();\n };\n this.resolveRetryDelay = finish;\n this.retryTimer = setTimeout(finish, delay);\n });\n }\n\n private interruptRetryDelay(): void {\n if (this.retryTimer !== undefined) clearTimeout(this.retryTimer);\n this.resolveRetryDelay?.();\n }\n\n private scheduleFlush() {\n if (this.timer !== undefined) return;\n this.timer = setTimeout(() => {\n this.timer = undefined;\n void this.flush(true);\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 === \"number\" && !Number.isFinite(value)) ||\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":"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"}
@@ -1,40 +1,38 @@
1
- import { AssistantCloudAPI } from "./AssistantCloudAPI.js";
2
- //#region src/AssistantCloudFiles.d.ts
1
+ import type { AssistantCloudAPI } from "./AssistantCloudAPI.js";
3
2
  type PdfToImagesRequestBody = {
4
- file_blob?: string | undefined;
5
- file_url?: string | undefined;
3
+ file_blob?: string | undefined;
4
+ file_url?: string | undefined;
6
5
  };
7
6
  type PdfToImagesResponse = {
8
- success: boolean;
9
- urls: string[];
10
- message: string;
7
+ success: boolean;
8
+ urls: string[];
9
+ message: string;
11
10
  };
12
11
  type GeneratePresignedUploadUrlRequestBody = {
13
- filename: string;
12
+ filename: string;
14
13
  };
15
14
  type GeneratePresignedUploadUrlResponse = {
16
- success: boolean;
17
- signedUrl: string;
18
- expiresAt: string;
19
- publicUrl: string;
20
- key?: string;
15
+ success: boolean;
16
+ signedUrl: string;
17
+ expiresAt: string;
18
+ publicUrl: string;
19
+ key?: string;
21
20
  };
22
- type GeneratePresignedDownloadUrlResponse = {
23
- signedUrl: string;
24
- expiresAt: string;
25
- key: string;
26
- };
27
- declare class AssistantCloudFiles {
28
- private cloud;
29
- constructor(cloud: AssistantCloudAPI);
30
- pdfToImages(body: PdfToImagesRequestBody): Promise<PdfToImagesResponse>;
31
- generatePresignedUploadUrl(body: GeneratePresignedUploadUrlRequestBody): Promise<GeneratePresignedUploadUrlResponse>;
32
- generatePresignedDownloadUrl(body: {
21
+ export type GeneratePresignedDownloadUrlResponse = {
22
+ signedUrl: string;
23
+ expiresAt: string;
33
24
  key: string;
34
- } | {
35
- url: string;
36
- }): Promise<GeneratePresignedDownloadUrlResponse>;
25
+ };
26
+ export declare class AssistantCloudFiles {
27
+ private cloud;
28
+ constructor(cloud: AssistantCloudAPI);
29
+ pdfToImages(body: PdfToImagesRequestBody): Promise<PdfToImagesResponse>;
30
+ generatePresignedUploadUrl(body: GeneratePresignedUploadUrlRequestBody): Promise<GeneratePresignedUploadUrlResponse>;
31
+ generatePresignedDownloadUrl(body: {
32
+ key: string;
33
+ } | {
34
+ url: string;
35
+ }): Promise<GeneratePresignedDownloadUrlResponse>;
37
36
  }
38
- //#endregion
39
- export { AssistantCloudFiles, GeneratePresignedDownloadUrlResponse };
37
+ export {};
40
38
  //# 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;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"}
1
+ {"version":3,"file":"AssistantCloudFiles.d.ts","sourceRoot":"","sources":["../src/AssistantCloudFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+BAA4B;AAQ7D,KAAK,sBAAsB,GAAG;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,qCAAqC,GAAG;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,kCAAkC,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAoB;gBAErB,KAAK,EAAE,iBAAiB;IAIvB,WAAW,CACtB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAyBlB,0BAA0B,CACrC,IAAI,EAAE,qCAAqC,GAC1C,OAAO,CAAC,kCAAkC,CAAC;IAqCjC,4BAA4B,CACvC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GACtC,OAAO,CAAC,oCAAoC,CAAC;CAwBjD"}
@@ -1,19 +1,17 @@
1
- import { AssistantCloudAPI } from "./AssistantCloudAPI.js";
2
- import { CloudMessage } from "./AssistantCloudThreadMessages.js";
3
- //#region src/AssistantCloudProjectThreadMessages.d.ts
1
+ import type { AssistantCloudAPI } from "./AssistantCloudAPI.js";
2
+ import { type CloudMessage } from "./AssistantCloudThreadMessages.js";
4
3
  type AssistantCloudProjectThreadMessageListQuery = {
5
- format?: string;
6
- limit?: number;
7
- after?: string;
4
+ format?: string;
5
+ limit?: number;
6
+ after?: string;
8
7
  };
9
8
  type AssistantCloudProjectThreadMessageListResponse = {
10
- messages: CloudMessage[];
9
+ messages: CloudMessage[];
11
10
  };
12
- declare class AssistantCloudProjectThreadMessages {
13
- private cloud;
14
- constructor(cloud: AssistantCloudAPI);
15
- list(threadId: string, query?: AssistantCloudProjectThreadMessageListQuery): Promise<AssistantCloudProjectThreadMessageListResponse>;
11
+ export declare class AssistantCloudProjectThreadMessages {
12
+ private cloud;
13
+ constructor(cloud: AssistantCloudAPI);
14
+ list(threadId: string, query?: AssistantCloudProjectThreadMessageListQuery): Promise<AssistantCloudProjectThreadMessageListResponse>;
16
15
  }
17
- //#endregion
18
- export { AssistantCloudProjectThreadMessages };
16
+ export {};
19
17
  //# sourceMappingURL=AssistantCloudProjectThreadMessages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloudProjectThreadMessages.d.ts","names":[],"sources":["../src/AssistantCloudProjectThreadMessages.ts"],"mappings":";;;KAOK;EACH;EACA;EACA;;KAGG;EACH,UAAU;;cAGC;UACH;EAEI,YAAA,OAAO;EAIN,KACX,kBACA,QAAQ,8CACP,QAAQ"}
1
+ {"version":3,"file":"AssistantCloudProjectThreadMessages.d.ts","sourceRoot":"","sources":["../src/AssistantCloudProjectThreadMessages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+BAA4B;AAC7D,OAAO,EAEL,KAAK,YAAY,EAClB,0CAAuC;AAGxC,KAAK,2CAA2C,GAAG;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,8CAA8C,GAAG;IACpD,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B,CAAC;AAEF,qBAAa,mCAAmC;IAC9C,OAAO,CAAC,KAAK,CAAoB;gBAErB,KAAK,EAAE,iBAAiB;IAIvB,IAAI,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,2CAA2C,GAClD,OAAO,CAAC,8CAA8C,CAAC;CAgB3D"}
@@ -1,21 +1,19 @@
1
- import { AssistantCloudAPI } from "./AssistantCloudAPI.js";
1
+ import type { AssistantCloudAPI } from "./AssistantCloudAPI.js";
2
2
  import { AssistantCloudProjectThreadMessages } from "./AssistantCloudProjectThreadMessages.js";
3
- import { CloudThread } from "./AssistantCloudThreads.js";
4
- //#region src/AssistantCloudProjectThreads.d.ts
3
+ import { type CloudThread } from "./AssistantCloudThreads.js";
5
4
  type AssistantCloudProjectThreadsListQuery = {
6
- is_archived?: boolean;
7
- limit?: number;
8
- after?: string;
5
+ is_archived?: boolean;
6
+ limit?: number;
7
+ after?: string;
9
8
  };
10
9
  type AssistantCloudProjectThreadsListResponse = {
11
- threads: CloudThread[];
10
+ threads: CloudThread[];
12
11
  };
13
- declare class AssistantCloudProjectThreads {
14
- readonly messages: AssistantCloudProjectThreadMessages;
15
- private cloud;
16
- constructor(cloud: AssistantCloudAPI);
17
- list(query?: AssistantCloudProjectThreadsListQuery): Promise<AssistantCloudProjectThreadsListResponse>;
12
+ export declare class AssistantCloudProjectThreads {
13
+ readonly messages: AssistantCloudProjectThreadMessages;
14
+ private cloud;
15
+ constructor(cloud: AssistantCloudAPI);
16
+ list(query?: AssistantCloudProjectThreadsListQuery): Promise<AssistantCloudProjectThreadsListResponse>;
18
17
  }
19
- //#endregion
20
- export { AssistantCloudProjectThreads };
18
+ export {};
21
19
  //# sourceMappingURL=AssistantCloudProjectThreads.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloudProjectThreads.d.ts","names":[],"sources":["../src/AssistantCloudProjectThreads.ts"],"mappings":";;;;KAKK;EACH;EACA;EACA;;KAGG;EACH,SAAS;;cAGE;WACK,UAAU;UAElB;EAEI,YAAA,OAAO;EAKN,KACX,QAAQ,wCACP,QAAQ"}
1
+ {"version":3,"file":"AssistantCloudProjectThreads.d.ts","sourceRoot":"","sources":["../src/AssistantCloudProjectThreads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+BAA4B;AAC7D,OAAO,EAAE,mCAAmC,EAAE,iDAA8C;AAC5F,OAAO,EAAqB,KAAK,WAAW,EAAE,mCAAgC;AAG9E,KAAK,qCAAqC,GAAG;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,wCAAwC,GAAG;IAC9C,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC;AAEF,qBAAa,4BAA4B;IACvC,SAAgB,QAAQ,EAAE,mCAAmC,CAAC;IAE9D,OAAO,CAAC,KAAK,CAAoB;gBAErB,KAAK,EAAE,iBAAiB;IAKvB,IAAI,CACf,KAAK,CAAC,EAAE,qCAAqC,GAC5C,OAAO,CAAC,wCAAwC,CAAC;CAsBrD"}
@@ -1,10 +1,7 @@
1
- import { AssistantCloudAPI } from "./AssistantCloudAPI.js";
1
+ import type { AssistantCloudAPI } from "./AssistantCloudAPI.js";
2
2
  import { AssistantCloudProjectThreads } from "./AssistantCloudProjectThreads.js";
3
- //#region src/AssistantCloudProjects.d.ts
4
- declare class AssistantCloudProjects {
5
- readonly threads: AssistantCloudProjectThreads;
6
- constructor(cloud: AssistantCloudAPI);
3
+ export declare class AssistantCloudProjects {
4
+ readonly threads: AssistantCloudProjectThreads;
5
+ constructor(cloud: AssistantCloudAPI);
7
6
  }
8
- //#endregion
9
- export { AssistantCloudProjects };
10
7
  //# sourceMappingURL=AssistantCloudProjects.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloudProjects.d.ts","names":[],"sources":["../src/AssistantCloudProjects.ts"],"mappings":";;;cAGa;WACK,SAAS;EAEb,YAAA,OAAO"}
1
+ {"version":3,"file":"AssistantCloudProjects.d.ts","sourceRoot":"","sources":["../src/AssistantCloudProjects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+BAA4B;AAC7D,OAAO,EAAE,4BAA4B,EAAE,0CAAuC;AAE9E,qBAAa,sBAAsB;IACjC,SAAgB,OAAO,EAAE,4BAA4B,CAAC;gBAE1C,KAAK,EAAE,iBAAiB;CAGrC"}
@@ -1,67 +1,78 @@
1
- import { AssistantCloudRunReportToolCall } from "./runTelemetry.js";
2
- import { AssistantCloudAPI } from "./AssistantCloudAPI.js";
1
+ import type { AssistantCloudAPI } from "./AssistantCloudAPI.js";
2
+ import type { AssistantCloudRunReportToolCall } from "./runTelemetry.js";
3
3
  import { AssistantStream } from "assistant-stream";
4
- //#region src/AssistantCloudRuns.d.ts
5
4
  type AssistantCloudRunsStreamBody = {
6
- thread_id: string;
7
- assistant_id: "system/thread_title";
8
- messages: readonly unknown[];
5
+ thread_id: string;
6
+ assistant_id: "system/thread_title";
7
+ messages: readonly unknown[];
9
8
  };
10
- type AssistantCloudRunReport = {
11
- thread_id: string;
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;
23
- total_steps?: number;
24
- tool_calls?: AssistantCloudRunReportToolCall[];
25
- steps?: {
9
+ export type AssistantCloudRunReport = {
10
+ thread_id: string;
11
+ status: "completed" | "incomplete" | "error";
12
+ outcome_type?: "rate_limited" | "validation_failed" | "provider_error" | "server_error" | "budget_denied" | "persistence_error" | "aborted" | "timeout" | "disconnected" | "length" | "content_filter";
13
+ message_id?: string;
14
+ first_token_ms?: number;
15
+ release?: string;
16
+ environment?: string;
17
+ tags?: string[];
18
+ provider?: string;
19
+ trace_id?: string;
20
+ root_span_id?: string;
21
+ error_code?: string;
22
+ error?: string;
23
+ total_steps?: number;
24
+ tool_calls?: AssistantCloudRunReportToolCall[];
25
+ steps?: {
26
+ input_tokens?: number;
27
+ output_tokens?: number;
28
+ reasoning_tokens?: number;
29
+ cached_input_tokens?: number;
30
+ tool_calls?: AssistantCloudRunReportToolCall[];
31
+ start_ms?: number;
32
+ end_ms?: number;
33
+ finish_reason?: string;
34
+ input?: string;
35
+ }[];
26
36
  input_tokens?: number;
27
37
  output_tokens?: number;
28
38
  reasoning_tokens?: number;
29
39
  cached_input_tokens?: number;
30
- tool_calls?: AssistantCloudRunReportToolCall[];
31
- start_ms?: number;
32
- end_ms?: number;
33
- finish_reason?: string;
34
- }[];
35
- input_tokens?: number;
36
- output_tokens?: number;
37
- reasoning_tokens?: number;
38
- cached_input_tokens?: number;
39
- model_id?: string;
40
- provider_type?: string;
41
- duration_ms?: number;
42
- output_text?: string;
43
- metadata?: Record<string, unknown>;
40
+ cost_usd?: number;
41
+ cost_details?: {
42
+ input?: number;
43
+ input_cached_tokens?: number;
44
+ output?: number;
45
+ total?: number;
46
+ };
47
+ model_id?: string;
48
+ provider_type?: string;
49
+ duration_ms?: number;
50
+ output_text?: string;
51
+ attributes?: Record<string, unknown>;
52
+ metadata?: Record<string, unknown>;
44
53
  };
45
- declare class AssistantCloudRuns {
46
- private cloud;
47
- constructor(cloud: AssistantCloudAPI);
48
- __internal_getAssistantOptions(assistantId: string): {
49
- api: string;
50
- headers: () => Promise<{
51
- Accept: string;
52
- "Aui-Sdk": string;
53
- }>;
54
- body: {
55
- assistant_id: string;
56
- response_format: string;
57
- thread_id: string;
54
+ export declare class AssistantCloudRuns {
55
+ private cloud;
56
+ constructor(cloud: AssistantCloudAPI);
57
+ __internal_getAssistantOptions(assistantId: string): {
58
+ api: string;
59
+ protocol: "ui-message-stream";
60
+ headers: () => Promise<{
61
+ Accept: string;
62
+ "Aui-Sdk": string;
63
+ }>;
64
+ body: (options?: {
65
+ threadId?: string;
66
+ }) => Promise<{
67
+ assistant_id: string;
68
+ response_format: string;
69
+ thread_id: string;
70
+ }>;
58
71
  };
59
- };
60
- stream(body: AssistantCloudRunsStreamBody): Promise<AssistantStream>;
61
- report(body: AssistantCloudRunReport): Promise<{
62
- run_id: string;
63
- }>;
72
+ stream(body: AssistantCloudRunsStreamBody): Promise<AssistantStream>;
73
+ report(body: AssistantCloudRunReport): Promise<{
74
+ run_id: string;
75
+ }>;
64
76
  }
65
- //#endregion
66
- export { AssistantCloudRunReport, AssistantCloudRuns };
77
+ export {};
67
78
  //# sourceMappingURL=AssistantCloudRuns.d.ts.map
@@ -1 +1 @@
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
+ {"version":3,"file":"AssistantCloudRuns.d.ts","sourceRoot":"","sources":["../src/AssistantCloudRuns.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ var AssistantCloudRuns = class {
9
9
  __internal_getAssistantOptions(assistantId) {
10
10
  return {
11
11
  api: `${this.cloud._baseUrl}/v1/runs/stream`,
12
+ protocol: "ui-message-stream",
12
13
  headers: async () => {
13
14
  const headers = await this.cloud._auth.getAuthHeaders();
14
15
  if (!headers) throw new Error("Authorization failed");
@@ -18,10 +19,14 @@ var AssistantCloudRuns = class {
18
19
  "Aui-Sdk": this.cloud.sdkHeader()
19
20
  };
20
21
  },
21
- body: {
22
- assistant_id: assistantId,
23
- response_format: "vercel-ai-data-stream/v1",
24
- thread_id: "unstable_todo"
22
+ body: async (options) => {
23
+ const threadId = options?.threadId;
24
+ if (threadId === void 0) throw new Error("Assistant Cloud runs need a thread; the thread list adapter has not assigned a remote id to this thread yet.");
25
+ return {
26
+ assistant_id: assistantId,
27
+ response_format: "vercel-ai-data-stream/v1",
28
+ thread_id: threadId
29
+ };
25
30
  }
26
31
  };
27
32
  }
@@ -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/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"}
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?:\n | \"rate_limited\"\n | \"validation_failed\"\n | \"provider_error\"\n | \"server_error\"\n | \"budget_denied\"\n | \"persistence_error\"\n | \"aborted\"\n | \"timeout\"\n | \"disconnected\"\n | \"length\"\n | \"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 root_span_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 input?: string;\n }[];\n input_tokens?: number;\n output_tokens?: number;\n reasoning_tokens?: number;\n cached_input_tokens?: number;\n cost_usd?: number;\n cost_details?: {\n input?: number;\n input_cached_tokens?: number;\n output?: number;\n total?: number;\n };\n model_id?: string;\n provider_type?: string;\n duration_ms?: number;\n output_text?: string;\n attributes?: Record<string, unknown>;\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 protocol: \"ui-message-stream\" as const,\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: async (options?: { threadId?: string }) => {\n const threadId = options?.threadId;\n if (threadId === undefined) {\n throw new Error(\n \"Assistant Cloud runs need a thread; the thread list adapter has not assigned a remote id to this thread yet.\",\n );\n }\n return {\n assistant_id: assistantId,\n response_format: \"vercel-ai-data-stream/v1\",\n thread_id: threadId,\n };\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":";;;AA2EA,IAAa,qBAAb,MAAgC;CAC9B;CAEA,YAAY,OAA0B;EACpC,KAAK,QAAQ;CACf;CAEA,+BAAsC,aAAqB;EACzD,OAAO;GACL,KAAK,GAAG,KAAK,MAAM,SAAS;GAC5B,UAAU;GACV,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,OAAO,YAAoC;IAC/C,MAAM,WAAW,SAAS;IAC1B,IAAI,aAAa,KAAA,GACf,MAAM,IAAI,MACR,8GACF;IAEF,OAAO;KACL,cAAc;KACd,iBAAiB;KACjB,WAAW;IACb;GACF;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"}