@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.
- package/lib/cjs/client.js +10 -12
- package/lib/cjs/client.js.map +1 -1
- package/lib/cjs/store/FilesApi.js +19 -10
- package/lib/cjs/store/FilesApi.js.map +1 -1
- package/lib/cjs/store/ObjectsApi.js +28 -17
- package/lib/cjs/store/ObjectsApi.js.map +1 -1
- package/lib/cjs/store/WorkflowsApi.js +12 -4
- package/lib/cjs/store/WorkflowsApi.js.map +1 -1
- package/lib/esm/client.js +10 -12
- package/lib/esm/client.js.map +1 -1
- package/lib/esm/store/FilesApi.js +19 -10
- package/lib/esm/store/FilesApi.js.map +1 -1
- package/lib/esm/store/ObjectsApi.js +28 -17
- package/lib/esm/store/ObjectsApi.js.map +1 -1
- package/lib/esm/store/WorkflowsApi.js +12 -4
- package/lib/esm/store/WorkflowsApi.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/AccountApi.d.ts +0 -1
- package/lib/types/AccountsApi.d.ts +0 -1
- package/lib/types/AnalyticsApi.d.ts +0 -1
- package/lib/types/ApiKeysApi.d.ts +0 -1
- package/lib/types/CommandsApi.d.ts +0 -1
- package/lib/types/EnvironmentsApi.d.ts +0 -1
- package/lib/types/IamApi.d.ts +0 -1
- package/lib/types/InteractionBase.d.ts +0 -1
- package/lib/types/InteractionsApi.d.ts +0 -1
- package/lib/types/PluginsApi.d.ts +0 -1
- package/lib/types/ProjectsApi.d.ts +0 -1
- package/lib/types/PromptsApi.d.ts +0 -1
- package/lib/types/RefsApi.d.ts +0 -1
- package/lib/types/RunsApi.d.ts +0 -1
- package/lib/types/StreamSource.d.ts +0 -1
- package/lib/types/TrainingApi.d.ts +0 -1
- package/lib/types/UsersApi.d.ts +0 -1
- package/lib/types/client.d.ts +5 -6
- package/lib/types/client.d.ts.map +1 -1
- package/lib/types/execute.d.ts +0 -1
- package/lib/types/index.d.ts +0 -1
- package/lib/types/nodejs/NodeStreamSource.d.ts +0 -1
- package/lib/types/nodejs/index.d.ts +0 -1
- package/lib/types/store/AgentsApi.d.ts +0 -1
- package/lib/types/store/AnalyzeDocApi.d.ts +0 -1
- package/lib/types/store/CollectionsApi.d.ts +0 -1
- package/lib/types/store/CommandsApi.d.ts +0 -1
- package/lib/types/store/EmbeddingsApi.d.ts +0 -1
- package/lib/types/store/FilesApi.d.ts +6 -2
- package/lib/types/store/FilesApi.d.ts.map +1 -1
- package/lib/types/store/ObjectsApi.d.ts +7 -1
- package/lib/types/store/ObjectsApi.d.ts.map +1 -1
- package/lib/types/store/TypesApi.d.ts +0 -1
- package/lib/types/store/WorkflowsApi.d.ts +2 -3
- package/lib/types/store/WorkflowsApi.d.ts.map +1 -1
- package/lib/types/store/client.d.ts +0 -1
- package/lib/types/store/errors.d.ts +0 -1
- package/lib/types/store/index.d.ts +0 -1
- package/lib/vertesia-client.js +1 -1
- package/lib/vertesia-client.js.map +1 -1
- package/package.json +4 -4
- package/src/client.ts +14 -15
- package/src/store/FilesApi.ts +19 -10
- package/src/store/ObjectsApi.ts +338 -324
- 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
|
-
|
|
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<
|
|
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
|
|