@agentuity/runtime 0.1.13 → 0.1.14

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 (272) hide show
  1. package/package.json +8 -8
  2. package/src/_config.ts +13 -0
  3. package/src/_standalone.ts +167 -19
  4. package/src/index.ts +1 -0
  5. package/dist/_config.d.ts +0 -90
  6. package/dist/_config.d.ts.map +0 -1
  7. package/dist/_config.js +0 -135
  8. package/dist/_config.js.map +0 -1
  9. package/dist/_context.d.ts +0 -76
  10. package/dist/_context.d.ts.map +0 -1
  11. package/dist/_context.js +0 -147
  12. package/dist/_context.js.map +0 -1
  13. package/dist/_events.d.ts +0 -64
  14. package/dist/_events.d.ts.map +0 -1
  15. package/dist/_events.js +0 -92
  16. package/dist/_events.js.map +0 -1
  17. package/dist/_idle.d.ts +0 -7
  18. package/dist/_idle.d.ts.map +0 -1
  19. package/dist/_idle.js +0 -10
  20. package/dist/_idle.js.map +0 -1
  21. package/dist/_metadata.d.ts +0 -117
  22. package/dist/_metadata.d.ts.map +0 -1
  23. package/dist/_metadata.js +0 -246
  24. package/dist/_metadata.js.map +0 -1
  25. package/dist/_process-protection.d.ts +0 -25
  26. package/dist/_process-protection.d.ts.map +0 -1
  27. package/dist/_process-protection.js +0 -65
  28. package/dist/_process-protection.js.map +0 -1
  29. package/dist/_server.d.ts +0 -46
  30. package/dist/_server.d.ts.map +0 -1
  31. package/dist/_server.js +0 -85
  32. package/dist/_server.js.map +0 -1
  33. package/dist/_services.d.ts +0 -21
  34. package/dist/_services.d.ts.map +0 -1
  35. package/dist/_services.js +0 -248
  36. package/dist/_services.js.map +0 -1
  37. package/dist/_standalone.d.ts +0 -168
  38. package/dist/_standalone.d.ts.map +0 -1
  39. package/dist/_standalone.js +0 -441
  40. package/dist/_standalone.js.map +0 -1
  41. package/dist/_tokens.d.ts +0 -12
  42. package/dist/_tokens.d.ts.map +0 -1
  43. package/dist/_tokens.js +0 -96
  44. package/dist/_tokens.js.map +0 -1
  45. package/dist/_util.d.ts +0 -16
  46. package/dist/_util.d.ts.map +0 -1
  47. package/dist/_util.js +0 -54
  48. package/dist/_util.js.map +0 -1
  49. package/dist/_validation.d.ts +0 -89
  50. package/dist/_validation.d.ts.map +0 -1
  51. package/dist/_validation.js +0 -29
  52. package/dist/_validation.js.map +0 -1
  53. package/dist/_waituntil.d.ts +0 -18
  54. package/dist/_waituntil.d.ts.map +0 -1
  55. package/dist/_waituntil.js +0 -97
  56. package/dist/_waituntil.js.map +0 -1
  57. package/dist/agent.d.ts +0 -1210
  58. package/dist/agent.d.ts.map +0 -1
  59. package/dist/agent.js +0 -903
  60. package/dist/agent.js.map +0 -1
  61. package/dist/app.d.ts +0 -322
  62. package/dist/app.d.ts.map +0 -1
  63. package/dist/app.js +0 -160
  64. package/dist/app.js.map +0 -1
  65. package/dist/bun-s3-patch.d.ts +0 -37
  66. package/dist/bun-s3-patch.d.ts.map +0 -1
  67. package/dist/bun-s3-patch.js +0 -139
  68. package/dist/bun-s3-patch.js.map +0 -1
  69. package/dist/cors.d.ts +0 -42
  70. package/dist/cors.d.ts.map +0 -1
  71. package/dist/cors.js +0 -117
  72. package/dist/cors.js.map +0 -1
  73. package/dist/devmode.d.ts +0 -3
  74. package/dist/devmode.d.ts.map +0 -1
  75. package/dist/devmode.js +0 -167
  76. package/dist/devmode.js.map +0 -1
  77. package/dist/eval.d.ts +0 -91
  78. package/dist/eval.d.ts.map +0 -1
  79. package/dist/eval.js +0 -16
  80. package/dist/eval.js.map +0 -1
  81. package/dist/handlers/cron.d.ts +0 -47
  82. package/dist/handlers/cron.d.ts.map +0 -1
  83. package/dist/handlers/cron.js +0 -49
  84. package/dist/handlers/cron.js.map +0 -1
  85. package/dist/handlers/index.d.ts +0 -5
  86. package/dist/handlers/index.d.ts.map +0 -1
  87. package/dist/handlers/index.js +0 -5
  88. package/dist/handlers/index.js.map +0 -1
  89. package/dist/handlers/sse.d.ts +0 -91
  90. package/dist/handlers/sse.d.ts.map +0 -1
  91. package/dist/handlers/sse.js +0 -213
  92. package/dist/handlers/sse.js.map +0 -1
  93. package/dist/handlers/stream.d.ts +0 -52
  94. package/dist/handlers/stream.d.ts.map +0 -1
  95. package/dist/handlers/stream.js +0 -116
  96. package/dist/handlers/stream.js.map +0 -1
  97. package/dist/handlers/websocket.d.ts +0 -49
  98. package/dist/handlers/websocket.d.ts.map +0 -1
  99. package/dist/handlers/websocket.js +0 -143
  100. package/dist/handlers/websocket.js.map +0 -1
  101. package/dist/index.d.ts +0 -71
  102. package/dist/index.d.ts.map +0 -1
  103. package/dist/index.js +0 -58
  104. package/dist/index.js.map +0 -1
  105. package/dist/logger/console.d.ts +0 -70
  106. package/dist/logger/console.d.ts.map +0 -1
  107. package/dist/logger/console.js +0 -274
  108. package/dist/logger/console.js.map +0 -1
  109. package/dist/logger/index.d.ts +0 -3
  110. package/dist/logger/index.d.ts.map +0 -1
  111. package/dist/logger/index.js +0 -3
  112. package/dist/logger/index.js.map +0 -1
  113. package/dist/logger/internal.d.ts +0 -79
  114. package/dist/logger/internal.d.ts.map +0 -1
  115. package/dist/logger/internal.js +0 -133
  116. package/dist/logger/internal.js.map +0 -1
  117. package/dist/logger/logger.d.ts +0 -41
  118. package/dist/logger/logger.d.ts.map +0 -1
  119. package/dist/logger/logger.js +0 -2
  120. package/dist/logger/logger.js.map +0 -1
  121. package/dist/logger/user.d.ts +0 -8
  122. package/dist/logger/user.d.ts.map +0 -1
  123. package/dist/logger/user.js +0 -7
  124. package/dist/logger/user.js.map +0 -1
  125. package/dist/logger/util.d.ts +0 -11
  126. package/dist/logger/util.d.ts.map +0 -1
  127. package/dist/logger/util.js +0 -77
  128. package/dist/logger/util.js.map +0 -1
  129. package/dist/middleware.d.ts +0 -112
  130. package/dist/middleware.d.ts.map +0 -1
  131. package/dist/middleware.js +0 -507
  132. package/dist/middleware.js.map +0 -1
  133. package/dist/otel/config.d.ts +0 -19
  134. package/dist/otel/config.d.ts.map +0 -1
  135. package/dist/otel/config.js +0 -26
  136. package/dist/otel/config.js.map +0 -1
  137. package/dist/otel/console.d.ts +0 -33
  138. package/dist/otel/console.d.ts.map +0 -1
  139. package/dist/otel/console.js +0 -86
  140. package/dist/otel/console.js.map +0 -1
  141. package/dist/otel/exporters/index.d.ts +0 -4
  142. package/dist/otel/exporters/index.d.ts.map +0 -1
  143. package/dist/otel/exporters/index.js +0 -4
  144. package/dist/otel/exporters/index.js.map +0 -1
  145. package/dist/otel/exporters/jsonl-log-exporter.d.ts +0 -36
  146. package/dist/otel/exporters/jsonl-log-exporter.d.ts.map +0 -1
  147. package/dist/otel/exporters/jsonl-log-exporter.js +0 -103
  148. package/dist/otel/exporters/jsonl-log-exporter.js.map +0 -1
  149. package/dist/otel/exporters/jsonl-metric-exporter.d.ts +0 -40
  150. package/dist/otel/exporters/jsonl-metric-exporter.d.ts.map +0 -1
  151. package/dist/otel/exporters/jsonl-metric-exporter.js +0 -104
  152. package/dist/otel/exporters/jsonl-metric-exporter.js.map +0 -1
  153. package/dist/otel/exporters/jsonl-trace-exporter.d.ts +0 -36
  154. package/dist/otel/exporters/jsonl-trace-exporter.d.ts.map +0 -1
  155. package/dist/otel/exporters/jsonl-trace-exporter.js +0 -111
  156. package/dist/otel/exporters/jsonl-trace-exporter.js.map +0 -1
  157. package/dist/otel/fetch.d.ts +0 -12
  158. package/dist/otel/fetch.d.ts.map +0 -1
  159. package/dist/otel/fetch.js +0 -82
  160. package/dist/otel/fetch.js.map +0 -1
  161. package/dist/otel/http.d.ts +0 -16
  162. package/dist/otel/http.d.ts.map +0 -1
  163. package/dist/otel/http.js +0 -44
  164. package/dist/otel/http.js.map +0 -1
  165. package/dist/otel/logger.d.ts +0 -37
  166. package/dist/otel/logger.d.ts.map +0 -1
  167. package/dist/otel/logger.js +0 -268
  168. package/dist/otel/logger.js.map +0 -1
  169. package/dist/otel/otel.d.ts +0 -65
  170. package/dist/otel/otel.d.ts.map +0 -1
  171. package/dist/otel/otel.js +0 -261
  172. package/dist/otel/otel.js.map +0 -1
  173. package/dist/router.d.ts +0 -100
  174. package/dist/router.d.ts.map +0 -1
  175. package/dist/router.js +0 -163
  176. package/dist/router.js.map +0 -1
  177. package/dist/services/evalrun/composite.d.ts +0 -21
  178. package/dist/services/evalrun/composite.d.ts.map +0 -1
  179. package/dist/services/evalrun/composite.js +0 -26
  180. package/dist/services/evalrun/composite.js.map +0 -1
  181. package/dist/services/evalrun/http.d.ts +0 -24
  182. package/dist/services/evalrun/http.d.ts.map +0 -1
  183. package/dist/services/evalrun/http.js +0 -86
  184. package/dist/services/evalrun/http.js.map +0 -1
  185. package/dist/services/evalrun/index.d.ts +0 -5
  186. package/dist/services/evalrun/index.d.ts.map +0 -1
  187. package/dist/services/evalrun/index.js +0 -5
  188. package/dist/services/evalrun/index.js.map +0 -1
  189. package/dist/services/evalrun/json.d.ts +0 -21
  190. package/dist/services/evalrun/json.d.ts.map +0 -1
  191. package/dist/services/evalrun/json.js +0 -38
  192. package/dist/services/evalrun/json.js.map +0 -1
  193. package/dist/services/evalrun/local.d.ts +0 -19
  194. package/dist/services/evalrun/local.d.ts.map +0 -1
  195. package/dist/services/evalrun/local.js +0 -22
  196. package/dist/services/evalrun/local.js.map +0 -1
  197. package/dist/services/local/_db.d.ts +0 -4
  198. package/dist/services/local/_db.d.ts.map +0 -1
  199. package/dist/services/local/_db.js +0 -123
  200. package/dist/services/local/_db.js.map +0 -1
  201. package/dist/services/local/_router.d.ts +0 -3
  202. package/dist/services/local/_router.d.ts.map +0 -1
  203. package/dist/services/local/_router.js +0 -28
  204. package/dist/services/local/_router.js.map +0 -1
  205. package/dist/services/local/_util.d.ts +0 -18
  206. package/dist/services/local/_util.d.ts.map +0 -1
  207. package/dist/services/local/_util.js +0 -44
  208. package/dist/services/local/_util.js.map +0 -1
  209. package/dist/services/local/index.d.ts +0 -7
  210. package/dist/services/local/index.d.ts.map +0 -1
  211. package/dist/services/local/index.js +0 -7
  212. package/dist/services/local/index.js.map +0 -1
  213. package/dist/services/local/keyvalue.d.ts +0 -17
  214. package/dist/services/local/keyvalue.d.ts.map +0 -1
  215. package/dist/services/local/keyvalue.js +0 -125
  216. package/dist/services/local/keyvalue.js.map +0 -1
  217. package/dist/services/local/stream.d.ts +0 -12
  218. package/dist/services/local/stream.d.ts.map +0 -1
  219. package/dist/services/local/stream.js +0 -262
  220. package/dist/services/local/stream.js.map +0 -1
  221. package/dist/services/local/vector.d.ts +0 -17
  222. package/dist/services/local/vector.d.ts.map +0 -1
  223. package/dist/services/local/vector.js +0 -303
  224. package/dist/services/local/vector.js.map +0 -1
  225. package/dist/services/sandbox/http.d.ts +0 -13
  226. package/dist/services/sandbox/http.d.ts.map +0 -1
  227. package/dist/services/sandbox/http.js +0 -130
  228. package/dist/services/sandbox/http.js.map +0 -1
  229. package/dist/services/sandbox/index.d.ts +0 -2
  230. package/dist/services/sandbox/index.d.ts.map +0 -1
  231. package/dist/services/sandbox/index.js +0 -2
  232. package/dist/services/sandbox/index.js.map +0 -1
  233. package/dist/services/session/composite.d.ts +0 -21
  234. package/dist/services/session/composite.d.ts.map +0 -1
  235. package/dist/services/session/composite.js +0 -26
  236. package/dist/services/session/composite.js.map +0 -1
  237. package/dist/services/session/http.d.ts +0 -34
  238. package/dist/services/session/http.d.ts.map +0 -1
  239. package/dist/services/session/http.js +0 -80
  240. package/dist/services/session/http.js.map +0 -1
  241. package/dist/services/session/index.d.ts +0 -5
  242. package/dist/services/session/index.d.ts.map +0 -1
  243. package/dist/services/session/index.js +0 -5
  244. package/dist/services/session/index.js.map +0 -1
  245. package/dist/services/session/json.d.ts +0 -22
  246. package/dist/services/session/json.d.ts.map +0 -1
  247. package/dist/services/session/json.js +0 -35
  248. package/dist/services/session/json.js.map +0 -1
  249. package/dist/services/session/local.d.ts +0 -19
  250. package/dist/services/session/local.d.ts.map +0 -1
  251. package/dist/services/session/local.js +0 -23
  252. package/dist/services/session/local.js.map +0 -1
  253. package/dist/services/thread/local.d.ts +0 -20
  254. package/dist/services/thread/local.d.ts.map +0 -1
  255. package/dist/services/thread/local.js +0 -158
  256. package/dist/services/thread/local.js.map +0 -1
  257. package/dist/session.d.ts +0 -734
  258. package/dist/session.d.ts.map +0 -1
  259. package/dist/session.js +0 -1139
  260. package/dist/session.js.map +0 -1
  261. package/dist/validator.d.ts +0 -142
  262. package/dist/validator.d.ts.map +0 -1
  263. package/dist/validator.js +0 -149
  264. package/dist/validator.js.map +0 -1
  265. package/dist/web.d.ts +0 -8
  266. package/dist/web.d.ts.map +0 -1
  267. package/dist/web.js +0 -66
  268. package/dist/web.js.map +0 -1
  269. package/dist/workbench.d.ts +0 -17
  270. package/dist/workbench.d.ts.map +0 -1
  271. package/dist/workbench.js +0 -507
  272. package/dist/workbench.js.map +0 -1
@@ -1,80 +0,0 @@
1
- import { APIResponseSchemaNoData } from '@agentuity/server';
2
- import { SessionStartEventDelayedSchema, SessionCompleteEventDelayedSchema, StructuredError, } from '@agentuity/core';
3
- import { internal } from '../../logger/internal';
4
- const SessionResponseError = StructuredError('SessionResponseError');
5
- /**
6
- * An implementation of the SessionEventProvider which uses HTTP for delivery.
7
- *
8
- * This provider checks that the event has required fields (orgId, projectId for start events)
9
- * before sending to the backend. If required fields are missing, the event is silently skipped.
10
- */
11
- export class HTTPSessionEventProvider {
12
- apiClient;
13
- logger;
14
- constructor(client, logger) {
15
- this.apiClient = client;
16
- this.logger = logger;
17
- }
18
- /**
19
- * Check if a start event has all required fields for HTTP delivery
20
- */
21
- canSendStartEvent(event) {
22
- // orgId and projectId are required for the backend
23
- if (!event.orgId || !event.projectId) {
24
- internal.info('[session-http] skipping start event - missing required fields: orgId=%s, projectId=%s', event.orgId ?? 'missing', event.projectId ?? 'missing');
25
- return false;
26
- }
27
- return true;
28
- }
29
- /**
30
- * called when the session starts
31
- *
32
- * @param event SessionStartEvent
33
- */
34
- async start(event) {
35
- // Check required fields before sending
36
- if (!this.canSendStartEvent(event)) {
37
- return;
38
- }
39
- internal.info('[session-http] sending start event: %s', event.id);
40
- this.logger.debug('Sending session start event: %s', event.id);
41
- const resp = await this.apiClient.post('/session/2025-03-17', { ...event, timestamp: Date.now() }, APIResponseSchemaNoData(), SessionStartEventDelayedSchema);
42
- if (resp.success) {
43
- internal.info('[session-http] start event sent successfully: %s', event.id);
44
- this.logger.debug('Session start event sent successfully: %s', event.id);
45
- this.startedSessions.add(event.id);
46
- return;
47
- }
48
- internal.info('[session-http] start event failed: %s - %s', event.id, resp.message);
49
- throw new SessionResponseError({ message: resp.message });
50
- }
51
- /**
52
- * Track session IDs that have been started (to know if we should send complete)
53
- */
54
- startedSessions = new Set();
55
- /**
56
- * called when the session completes
57
- *
58
- * @param event SessionCompleteEvent
59
- */
60
- async complete(event) {
61
- // Only send complete if we successfully sent a start event
62
- // This prevents sending orphaned complete events when start was skipped
63
- if (!this.startedSessions.has(event.id)) {
64
- internal.info('[session-http] skipping complete event - no matching start: %s', event.id);
65
- return;
66
- }
67
- this.startedSessions.delete(event.id);
68
- internal.info('[session-http] sending complete event: %s, userData: %s', event.id, event.userData ? `${event.userData.length} bytes` : 'none');
69
- this.logger.debug('Sending session complete event: %s', event.id);
70
- const resp = await this.apiClient.put('/session/2025-03-17', { ...event, timestamp: Date.now() }, APIResponseSchemaNoData(), SessionCompleteEventDelayedSchema);
71
- if (resp.success) {
72
- internal.info('[session-http] complete event sent successfully: %s', event.id);
73
- this.logger.debug('Session complete event sent successfully: %s', event.id);
74
- return;
75
- }
76
- internal.info('[session-http] complete event failed: %s - %s', event.id, resp.message);
77
- throw new SessionResponseError({ message: resp.message });
78
- }
79
- }
80
- //# sourceMappingURL=http.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/services/session/http.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export * from './composite';
2
- export * from './http';
3
- export * from './json';
4
- export * from './local';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/session/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC"}
@@ -1,5 +0,0 @@
1
- export * from './composite';
2
- export * from './http';
3
- export * from './json';
4
- export * from './local';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/session/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC"}
@@ -1,22 +0,0 @@
1
- import { type SessionEventProvider, type SessionStartEvent, type SessionCompleteEvent } from '@agentuity/core';
2
- /**
3
- * An implementation of the SessionEventProvider which uses JSON logs for delivery
4
- */
5
- export declare class JSONSessionEventProvider implements SessionEventProvider {
6
- private directory;
7
- constructor(directory: string);
8
- private makeFilename;
9
- /**
10
- * called when the session starts
11
- *
12
- * @param event SessionStartEvent
13
- */
14
- start(event: SessionStartEvent): Promise<void>;
15
- /**
16
- * called when the session completes
17
- *
18
- * @param event SessionCompleteEvent
19
- */
20
- complete(event: SessionCompleteEvent): Promise<void>;
21
- }
22
- //# sourceMappingURL=json.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/services/session/json.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,qBAAa,wBAAyB,YAAW,oBAAoB;IACpE,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,EAAE,MAAM;IAG7B,OAAO,CAAC,YAAY;IAGpB;;;;OAIG;IACG,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD;;;;OAIG;IACG,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAK1D"}
@@ -1,35 +0,0 @@
1
- import { join } from 'node:path';
2
- import { randomUUID } from 'node:crypto';
3
- /**
4
- * An implementation of the SessionEventProvider which uses JSON logs for delivery
5
- */
6
- export class JSONSessionEventProvider {
7
- directory;
8
- constructor(directory) {
9
- this.directory = directory;
10
- }
11
- makeFilename(type) {
12
- return join(this.directory, `session-${type}.${Date.now()}${randomUUID()}.json`);
13
- }
14
- /**
15
- * called when the session starts
16
- *
17
- * @param event SessionStartEvent
18
- */
19
- async start(event) {
20
- const filename = this.makeFilename('start');
21
- const payload = JSON.stringify({ ...event, timestamp: new Date() }) + '\n';
22
- await Bun.file(filename).write(payload);
23
- }
24
- /**
25
- * called when the session completes
26
- *
27
- * @param event SessionCompleteEvent
28
- */
29
- async complete(event) {
30
- const filename = this.makeFilename('complete');
31
- const payload = JSON.stringify({ ...event, timestamp: new Date() }) + '\n';
32
- await Bun.file(filename).write(payload);
33
- }
34
- }
35
- //# sourceMappingURL=json.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/services/session/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;GAEG;AACH,MAAM,OAAO,wBAAwB;IAC5B,SAAS,CAAS;IAE1B,YAAY,SAAiB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IACO,YAAY,CAAC,IAA0B;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IACD;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,KAAwB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;QAC3E,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,KAA2B;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;QAC3E,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;CACD"}
@@ -1,19 +0,0 @@
1
- import { type SessionEventProvider, type SessionStartEvent, type SessionCompleteEvent } from '@agentuity/core';
2
- /**
3
- * An implementation of the SessionEventProvider which is no-op
4
- */
5
- export declare class LocalSessionEventProvider implements SessionEventProvider {
6
- /**
7
- * called when the session starts
8
- *
9
- * @param event SessionStartEvent
10
- */
11
- start(event: SessionStartEvent): Promise<void>;
12
- /**
13
- * called when the session completes
14
- *
15
- * @param event SessionCompleteEvent
16
- */
17
- complete(event: SessionCompleteEvent): Promise<void>;
18
- }
19
- //# sourceMappingURL=local.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/services/session/local.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,MAAM,iBAAiB,CAAC;AAGzB;;GAEG;AACH,qBAAa,yBAA0B,YAAW,oBAAoB;IACrE;;;;OAIG;IACG,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD;;;;OAIG;IACG,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAO1D"}
@@ -1,23 +0,0 @@
1
- import { internal } from '../../logger/internal';
2
- /**
3
- * An implementation of the SessionEventProvider which is no-op
4
- */
5
- export class LocalSessionEventProvider {
6
- /**
7
- * called when the session starts
8
- *
9
- * @param event SessionStartEvent
10
- */
11
- async start(event) {
12
- internal.info('[session-local] start event (no-op): %s', event.id);
13
- }
14
- /**
15
- * called when the session completes
16
- *
17
- * @param event SessionCompleteEvent
18
- */
19
- async complete(event) {
20
- internal.info('[session-local] complete event (no-op): %s, userData: %s', event.id, event.userData ? `${event.userData.length} bytes` : 'none');
21
- }
22
- }
23
- //# sourceMappingURL=local.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/services/session/local.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD;;GAEG;AACH,MAAM,OAAO,yBAAyB;IACrC;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,KAAwB;QACnC,QAAQ,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,KAA2B;QACzC,QAAQ,CAAC,IAAI,CACZ,0DAA0D,EAC1D,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,MAAM,CAC1D,CAAC;IACH,CAAC;CACD"}
@@ -1,20 +0,0 @@
1
- import type { Context } from 'hono';
2
- import type { AppState } from '../../index';
3
- import type { Env } from '../../app';
4
- import { type Thread, type ThreadIDProvider, type ThreadProvider } from '../../session';
5
- /**
6
- * Local thread provider with SQLite persistence.
7
- * Stores thread state in local DB for development and testing.
8
- * Suitable for local development and testing with persistence across requests.
9
- */
10
- export declare class LocalThreadProvider implements ThreadProvider {
11
- private appState;
12
- private threadIDProvider;
13
- private db;
14
- initialize(appState: AppState): Promise<void>;
15
- setThreadIDProvider(provider: ThreadIDProvider): void;
16
- restore(ctx: Context<Env>): Promise<Thread>;
17
- save(thread: Thread): Promise<void>;
18
- destroy(thread: Thread): Promise<void>;
19
- }
20
- //# sourceMappingURL=local.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/services/thread/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAKN,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,MAAM,eAAe,CAAC;AAGvB;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,gBAAgB,CAAmD;IAC3E,OAAO,CAAC,EAAE,CAAyB;IAE7B,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnD,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI/C,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA2C3C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwGnC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ5C"}
@@ -1,158 +0,0 @@
1
- import { DefaultThread, DefaultThreadIDProvider, parseThreadData, validateThreadIdOrThrow, } from '../../session';
2
- import { getLocalDB } from '../local/_db';
3
- /**
4
- * Local thread provider with SQLite persistence.
5
- * Stores thread state in local DB for development and testing.
6
- * Suitable for local development and testing with persistence across requests.
7
- */
8
- export class LocalThreadProvider {
9
- appState = null;
10
- threadIDProvider = new DefaultThreadIDProvider();
11
- db = null;
12
- async initialize(appState) {
13
- this.appState = appState;
14
- this.db = getLocalDB();
15
- // Create threads table if it doesn't exist
16
- this.db.run(`
17
- CREATE TABLE IF NOT EXISTS threads (
18
- id TEXT PRIMARY KEY,
19
- state TEXT NOT NULL,
20
- updated_at INTEGER NOT NULL
21
- )
22
- `);
23
- }
24
- setThreadIDProvider(provider) {
25
- this.threadIDProvider = provider;
26
- }
27
- async restore(ctx) {
28
- if (this.appState === null || this.db === null) {
29
- throw new Error('LocalThreadProvider.restore called before initialize(): appState/db not set; call initialize(appState) first');
30
- }
31
- const threadId = await this.threadIDProvider.getThreadId(this.appState, ctx);
32
- validateThreadIdOrThrow(threadId);
33
- // Create a restore function for lazy loading
34
- const restoreFn = async () => {
35
- if (!this.db) {
36
- return { state: new Map(), metadata: {} };
37
- }
38
- const row = this.db
39
- .query('SELECT state FROM threads WHERE id = ?')
40
- .get(threadId);
41
- const { flatStateJson, metadata } = parseThreadData(row?.state);
42
- const state = new Map();
43
- if (flatStateJson) {
44
- try {
45
- const data = JSON.parse(flatStateJson);
46
- for (const [key, value] of Object.entries(data)) {
47
- state.set(key, value);
48
- }
49
- }
50
- catch {
51
- // Continue with empty state if parsing fails
52
- }
53
- }
54
- return { state, metadata: metadata || {} };
55
- };
56
- return new DefaultThread(this, threadId, restoreFn);
57
- }
58
- async save(thread) {
59
- if (!this.db || !(thread instanceof DefaultThread)) {
60
- return;
61
- }
62
- const saveMode = thread.getSaveMode();
63
- if (saveMode === 'none') {
64
- return;
65
- }
66
- const now = Date.now();
67
- if (saveMode === 'merge') {
68
- // For merge, we need to load existing state, apply operations, then save
69
- const operations = thread.getPendingOperations();
70
- const metadata = thread.getMetadataForSave();
71
- // Load existing state
72
- const row = this.db
73
- .query('SELECT state FROM threads WHERE id = ?')
74
- .get(thread.id);
75
- const { flatStateJson, metadata: existingMetadata } = parseThreadData(row?.state);
76
- const state = {};
77
- if (flatStateJson) {
78
- try {
79
- Object.assign(state, JSON.parse(flatStateJson));
80
- }
81
- catch {
82
- // Continue with empty state if parsing fails
83
- }
84
- }
85
- // Apply operations
86
- for (const op of operations) {
87
- switch (op.op) {
88
- case 'clear':
89
- for (const key of Object.keys(state)) {
90
- delete state[key];
91
- }
92
- break;
93
- case 'set':
94
- if (op.key !== undefined) {
95
- state[op.key] = op.value;
96
- }
97
- break;
98
- case 'delete':
99
- if (op.key !== undefined) {
100
- delete state[op.key];
101
- }
102
- break;
103
- case 'push':
104
- if (op.key !== undefined) {
105
- const existing = state[op.key];
106
- let arr;
107
- if (Array.isArray(existing)) {
108
- existing.push(op.value);
109
- arr = existing;
110
- }
111
- else if (existing === undefined) {
112
- arr = [op.value];
113
- state[op.key] = arr;
114
- }
115
- else {
116
- // If non-array, silently skip
117
- continue;
118
- }
119
- // Apply maxRecords limit
120
- if (op.maxRecords !== undefined && arr.length > op.maxRecords) {
121
- state[op.key] = arr.slice(arr.length - op.maxRecords);
122
- }
123
- }
124
- break;
125
- }
126
- }
127
- // Build final data
128
- const finalMetadata = metadata || existingMetadata || {};
129
- const hasState = Object.keys(state).length > 0;
130
- const hasMetadata = Object.keys(finalMetadata).length > 0;
131
- let stateJson = '';
132
- if (hasState || hasMetadata) {
133
- const data = {};
134
- if (hasState)
135
- data.state = state;
136
- if (hasMetadata)
137
- data.metadata = finalMetadata;
138
- stateJson = JSON.stringify(data);
139
- }
140
- this.db.run(`INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?)
141
- ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`, [thread.id, stateJson, now, stateJson, now]);
142
- }
143
- else {
144
- // Full save
145
- const stateJson = await thread.getSerializedState();
146
- this.db.run(`INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?)
147
- ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`, [thread.id, stateJson, now, stateJson, now]);
148
- }
149
- }
150
- async destroy(thread) {
151
- if (!this.db) {
152
- return;
153
- }
154
- // Delete thread from DB
155
- this.db.run('DELETE FROM threads WHERE id = ?', [thread.id]);
156
- }
157
- }
158
- //# sourceMappingURL=local.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/services/thread/local.ts"],"names":[],"mappings":"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"}