@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,441 +0,0 @@
1
- import { context, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api';
2
- import { TraceState } from '@opentelemetry/core';
3
- import { AGENT_RUNTIME, AGENT_IDS } from './_config';
4
- import { generateId } from './session';
5
- import WaitUntilHandler from './_waituntil';
6
- import { registerServices } from './_services';
7
- import { getAgentAsyncLocalStorage } from './_context';
8
- import { getLogger, getTracer } from './_server';
9
- import { getAppState } from './app';
10
- import { getThreadProvider, getSessionProvider, getSessionEventProvider } from './_services';
11
- import * as runtimeConfig from './_config';
12
- /**
13
- * Standalone agent context for executing agents outside of HTTP requests.
14
- *
15
- * This context provides the same infrastructure as HTTP request contexts:
16
- * - OpenTelemetry tracing with proper span hierarchy
17
- * - Session and thread management (save/restore)
18
- * - Background task handling (waitUntil)
19
- * - Session event tracking (start/complete)
20
- * - Access to all services (kv, stream, vector)
21
- *
22
- * @example
23
- * ```typescript
24
- * import { createAgentContext } from '@agentuity/runtime';
25
- * import myAgent from './agents/my-agent';
26
- *
27
- * // Simple usage:
28
- * const ctx = createAgentContext();
29
- * const result = await ctx.invoke(() => myAgent.run(input));
30
- *
31
- * // With custom session tracking:
32
- * const ctx = createAgentContext({
33
- * sessionId: discordMessage.id,
34
- * trigger: 'discord'
35
- * });
36
- * const result = await ctx.invoke(() => myAgent.run(input));
37
- *
38
- * // Reuse context for multiple agents:
39
- * const ctx = createAgentContext();
40
- * const result1 = await ctx.invoke(() => agent1.run(input1));
41
- * const result2 = await ctx.invoke(() => agent2.run(result1));
42
- * ```
43
- */
44
- export class StandaloneAgentContext {
45
- // Immutable context properties (safe for concurrent access)
46
- agent = {};
47
- logger;
48
- tracer;
49
- kv;
50
- stream;
51
- vector;
52
- sandbox;
53
- config;
54
- app;
55
- current;
56
- [AGENT_RUNTIME];
57
- // Note: The following are mutable and will be set per-invocation via AsyncLocalStorage
58
- // They exist on the interface for compatibility but are overwritten during invoke()
59
- sessionId;
60
- state;
61
- session;
62
- thread;
63
- auth;
64
- [AGENT_IDS];
65
- // Immutable options stored from constructor
66
- parentContext;
67
- trigger;
68
- initialSessionId;
69
- constructor(options) {
70
- const logger = getLogger();
71
- const tracer = getTracer();
72
- const app = getAppState();
73
- if (!logger || !tracer || !app) {
74
- throw new Error('Global state not initialized. Make sure createServer() has been called before createAgentContext().');
75
- }
76
- this.logger = logger;
77
- this.tracer = tracer;
78
- this.app = app;
79
- this.config = {};
80
- this.state = new Map();
81
- this.parentContext = options?.parentContext ?? context.active();
82
- this.trigger = options?.trigger ?? 'manual';
83
- this.initialSessionId = options?.sessionId;
84
- // Session ID will be set properly in invoke() after span is created
85
- this.sessionId = options?.sessionId ?? 'pending';
86
- // Thread and session will be restored in invoke()
87
- this.thread =
88
- options?.thread ??
89
- {
90
- id: 'pending',
91
- state: {
92
- loaded: false,
93
- dirty: false,
94
- get: async () => undefined,
95
- set: async () => { },
96
- has: async () => false,
97
- delete: async () => { },
98
- clear: async () => { },
99
- entries: async () => [],
100
- keys: async () => [],
101
- values: async () => [],
102
- size: async () => 0,
103
- push: async () => { },
104
- },
105
- getMetadata: async () => ({}),
106
- setMetadata: async () => { },
107
- addEventListener: () => { },
108
- removeEventListener: () => { },
109
- destroy: async () => { },
110
- empty: async () => true,
111
- };
112
- this.session =
113
- options?.session ??
114
- {
115
- id: 'pending',
116
- thread: this.thread,
117
- state: new Map(),
118
- metadata: {},
119
- addEventListener: () => { },
120
- removeEventListener: () => { },
121
- serializeUserData: () => undefined,
122
- };
123
- this.auth = null;
124
- // Create isolated runtime state
125
- this[AGENT_RUNTIME] = {
126
- agents: new Map(),
127
- agentConfigs: new Map(),
128
- agentEventListeners: new WeakMap(),
129
- };
130
- // Register services (kv, stream, vector)
131
- registerServices(this, true); // true = populate agents registry
132
- }
133
- waitUntil(_callback) {
134
- // This will be called from within invoke() where waitUntilHandler is in scope
135
- // We need to access the per-call waitUntilHandler from the current invocation
136
- // This is handled by updating the context during invoke() via AsyncLocalStorage
137
- throw new Error('waitUntil must be called from within invoke() execution context');
138
- }
139
- /**
140
- * Execute a function within this agent context.
141
- *
142
- * This method:
143
- * 1. Creates an OpenTelemetry span for the invocation
144
- * 2. Restores/creates session and thread
145
- * 3. Sends session start event
146
- * 4. Executes the function within AsyncLocalStorage context
147
- * 5. Waits for background tasks (waitUntil)
148
- * 6. Saves session and thread
149
- * 7. Sends session complete event
150
- *
151
- * @param fn - Function to execute (typically () => agent.run(input))
152
- * @param options - Optional configuration for the invocation
153
- * @returns Promise that resolves to the function's return value
154
- *
155
- * @example
156
- * ```typescript
157
- * const result = await ctx.invoke(() => myAgent.run({ userId: '123' }));
158
- * ```
159
- *
160
- * @example
161
- * ```typescript
162
- * // Multiple agents in sequence:
163
- * const result = await ctx.invoke(async () => {
164
- * const step1 = await agent1.run(input);
165
- * return agent2.run(step1);
166
- * });
167
- * ```
168
- */
169
- async invoke(fn, options) {
170
- const threadProvider = getThreadProvider();
171
- const sessionProvider = getSessionProvider();
172
- const sessionEventProvider = getSessionEventProvider();
173
- const storage = getAgentAsyncLocalStorage();
174
- // Create per-invocation state (prevents race conditions on concurrent calls)
175
- const waitUntilHandler = new WaitUntilHandler(this.tracer);
176
- const agentIds = new Set();
177
- let invocationSessionId = this.initialSessionId ?? 'pending';
178
- let invocationThread;
179
- let invocationSession;
180
- const invocationState = new Map();
181
- // Create a per-call context that inherits from this but has isolated mutable state
182
- const callContext = Object.create(this);
183
- callContext.sessionId = invocationSessionId;
184
- callContext.state = invocationState;
185
- callContext[AGENT_IDS] = agentIds;
186
- callContext.waitUntil = (callback) => {
187
- waitUntilHandler.waitUntil(callback);
188
- };
189
- // Execute within parent context (for distributed tracing)
190
- return await context.with(this.parentContext, async () => {
191
- // Create a span for this invocation (similar to otelMiddleware's HTTP span)
192
- return await trace.getTracer('standalone-agent').startActiveSpan(options?.spanName ?? 'agent-invocation', {
193
- kind: SpanKind.INTERNAL, // Not HTTP, but internal invocation
194
- attributes: {
195
- trigger: this.trigger,
196
- },
197
- }, async (span) => {
198
- const sctx = span.spanContext();
199
- // Generate sessionId from traceId if not provided
200
- invocationSessionId =
201
- this.initialSessionId ??
202
- (sctx?.traceId ? `sess_${sctx.traceId}` : generateId('sess'));
203
- callContext.sessionId = invocationSessionId;
204
- // Add to tracestate (like otelMiddleware does)
205
- // Note: SpanContext.traceState is readonly, so we update it by setting the span with a new context
206
- let traceState = sctx.traceState ?? new TraceState();
207
- const projectId = runtimeConfig.getProjectId();
208
- const orgId = runtimeConfig.getOrganizationId();
209
- const deploymentId = runtimeConfig.getDeploymentId();
210
- const isDevMode = runtimeConfig.isDevMode();
211
- if (projectId) {
212
- traceState = traceState.set('pid', projectId);
213
- }
214
- if (orgId) {
215
- traceState = traceState.set('oid', orgId);
216
- }
217
- if (isDevMode) {
218
- traceState = traceState.set('d', '1');
219
- }
220
- // Update the active context with the new trace state
221
- // We do this by setting the span in the context with updated trace state
222
- // Note: This creates a new context but we don't need to use it directly
223
- // as the span already has the trace state we need for propagation
224
- trace.setSpan(context.active(), trace.wrapSpanContext({
225
- ...sctx,
226
- traceState,
227
- }));
228
- // Restore thread and session (like otelMiddleware does)
229
- // For standalone contexts, we create a simple thread/session if not provided
230
- // The threadProvider.restore expects a Hono context with cookie/header access
231
- // For standalone contexts without HTTP, we just create a new thread
232
- const { DefaultThread, generateId: genId } = await import('./session');
233
- const threadId = genId('thrd');
234
- // Create a no-op restore function for standalone contexts
235
- const restoreFn = async () => ({ state: new Map(), metadata: {} });
236
- invocationThread = new DefaultThread(threadProvider, threadId, restoreFn);
237
- callContext.thread = invocationThread;
238
- invocationSession = await sessionProvider.restore(invocationThread, invocationSessionId);
239
- callContext.session = invocationSession;
240
- // Send session start event (if configured)
241
- const shouldSendSession = !!(orgId && projectId);
242
- let canSendSessionEvents = true;
243
- if (shouldSendSession) {
244
- await sessionEventProvider
245
- .start({
246
- id: invocationSessionId,
247
- orgId,
248
- projectId,
249
- threadId: invocationThread.id,
250
- routeId: 'standalone', // No route for standalone contexts
251
- deploymentId,
252
- devmode: isDevMode,
253
- environment: runtimeConfig.getEnvironment(),
254
- method: 'STANDALONE',
255
- url: '',
256
- trigger: this.trigger,
257
- metadata: Object.keys(invocationSession.metadata).length > 0
258
- ? invocationSession.metadata
259
- : undefined,
260
- })
261
- .catch((ex) => {
262
- canSendSessionEvents = false;
263
- this.logger.error('error sending session start event: %s', ex);
264
- });
265
- }
266
- let hasPendingWaits = false;
267
- try {
268
- // Execute function within AsyncLocalStorage context with per-call context
269
- const result = await storage.run(callContext, fn);
270
- // Wait for background tasks (like otelMiddleware does)
271
- if (waitUntilHandler.hasPending()) {
272
- hasPendingWaits = true;
273
- waitUntilHandler
274
- .waitUntilAll(this.logger, invocationSessionId)
275
- .then(async () => {
276
- this.logger.debug('wait until finished for session %s', invocationSessionId);
277
- await sessionProvider.save(invocationSession);
278
- await threadProvider.save(invocationThread);
279
- span.setStatus({ code: SpanStatusCode.OK });
280
- if (shouldSendSession && canSendSessionEvents) {
281
- const userData = invocationSession.serializeUserData();
282
- sessionEventProvider
283
- .complete({
284
- id: invocationSessionId,
285
- threadId: (await invocationThread.empty())
286
- ? null
287
- : invocationThread.id,
288
- statusCode: 200, // Success
289
- agentIds: Array.from(agentIds),
290
- userData,
291
- metadata: Object.keys(invocationSession.metadata).length > 0
292
- ? invocationSession.metadata
293
- : undefined,
294
- })
295
- .then(() => { })
296
- .catch((ex) => this.logger.error(ex));
297
- }
298
- })
299
- .catch(async (ex) => {
300
- this.logger.error('wait until errored for session %s. %s', invocationSessionId, ex);
301
- if (ex instanceof Error) {
302
- span.recordException(ex);
303
- }
304
- const message = ex.message ?? String(ex);
305
- span.setStatus({
306
- code: SpanStatusCode.ERROR,
307
- message,
308
- });
309
- this.logger.error(message);
310
- if (shouldSendSession && canSendSessionEvents) {
311
- const userData = invocationSession.serializeUserData();
312
- sessionEventProvider
313
- .complete({
314
- id: invocationSessionId,
315
- threadId: (await invocationThread.empty())
316
- ? null
317
- : invocationThread.id,
318
- statusCode: 500, // Error
319
- error: message,
320
- agentIds: Array.from(agentIds),
321
- userData,
322
- metadata: Object.keys(invocationSession.metadata).length > 0
323
- ? invocationSession.metadata
324
- : undefined,
325
- })
326
- .then(() => { })
327
- .catch((ex) => this.logger.error(ex));
328
- }
329
- })
330
- .finally(() => {
331
- span.end();
332
- });
333
- }
334
- else {
335
- span.setStatus({ code: SpanStatusCode.OK });
336
- if (shouldSendSession && canSendSessionEvents) {
337
- const userData = invocationSession.serializeUserData();
338
- sessionEventProvider
339
- .complete({
340
- id: invocationSessionId,
341
- threadId: (await invocationThread.empty())
342
- ? null
343
- : invocationThread.id,
344
- statusCode: 200,
345
- agentIds: Array.from(agentIds),
346
- userData,
347
- metadata: Object.keys(invocationSession.metadata).length > 0
348
- ? invocationSession.metadata
349
- : undefined,
350
- })
351
- .then(() => { })
352
- .catch((ex) => this.logger.error(ex));
353
- }
354
- }
355
- return result;
356
- }
357
- catch (ex) {
358
- if (ex instanceof Error) {
359
- span.recordException(ex);
360
- }
361
- const message = ex.message ?? String(ex);
362
- span.setStatus({
363
- code: SpanStatusCode.ERROR,
364
- message,
365
- });
366
- this.logger.error(message);
367
- if (shouldSendSession && canSendSessionEvents) {
368
- const userData = invocationSession.serializeUserData();
369
- sessionEventProvider
370
- .complete({
371
- id: invocationSessionId,
372
- threadId: (await invocationThread.empty()) ? null : invocationThread.id,
373
- statusCode: 500,
374
- error: message,
375
- agentIds: Array.from(agentIds),
376
- userData,
377
- metadata: Object.keys(invocationSession.metadata).length > 0
378
- ? invocationSession.metadata
379
- : undefined,
380
- })
381
- .then(() => { })
382
- .catch((ex) => this.logger.error(ex));
383
- }
384
- throw ex;
385
- }
386
- finally {
387
- if (!hasPendingWaits) {
388
- try {
389
- await sessionProvider.save(invocationSession);
390
- await threadProvider.save(invocationThread);
391
- }
392
- finally {
393
- span.end();
394
- }
395
- }
396
- }
397
- });
398
- });
399
- }
400
- }
401
- /**
402
- * Create a standalone agent context for executing agents outside of HTTP requests.
403
- *
404
- * This is useful for Discord bots, cron jobs, WebSocket callbacks, or any scenario
405
- * where you need to run agents but don't have an HTTP request context.
406
- *
407
- * @param options - Optional configuration for the context
408
- * @returns A StandaloneAgentContext instance
409
- *
410
- * @example
411
- * ```typescript
412
- * import { createAgentContext } from '@agentuity/runtime';
413
- * import myAgent from './agents/my-agent';
414
- *
415
- * // Simple usage:
416
- * const ctx = createAgentContext();
417
- * const result = await ctx.invoke(() => myAgent.run(input));
418
- *
419
- * // Discord bot example:
420
- * client.on('messageCreate', async (message) => {
421
- * const ctx = createAgentContext({
422
- * sessionId: message.id,
423
- * trigger: 'discord'
424
- * });
425
- * const response = await ctx.invoke(() =>
426
- * chatAgent.run({ message: message.content })
427
- * );
428
- * await message.reply(response.text);
429
- * });
430
- *
431
- * // Cron job example:
432
- * cron.schedule('0 * * * *', async () => {
433
- * const ctx = createAgentContext({ trigger: 'cron' });
434
- * await ctx.invoke(() => cleanupAgent.run());
435
- * });
436
- * ```
437
- */
438
- export function createAgentContext(options) {
439
- return new StandaloneAgentContext(options);
440
- }
441
- //# sourceMappingURL=_standalone.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_standalone.js","sourceRoot":"","sources":["../src/_standalone.ts"],"names":[],"mappings":"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"}
package/dist/_tokens.d.ts DELETED
@@ -1,12 +0,0 @@
1
- import type { Context } from '@opentelemetry/api';
2
- import type { Span } from '@opentelemetry/sdk-trace-base';
3
- import type { SpanProcessor } from '@opentelemetry/sdk-trace-base';
4
- export declare const TOKENS_HEADER = "x-agentuity-tokens";
5
- export declare const DURATION_HEADER = "x-agentuity-duration";
6
- export declare class TokenSpanProcessor implements SpanProcessor {
7
- onStart(_span: Span, _context: Context): void;
8
- onEnd(span: Span): void;
9
- forceFlush(): Promise<void>;
10
- shutdown(): Promise<void>;
11
- }
12
- //# sourceMappingURL=_tokens.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_tokens.d.ts","sourceRoot":"","sources":["../src/_tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAInE,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAClD,eAAO,MAAM,eAAe,yBAAyB,CAAC;AA6CtD,qBAAa,kBAAmB,YAAW,aAAa;IACvD,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IAItC,KAAK,CAAC,IAAI,EAAE,IAAI;IA+ChB,UAAU;IAIV,QAAQ;CAGR"}
package/dist/_tokens.js DELETED
@@ -1,96 +0,0 @@
1
- import { inAgentContext, inHTTPContext, getHTTPContext } from './_context';
2
- import { SpanAttributes } from '@traceloop/ai-semantic-conventions';
3
- export const TOKENS_HEADER = 'x-agentuity-tokens';
4
- export const DURATION_HEADER = 'x-agentuity-duration';
5
- // AI SDK span names: ai.generateText, ai.streamText, ai.generateObject, ai.streamObject, ai.embed, ai.embedMany
6
- const AI_SDK_SPAN_PREFIX = 'ai.';
7
- const AI_SDK_MODEL_NAME = 'ai.model.id';
8
- const AI_SDK_USAGE_PROMPT_TOKENS = 'ai.usage.promptTokens';
9
- const AI_SDK_USAGE_COMPLETION_TOKENS = 'ai.usage.completionTokens';
10
- const parseTokenHeader = (val) => {
11
- const kv = new Map();
12
- if (val) {
13
- // format is: [model]:[count] [model:count]
14
- const tok = val.split(' ');
15
- for (const entry of tok) {
16
- const [name, count] = entry.split(':');
17
- if (name) {
18
- kv.set(name, parseInt(count ?? '0') ?? 0);
19
- }
20
- }
21
- }
22
- return kv;
23
- };
24
- const serializeTokenHeader = (kv) => {
25
- const lines = [];
26
- for (const [k, v] of kv) {
27
- lines.push(`${k}:${v}`);
28
- }
29
- return lines.join(' ');
30
- };
31
- const getTokenValue = (val) => {
32
- if (val) {
33
- const v = val.valueOf();
34
- switch (typeof v) {
35
- case 'number':
36
- return v;
37
- case 'string':
38
- return parseInt(v, 10);
39
- default:
40
- }
41
- }
42
- return 0;
43
- };
44
- export class TokenSpanProcessor {
45
- onStart(_span, _context) {
46
- return;
47
- }
48
- onEnd(span) {
49
- if (inAgentContext() && inHTTPContext()) {
50
- const ctx = getHTTPContext();
51
- const tokenLine = ctx.res.headers.get(TOKENS_HEADER) ?? undefined;
52
- const tokens = parseTokenHeader(tokenLine);
53
- let mutated = false;
54
- // AI SDK uses ai.* span names but doesn't use the semantic attribute names
55
- if (span.name.startsWith(AI_SDK_SPAN_PREFIX) && AI_SDK_MODEL_NAME in span.attributes) {
56
- const model = span.attributes[AI_SDK_MODEL_NAME].toString();
57
- let totalTokens = tokens.get(model) ?? 0;
58
- if (AI_SDK_USAGE_PROMPT_TOKENS in span.attributes) {
59
- totalTokens += getTokenValue(span.attributes[AI_SDK_USAGE_PROMPT_TOKENS]);
60
- }
61
- if (AI_SDK_USAGE_COMPLETION_TOKENS in span.attributes) {
62
- totalTokens += getTokenValue(span.attributes[AI_SDK_USAGE_COMPLETION_TOKENS]);
63
- }
64
- if (totalTokens > 0) {
65
- tokens.set(model, totalTokens);
66
- mutated = true;
67
- }
68
- }
69
- else if (SpanAttributes.LLM_SYSTEM in span.attributes &&
70
- SpanAttributes.LLM_RESPONSE_MODEL in span.attributes) {
71
- const model = span.attributes[SpanAttributes.LLM_RESPONSE_MODEL].toString();
72
- let totalTokens = tokens.get(model) ?? 0;
73
- if (SpanAttributes.LLM_USAGE_PROMPT_TOKENS in span.attributes) {
74
- totalTokens += getTokenValue(span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS]);
75
- }
76
- if (SpanAttributes.LLM_USAGE_COMPLETION_TOKENS in span.attributes) {
77
- totalTokens += getTokenValue(span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]);
78
- }
79
- if (totalTokens > 0) {
80
- tokens.set(model, totalTokens);
81
- mutated = true;
82
- }
83
- }
84
- if (mutated) {
85
- ctx.header(TOKENS_HEADER, serializeTokenHeader(tokens));
86
- }
87
- }
88
- }
89
- forceFlush() {
90
- return Promise.resolve();
91
- }
92
- shutdown() {
93
- return Promise.resolve();
94
- }
95
- }
96
- //# sourceMappingURL=_tokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_tokens.js","sourceRoot":"","sources":["../src/_tokens.ts"],"names":[],"mappings":"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"}
package/dist/_util.d.ts DELETED
@@ -1,16 +0,0 @@
1
- import type { Context } from 'hono';
2
- export declare function returnResponse(ctx: Context, result: unknown): Response;
3
- /**
4
- * SHA256 hash of the given values
5
- *
6
- * @param val one or more strings to hash
7
- * @returns hash string in hex format
8
- */
9
- export declare function hash(...val: string[]): string;
10
- /**
11
- * Safely stringify an object to JSON, handling circular references
12
- * @param obj - The object to stringify
13
- * @returns JSON string representation
14
- */
15
- export declare function safeStringify(obj: unknown): string;
16
- //# sourceMappingURL=_util.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_util.d.ts","sourceRoot":"","sources":["../src/_util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,YAM3D;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAI7C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAkClD"}
package/dist/_util.js DELETED
@@ -1,54 +0,0 @@
1
- export function returnResponse(ctx, result) {
2
- if (result instanceof ReadableStream)
3
- return ctx.body(result);
4
- if (result instanceof Response)
5
- return result;
6
- if (typeof result === 'string')
7
- return ctx.text(result);
8
- if (typeof result === 'number' || typeof result === 'boolean')
9
- return ctx.text(String(result));
10
- return ctx.json(result);
11
- }
12
- /**
13
- * SHA256 hash of the given values
14
- *
15
- * @param val one or more strings to hash
16
- * @returns hash string in hex format
17
- */
18
- export function hash(...val) {
19
- const hasher = new Bun.CryptoHasher('sha256');
20
- val.map((val) => hasher.update(val));
21
- return hasher.digest().toHex();
22
- }
23
- /**
24
- * Safely stringify an object to JSON, handling circular references
25
- * @param obj - The object to stringify
26
- * @returns JSON string representation
27
- */
28
- export function safeStringify(obj) {
29
- const stack = [];
30
- function replacer(_key, value) {
31
- if (typeof value === 'bigint') {
32
- return value.toString();
33
- }
34
- if (typeof value === 'object' && value !== null) {
35
- // Check if this object is already in our ancestor chain
36
- if (stack.includes(value)) {
37
- return '[Circular]';
38
- }
39
- // Add to stack before processing
40
- stack.push(value);
41
- // Process the object
42
- const result = Array.isArray(value) ? [] : {};
43
- for (const [k, v] of Object.entries(value)) {
44
- result[k] = replacer(k, v);
45
- }
46
- // Remove from stack after processing
47
- stack.pop();
48
- return result;
49
- }
50
- return value;
51
- }
52
- return JSON.stringify(replacer('', obj));
53
- }
54
- //# sourceMappingURL=_util.js.map
package/dist/_util.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"_util.js","sourceRoot":"","sources":["../src/_util.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,GAAY,EAAE,MAAe;IAC3D,IAAI,MAAM,YAAY,cAAc;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9D,IAAI,MAAM,YAAY,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/F,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,IAAI,CAAC,GAAG,GAAa;IACpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9C,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACzC,MAAM,KAAK,GAAc,EAAE,CAAC;IAE5B,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAc;QAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjD,wDAAwD;YACxD,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,YAAY,CAAC;YACrB,CAAC;YAED,iCAAiC;YACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAElB,qBAAqB;YACrB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAE9C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,MAAkC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;YAED,qCAAqC;YACrC,KAAK,CAAC,GAAG,EAAE,CAAC;YAEZ,OAAO,MAAM,CAAC;QACf,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC"}