@agentuity/runtime 0.0.60 → 0.0.62
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/dist/_context.d.ts +11 -7
- package/dist/_context.d.ts.map +1 -1
- package/dist/_context.js +9 -2
- package/dist/_context.js.map +1 -1
- package/dist/_server.d.ts +4 -2
- package/dist/_server.d.ts.map +1 -1
- package/dist/_server.js +79 -31
- package/dist/_server.js.map +1 -1
- package/dist/_services.d.ts +1 -1
- package/dist/_services.d.ts.map +1 -1
- package/dist/_services.js +4 -2
- package/dist/_services.js.map +1 -1
- package/dist/_waituntil.d.ts.map +1 -1
- package/dist/_waituntil.js +5 -2
- package/dist/_waituntil.js.map +1 -1
- package/dist/agent.d.ts +647 -19
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +55 -6
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts +205 -28
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +181 -13
- package/dist/app.js.map +1 -1
- package/dist/index.d.ts +41 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/io/email.d.ts.map +1 -1
- package/dist/io/email.js +11 -3
- package/dist/io/email.js.map +1 -1
- package/dist/router.d.ts +282 -32
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +110 -35
- package/dist/router.js.map +1 -1
- package/dist/services/evalrun/http.d.ts.map +1 -1
- package/dist/services/evalrun/http.js +7 -5
- package/dist/services/evalrun/http.js.map +1 -1
- package/dist/services/local/_util.d.ts.map +1 -1
- package/dist/services/local/_util.js +3 -1
- package/dist/services/local/_util.js.map +1 -1
- package/dist/services/session/http.d.ts.map +1 -1
- package/dist/services/session/http.js +4 -3
- package/dist/services/session/http.js.map +1 -1
- package/dist/session.d.ts +308 -6
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +331 -23
- package/dist/session.js.map +1 -1
- package/package.json +8 -5
- package/src/_context.ts +37 -9
- package/src/_server.ts +96 -36
- package/src/_services.ts +9 -2
- package/src/_waituntil.ts +13 -2
- package/src/agent.ts +856 -68
- package/src/app.ts +238 -38
- package/src/index.ts +42 -2
- package/src/io/email.ts +23 -5
- package/src/router.ts +359 -83
- package/src/services/evalrun/http.ts +15 -4
- package/src/services/local/_util.ts +7 -1
- package/src/services/session/http.ts +5 -2
- package/src/session.ts +686 -26
package/dist/session.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { getCookie, setCookie } from 'hono/cookie';
|
|
2
2
|
import { fireEvent } from './app';
|
|
3
|
+
import { getServiceUrls } from '@agentuity/server';
|
|
4
|
+
import { WebSocket } from 'ws';
|
|
3
5
|
// WeakMap to store event listeners for Thread and Session instances
|
|
4
6
|
const threadEventListeners = new WeakMap();
|
|
5
7
|
const sessionEventListeners = new WeakMap();
|
|
@@ -35,14 +37,16 @@ export function generateId(prefix) {
|
|
|
35
37
|
}
|
|
36
38
|
export class DefaultThread {
|
|
37
39
|
#lastUsed;
|
|
40
|
+
#initialStateJson;
|
|
38
41
|
id;
|
|
39
42
|
state;
|
|
40
43
|
provider;
|
|
41
|
-
constructor(provider, id) {
|
|
44
|
+
constructor(provider, id, initialStateJson) {
|
|
42
45
|
this.provider = provider;
|
|
43
46
|
this.id = id;
|
|
44
47
|
this.state = new Map();
|
|
45
48
|
this.#lastUsed = Date.now();
|
|
49
|
+
this.#initialStateJson = initialStateJson;
|
|
46
50
|
}
|
|
47
51
|
addEventListener(eventName, callback) {
|
|
48
52
|
let listeners = threadEventListeners.get(this);
|
|
@@ -70,7 +74,7 @@ export class DefaultThread {
|
|
|
70
74
|
await fireThreadEvent(this, eventName);
|
|
71
75
|
}
|
|
72
76
|
async destroy() {
|
|
73
|
-
this.provider.destroy(this);
|
|
77
|
+
await this.provider.destroy(this);
|
|
74
78
|
}
|
|
75
79
|
touch() {
|
|
76
80
|
this.#lastUsed = Date.now();
|
|
@@ -78,6 +82,24 @@ export class DefaultThread {
|
|
|
78
82
|
expired() {
|
|
79
83
|
return Date.now() - this.#lastUsed >= 3.6e6; // 1 hour
|
|
80
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if thread state has been modified since restore
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
isDirty() {
|
|
90
|
+
if (this.state.size === 0 && !this.#initialStateJson) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
const currentJson = JSON.stringify(Object.fromEntries(this.state));
|
|
94
|
+
return currentJson !== this.#initialStateJson;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get serialized state for saving
|
|
98
|
+
* @internal
|
|
99
|
+
*/
|
|
100
|
+
getSerializedState() {
|
|
101
|
+
return JSON.stringify(Object.fromEntries(this.state));
|
|
102
|
+
}
|
|
81
103
|
}
|
|
82
104
|
export class DefaultSession {
|
|
83
105
|
id;
|
|
@@ -113,24 +135,259 @@ export class DefaultSession {
|
|
|
113
135
|
async fireEvent(eventName) {
|
|
114
136
|
await fireSessionEvent(this, eventName);
|
|
115
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Serialize session state to JSON string for persistence.
|
|
140
|
+
* Returns undefined if state is empty or exceeds 1MB limit.
|
|
141
|
+
* @internal
|
|
142
|
+
*/
|
|
143
|
+
serializeUserData() {
|
|
144
|
+
if (this.state.size === 0) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const obj = Object.fromEntries(this.state);
|
|
149
|
+
const json = JSON.stringify(obj);
|
|
150
|
+
// Check 1MB limit (1,048,576 bytes)
|
|
151
|
+
const sizeInBytes = new TextEncoder().encode(json).length;
|
|
152
|
+
if (sizeInBytes > 1048576) {
|
|
153
|
+
console.error(`Session ${this.id} user_data exceeds 1MB limit (${sizeInBytes} bytes), data will not be persisted`);
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
return json;
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
console.error(`Failed to serialize session ${this.id} user_data:`, err);
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
116
163
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
164
|
+
/**
|
|
165
|
+
* WebSocket client for thread state persistence
|
|
166
|
+
* @internal
|
|
167
|
+
*/
|
|
168
|
+
class ThreadWebSocketClient {
|
|
169
|
+
ws = null;
|
|
170
|
+
authenticated = false;
|
|
171
|
+
pendingRequests = new Map();
|
|
172
|
+
requestCounter = 0;
|
|
173
|
+
reconnectAttempts = 0;
|
|
174
|
+
maxReconnectAttempts = 5;
|
|
175
|
+
apiKey;
|
|
176
|
+
wsUrl;
|
|
177
|
+
wsConnecting = null;
|
|
178
|
+
constructor(apiKey, wsUrl) {
|
|
179
|
+
this.apiKey = apiKey;
|
|
180
|
+
this.wsUrl = wsUrl;
|
|
181
|
+
}
|
|
182
|
+
async connect() {
|
|
183
|
+
return new Promise((resolve, reject) => {
|
|
184
|
+
// Set connection timeout
|
|
185
|
+
const connectionTimeout = setTimeout(() => {
|
|
186
|
+
this.cleanup();
|
|
187
|
+
reject(new Error('WebSocket connection timeout (10s)'));
|
|
188
|
+
}, 10000);
|
|
189
|
+
try {
|
|
190
|
+
this.ws = new WebSocket(this.wsUrl);
|
|
191
|
+
this.ws.on('open', () => {
|
|
192
|
+
// Send authentication (do NOT clear timeout yet - wait for auth response)
|
|
193
|
+
this.ws?.send(JSON.stringify({ authorization: this.apiKey }));
|
|
194
|
+
});
|
|
195
|
+
this.ws.on('message', (data) => {
|
|
196
|
+
try {
|
|
197
|
+
const message = JSON.parse(data.toString());
|
|
198
|
+
// Handle auth response
|
|
199
|
+
if ('success' in message && !this.authenticated) {
|
|
200
|
+
clearTimeout(connectionTimeout);
|
|
201
|
+
if (message.success) {
|
|
202
|
+
this.authenticated = true;
|
|
203
|
+
this.reconnectAttempts = 0;
|
|
204
|
+
resolve();
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
const err = new Error(`WebSocket authentication failed: ${message.error || 'Unknown error'}`);
|
|
208
|
+
this.cleanup();
|
|
209
|
+
reject(err);
|
|
210
|
+
}
|
|
211
|
+
return;
|
|
126
212
|
}
|
|
127
|
-
|
|
128
|
-
|
|
213
|
+
// Handle action response
|
|
214
|
+
if ('id' in message && this.pendingRequests.has(message.id)) {
|
|
215
|
+
const pending = this.pendingRequests.get(message.id);
|
|
216
|
+
this.pendingRequests.delete(message.id);
|
|
217
|
+
if (message.success) {
|
|
218
|
+
pending.resolve(message.data);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
pending.reject(new Error(message.error || 'Request failed'));
|
|
222
|
+
}
|
|
129
223
|
}
|
|
130
|
-
}
|
|
131
|
-
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// Ignore parse errors
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
this.ws.on('error', (err) => {
|
|
230
|
+
clearTimeout(connectionTimeout);
|
|
231
|
+
if (!this.authenticated) {
|
|
232
|
+
reject(new Error(`WebSocket error: ${err.message}`));
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
this.ws.on('close', () => {
|
|
236
|
+
clearTimeout(connectionTimeout);
|
|
237
|
+
const wasAuthenticated = this.authenticated;
|
|
238
|
+
this.authenticated = false;
|
|
239
|
+
// Reject all pending requests
|
|
240
|
+
for (const [id, pending] of this.pendingRequests) {
|
|
241
|
+
pending.reject(new Error('WebSocket connection closed'));
|
|
242
|
+
this.pendingRequests.delete(id);
|
|
243
|
+
}
|
|
244
|
+
// Reject connecting promise if still pending
|
|
245
|
+
if (!wasAuthenticated) {
|
|
246
|
+
reject(new Error('WebSocket closed before authentication'));
|
|
247
|
+
}
|
|
248
|
+
// Attempt reconnection only if we were previously authenticated
|
|
249
|
+
if (wasAuthenticated && this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
250
|
+
this.reconnectAttempts++;
|
|
251
|
+
const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000);
|
|
252
|
+
// Schedule reconnection with backoff delay
|
|
253
|
+
setTimeout(() => {
|
|
254
|
+
// Create new connection promise for reconnection
|
|
255
|
+
this.wsConnecting = this.connect().catch(() => {
|
|
256
|
+
// Reconnection failed, reset
|
|
257
|
+
this.wsConnecting = null;
|
|
258
|
+
});
|
|
259
|
+
}, delay);
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
clearTimeout(connectionTimeout);
|
|
265
|
+
reject(err);
|
|
132
266
|
}
|
|
133
|
-
}
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
async restore(threadId) {
|
|
270
|
+
// Wait for connection/reconnection if in progress
|
|
271
|
+
if (this.wsConnecting) {
|
|
272
|
+
await this.wsConnecting;
|
|
273
|
+
}
|
|
274
|
+
if (!this.authenticated || !this.ws) {
|
|
275
|
+
throw new Error('WebSocket not connected or authenticated');
|
|
276
|
+
}
|
|
277
|
+
return new Promise((resolve, reject) => {
|
|
278
|
+
const requestId = `req_${++this.requestCounter}`;
|
|
279
|
+
this.pendingRequests.set(requestId, { resolve, reject });
|
|
280
|
+
const message = {
|
|
281
|
+
id: requestId,
|
|
282
|
+
action: 'restore',
|
|
283
|
+
data: { thread_id: threadId },
|
|
284
|
+
};
|
|
285
|
+
this.ws.send(JSON.stringify(message));
|
|
286
|
+
// Timeout after 10 seconds
|
|
287
|
+
setTimeout(() => {
|
|
288
|
+
if (this.pendingRequests.has(requestId)) {
|
|
289
|
+
this.pendingRequests.delete(requestId);
|
|
290
|
+
reject(new Error('Request timeout'));
|
|
291
|
+
}
|
|
292
|
+
}, 10000);
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
async save(threadId, userData) {
|
|
296
|
+
// Wait for connection/reconnection if in progress
|
|
297
|
+
if (this.wsConnecting) {
|
|
298
|
+
await this.wsConnecting;
|
|
299
|
+
}
|
|
300
|
+
if (!this.authenticated || !this.ws) {
|
|
301
|
+
throw new Error('WebSocket not connected or authenticated');
|
|
302
|
+
}
|
|
303
|
+
// Check 1MB limit
|
|
304
|
+
const sizeInBytes = new TextEncoder().encode(userData).length;
|
|
305
|
+
if (sizeInBytes > 1048576) {
|
|
306
|
+
console.error(`Thread ${threadId} user_data exceeds 1MB limit (${sizeInBytes} bytes), data will not be persisted`);
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
return new Promise((resolve, reject) => {
|
|
310
|
+
const requestId = crypto.randomUUID();
|
|
311
|
+
this.pendingRequests.set(requestId, {
|
|
312
|
+
resolve: () => resolve(),
|
|
313
|
+
reject,
|
|
314
|
+
});
|
|
315
|
+
const message = {
|
|
316
|
+
id: requestId,
|
|
317
|
+
action: 'save',
|
|
318
|
+
data: { thread_id: threadId, user_data: userData },
|
|
319
|
+
};
|
|
320
|
+
this.ws.send(JSON.stringify(message));
|
|
321
|
+
// Timeout after 10 seconds
|
|
322
|
+
setTimeout(() => {
|
|
323
|
+
if (this.pendingRequests.has(requestId)) {
|
|
324
|
+
this.pendingRequests.delete(requestId);
|
|
325
|
+
reject(new Error('Request timeout'));
|
|
326
|
+
}
|
|
327
|
+
}, 10_000);
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
async delete(threadId) {
|
|
331
|
+
// Wait for connection/reconnection if in progress
|
|
332
|
+
if (this.wsConnecting) {
|
|
333
|
+
await this.wsConnecting;
|
|
334
|
+
}
|
|
335
|
+
if (!this.authenticated || !this.ws) {
|
|
336
|
+
throw new Error('WebSocket not connected or authenticated');
|
|
337
|
+
}
|
|
338
|
+
return new Promise((resolve, reject) => {
|
|
339
|
+
const requestId = crypto.randomUUID();
|
|
340
|
+
this.pendingRequests.set(requestId, {
|
|
341
|
+
resolve: () => resolve(),
|
|
342
|
+
reject,
|
|
343
|
+
});
|
|
344
|
+
const message = {
|
|
345
|
+
id: requestId,
|
|
346
|
+
action: 'delete',
|
|
347
|
+
data: { thread_id: threadId },
|
|
348
|
+
};
|
|
349
|
+
this.ws.send(JSON.stringify(message));
|
|
350
|
+
// Timeout after 10 seconds
|
|
351
|
+
setTimeout(() => {
|
|
352
|
+
if (this.pendingRequests.has(requestId)) {
|
|
353
|
+
this.pendingRequests.delete(requestId);
|
|
354
|
+
reject(new Error('Request timeout'));
|
|
355
|
+
}
|
|
356
|
+
}, 10_000);
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
cleanup() {
|
|
360
|
+
if (this.ws) {
|
|
361
|
+
this.ws.close();
|
|
362
|
+
this.ws = null;
|
|
363
|
+
}
|
|
364
|
+
this.authenticated = false;
|
|
365
|
+
this.pendingRequests.clear();
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
export class DefaultThreadProvider {
|
|
369
|
+
wsClient = null;
|
|
370
|
+
wsConnecting = null;
|
|
371
|
+
async initialize(_appState) {
|
|
372
|
+
// Initialize WebSocket connection for thread persistence (async, non-blocking)
|
|
373
|
+
const apiKey = process.env.AGENTUITY_SDK_KEY;
|
|
374
|
+
if (apiKey) {
|
|
375
|
+
const serviceUrls = getServiceUrls();
|
|
376
|
+
const catalystUrl = serviceUrls.catalyst;
|
|
377
|
+
const wsUrl = new URL('/thread/ws', catalystUrl.replace(/^http/, 'ws'));
|
|
378
|
+
this.wsClient = new ThreadWebSocketClient(apiKey, wsUrl.toString());
|
|
379
|
+
// Connect in background, don't block initialization
|
|
380
|
+
this.wsConnecting = this.wsClient
|
|
381
|
+
.connect()
|
|
382
|
+
.then(() => {
|
|
383
|
+
this.wsConnecting = null;
|
|
384
|
+
})
|
|
385
|
+
.catch((err) => {
|
|
386
|
+
console.error('Failed to connect to thread WebSocket:', err);
|
|
387
|
+
this.wsClient = null;
|
|
388
|
+
this.wsConnecting = null;
|
|
389
|
+
});
|
|
390
|
+
}
|
|
134
391
|
}
|
|
135
392
|
async restore(ctx) {
|
|
136
393
|
const cookie = getCookie(ctx);
|
|
@@ -141,29 +398,80 @@ export class DefaultThreadProvider {
|
|
|
141
398
|
threadId = threadId || generateId('thrd');
|
|
142
399
|
if (threadId) {
|
|
143
400
|
setCookie(ctx, 'atid', threadId);
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
401
|
+
}
|
|
402
|
+
// Wait for WebSocket connection if still connecting
|
|
403
|
+
if (this.wsConnecting) {
|
|
404
|
+
await this.wsConnecting;
|
|
405
|
+
}
|
|
406
|
+
// Restore thread state from WebSocket if available
|
|
407
|
+
let initialStateJson;
|
|
408
|
+
if (this.wsClient) {
|
|
409
|
+
try {
|
|
410
|
+
const restoredData = await this.wsClient.restore(threadId);
|
|
411
|
+
if (restoredData) {
|
|
412
|
+
initialStateJson = restoredData;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
// Continue with empty state rather than failing
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const thread = new DefaultThread(this, threadId, initialStateJson);
|
|
420
|
+
// Populate thread state from restored data
|
|
421
|
+
if (initialStateJson) {
|
|
422
|
+
try {
|
|
423
|
+
const data = JSON.parse(initialStateJson);
|
|
424
|
+
for (const [key, value] of Object.entries(data)) {
|
|
425
|
+
thread.state.set(key, value);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
catch {
|
|
429
|
+
// Continue with empty state if parsing fails
|
|
147
430
|
}
|
|
148
431
|
}
|
|
149
|
-
const thread = new DefaultThread(this, threadId);
|
|
150
|
-
this.threads.set(thread.id, thread);
|
|
151
432
|
await fireEvent('thread.created', thread);
|
|
152
433
|
return thread;
|
|
153
434
|
}
|
|
154
435
|
async save(thread) {
|
|
155
436
|
if (thread instanceof DefaultThread) {
|
|
156
437
|
thread.touch();
|
|
438
|
+
// Wait for WebSocket connection if still connecting
|
|
439
|
+
if (this.wsConnecting) {
|
|
440
|
+
await this.wsConnecting;
|
|
441
|
+
}
|
|
442
|
+
// Only save to WebSocket if state has changed
|
|
443
|
+
if (this.wsClient && thread.isDirty()) {
|
|
444
|
+
try {
|
|
445
|
+
const serialized = thread.getSerializedState();
|
|
446
|
+
await this.wsClient.save(thread.id, serialized);
|
|
447
|
+
}
|
|
448
|
+
catch {
|
|
449
|
+
// Don't throw - allow request to complete even if save fails
|
|
450
|
+
}
|
|
451
|
+
}
|
|
157
452
|
}
|
|
158
453
|
}
|
|
159
454
|
async destroy(thread) {
|
|
160
455
|
if (thread instanceof DefaultThread) {
|
|
161
456
|
try {
|
|
457
|
+
// Wait for WebSocket connection if still connecting
|
|
458
|
+
if (this.wsConnecting) {
|
|
459
|
+
await this.wsConnecting;
|
|
460
|
+
}
|
|
461
|
+
// Delete thread from remote storage
|
|
462
|
+
if (this.wsClient) {
|
|
463
|
+
try {
|
|
464
|
+
await this.wsClient.delete(thread.id);
|
|
465
|
+
}
|
|
466
|
+
catch (err) {
|
|
467
|
+
console.error(`Failed to delete thread ${thread.id} from remote storage:`, err);
|
|
468
|
+
// Continue with local cleanup even if remote delete fails
|
|
469
|
+
}
|
|
470
|
+
}
|
|
162
471
|
await thread.fireEvent('destroyed');
|
|
163
472
|
await fireEvent('thread.destroyed', thread);
|
|
164
473
|
}
|
|
165
474
|
finally {
|
|
166
|
-
this.threads.delete(thread.id);
|
|
167
475
|
threadEventListeners.delete(thread);
|
|
168
476
|
}
|
|
169
477
|
}
|
|
@@ -171,7 +479,7 @@ export class DefaultThreadProvider {
|
|
|
171
479
|
}
|
|
172
480
|
export class DefaultSessionProvider {
|
|
173
481
|
sessions = new Map();
|
|
174
|
-
async initialize() {
|
|
482
|
+
async initialize(_appState) {
|
|
175
483
|
// No initialization needed for in-memory provider
|
|
176
484
|
}
|
|
177
485
|
async restore(thread, sessionId) {
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/runtime",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.62",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"prepublishOnly": "bun run clean && bun run build"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@agentuity/core": "0.0.
|
|
29
|
-
"@agentuity/server": "0.0.
|
|
28
|
+
"@agentuity/core": "0.0.62",
|
|
29
|
+
"@agentuity/server": "0.0.62",
|
|
30
30
|
"@opentelemetry/api": "^1.9.0",
|
|
31
31
|
"@opentelemetry/api-logs": "^0.207.0",
|
|
32
32
|
"@opentelemetry/auto-instrumentations-node": "^0.66.0",
|
|
@@ -46,16 +46,19 @@
|
|
|
46
46
|
"@traceloop/node-server-sdk": "0.21.1",
|
|
47
47
|
"zod": "^4.1.12",
|
|
48
48
|
"mailparser": "^3.7.1",
|
|
49
|
-
"@types/mailparser": "^3.4.6"
|
|
49
|
+
"@types/mailparser": "^3.4.6",
|
|
50
|
+
"ws": "^8.18.0",
|
|
51
|
+
"@types/ws": "^8.5.13"
|
|
50
52
|
},
|
|
51
53
|
"peerDependencies": {
|
|
52
54
|
"hono": "^4.10.3"
|
|
53
55
|
},
|
|
54
56
|
"devDependencies": {
|
|
55
57
|
"@types/bun": "latest",
|
|
56
|
-
"bun-types": "latest",
|
|
57
58
|
"@types/react": "^19.2.2",
|
|
58
59
|
"@types/react-dom": "^19.2.2",
|
|
60
|
+
"bun-types": "latest",
|
|
61
|
+
"expect-type": "^1.2.2",
|
|
59
62
|
"react": "^19.2.0",
|
|
60
63
|
"react-dom": "^19.2.0",
|
|
61
64
|
"typescript": "^5.9.0"
|
package/src/_context.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
import type { Context as HonoContext } from 'hono';
|
|
3
3
|
import type { Tracer } from '@opentelemetry/api';
|
|
4
|
-
import
|
|
4
|
+
import {
|
|
5
|
+
StructuredError,
|
|
6
|
+
type KeyValueStorage,
|
|
7
|
+
type ObjectStorage,
|
|
8
|
+
type StreamStorage,
|
|
9
|
+
type VectorStorage,
|
|
10
|
+
} from '@agentuity/core';
|
|
5
11
|
import type { AgentContext, AgentName, AgentRegistry, AgentRunner } from './agent';
|
|
6
12
|
import type { Logger } from './logger';
|
|
7
13
|
import type WaitUntilHandler from './_waituntil';
|
|
@@ -14,6 +20,8 @@ export interface RequestAgentContextArgs<
|
|
|
14
20
|
TCurrent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
|
|
15
21
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
22
|
TParent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
|
|
23
|
+
TConfig = unknown,
|
|
24
|
+
TAppState = Record<string, never>,
|
|
17
25
|
> {
|
|
18
26
|
sessionId: string;
|
|
19
27
|
agent: TAgentMap;
|
|
@@ -25,6 +33,8 @@ export interface RequestAgentContextArgs<
|
|
|
25
33
|
session: Session;
|
|
26
34
|
thread: Thread;
|
|
27
35
|
handler: WaitUntilHandler;
|
|
36
|
+
config: TConfig;
|
|
37
|
+
app: TAppState;
|
|
28
38
|
}
|
|
29
39
|
|
|
30
40
|
export class RequestAgentContext<
|
|
@@ -33,7 +43,9 @@ export class RequestAgentContext<
|
|
|
33
43
|
TCurrent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
|
|
34
44
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
35
45
|
TParent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
|
|
36
|
-
|
|
46
|
+
TConfig = unknown,
|
|
47
|
+
TAppState = Record<string, never>,
|
|
48
|
+
> implements AgentContext<TAgentMap, TCurrent, TParent, TConfig, TAppState>
|
|
37
49
|
{
|
|
38
50
|
agent: TAgentMap;
|
|
39
51
|
current: TCurrent;
|
|
@@ -49,9 +61,11 @@ export class RequestAgentContext<
|
|
|
49
61
|
state: Map<string, unknown>;
|
|
50
62
|
session: Session;
|
|
51
63
|
thread: Thread;
|
|
64
|
+
config: TConfig;
|
|
65
|
+
app: TAppState;
|
|
52
66
|
private handler: WaitUntilHandler;
|
|
53
67
|
|
|
54
|
-
constructor(args: RequestAgentContextArgs<TAgentMap, TCurrent, TParent>) {
|
|
68
|
+
constructor(args: RequestAgentContextArgs<TAgentMap, TCurrent, TParent, TConfig, TAppState>) {
|
|
55
69
|
this.agent = args.agent;
|
|
56
70
|
this.current = args.current;
|
|
57
71
|
this.parent = args.parent;
|
|
@@ -61,6 +75,8 @@ export class RequestAgentContext<
|
|
|
61
75
|
this.tracer = args.tracer;
|
|
62
76
|
this.thread = args.thread;
|
|
63
77
|
this.session = args.session;
|
|
78
|
+
this.config = args.config;
|
|
79
|
+
this.app = args.app;
|
|
64
80
|
this.state = new Map<string, unknown>();
|
|
65
81
|
this.handler = args.handler;
|
|
66
82
|
registerServices(this, false); // agents already populated via args.agent
|
|
@@ -72,7 +88,7 @@ export class RequestAgentContext<
|
|
|
72
88
|
}
|
|
73
89
|
|
|
74
90
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
75
|
-
const agentAsyncLocalStorage = new AsyncLocalStorage<AgentContext<any, any, any>>();
|
|
91
|
+
const agentAsyncLocalStorage = new AsyncLocalStorage<AgentContext<any, any, any, any, any>>();
|
|
76
92
|
const httpAsyncLocalStorage = new AsyncLocalStorage<HonoContext>();
|
|
77
93
|
|
|
78
94
|
export const inAgentContext = (): boolean => {
|
|
@@ -85,19 +101,29 @@ export const inHTTPContext = (): boolean => {
|
|
|
85
101
|
return !!context;
|
|
86
102
|
};
|
|
87
103
|
|
|
104
|
+
const AgentContextNotAvailableError = StructuredError(
|
|
105
|
+
'AgentContextNotAvailableError',
|
|
106
|
+
'AgentContext is not available'
|
|
107
|
+
);
|
|
108
|
+
|
|
88
109
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
89
|
-
export const getAgentContext = (): AgentContext<any, any, any> => {
|
|
110
|
+
export const getAgentContext = (): AgentContext<any, any, any, any, any> => {
|
|
90
111
|
const context = agentAsyncLocalStorage.getStore();
|
|
91
112
|
if (!context) {
|
|
92
|
-
throw new
|
|
113
|
+
throw new AgentContextNotAvailableError();
|
|
93
114
|
}
|
|
94
115
|
return context;
|
|
95
116
|
};
|
|
96
117
|
|
|
118
|
+
const HTTPContextNotAvailableError = StructuredError(
|
|
119
|
+
'HTTPContextNotAvailableError',
|
|
120
|
+
'HTTPContext is not available'
|
|
121
|
+
);
|
|
122
|
+
|
|
97
123
|
export const getHTTPContext = (): HonoContext => {
|
|
98
124
|
const context = httpAsyncLocalStorage.getStore();
|
|
99
125
|
if (!context) {
|
|
100
|
-
throw new
|
|
126
|
+
throw new HTTPContextNotAvailableError();
|
|
101
127
|
}
|
|
102
128
|
return context;
|
|
103
129
|
};
|
|
@@ -111,12 +137,14 @@ export const runInAgentContext = <
|
|
|
111
137
|
TCurrent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
|
|
112
138
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
113
139
|
TParent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
|
|
140
|
+
TConfig = unknown,
|
|
141
|
+
TAppState = Record<string, never>,
|
|
114
142
|
>(
|
|
115
143
|
ctxObject: Record<string, unknown>,
|
|
116
|
-
args: RequestAgentContextArgs<TAgentMap, TCurrent, TParent>,
|
|
144
|
+
args: RequestAgentContextArgs<TAgentMap, TCurrent, TParent, TConfig, TAppState>,
|
|
117
145
|
next: () => Promise<void>
|
|
118
146
|
) => {
|
|
119
|
-
const ctx = new RequestAgentContext<TAgentMap, TCurrent, TParent>(args);
|
|
147
|
+
const ctx = new RequestAgentContext<TAgentMap, TCurrent, TParent, TConfig, TAppState>(args);
|
|
120
148
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
149
|
const _ctx = ctx as any;
|
|
122
150
|
Object.getOwnPropertyNames(ctx).forEach((k) => {
|