@agentuity/runtime 0.0.51 → 0.0.53

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 (113) hide show
  1. package/dist/_config.js +99 -0
  2. package/dist/_config.js.map +1 -0
  3. package/dist/_context.d.ts +11 -11
  4. package/dist/_context.d.ts.map +1 -1
  5. package/dist/_context.js +84 -0
  6. package/dist/_context.js.map +1 -0
  7. package/dist/_idle.js +24 -0
  8. package/dist/_idle.js.map +1 -0
  9. package/dist/_server.js +489 -0
  10. package/dist/_server.js.map +1 -0
  11. package/dist/_services.js +258 -0
  12. package/dist/_services.js.map +1 -0
  13. package/dist/_tokens.js +98 -0
  14. package/dist/_tokens.js.map +1 -0
  15. package/dist/_util.js +54 -0
  16. package/dist/_util.js.map +1 -0
  17. package/dist/_waituntil.js +87 -0
  18. package/dist/_waituntil.js.map +1 -0
  19. package/dist/agent.d.ts +24 -15
  20. package/dist/agent.d.ts.map +1 -1
  21. package/dist/agent.js +507 -0
  22. package/dist/agent.js.map +1 -0
  23. package/dist/app.d.ts +6 -1
  24. package/dist/app.d.ts.map +1 -1
  25. package/dist/app.js +72 -0
  26. package/dist/app.js.map +1 -0
  27. package/dist/eval.d.ts +1 -1
  28. package/dist/eval.d.ts.map +1 -1
  29. package/dist/eval.js +2 -0
  30. package/dist/eval.js.map +1 -0
  31. package/dist/index.js +11 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/io/email.js +154 -0
  34. package/dist/io/email.js.map +1 -0
  35. package/dist/logger/console.js +274 -0
  36. package/dist/logger/console.js.map +1 -0
  37. package/dist/logger/index.js +3 -0
  38. package/dist/logger/index.js.map +1 -0
  39. package/dist/logger/internal.js +133 -0
  40. package/dist/logger/internal.js.map +1 -0
  41. package/dist/logger/logger.js +2 -0
  42. package/dist/logger/logger.js.map +1 -0
  43. package/dist/logger/user.js +7 -0
  44. package/dist/logger/user.js.map +1 -0
  45. package/dist/logger/util.js +77 -0
  46. package/dist/logger/util.js.map +1 -0
  47. package/dist/otel/config.js +23 -0
  48. package/dist/otel/config.js.map +1 -0
  49. package/dist/otel/console.js +52 -0
  50. package/dist/otel/console.js.map +1 -0
  51. package/dist/otel/exporters/index.js +4 -0
  52. package/dist/otel/exporters/index.js.map +1 -0
  53. package/dist/otel/exporters/jsonl-log-exporter.js +103 -0
  54. package/dist/otel/exporters/jsonl-log-exporter.js.map +1 -0
  55. package/dist/otel/exporters/jsonl-metric-exporter.js +104 -0
  56. package/dist/otel/exporters/jsonl-metric-exporter.js.map +1 -0
  57. package/dist/otel/exporters/jsonl-trace-exporter.js +111 -0
  58. package/dist/otel/exporters/jsonl-trace-exporter.js.map +1 -0
  59. package/dist/otel/fetch.js +81 -0
  60. package/dist/otel/fetch.js.map +1 -0
  61. package/dist/otel/http.js +44 -0
  62. package/dist/otel/http.js.map +1 -0
  63. package/dist/otel/logger.js +278 -0
  64. package/dist/otel/logger.js.map +1 -0
  65. package/dist/otel/otel.js +233 -0
  66. package/dist/otel/otel.js.map +1 -0
  67. package/dist/router.js +350 -0
  68. package/dist/router.js.map +1 -0
  69. package/dist/services/evalrun/composite.js +26 -0
  70. package/dist/services/evalrun/composite.js.map +1 -0
  71. package/dist/services/evalrun/http.js +74 -0
  72. package/dist/services/evalrun/http.js.map +1 -0
  73. package/dist/services/evalrun/index.js +5 -0
  74. package/dist/services/evalrun/index.js.map +1 -0
  75. package/dist/services/evalrun/json.js +38 -0
  76. package/dist/services/evalrun/json.js.map +1 -0
  77. package/dist/services/evalrun/local.js +22 -0
  78. package/dist/services/evalrun/local.js.map +1 -0
  79. package/dist/services/local/_db.js +144 -0
  80. package/dist/services/local/_db.js.map +1 -0
  81. package/dist/services/local/_router.js +60 -0
  82. package/dist/services/local/_router.js.map +1 -0
  83. package/dist/services/local/_util.js +42 -0
  84. package/dist/services/local/_util.js.map +1 -0
  85. package/dist/services/local/index.js +8 -0
  86. package/dist/services/local/index.js.map +1 -0
  87. package/dist/services/local/keyvalue.js +114 -0
  88. package/dist/services/local/keyvalue.js.map +1 -0
  89. package/dist/services/local/objectstore.js +117 -0
  90. package/dist/services/local/objectstore.js.map +1 -0
  91. package/dist/services/local/stream.js +218 -0
  92. package/dist/services/local/stream.js.map +1 -0
  93. package/dist/services/local/vector.js +183 -0
  94. package/dist/services/local/vector.js.map +1 -0
  95. package/dist/services/session/composite.js +26 -0
  96. package/dist/services/session/composite.js.map +1 -0
  97. package/dist/services/session/http.js +42 -0
  98. package/dist/services/session/http.js.map +1 -0
  99. package/dist/services/session/index.js +5 -0
  100. package/dist/services/session/index.js.map +1 -0
  101. package/dist/services/session/json.js +35 -0
  102. package/dist/services/session/json.js.map +1 -0
  103. package/dist/services/session/local.js +22 -0
  104. package/dist/services/session/local.js.map +1 -0
  105. package/dist/session.js +199 -0
  106. package/dist/session.js.map +1 -0
  107. package/dist/workbench.js +38 -0
  108. package/dist/workbench.js.map +1 -0
  109. package/package.json +5 -5
  110. package/src/_context.ts +34 -13
  111. package/src/agent.ts +76 -40
  112. package/src/app.ts +6 -1
  113. package/src/eval.ts +1 -1
@@ -0,0 +1,35 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * An implementation of the SessionEventProvider which is no-op
3
+ */
4
+ export class LocalSessionEventProvider {
5
+ /**
6
+ * called when the session starts
7
+ *
8
+ * @param event SessionStartEvent
9
+ */
10
+ async start(_event) {
11
+ // no op
12
+ }
13
+ /**
14
+ * called when the session completes
15
+ *
16
+ * @param event SessionCompleteEvent
17
+ */
18
+ async complete(_event) {
19
+ // no op
20
+ }
21
+ }
22
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/services/session/local.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,OAAO,yBAAyB;IACrC;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,MAAyB;QACpC,QAAQ;IACT,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,MAA4B;QAC1C,QAAQ;IACT,CAAC;CACD"}
@@ -0,0 +1,199 @@
1
+ import { getCookie, setCookie } from 'hono/cookie';
2
+ import { fireEvent } from './app';
3
+ // WeakMap to store event listeners for Thread and Session instances
4
+ const threadEventListeners = new WeakMap();
5
+ const sessionEventListeners = new WeakMap();
6
+ // Helper to fire thread event listeners
7
+ async function fireThreadEvent(thread, eventName) {
8
+ const listeners = threadEventListeners.get(thread);
9
+ if (!listeners)
10
+ return;
11
+ const callbacks = listeners.get(eventName);
12
+ if (!callbacks || callbacks.size === 0)
13
+ return;
14
+ for (const callback of callbacks) {
15
+ await callback(eventName, thread);
16
+ }
17
+ }
18
+ // Helper to fire session event listeners
19
+ async function fireSessionEvent(session, eventName) {
20
+ const listeners = sessionEventListeners.get(session);
21
+ if (!listeners)
22
+ return;
23
+ const callbacks = listeners.get(eventName);
24
+ if (!callbacks || callbacks.size === 0)
25
+ return;
26
+ for (const callback of callbacks) {
27
+ await callback(eventName, session);
28
+ }
29
+ }
30
+ // Generate thread or session ID
31
+ export function generateId(prefix) {
32
+ const arr = new Uint8Array(16);
33
+ crypto.getRandomValues(arr);
34
+ return `${prefix}${prefix ? '_' : ''}${arr.toHex()}`;
35
+ }
36
+ export class DefaultThread {
37
+ #lastUsed;
38
+ id;
39
+ state;
40
+ provider;
41
+ constructor(provider, id) {
42
+ this.provider = provider;
43
+ this.id = id;
44
+ this.state = new Map();
45
+ this.#lastUsed = Date.now();
46
+ }
47
+ addEventListener(eventName, callback) {
48
+ let listeners = threadEventListeners.get(this);
49
+ if (!listeners) {
50
+ listeners = new Map();
51
+ threadEventListeners.set(this, listeners);
52
+ }
53
+ let callbacks = listeners.get(eventName);
54
+ if (!callbacks) {
55
+ callbacks = new Set();
56
+ listeners.set(eventName, callbacks);
57
+ }
58
+ callbacks.add(callback);
59
+ }
60
+ removeEventListener(eventName, callback) {
61
+ const listeners = threadEventListeners.get(this);
62
+ if (!listeners)
63
+ return;
64
+ const callbacks = listeners.get(eventName);
65
+ if (!callbacks)
66
+ return;
67
+ callbacks.delete(callback);
68
+ }
69
+ async fireEvent(eventName) {
70
+ await fireThreadEvent(this, eventName);
71
+ }
72
+ async destroy() {
73
+ this.provider.destroy(this);
74
+ }
75
+ touch() {
76
+ this.#lastUsed = Date.now();
77
+ }
78
+ expired() {
79
+ return Date.now() - this.#lastUsed >= 3.6e6; // 1 hour
80
+ }
81
+ }
82
+ export class DefaultSession {
83
+ id;
84
+ thread;
85
+ state;
86
+ constructor(thread, id) {
87
+ this.id = id;
88
+ this.thread = thread;
89
+ this.state = new Map();
90
+ }
91
+ addEventListener(eventName, callback) {
92
+ let listeners = sessionEventListeners.get(this);
93
+ if (!listeners) {
94
+ listeners = new Map();
95
+ sessionEventListeners.set(this, listeners);
96
+ }
97
+ let callbacks = listeners.get(eventName);
98
+ if (!callbacks) {
99
+ callbacks = new Set();
100
+ listeners.set(eventName, callbacks);
101
+ }
102
+ callbacks.add(callback);
103
+ }
104
+ removeEventListener(eventName, callback) {
105
+ const listeners = sessionEventListeners.get(this);
106
+ if (!listeners)
107
+ return;
108
+ const callbacks = listeners.get(eventName);
109
+ if (!callbacks)
110
+ return;
111
+ callbacks.delete(callback);
112
+ }
113
+ async fireEvent(eventName) {
114
+ await fireSessionEvent(this, eventName);
115
+ }
116
+ }
117
+ export class DefaultThreadProvider {
118
+ threads = new Map();
119
+ async initialize() {
120
+ setInterval(() => {
121
+ for (const [, thread] of this.threads) {
122
+ if (thread.expired()) {
123
+ void (async () => {
124
+ try {
125
+ await this.destroy(thread);
126
+ }
127
+ catch (err) {
128
+ console.error('Failed to destroy expired thread', err);
129
+ }
130
+ })();
131
+ }
132
+ }
133
+ }, 60_000).unref();
134
+ }
135
+ async restore(ctx) {
136
+ const cookie = getCookie(ctx);
137
+ let threadId;
138
+ if (cookie.atid?.startsWith('thrd_')) {
139
+ threadId = cookie.atid;
140
+ }
141
+ threadId = threadId || generateId('thrd');
142
+ if (threadId) {
143
+ setCookie(ctx, 'atid', threadId);
144
+ const existing = this.threads.get(threadId);
145
+ if (existing) {
146
+ return existing;
147
+ }
148
+ }
149
+ const thread = new DefaultThread(this, threadId);
150
+ this.threads.set(thread.id, thread);
151
+ await fireEvent('thread.created', thread);
152
+ return thread;
153
+ }
154
+ async save(thread) {
155
+ if (thread instanceof DefaultThread) {
156
+ thread.touch();
157
+ }
158
+ }
159
+ async destroy(thread) {
160
+ if (thread instanceof DefaultThread) {
161
+ try {
162
+ await thread.fireEvent('destroyed');
163
+ await fireEvent('thread.destroyed', thread);
164
+ }
165
+ finally {
166
+ this.threads.delete(thread.id);
167
+ threadEventListeners.delete(thread);
168
+ }
169
+ }
170
+ }
171
+ }
172
+ export class DefaultSessionProvider {
173
+ sessions = new Map();
174
+ async initialize() {
175
+ // No initialization needed for in-memory provider
176
+ }
177
+ async restore(thread, sessionId) {
178
+ let session = this.sessions.get(sessionId);
179
+ if (!session) {
180
+ session = new DefaultSession(thread, sessionId);
181
+ this.sessions.set(sessionId, session);
182
+ await fireEvent('session.started', session);
183
+ }
184
+ return session;
185
+ }
186
+ async save(session) {
187
+ if (session instanceof DefaultSession) {
188
+ try {
189
+ await session.fireEvent('completed');
190
+ await fireEvent('session.completed', session);
191
+ }
192
+ finally {
193
+ this.sessions.delete(session.id);
194
+ sessionEventListeners.delete(session);
195
+ }
196
+ }
197
+ }
198
+ }
199
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+ import { timingSafeEqual } from 'node:crypto';
3
+ import { getAgents } from './agent';
4
+ export const createWorkbenchMetadataRoute = () => {
5
+ const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY
6
+ ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}`
7
+ : undefined;
8
+ const agents = getAgents();
9
+ return async (ctx) => {
10
+ if (authHeader) {
11
+ try {
12
+ const authValue = ctx.req.header('Authorization');
13
+ if (!authValue ||
14
+ !timingSafeEqual(Buffer.from(authValue, 'utf-8'), Buffer.from(authHeader, 'utf-8'))) {
15
+ return ctx.text('Unauthorized', { status: 401 });
16
+ }
17
+ }
18
+ catch {
19
+ // timing safe equals will throw if the input/output lengths are mismatched
20
+ // so we treat all exceptions as invalid
21
+ return ctx.text('Unauthorized', { status: 401 });
22
+ }
23
+ }
24
+ const schemas = { agents: {} };
25
+ // TODO: this is going to only work for zod schema for now. need a way to handle others
26
+ for (const [, agent] of agents) {
27
+ schemas.agents[agent.metadata.name] = {
28
+ schema: {
29
+ input: agent.inputSchema ? z.toJSONSchema(agent.inputSchema) : undefined,
30
+ output: agent.outputSchema ? z.toJSONSchema(agent.outputSchema) : undefined,
31
+ },
32
+ metadata: agent.metadata,
33
+ };
34
+ }
35
+ return ctx.json(schemas);
36
+ };
37
+ };
38
+ //# sourceMappingURL=workbench.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench.js","sourceRoot":"","sources":["../src/workbench.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAY,EAAE;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACxD,CAAC,CAAC,UAAU,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE;QACpD,CAAC,CAAC,SAAS,CAAC;IACb,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC;gBACJ,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBAClD,IACC,CAAC,SAAS;oBACV,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,EAClF,CAAC;oBACF,OAAO,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAClD,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,2EAA2E;gBAC3E,wCAAwC;gBACxC,OAAO,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAClD,CAAC;QACF,CAAC;QACD,MAAM,OAAO,GAAwC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACpE,uFAAuF;QACvF,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;gBACrC,MAAM,EAAE;oBACP,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;oBACxE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;iBAC3E;gBACD,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACxB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC,CAAC;AACH,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@agentuity/runtime",
3
- "version": "0.0.51",
3
+ "version": "0.0.53",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Agentuity employees and contributors",
6
6
  "type": "module",
7
- "main": "./src/index.ts",
7
+ "main": "./dist/index.js",
8
8
  "types": "./dist/index.d.ts",
9
9
  "exports": {
10
10
  ".": {
11
- "import": "./src/index.ts",
11
+ "import": "./dist/index.js",
12
12
  "types": "./dist/index.d.ts"
13
13
  }
14
14
  },
@@ -25,8 +25,8 @@
25
25
  "prepublishOnly": "bun run clean && bun run build"
26
26
  },
27
27
  "dependencies": {
28
- "@agentuity/core": "0.0.51",
29
- "@agentuity/server": "0.0.51",
28
+ "@agentuity/core": "0.0.53",
29
+ "@agentuity/server": "0.0.53",
30
30
  "@opentelemetry/api": "^1.9.0",
31
31
  "@opentelemetry/api-logs": "^0.207.0",
32
32
  "@opentelemetry/auto-instrumentations-node": "^0.66.0",
package/src/_context.ts CHANGED
@@ -2,17 +2,23 @@ import { AsyncLocalStorage } from 'node:async_hooks';
2
2
  import type { Context as HonoContext } from 'hono';
3
3
  import type { Tracer } from '@opentelemetry/api';
4
4
  import type { KeyValueStorage, ObjectStorage, StreamStorage, VectorStorage } from '@agentuity/core';
5
- import type { AgentContext, AgentName } from './agent';
5
+ import type { AgentContext, AgentName, AgentRegistry, AgentRunner } from './agent';
6
6
  import type { Logger } from './logger';
7
7
  import type WaitUntilHandler from './_waituntil';
8
8
  import { registerServices } from './_services';
9
9
  import type { Thread, Session } from './session';
10
10
 
11
- export interface RequestAgentContextArgs<TAgentMap, TAgent> {
11
+ export interface RequestAgentContextArgs<
12
+ TAgentMap extends AgentRegistry = AgentRegistry,
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ TCurrent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ TParent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
17
+ > {
12
18
  sessionId: string;
13
19
  agent: TAgentMap;
14
- current: TAgent;
15
- parent?: TAgent;
20
+ current: TCurrent;
21
+ parent: TParent;
16
22
  agentName: AgentName;
17
23
  logger: Logger;
18
24
  tracer: Tracer;
@@ -21,10 +27,17 @@ export interface RequestAgentContextArgs<TAgentMap, TAgent> {
21
27
  handler: WaitUntilHandler;
22
28
  }
23
29
 
24
- export class RequestAgentContext<TAgentMap, TAgent> implements AgentContext {
30
+ export class RequestAgentContext<
31
+ TAgentMap extends AgentRegistry = AgentRegistry,
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ TCurrent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
+ TParent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
36
+ > implements AgentContext<TAgentMap, TCurrent, TParent>
37
+ {
25
38
  agent: TAgentMap;
26
- current: TAgent;
27
- parent?: TAgent;
39
+ current: TCurrent;
40
+ parent: TParent;
28
41
  agentName: AgentName;
29
42
  logger: Logger;
30
43
  sessionId: string;
@@ -38,7 +51,7 @@ export class RequestAgentContext<TAgentMap, TAgent> implements AgentContext {
38
51
  thread: Thread;
39
52
  private handler: WaitUntilHandler;
40
53
 
41
- constructor(args: RequestAgentContextArgs<TAgentMap, TAgent>) {
54
+ constructor(args: RequestAgentContextArgs<TAgentMap, TCurrent, TParent>) {
42
55
  this.agent = args.agent;
43
56
  this.current = args.current;
44
57
  this.parent = args.parent;
@@ -58,7 +71,8 @@ export class RequestAgentContext<TAgentMap, TAgent> implements AgentContext {
58
71
  }
59
72
  }
60
73
 
61
- const agentAsyncLocalStorage = new AsyncLocalStorage<AgentContext>();
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
+ const agentAsyncLocalStorage = new AsyncLocalStorage<AgentContext<any, any, any>>();
62
76
  const httpAsyncLocalStorage = new AsyncLocalStorage<HonoContext>();
63
77
 
64
78
  export const inAgentContext = (): boolean => {
@@ -71,7 +85,8 @@ export const inHTTPContext = (): boolean => {
71
85
  return !!context;
72
86
  };
73
87
 
74
- export const getAgentContext = (): AgentContext => {
88
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
89
+ export const getAgentContext = (): AgentContext<any, any, any> => {
75
90
  const context = agentAsyncLocalStorage.getStore();
76
91
  if (!context) {
77
92
  throw new Error('AgentContext is not available');
@@ -90,12 +105,18 @@ export const getHTTPContext = (): HonoContext => {
90
105
  export const getAgentAsyncLocalStorage = () => agentAsyncLocalStorage;
91
106
  export const getHTTPAsyncLocalStorage = () => httpAsyncLocalStorage;
92
107
 
93
- export const runInAgentContext = <TAgentMap, TAgent>(
108
+ export const runInAgentContext = <
109
+ TAgentMap extends AgentRegistry = AgentRegistry,
110
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
+ TCurrent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
112
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
113
+ TParent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
114
+ >(
94
115
  ctxObject: Record<string, unknown>,
95
- args: RequestAgentContextArgs<TAgentMap, TAgent>,
116
+ args: RequestAgentContextArgs<TAgentMap, TCurrent, TParent>,
96
117
  next: () => Promise<void>
97
118
  ) => {
98
- const ctx = new RequestAgentContext(args);
119
+ const ctx = new RequestAgentContext<TAgentMap, TCurrent, TParent>(args);
99
120
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
100
121
  const _ctx = ctx as any;
101
122
  Object.getOwnPropertyNames(ctx).forEach((k) => {