@agentuity/runtime 0.0.104 → 0.0.106

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 (125) hide show
  1. package/README.md +61 -35
  2. package/dist/_context.d.ts +2 -1
  3. package/dist/_context.d.ts.map +1 -1
  4. package/dist/_context.js +1 -0
  5. package/dist/_context.js.map +1 -1
  6. package/dist/_metadata.d.ts +4 -0
  7. package/dist/_metadata.d.ts.map +1 -1
  8. package/dist/_metadata.js +28 -1
  9. package/dist/_metadata.js.map +1 -1
  10. package/dist/_server.d.ts +1 -1
  11. package/dist/_server.d.ts.map +1 -1
  12. package/dist/_server.js +4 -1
  13. package/dist/_server.js.map +1 -1
  14. package/dist/_services.d.ts +2 -1
  15. package/dist/_services.d.ts.map +1 -1
  16. package/dist/_services.js +11 -2
  17. package/dist/_services.js.map +1 -1
  18. package/dist/_standalone.d.ts +2 -1
  19. package/dist/_standalone.d.ts.map +1 -1
  20. package/dist/_standalone.js +1 -0
  21. package/dist/_standalone.js.map +1 -1
  22. package/dist/_tokens.d.ts +9 -1
  23. package/dist/_tokens.d.ts.map +1 -1
  24. package/dist/_tokens.js +5 -8
  25. package/dist/_tokens.js.map +1 -1
  26. package/dist/agent.d.ts +26 -2
  27. package/dist/agent.d.ts.map +1 -1
  28. package/dist/agent.js +10 -0
  29. package/dist/agent.js.map +1 -1
  30. package/dist/app.d.ts +7 -3
  31. package/dist/app.d.ts.map +1 -1
  32. package/dist/app.js.map +1 -1
  33. package/dist/bun-s3-patch.d.ts +26 -0
  34. package/dist/bun-s3-patch.d.ts.map +1 -0
  35. package/dist/bun-s3-patch.js +65 -0
  36. package/dist/bun-s3-patch.js.map +1 -0
  37. package/dist/handlers/cron.d.ts +47 -0
  38. package/dist/handlers/cron.d.ts.map +1 -0
  39. package/dist/handlers/cron.js +49 -0
  40. package/dist/handlers/cron.js.map +1 -0
  41. package/dist/handlers/index.d.ts +5 -0
  42. package/dist/handlers/index.d.ts.map +1 -0
  43. package/dist/handlers/index.js +5 -0
  44. package/dist/handlers/index.js.map +1 -0
  45. package/dist/handlers/sse.d.ts +74 -0
  46. package/dist/handlers/sse.d.ts.map +1 -0
  47. package/dist/handlers/sse.js +70 -0
  48. package/dist/handlers/sse.js.map +1 -0
  49. package/dist/handlers/stream.d.ts +52 -0
  50. package/dist/handlers/stream.d.ts.map +1 -0
  51. package/dist/handlers/stream.js +75 -0
  52. package/dist/handlers/stream.js.map +1 -0
  53. package/dist/handlers/websocket.d.ts +49 -0
  54. package/dist/handlers/websocket.d.ts.map +1 -0
  55. package/dist/handlers/websocket.js +130 -0
  56. package/dist/handlers/websocket.js.map +1 -0
  57. package/dist/index.d.ts +2 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +4 -2
  60. package/dist/index.js.map +1 -1
  61. package/dist/middleware.d.ts +1 -1
  62. package/dist/middleware.d.ts.map +1 -1
  63. package/dist/middleware.js +8 -6
  64. package/dist/middleware.js.map +1 -1
  65. package/dist/otel/logger.d.ts +1 -4
  66. package/dist/otel/logger.d.ts.map +1 -1
  67. package/dist/otel/logger.js +11 -2
  68. package/dist/otel/logger.js.map +1 -1
  69. package/dist/router.d.ts +46 -236
  70. package/dist/router.d.ts.map +1 -1
  71. package/dist/router.js +82 -349
  72. package/dist/router.js.map +1 -1
  73. package/dist/services/sandbox/http.d.ts +13 -0
  74. package/dist/services/sandbox/http.d.ts.map +1 -0
  75. package/dist/services/sandbox/http.js +130 -0
  76. package/dist/services/sandbox/http.js.map +1 -0
  77. package/dist/services/sandbox/index.d.ts +2 -0
  78. package/dist/services/sandbox/index.d.ts.map +1 -0
  79. package/dist/services/sandbox/index.js +2 -0
  80. package/dist/services/sandbox/index.js.map +1 -0
  81. package/dist/services/session/http.d.ts +12 -1
  82. package/dist/services/session/http.d.ts.map +1 -1
  83. package/dist/services/session/http.js +31 -1
  84. package/dist/services/session/http.js.map +1 -1
  85. package/dist/services/thread/local.d.ts.map +1 -1
  86. package/dist/services/thread/local.js +7 -6
  87. package/dist/services/thread/local.js.map +1 -1
  88. package/dist/session.d.ts +35 -8
  89. package/dist/session.d.ts.map +1 -1
  90. package/dist/session.js +25 -24
  91. package/dist/session.js.map +1 -1
  92. package/dist/workbench.d.ts +6 -2
  93. package/dist/workbench.d.ts.map +1 -1
  94. package/dist/workbench.js +40 -34
  95. package/dist/workbench.js.map +1 -1
  96. package/package.json +5 -7
  97. package/src/_context.ts +2 -0
  98. package/src/_metadata.ts +37 -1
  99. package/src/_server.ts +4 -1
  100. package/src/_services.ts +12 -2
  101. package/src/_standalone.ts +7 -1
  102. package/src/_tokens.ts +5 -9
  103. package/src/agent.ts +40 -1
  104. package/src/app.ts +9 -2
  105. package/src/bun-s3-patch.ts +91 -0
  106. package/src/handlers/cron.ts +70 -0
  107. package/src/handlers/index.ts +4 -0
  108. package/src/handlers/sse.ts +118 -0
  109. package/src/handlers/stream.ts +86 -0
  110. package/src/handlers/websocket.ts +153 -0
  111. package/src/index.ts +18 -3
  112. package/src/middleware.ts +8 -10
  113. package/src/otel/logger.ts +13 -2
  114. package/src/router.ts +110 -597
  115. package/src/services/sandbox/http.ts +215 -0
  116. package/src/services/sandbox/index.ts +1 -0
  117. package/src/services/session/http.ts +39 -1
  118. package/src/services/thread/local.ts +8 -5
  119. package/src/session.ts +58 -32
  120. package/src/workbench.ts +41 -39
  121. package/dist/io/email.d.ts +0 -77
  122. package/dist/io/email.d.ts.map +0 -1
  123. package/dist/io/email.js +0 -162
  124. package/dist/io/email.js.map +0 -1
  125. package/src/io/email.ts +0 -191
@@ -0,0 +1,74 @@
1
+ import type { Context, Handler } from 'hono';
2
+ import type { Env } from '../app';
3
+ /**
4
+ * SSE message format for Server-Sent Events.
5
+ */
6
+ export interface SSEMessage {
7
+ data: string;
8
+ event?: string;
9
+ id?: string;
10
+ retry?: number;
11
+ }
12
+ /**
13
+ * SSE stream interface for writing Server-Sent Events.
14
+ */
15
+ export interface SSEStream {
16
+ /**
17
+ * Write a simple value as SSE data.
18
+ * Strings, numbers, and booleans are converted to string data.
19
+ * Objects are passed through as SSE message format.
20
+ */
21
+ write: (data: string | number | boolean | SSEMessage) => Promise<void>;
22
+ /**
23
+ * Write a properly formatted SSE message.
24
+ */
25
+ writeSSE: (message: SSEMessage) => Promise<void>;
26
+ /**
27
+ * Register a callback for when the client aborts the connection.
28
+ */
29
+ onAbort: (callback: () => void) => void;
30
+ /**
31
+ * Close the SSE stream.
32
+ */
33
+ close: () => void;
34
+ }
35
+ /**
36
+ * Handler function for SSE connections.
37
+ * Receives the Hono context and SSE stream with a flattened signature.
38
+ */
39
+ export type SSEHandler<E extends Env = Env> = (c: Context<E>, stream: SSEStream) => void | Promise<void>;
40
+ /**
41
+ * Creates an SSE (Server-Sent Events) middleware for streaming updates to clients.
42
+ *
43
+ * Use with router.get() to create an SSE endpoint:
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * import { createRouter, sse } from '@agentuity/runtime';
48
+ *
49
+ * const router = createRouter();
50
+ *
51
+ * router.get('/events', sse((c, stream) => {
52
+ * let count = 0;
53
+ * const interval = setInterval(() => {
54
+ * stream.writeSSE({
55
+ * data: `Event ${++count}`,
56
+ * event: 'update'
57
+ * });
58
+ * if (count >= 10) {
59
+ * clearInterval(interval);
60
+ * stream.close();
61
+ * }
62
+ * }, 1000);
63
+ *
64
+ * stream.onAbort(() => {
65
+ * clearInterval(interval);
66
+ * });
67
+ * }));
68
+ * ```
69
+ *
70
+ * @param handler - Handler function receiving context and SSE stream
71
+ * @returns Hono handler for SSE streaming
72
+ */
73
+ export declare function sse<E extends Env = Env>(handler: SSEHandler<E>): Handler<E>;
74
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/handlers/sse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB;;;;OAIG;IACH,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE;;OAEG;IACH,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD;;OAEG;IACH,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAC7C,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACb,MAAM,EAAE,SAAS,KACb,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAoC3E"}
@@ -0,0 +1,70 @@
1
+ import { streamSSE as honoStreamSSE } from 'hono/streaming';
2
+ import { getAgentAsyncLocalStorage } from '../_context';
3
+ /**
4
+ * Creates an SSE (Server-Sent Events) middleware for streaming updates to clients.
5
+ *
6
+ * Use with router.get() to create an SSE endpoint:
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { createRouter, sse } from '@agentuity/runtime';
11
+ *
12
+ * const router = createRouter();
13
+ *
14
+ * router.get('/events', sse((c, stream) => {
15
+ * let count = 0;
16
+ * const interval = setInterval(() => {
17
+ * stream.writeSSE({
18
+ * data: `Event ${++count}`,
19
+ * event: 'update'
20
+ * });
21
+ * if (count >= 10) {
22
+ * clearInterval(interval);
23
+ * stream.close();
24
+ * }
25
+ * }, 1000);
26
+ *
27
+ * stream.onAbort(() => {
28
+ * clearInterval(interval);
29
+ * });
30
+ * }));
31
+ * ```
32
+ *
33
+ * @param handler - Handler function receiving context and SSE stream
34
+ * @returns Hono handler for SSE streaming
35
+ */
36
+ export function sse(handler) {
37
+ return (c) => {
38
+ const asyncLocalStorage = getAgentAsyncLocalStorage();
39
+ const capturedContext = asyncLocalStorage.getStore();
40
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ return honoStreamSSE(c, async (stream) => {
42
+ const wrappedStream = {
43
+ write: async (data) => {
44
+ if (typeof data === 'string' ||
45
+ typeof data === 'number' ||
46
+ typeof data === 'boolean') {
47
+ return stream.writeSSE({ data: String(data) });
48
+ }
49
+ else if (typeof data === 'object' && data !== null) {
50
+ return stream.writeSSE(data);
51
+ }
52
+ return stream.writeSSE({ data: String(data) });
53
+ },
54
+ writeSSE: stream.writeSSE.bind(stream),
55
+ onAbort: stream.onAbort.bind(stream),
56
+ close: stream.close?.bind(stream) ?? (() => { }),
57
+ };
58
+ const runInContext = async () => {
59
+ await handler(c, wrappedStream);
60
+ };
61
+ if (capturedContext) {
62
+ await asyncLocalStorage.run(capturedContext, runInContext);
63
+ }
64
+ else {
65
+ await runInContext();
66
+ }
67
+ });
68
+ };
69
+ }
70
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/handlers/sse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AA8CxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,GAAG,CAAsB,OAAsB;IAC9D,OAAO,CAAC,CAAa,EAAE,EAAE;QACxB,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAC;QACtD,MAAM,eAAe,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAErD,8DAA8D;QAC9D,OAAO,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,MAAW,EAAE,EAAE;YAC7C,MAAM,aAAa,GAAc;gBAChC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBACrB,IACC,OAAO,IAAI,KAAK,QAAQ;wBACxB,OAAO,IAAI,KAAK,QAAQ;wBACxB,OAAO,IAAI,KAAK,SAAS,EACxB,CAAC;wBACF,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChD,CAAC;yBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC9B,CAAC;oBACD,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChD,CAAC;gBACD,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;aAC/C,CAAC;YAEF,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;gBAC/B,MAAM,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YACjC,CAAC,CAAC;YAEF,IAAI,eAAe,EAAE,CAAC;gBACrB,MAAM,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACP,MAAM,YAAY,EAAE,CAAC;YACtB,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { Context, Handler } from 'hono';
2
+ import type { Env } from '../app';
3
+ /**
4
+ * Handler function for streaming responses.
5
+ * Returns a ReadableStream that will be piped to the response.
6
+ */
7
+ export type StreamHandler<E extends Env = Env> = (c: Context<E>) => ReadableStream<Uint8Array | string> | Promise<ReadableStream<Uint8Array | string>>;
8
+ /**
9
+ * Creates a streaming middleware for returning ReadableStream responses.
10
+ *
11
+ * Use with router.post() (or any HTTP method) to create a streaming endpoint:
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { createRouter, stream } from '@agentuity/runtime';
16
+ *
17
+ * const router = createRouter();
18
+ *
19
+ * router.post('/events', stream((c) => {
20
+ * return new ReadableStream({
21
+ * start(controller) {
22
+ * controller.enqueue('event 1\n');
23
+ * controller.enqueue('event 2\n');
24
+ * controller.close();
25
+ * }
26
+ * });
27
+ * }));
28
+ * ```
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * // Async stream with data from request body
33
+ * router.post('/process', stream(async (c) => {
34
+ * const body = await c.req.json();
35
+ *
36
+ * return new ReadableStream({
37
+ * async start(controller) {
38
+ * for (const item of body.items) {
39
+ * controller.enqueue(`Processing: ${item}\n`);
40
+ * await new Promise(r => setTimeout(r, 100));
41
+ * }
42
+ * controller.close();
43
+ * }
44
+ * });
45
+ * }));
46
+ * ```
47
+ *
48
+ * @param handler - Handler function returning a ReadableStream
49
+ * @returns Hono handler for streaming response
50
+ */
51
+ export declare function stream<E extends Env = Env>(handler: StreamHandler<E>): Handler<E>;
52
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/handlers/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAChD,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KACT,cAAc,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA6BjF"}
@@ -0,0 +1,75 @@
1
+ import { stream as honoStream } from 'hono/streaming';
2
+ import { getAgentAsyncLocalStorage } from '../_context';
3
+ /**
4
+ * Creates a streaming middleware for returning ReadableStream responses.
5
+ *
6
+ * Use with router.post() (or any HTTP method) to create a streaming endpoint:
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { createRouter, stream } from '@agentuity/runtime';
11
+ *
12
+ * const router = createRouter();
13
+ *
14
+ * router.post('/events', stream((c) => {
15
+ * return new ReadableStream({
16
+ * start(controller) {
17
+ * controller.enqueue('event 1\n');
18
+ * controller.enqueue('event 2\n');
19
+ * controller.close();
20
+ * }
21
+ * });
22
+ * }));
23
+ * ```
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * // Async stream with data from request body
28
+ * router.post('/process', stream(async (c) => {
29
+ * const body = await c.req.json();
30
+ *
31
+ * return new ReadableStream({
32
+ * async start(controller) {
33
+ * for (const item of body.items) {
34
+ * controller.enqueue(`Processing: ${item}\n`);
35
+ * await new Promise(r => setTimeout(r, 100));
36
+ * }
37
+ * controller.close();
38
+ * }
39
+ * });
40
+ * }));
41
+ * ```
42
+ *
43
+ * @param handler - Handler function returning a ReadableStream
44
+ * @returns Hono handler for streaming response
45
+ */
46
+ export function stream(handler) {
47
+ return (c) => {
48
+ const asyncLocalStorage = getAgentAsyncLocalStorage();
49
+ const capturedContext = asyncLocalStorage.getStore();
50
+ c.header('Content-Type', 'application/octet-stream');
51
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
+ return honoStream(c, async (s) => {
53
+ const runInContext = async () => {
54
+ try {
55
+ let streamResult = handler(c);
56
+ if (streamResult instanceof Promise) {
57
+ streamResult = await streamResult;
58
+ }
59
+ await s.pipe(streamResult);
60
+ }
61
+ catch (err) {
62
+ c.var.logger?.error('Stream error:', err);
63
+ throw err;
64
+ }
65
+ };
66
+ if (capturedContext) {
67
+ await asyncLocalStorage.run(capturedContext, runInContext);
68
+ }
69
+ else {
70
+ await runInContext();
71
+ }
72
+ });
73
+ };
74
+ }
75
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/handlers/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAWxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,UAAU,MAAM,CAAsB,OAAyB;IACpE,OAAO,CAAC,CAAa,EAAE,EAAE;QACxB,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAC;QACtD,MAAM,eAAe,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAErD,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QAErD,8DAA8D;QAC9D,OAAO,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAM,EAAE,EAAE;YACrC,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;gBAC/B,IAAI,CAAC;oBACJ,IAAI,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,YAAY,YAAY,OAAO,EAAE,CAAC;wBACrC,YAAY,GAAG,MAAM,YAAY,CAAC;oBACnC,CAAC;oBACD,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC5B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACd,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;oBAC1C,MAAM,GAAG,CAAC;gBACX,CAAC;YACF,CAAC,CAAC;YAEF,IAAI,eAAe,EAAE,CAAC;gBACrB,MAAM,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACP,MAAM,YAAY,EAAE,CAAC;YACtB,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { Context, MiddlewareHandler } from 'hono';
2
+ import type { Env } from '../app';
3
+ /**
4
+ * WebSocket connection interface for handling WebSocket events.
5
+ */
6
+ export interface WebSocketConnection {
7
+ onOpen: (handler: (event: Event) => void | Promise<void>) => void;
8
+ onMessage: (handler: (event: MessageEvent) => void | Promise<void>) => void;
9
+ onClose: (handler: (event: CloseEvent) => void | Promise<void>) => void;
10
+ send: (data: string | ArrayBuffer | Uint8Array) => void;
11
+ }
12
+ /**
13
+ * Handler function for WebSocket connections.
14
+ * Receives the Hono context and WebSocket connection with a flattened signature.
15
+ */
16
+ export type WebSocketHandler<E extends Env = Env> = (c: Context<E>, ws: WebSocketConnection) => void | Promise<void>;
17
+ /**
18
+ * Creates a WebSocket middleware for handling WebSocket connections.
19
+ *
20
+ * Use with router.get() to create a WebSocket endpoint:
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { createRouter, websocket } from '@agentuity/runtime';
25
+ *
26
+ * const router = createRouter();
27
+ *
28
+ * router.get('/ws', websocket((c, ws) => {
29
+ * ws.onOpen(() => {
30
+ * c.var.logger.info('WebSocket opened');
31
+ * ws.send('Welcome!');
32
+ * });
33
+ *
34
+ * ws.onMessage((event) => {
35
+ * c.var.logger.info('Received:', event.data);
36
+ * ws.send('Echo: ' + event.data);
37
+ * });
38
+ *
39
+ * ws.onClose(() => {
40
+ * c.var.logger.info('WebSocket closed');
41
+ * });
42
+ * }));
43
+ * ```
44
+ *
45
+ * @param handler - Handler function receiving context and WebSocket connection
46
+ * @returns Hono middleware handler for WebSocket upgrade
47
+ */
48
+ export declare function websocket<E extends Env = Env>(handler: WebSocketHandler<E>): MiddlewareHandler<E>;
49
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/handlers/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAGvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAClE,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5E,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACxE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,KAAK,IAAI,CAAC;CACxD;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CACnD,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACb,EAAE,EAAE,mBAAmB,KACnB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAiGjG"}
@@ -0,0 +1,130 @@
1
+ import { upgradeWebSocket } from 'hono/bun';
2
+ import { getAgentAsyncLocalStorage } from '../_context';
3
+ /**
4
+ * Creates a WebSocket middleware for handling WebSocket connections.
5
+ *
6
+ * Use with router.get() to create a WebSocket endpoint:
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { createRouter, websocket } from '@agentuity/runtime';
11
+ *
12
+ * const router = createRouter();
13
+ *
14
+ * router.get('/ws', websocket((c, ws) => {
15
+ * ws.onOpen(() => {
16
+ * c.var.logger.info('WebSocket opened');
17
+ * ws.send('Welcome!');
18
+ * });
19
+ *
20
+ * ws.onMessage((event) => {
21
+ * c.var.logger.info('Received:', event.data);
22
+ * ws.send('Echo: ' + event.data);
23
+ * });
24
+ *
25
+ * ws.onClose(() => {
26
+ * c.var.logger.info('WebSocket closed');
27
+ * });
28
+ * }));
29
+ * ```
30
+ *
31
+ * @param handler - Handler function receiving context and WebSocket connection
32
+ * @returns Hono middleware handler for WebSocket upgrade
33
+ */
34
+ export function websocket(handler) {
35
+ const wsHandler = upgradeWebSocket((c) => {
36
+ let openHandler;
37
+ let messageHandler;
38
+ let closeHandler;
39
+ let initialized = false;
40
+ const asyncLocalStorage = getAgentAsyncLocalStorage();
41
+ const capturedContext = asyncLocalStorage.getStore();
42
+ const wsConnection = {
43
+ onOpen: (h) => {
44
+ openHandler = h;
45
+ },
46
+ onMessage: (h) => {
47
+ messageHandler = h;
48
+ },
49
+ onClose: (h) => {
50
+ closeHandler = h;
51
+ },
52
+ send: (_data) => {
53
+ // This will be bound to the actual ws in the handlers
54
+ },
55
+ };
56
+ const runHandler = () => {
57
+ if (capturedContext) {
58
+ asyncLocalStorage.run(capturedContext, () => handler(c, wsConnection));
59
+ }
60
+ else {
61
+ handler(c, wsConnection);
62
+ }
63
+ initialized = true;
64
+ };
65
+ runHandler();
66
+ return {
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
+ onOpen: async (event, ws) => {
69
+ try {
70
+ wsConnection.send = (data) => ws.send(data);
71
+ if (openHandler) {
72
+ const h = openHandler;
73
+ if (capturedContext) {
74
+ await asyncLocalStorage.run(capturedContext, () => h(event));
75
+ }
76
+ else {
77
+ await h(event);
78
+ }
79
+ }
80
+ }
81
+ catch (err) {
82
+ c.var.logger?.error('WebSocket onOpen error:', err);
83
+ throw err;
84
+ }
85
+ },
86
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
+ onMessage: async (event, ws) => {
88
+ try {
89
+ if (!initialized) {
90
+ wsConnection.send = (data) => ws.send(data);
91
+ runHandler();
92
+ }
93
+ if (messageHandler) {
94
+ const h = messageHandler;
95
+ if (capturedContext) {
96
+ await asyncLocalStorage.run(capturedContext, () => h(event));
97
+ }
98
+ else {
99
+ await h(event);
100
+ }
101
+ }
102
+ }
103
+ catch (err) {
104
+ c.var.logger?.error('WebSocket onMessage error:', err);
105
+ throw err;
106
+ }
107
+ },
108
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
+ onClose: async (event, _ws) => {
110
+ try {
111
+ if (closeHandler) {
112
+ const h = closeHandler;
113
+ if (capturedContext) {
114
+ await asyncLocalStorage.run(capturedContext, () => h(event));
115
+ }
116
+ else {
117
+ await h(event);
118
+ }
119
+ }
120
+ }
121
+ catch (err) {
122
+ c.var.logger?.error('WebSocket onClose error:', err);
123
+ }
124
+ },
125
+ };
126
+ });
127
+ const middleware = (c, next) => wsHandler(c, next);
128
+ return middleware;
129
+ }
130
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/handlers/websocket.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { enableProcessExitProtection } from './_process-protection';
8
8
  export { internalExit } from './_process-protection';
9
9
  export { registerDevModeRoutes } from './devmode';
10
10
  export { type HonoEnv, type WebSocketConnection, createRouter } from './router';
11
+ export { websocket, type WebSocketHandler, sse, type SSEMessage, type SSEStream, type SSEHandler, stream, type StreamHandler, cron, type CronHandler, type CronMetadata, } from './handlers';
11
12
  export { EvalHandlerResultSchema, type EvalContext, type EvalRunResultMetadata, type EvalHandlerResult, type EvalRunResultSuccess, type EvalRunResultError, type EvalRunResult, type CreateEvalRunRequest, type ExternalEvalMetadata, type EvalMetadata, type EvalFunction, type Eval, } from './eval';
12
13
  export { type ThreadEventName, type SessionEventName, type Thread, type Session, type ThreadIDProvider, type ThreadProvider, type SessionProvider, generateId, DefaultThreadIDProvider, DefaultThread, } from './session';
13
14
  export { LocalThreadProvider } from './services/thread/local';
@@ -18,7 +19,6 @@ export type { Logger } from './logger';
18
19
  export { getRouter, setGlobalRouter, createLogger, getLogger, setGlobalLogger, getTracer, setGlobalTracer, addSpanProcessor, getSpanProcessors, privateContext, notifyReady, getServer, AGENT_CONTEXT_PROPERTIES, } from './_server';
19
20
  export { hasWaitUntilPending } from './_waituntil';
20
21
  export { createAgentContext, StandaloneAgentContext, type StandaloneContextOptions, type InvokeOptions, } from './_standalone';
21
- export { Email, parseEmail } from './io/email';
22
22
  export { HTTPEvalRunEventProvider, LocalEvalRunEventProvider, JSONEvalRunEventProvider, CompositeEvalRunEventProvider, } from './services/evalrun';
23
23
  export { getEvalRunEventProvider, getThreadProvider, getSessionProvider } from './_services';
24
24
  export type { RouteSchema, GetRouteSchema } from './_validation';
@@ -62,4 +62,5 @@ export type { RouteSchema, GetRouteSchema } from './_validation';
62
62
  export interface AppState {
63
63
  }
64
64
  export { bootstrapRuntimeEnv, type RuntimeBootstrapOptions } from '@agentuity/server';
65
+ export { patchBunS3ForStorageDev, isAgentuityStorageEndpoint } from './bun-s3-patch';
65
66
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,6 +15,8 @@ export { internalExit } from './_process-protection';
15
15
  export { registerDevModeRoutes } from './devmode';
16
16
  // router.ts exports
17
17
  export { createRouter } from './router';
18
+ // protocol handler exports (websocket, sse, stream, cron)
19
+ export { websocket, sse, stream, cron, } from './handlers';
18
20
  // eval.ts exports
19
21
  export { EvalHandlerResultSchema, } from './eval';
20
22
  // session.ts exports
@@ -33,8 +35,6 @@ export { getRouter, setGlobalRouter, createLogger, getLogger, setGlobalLogger, g
33
35
  export { hasWaitUntilPending } from './_waituntil';
34
36
  // _standalone.ts exports
35
37
  export { createAgentContext, StandaloneAgentContext, } from './_standalone';
36
- // io/email exports
37
- export { Email, parseEmail } from './io/email';
38
38
  // services/evalrun exports
39
39
  export { HTTPEvalRunEventProvider, LocalEvalRunEventProvider, JSONEvalRunEventProvider, CompositeEvalRunEventProvider, } from './services/evalrun';
40
40
  // _services.ts exports
@@ -43,4 +43,6 @@ export { getEvalRunEventProvider, getThreadProvider, getSessionProvider } from '
43
43
  // This allows generated code to import from @agentuity/runtime instead of having
44
44
  // a direct dependency on @agentuity/server
45
45
  export { bootstrapRuntimeEnv } from '@agentuity/server';
46
+ // bun-s3-patch.ts exports
47
+ export { patchBunS3ForStorageDev, isAgentuityStorageEndpoint } from './bun-s3-patch';
46
48
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EASN,qBAAqB,EACrB,eAAe,EAGf,aAAa,EACb,cAAc,EACd,cAAc,EAEd,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,SAAS,CAAC;AAEjB,iDAAiD;AACjD,OAAO,EAQN,SAAS,EACT,MAAM,EACN,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAElE,sCAAsC;AACtC,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,GAC3B,MAAM,cAAc,CAAC;AAEtB,mDAAmD;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,6DAA6D;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAqB;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,oBAAoB;AACpB,OAAO,EAA0C,YAAY,EAAE,MAAM,UAAU,CAAC;AAEhF,kBAAkB;AAClB,OAAO,EACN,uBAAuB,GAYvB,MAAM,QAAQ,CAAC;AAEhB,qBAAqB;AACrB,OAAO,EAQN,UAAU,EACV,uBAAuB,EACvB,aAAa,GACb,MAAM,WAAW,CAAC;AAEnB,gCAAgC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,uBAAuB;AACvB,OAAO,EACN,6BAA6B,EAC7B,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,GAC7B,MAAM,aAAa,CAAC;AAErB,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAExC,uBAAuB;AACvB,OAAO,EAAuB,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7D,qBAAqB;AACrB,OAAO,EACN,SAAS,EACT,eAAe,EACf,YAAY,EACZ,SAAS,EACT,eAAe,EACf,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,SAAS,EACT,wBAAwB,GACxB,MAAM,WAAW,CAAC;AAEnB,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,yBAAyB;AACzB,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GAGtB,MAAM,eAAe,CAAC;AAEvB,mBAAmB;AACnB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/C,2BAA2B;AAC3B,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,GAC7B,MAAM,oBAAoB,CAAC;AAE5B,uBAAuB;AACvB,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA6C7F,uEAAuE;AACvE,iFAAiF;AACjF,2CAA2C;AAC3C,OAAO,EAAE,mBAAmB,EAAgC,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EASN,qBAAqB,EACrB,eAAe,EAGf,aAAa,EACb,cAAc,EACd,cAAc,EAEd,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,SAAS,CAAC;AAEjB,iDAAiD;AACjD,OAAO,EAQN,SAAS,EACT,MAAM,EACN,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAElE,sCAAsC;AACtC,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,GAC3B,MAAM,cAAc,CAAC;AAEtB,mDAAmD;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,6DAA6D;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAqB;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,oBAAoB;AACpB,OAAO,EAA0C,YAAY,EAAE,MAAM,UAAU,CAAC;AAEhF,0DAA0D;AAC1D,OAAO,EACN,SAAS,EAET,GAAG,EAIH,MAAM,EAEN,IAAI,GAGJ,MAAM,YAAY,CAAC;AAEpB,kBAAkB;AAClB,OAAO,EACN,uBAAuB,GAYvB,MAAM,QAAQ,CAAC;AAEhB,qBAAqB;AACrB,OAAO,EAQN,UAAU,EACV,uBAAuB,EACvB,aAAa,GACb,MAAM,WAAW,CAAC;AAEnB,gCAAgC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,uBAAuB;AACvB,OAAO,EACN,6BAA6B,EAC7B,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,GAC7B,MAAM,aAAa,CAAC;AAErB,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAExC,uBAAuB;AACvB,OAAO,EAAuB,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7D,qBAAqB;AACrB,OAAO,EACN,SAAS,EACT,eAAe,EACf,YAAY,EACZ,SAAS,EACT,eAAe,EACf,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,SAAS,EACT,wBAAwB,GACxB,MAAM,WAAW,CAAC;AAEnB,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,yBAAyB;AACzB,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GAGtB,MAAM,eAAe,CAAC;AAEvB,2BAA2B;AAC3B,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,GAC7B,MAAM,oBAAoB,CAAC;AAE5B,uBAAuB;AACvB,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA6C7F,uEAAuE;AACvE,iFAAiF;AACjF,2CAA2C;AAC3C,OAAO,EAAE,mBAAmB,EAAgC,MAAM,mBAAmB,CAAC;AAEtF,0BAA0B;AAC1B,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC"}
@@ -6,7 +6,7 @@ import { cors } from 'hono/cors';
6
6
  import type { Env, CompressionConfig } from './app';
7
7
  import type { Logger } from './logger';
8
8
  import { Meter, Tracer } from '@opentelemetry/api';
9
- export declare const AGENT_CONTEXT_PROPERTIES: readonly ["logger", "tracer", "sessionId", "kv", "stream", "vector", "state", "thread", "session", "config", "app", "waitUntil"];
9
+ export declare const AGENT_CONTEXT_PROPERTIES: readonly ["logger", "tracer", "sessionId", "kv", "stream", "vector", "sandbox", "state", "thread", "session", "config", "app", "waitUntil"];
10
10
  export interface MiddlewareConfig {
11
11
  logger: Logger;
12
12
  tracer: Tracer;
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMvC,OAAO,EAMN,KAAK,EACL,MAAM,EACN,MAAM,oBAAoB,CAAC;AAU5B,eAAO,MAAM,wBAAwB,kIAa3B,CAAC;AAuBX,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,oEA8C5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,oEAoC9E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,qEAoKnC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,CAAC,EAAE,iBAAiB,oEAkD3E"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMvC,OAAO,EAMN,KAAK,EACL,MAAM,EACN,MAAM,oBAAoB,CAAC;AAU5B,eAAO,MAAM,wBAAwB,6IAc3B,CAAC;AAuBX,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,oEA+C5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,oEAoC9E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,qEAgKnC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,CAAC,EAAE,iBAAiB,oEAkD3E"}
@@ -25,6 +25,7 @@ export const AGENT_CONTEXT_PROPERTIES = [
25
25
  'kv',
26
26
  'stream',
27
27
  'vector',
28
+ 'sandbox',
28
29
  'state',
29
30
  'thread',
30
31
  'session',
@@ -66,6 +67,7 @@ export function createBaseMiddleware(config) {
66
67
  c.set('kv', services.kv);
67
68
  c.set('stream', services.stream);
68
69
  c.set('vector', services.vector);
70
+ c.set('sandbox', services.sandbox);
69
71
  installContextPropertyHelpers(c);
70
72
  const isWebSocket = c.req.header('upgrade')?.toLowerCase() === 'websocket';
71
73
  const skipLogging = c.req.path.startsWith('/_agentuity/');
@@ -216,17 +218,17 @@ export function createOtelMiddleware() {
216
218
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
217
219
  c.set('trigger', 'api');
218
220
  // Send session start event (so evalruns can reference this session)
221
+ // The provider decides whether to send based on available data (orgId, projectId, etc.)
219
222
  const sessionEventProvider = getSessionEventProvider();
220
- const shouldSendSession = !!(orgId && projectId);
221
- if (shouldSendSession && sessionEventProvider) {
223
+ if (sessionEventProvider) {
222
224
  try {
223
225
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
224
226
  const routeId = c.var?.routeId || '';
225
227
  await sessionEventProvider.start({
226
228
  id: sessionId,
227
229
  threadId: thread.id,
228
- orgId,
229
- projectId,
230
+ orgId: orgId || '',
231
+ projectId: projectId || '',
230
232
  deploymentId: deploymentId || undefined,
231
233
  devmode: isDevMode,
232
234
  trigger: 'api',
@@ -262,8 +264,8 @@ export function createOtelMiddleware() {
262
264
  }
263
265
  finally {
264
266
  // Send session complete event
265
- internal.info('[session] shouldSendSession: %s, hasSessionEventProvider: %s', shouldSendSession, !!sessionEventProvider);
266
- if (shouldSendSession && sessionEventProvider) {
267
+ // The provider decides whether to actually send based on its requirements
268
+ if (sessionEventProvider) {
267
269
  try {
268
270
  const userData = session.serializeUserData();
269
271
  internal.info('[session] sending session complete event, userData: %s', userData ? `${userData.length} bytes` : 'none');