@vertesia/client 0.60.0 → 0.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/lib/cjs/client.js +10 -12
  2. package/lib/cjs/client.js.map +1 -1
  3. package/lib/cjs/store/FilesApi.js +19 -10
  4. package/lib/cjs/store/FilesApi.js.map +1 -1
  5. package/lib/cjs/store/ObjectsApi.js +28 -17
  6. package/lib/cjs/store/ObjectsApi.js.map +1 -1
  7. package/lib/cjs/store/WorkflowsApi.js +12 -4
  8. package/lib/cjs/store/WorkflowsApi.js.map +1 -1
  9. package/lib/esm/client.js +10 -12
  10. package/lib/esm/client.js.map +1 -1
  11. package/lib/esm/store/FilesApi.js +19 -10
  12. package/lib/esm/store/FilesApi.js.map +1 -1
  13. package/lib/esm/store/ObjectsApi.js +28 -17
  14. package/lib/esm/store/ObjectsApi.js.map +1 -1
  15. package/lib/esm/store/WorkflowsApi.js +12 -4
  16. package/lib/esm/store/WorkflowsApi.js.map +1 -1
  17. package/lib/tsconfig.tsbuildinfo +1 -1
  18. package/lib/types/AccountApi.d.ts +0 -1
  19. package/lib/types/AccountsApi.d.ts +0 -1
  20. package/lib/types/AnalyticsApi.d.ts +0 -1
  21. package/lib/types/ApiKeysApi.d.ts +0 -1
  22. package/lib/types/CommandsApi.d.ts +0 -1
  23. package/lib/types/EnvironmentsApi.d.ts +0 -1
  24. package/lib/types/IamApi.d.ts +0 -1
  25. package/lib/types/InteractionBase.d.ts +0 -1
  26. package/lib/types/InteractionsApi.d.ts +0 -1
  27. package/lib/types/PluginsApi.d.ts +0 -1
  28. package/lib/types/ProjectsApi.d.ts +0 -1
  29. package/lib/types/PromptsApi.d.ts +0 -1
  30. package/lib/types/RefsApi.d.ts +0 -1
  31. package/lib/types/RunsApi.d.ts +0 -1
  32. package/lib/types/StreamSource.d.ts +0 -1
  33. package/lib/types/TrainingApi.d.ts +0 -1
  34. package/lib/types/UsersApi.d.ts +0 -1
  35. package/lib/types/client.d.ts +5 -6
  36. package/lib/types/client.d.ts.map +1 -1
  37. package/lib/types/execute.d.ts +0 -1
  38. package/lib/types/index.d.ts +0 -1
  39. package/lib/types/nodejs/NodeStreamSource.d.ts +0 -1
  40. package/lib/types/nodejs/index.d.ts +0 -1
  41. package/lib/types/store/AgentsApi.d.ts +0 -1
  42. package/lib/types/store/AnalyzeDocApi.d.ts +0 -1
  43. package/lib/types/store/CollectionsApi.d.ts +0 -1
  44. package/lib/types/store/CommandsApi.d.ts +0 -1
  45. package/lib/types/store/EmbeddingsApi.d.ts +0 -1
  46. package/lib/types/store/FilesApi.d.ts +6 -2
  47. package/lib/types/store/FilesApi.d.ts.map +1 -1
  48. package/lib/types/store/ObjectsApi.d.ts +7 -1
  49. package/lib/types/store/ObjectsApi.d.ts.map +1 -1
  50. package/lib/types/store/TypesApi.d.ts +0 -1
  51. package/lib/types/store/WorkflowsApi.d.ts +2 -3
  52. package/lib/types/store/WorkflowsApi.d.ts.map +1 -1
  53. package/lib/types/store/client.d.ts +0 -1
  54. package/lib/types/store/errors.d.ts +0 -1
  55. package/lib/types/store/index.d.ts +0 -1
  56. package/lib/vertesia-client.js +1 -1
  57. package/lib/vertesia-client.js.map +1 -1
  58. package/package.json +4 -4
  59. package/src/client.ts +14 -15
  60. package/src/store/FilesApi.ts +19 -10
  61. package/src/store/ObjectsApi.ts +338 -324
  62. package/src/store/WorkflowsApi.ts +28 -19
@@ -38,8 +38,9 @@ export class WorkflowsApi extends ApiTopic {
38
38
  return this.post(`/runs/${workflowId}/${runId}/signal/${signal}`, { payload });
39
39
  }
40
40
 
41
- getRunDetails(runId: string, workflowId: string): Promise<WorkflowRunWithDetails> {
42
- return this.get(`/runs/${workflowId}/${runId}`);
41
+ getRunDetails(runId: string, workflowId: string, includeHistory: boolean = false): Promise<WorkflowRunWithDetails> {
42
+ const query = { include_history: includeHistory };
43
+ return this.get(`/runs/${workflowId}/${runId}`, { query });
43
44
  }
44
45
 
45
46
  terminate(workflowId: string, runId: string, reason?: string): Promise<{ message: string }> {
@@ -71,8 +72,8 @@ export class WorkflowsApi extends ApiTopic {
71
72
  return this.get(`/runs/${runId}/updates`, { query });
72
73
  }
73
74
 
74
- async streamMessages(runId: string, onMessage?: (message: AgentMessage) => void, since?: number): Promise<void> {
75
- return new Promise((resolve, reject) => {
75
+ async streamMessages(runId: string, onMessage?: (message: AgentMessage, exitFn?: (payload: unknown) => void) => void, since?: number): Promise<unknown> {
76
+ return new Promise<unknown>((resolve, reject) => {
76
77
  let reconnectAttempts = 0;
77
78
  let lastMessageTimestamp = since || 0;
78
79
  let isClosed = false;
@@ -101,6 +102,14 @@ export class WorkflowsApi extends ApiTopic {
101
102
  }
102
103
  };
103
104
 
105
+ const exit = (payload: unknown) => {
106
+ if (!isClosed) {
107
+ isClosed = true;
108
+ cleanup();
109
+ resolve(payload);
110
+ }
111
+ };
112
+
104
113
  const setupStream = async (isReconnect: boolean = false) => {
105
114
  if (isClosed) return;
106
115
 
@@ -108,31 +117,31 @@ export class WorkflowsApi extends ApiTopic {
108
117
  const EventSourceImpl = await EventSourceProvider();
109
118
  const client = this.client as VertesiaClient;
110
119
  const streamUrl = new URL(client.workflows.baseUrl + "/runs/" + runId + "/stream");
111
-
120
+
112
121
  // Use the timestamp of the last received message for reconnection
113
122
  if (lastMessageTimestamp > 0) {
114
123
  streamUrl.searchParams.set("since", lastMessageTimestamp.toString());
115
124
  }
116
-
125
+
117
126
  const bearerToken = client._auth ? await client._auth() : undefined;
118
127
  if (!bearerToken) {
119
128
  reject(new Error("No auth token available"));
120
129
  return;
121
130
  }
122
-
131
+
123
132
  const token = bearerToken.split(" ")[1];
124
133
  streamUrl.searchParams.set("access_token", token);
125
134
 
126
135
  if (isReconnect) {
127
136
  console.log(`Reconnecting to SSE stream for run ${runId} (attempt ${reconnectAttempts + 1}/${maxReconnectAttempts})`);
128
137
  }
129
-
138
+
130
139
  const sse = new EventSourceImpl(streamUrl.href);
131
140
  currentSse = sse;
132
-
141
+
133
142
  // Prevent Node from exiting prematurely
134
- interval = setInterval(() => {}, 1000);
135
-
143
+ interval = setInterval(() => { }, 1000);
144
+
136
145
  sse.onopen = () => {
137
146
  if (isReconnect) {
138
147
  console.log(`Successfully reconnected to SSE stream for run ${runId}`);
@@ -146,24 +155,24 @@ export class WorkflowsApi extends ApiTopic {
146
155
  console.log("Received comment or heartbeat; ignoring it.: ", ev.data);
147
156
  return;
148
157
  }
149
-
158
+
150
159
  try {
151
160
  const message = JSON.parse(ev.data) as AgentMessage;
152
-
161
+
153
162
  // Update last message timestamp for reconnection
154
163
  if (message.timestamp) {
155
164
  lastMessageTimestamp = Math.max(lastMessageTimestamp, message.timestamp);
156
165
  }
157
166
 
158
- if (onMessage) onMessage(message);
159
-
167
+ if (onMessage) onMessage(message, exit);
168
+
160
169
  // Only close the stream when the main workstream completes
161
170
  if (message.type === AgentMessageType.COMPLETE && (!message.workstream_id || message.workstream_id === 'main')) {
162
171
  console.log("Closing stream due to COMPLETE message from main workstream");
163
172
  if (!isClosed) {
164
173
  isClosed = true;
165
174
  cleanup();
166
- resolve();
175
+ resolve(null);
167
176
  }
168
177
  } else if (message.type === AgentMessageType.COMPLETE) {
169
178
  console.log(`Received COMPLETE message from non-main workstream: ${message.workstream_id || 'unknown'}, keeping stream open`);
@@ -172,7 +181,7 @@ export class WorkflowsApi extends ApiTopic {
172
181
  console.error("Failed to parse SSE message:", err, ev.data);
173
182
  }
174
183
  };
175
-
184
+
176
185
  sse.onerror = (err: any) => {
177
186
  if (isClosed) return;
178
187
 
@@ -183,7 +192,7 @@ export class WorkflowsApi extends ApiTopic {
183
192
  if (reconnectAttempts < maxReconnectAttempts) {
184
193
  const delay = calculateBackoffDelay(reconnectAttempts);
185
194
  console.log(`Attempting to reconnect in ${delay}ms (attempt ${reconnectAttempts + 1}/${maxReconnectAttempts})`);
186
-
195
+
187
196
  reconnectAttempts++;
188
197
  setTimeout(() => {
189
198
  if (!isClosed) {
@@ -211,7 +220,7 @@ export class WorkflowsApi extends ApiTopic {
211
220
  }
212
221
  }
213
222
  };
214
-
223
+
215
224
  // Start the async setup process
216
225
  setupStream(false);
217
226