@agentuity/runtime 0.0.68 → 0.0.70

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 (94) hide show
  1. package/AGENTS.md +130 -10
  2. package/README.md +6 -8
  3. package/dist/_config.d.ts +16 -0
  4. package/dist/_config.d.ts.map +1 -1
  5. package/dist/_config.js +16 -0
  6. package/dist/_config.js.map +1 -1
  7. package/dist/_context.d.ts +17 -15
  8. package/dist/_context.d.ts.map +1 -1
  9. package/dist/_context.js +17 -8
  10. package/dist/_context.js.map +1 -1
  11. package/dist/_server.d.ts.map +1 -1
  12. package/dist/_server.js +27 -14
  13. package/dist/_server.js.map +1 -1
  14. package/dist/_services.d.ts.map +1 -1
  15. package/dist/_services.js +2 -29
  16. package/dist/_services.js.map +1 -1
  17. package/dist/_validation.d.ts +89 -0
  18. package/dist/_validation.d.ts.map +1 -0
  19. package/dist/_validation.js +29 -0
  20. package/dist/_validation.js.map +1 -0
  21. package/dist/agent.d.ts +476 -104
  22. package/dist/agent.d.ts.map +1 -1
  23. package/dist/agent.js +293 -97
  24. package/dist/agent.js.map +1 -1
  25. package/dist/app.d.ts +6 -18
  26. package/dist/app.d.ts.map +1 -1
  27. package/dist/app.js +1 -1
  28. package/dist/app.js.map +1 -1
  29. package/dist/eval.d.ts +4 -4
  30. package/dist/eval.d.ts.map +1 -1
  31. package/dist/index.d.ts +3 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/otel/config.d.ts.map +1 -1
  36. package/dist/otel/config.js +5 -2
  37. package/dist/otel/config.js.map +1 -1
  38. package/dist/otel/console.d.ts +10 -6
  39. package/dist/otel/console.d.ts.map +1 -1
  40. package/dist/otel/console.js +31 -13
  41. package/dist/otel/console.js.map +1 -1
  42. package/dist/otel/logger.d.ts.map +1 -1
  43. package/dist/otel/logger.js +0 -19
  44. package/dist/otel/logger.js.map +1 -1
  45. package/dist/otel/otel.d.ts +2 -1
  46. package/dist/otel/otel.d.ts.map +1 -1
  47. package/dist/otel/otel.js +28 -15
  48. package/dist/otel/otel.js.map +1 -1
  49. package/dist/services/local/_db.d.ts.map +1 -1
  50. package/dist/services/local/_db.js +1 -22
  51. package/dist/services/local/_db.js.map +1 -1
  52. package/dist/services/local/_router.d.ts.map +1 -1
  53. package/dist/services/local/_router.js +0 -32
  54. package/dist/services/local/_router.js.map +1 -1
  55. package/dist/services/local/index.d.ts +0 -1
  56. package/dist/services/local/index.d.ts.map +1 -1
  57. package/dist/services/local/index.js +0 -1
  58. package/dist/services/local/index.js.map +1 -1
  59. package/dist/session.d.ts +18 -2
  60. package/dist/session.d.ts.map +1 -1
  61. package/dist/session.js +6 -0
  62. package/dist/session.js.map +1 -1
  63. package/dist/validator.d.ts +140 -0
  64. package/dist/validator.d.ts.map +1 -0
  65. package/dist/validator.js +146 -0
  66. package/dist/validator.js.map +1 -0
  67. package/dist/workbench.d.ts.map +1 -1
  68. package/dist/workbench.js +38 -29
  69. package/dist/workbench.js.map +1 -1
  70. package/package.json +6 -6
  71. package/src/_config.ts +19 -0
  72. package/src/_context.ts +25 -31
  73. package/src/_server.ts +30 -14
  74. package/src/_services.ts +0 -28
  75. package/src/_validation.ts +119 -0
  76. package/src/agent.ts +872 -272
  77. package/src/app.ts +5 -18
  78. package/src/eval.ts +6 -6
  79. package/src/index.ts +3 -1
  80. package/src/otel/config.ts +5 -2
  81. package/src/otel/console.ts +34 -20
  82. package/src/otel/logger.ts +0 -18
  83. package/src/otel/otel.ts +43 -29
  84. package/src/services/local/_db.ts +1 -27
  85. package/src/services/local/_router.ts +0 -46
  86. package/src/services/local/index.ts +0 -1
  87. package/src/session.ts +22 -2
  88. package/src/validator.ts +277 -0
  89. package/src/workbench.ts +38 -32
  90. package/dist/services/local/objectstore.d.ts +0 -19
  91. package/dist/services/local/objectstore.d.ts.map +0 -1
  92. package/dist/services/local/objectstore.js +0 -117
  93. package/dist/services/local/objectstore.js.map +0 -1
  94. package/src/services/local/objectstore.ts +0 -177
@@ -0,0 +1,146 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { StructuredError } from '@agentuity/core';
3
+ import { validator as honoValidator } from 'hono/validator';
4
+ import { validateSchema, formatValidationIssues } from './_validation';
5
+ /**
6
+ * Create a route validator middleware with input and/or output validation.
7
+ *
8
+ * Automatically handles different validation targets based on HTTP method:
9
+ * - GET requests: validates query parameters (if input schema provided)
10
+ * - POST/PUT/PATCH/DELETE: validates JSON body (if input schema provided)
11
+ * - All methods: validates JSON response (if output schema provided)
12
+ *
13
+ * @param options - Validation configuration
14
+ * @param options.input - Input schema (query params for GET, body for POST/PUT/PATCH/DELETE)
15
+ * @param options.output - Output schema for response validation
16
+ * @returns Hono middleware handler
17
+ *
18
+ * @example GET with query validation
19
+ * ```typescript
20
+ * import { validator } from '@agentuity/runtime';
21
+ *
22
+ * router.get('/search',
23
+ * validator({
24
+ * input: z.object({ q: z.string(), limit: z.number().optional() }),
25
+ * output: z.array(SearchResultSchema)
26
+ * }),
27
+ * async (c) => {
28
+ * const { q, limit } = c.req.valid('query'); // Typed!
29
+ * const results = await search(q, limit);
30
+ * return c.json(results);
31
+ * }
32
+ * );
33
+ * ```
34
+ *
35
+ * @example POST with body validation
36
+ * ```typescript
37
+ * router.post('/users',
38
+ * validator({
39
+ * input: z.object({ name: z.string() }),
40
+ * output: UserSchema
41
+ * }),
42
+ * async (c) => {
43
+ * const data = c.req.valid('json'); // Typed!
44
+ * const user = await createUser(data);
45
+ * return c.json(user);
46
+ * }
47
+ * );
48
+ * ```
49
+ */
50
+ export const validator = ((options) => {
51
+ const { input: inputSchema, output: outputSchema } = options;
52
+ // Helper to build input validator that detects HTTP method
53
+ const buildInputValidator = (schema) => {
54
+ return async (c, next) => {
55
+ const method = c.req.method.toUpperCase();
56
+ // GET requests validate query parameters
57
+ if (method === 'GET') {
58
+ const queryValidator = honoValidator('query', async (value, c) => {
59
+ const result = await validateSchema(schema, value);
60
+ if (!result.success) {
61
+ return c.json({
62
+ error: 'Validation failed',
63
+ message: formatValidationIssues(result.issues),
64
+ issues: result.issues,
65
+ }, 400);
66
+ }
67
+ return result.data;
68
+ });
69
+ return await queryValidator(c, next);
70
+ }
71
+ // POST/PUT/PATCH/DELETE validate JSON body
72
+ const jsonValidator = honoValidator('json', async (value, c) => {
73
+ const result = await validateSchema(schema, value);
74
+ if (!result.success) {
75
+ return c.json({
76
+ error: 'Validation failed',
77
+ message: formatValidationIssues(result.issues),
78
+ issues: result.issues,
79
+ }, 400);
80
+ }
81
+ return result.data;
82
+ });
83
+ return await jsonValidator(c, next);
84
+ };
85
+ };
86
+ // Output validation middleware (runs after handler)
87
+ const outputValidator = async (c, next) => {
88
+ await next();
89
+ if (!outputSchema)
90
+ return;
91
+ const res = c.res;
92
+ if (!res)
93
+ return;
94
+ // Only validate JSON responses
95
+ const contentType = res.headers.get('Content-Type') ?? '';
96
+ if (!contentType.toLowerCase().includes('application/json')) {
97
+ return;
98
+ }
99
+ // Clone so we don't consume the body that will be sent
100
+ let responseBody;
101
+ try {
102
+ const cloned = res.clone();
103
+ responseBody = await cloned.json();
104
+ }
105
+ catch {
106
+ const OutputValidationError = StructuredError('OutputValidationError')();
107
+ throw new OutputValidationError({
108
+ message: 'Output validation failed: response is not valid JSON',
109
+ issues: [],
110
+ });
111
+ }
112
+ const result = await validateSchema(outputSchema, responseBody);
113
+ if (!result.success) {
114
+ const OutputValidationError = StructuredError('OutputValidationError')();
115
+ throw new OutputValidationError({
116
+ message: `Output validation failed: ${formatValidationIssues(result.issues)}`,
117
+ issues: result.issues,
118
+ });
119
+ }
120
+ // Replace response with validated/sanitized JSON
121
+ c.res = new Response(JSON.stringify(result.data), {
122
+ status: res.status,
123
+ headers: res.headers,
124
+ });
125
+ };
126
+ // If no input schema, only do output validation
127
+ if (!inputSchema) {
128
+ return outputValidator;
129
+ }
130
+ // If no output schema, only do input validation
131
+ if (!outputSchema) {
132
+ return buildInputValidator(inputSchema);
133
+ }
134
+ // Compose: input validator → output validator
135
+ const inputMiddleware = buildInputValidator(inputSchema);
136
+ const composed = async (c, next) => {
137
+ // Run input validator first, then output validator, then handler
138
+ const result = await inputMiddleware(c, async () => {
139
+ await outputValidator(c, next);
140
+ });
141
+ // If inputMiddleware returned early (validation failed), return that response
142
+ return result;
143
+ };
144
+ return composed;
145
+ });
146
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workbench.d.ts","sourceRoot":"","sources":["../src/workbench.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAI7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,eAAO,MAAM,6BAA6B,QAAO,OAoGhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,mGAmCjC,CAAC;AAEF,eAAO,MAAM,4BAA4B,QAAO,OA4C/C,CAAC;AAKF,eAAO,MAAM,6BAA6B,SACjC,MAAM,OAAO,MACZ,IAAI,mBAAmB,SA6BhC,CAAC"}
1
+ {"version":3,"file":"workbench.d.ts","sourceRoot":"","sources":["../src/workbench.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAK7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAGpD,eAAO,MAAM,6BAA6B,QAAO,OAsFhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,mGAmCjC,CAAC;AAqBF,eAAO,MAAM,4BAA4B,QAAO,OA2C/C,CAAC;AAKF,eAAO,MAAM,6BAA6B,SACjC,MAAM,OAAO,MACZ,IAAI,mBAAmB,SA6BhC,CAAC"}
package/dist/workbench.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { z } from 'zod';
2
+ import { s } from '@agentuity/schema';
2
3
  import { timingSafeEqual } from 'node:crypto';
3
4
  import { getAgents, createAgentMiddleware } from './agent';
4
5
  import { createRouter } from './router';
6
+ import { privateContext } from './_server';
5
7
  export const createWorkbenchExecutionRoute = () => {
6
8
  const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY
7
9
  ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}`
@@ -34,10 +36,10 @@ export const createWorkbenchExecutionRoute = () => {
34
36
  return ctx.json({ error: 'Invalid JSON in request body' }, { status: 400 });
35
37
  }
36
38
  // Get agents registry and find the agent
37
- const agents = getAgents();
39
+ const allAgents = getAgents();
38
40
  let agentObj;
39
41
  let agentName;
40
- for (const [name, agent] of agents) {
42
+ for (const [name, agent] of allAgents) {
41
43
  if (agent.metadata.id === agentId) {
42
44
  agentObj = agent;
43
45
  agentName = name;
@@ -47,34 +49,23 @@ export const createWorkbenchExecutionRoute = () => {
47
49
  if (!agentObj || !agentName) {
48
50
  return ctx.text('Agent not found', { status: 404 });
49
51
  }
50
- // Validate input if schema exists
51
- let validatedInput = input;
52
- if (agentObj.inputSchema) {
53
- const inputResult = await agentObj.inputSchema['~standard'].validate(input);
54
- if (inputResult.issues) {
55
- return ctx.json({
56
- error: 'Validation failed',
57
- issues: inputResult.issues,
58
- }, { status: 400 });
59
- }
60
- validatedInput = inputResult.value;
61
- console.log('✅ [Workbench] Input validation passed');
62
- }
63
- else {
64
- console.log('ℹ️ [Workbench] No input schema, skipping validation');
65
- }
66
- // Get agent runner from context.var.agent (should be available via middleware)
67
- const agentRunner = ctx.var.agent[agentName];
68
- if (!agentRunner) {
69
- return ctx.text('Agent runner not found', { status: 404 });
52
+ // Track agent ID for telemetry (otelMiddleware sets up agentIds)
53
+ const _ctx = privateContext(ctx);
54
+ if (agentObj.metadata?.id) {
55
+ _ctx.var.agentIds.add(agentObj.metadata.id);
56
+ _ctx.var.agentIds.add(agentObj.metadata.agentId);
70
57
  }
71
- // Execute the agent
58
+ // Execute the agent handler directly
59
+ // The agentMiddleware has already set up the AsyncLocalStorage context
60
+ // so the handler can access it via getAgentContext()
72
61
  let result;
73
62
  if (agentObj.inputSchema) {
74
- result = await agentRunner.run(validatedInput);
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ result = await agentObj.handler(input);
75
65
  }
76
66
  else {
77
- result = await agentRunner.run();
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
+ result = await agentObj.handler();
78
69
  }
79
70
  // Handle cases where result might be undefined/null
80
71
  if (result === undefined || result === null) {
@@ -125,6 +116,25 @@ export const createWorkbenchRouter = () => {
125
116
  router.post('/_agentuity/workbench/execute', createWorkbenchExecutionRoute());
126
117
  return router;
127
118
  };
119
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
+ const toJSONSchema = (schema) => {
121
+ // Check if it's an Agentuity schema via StandardSchemaV1 vendor
122
+ if (schema?.['~standard']?.vendor === 'agentuity') {
123
+ return s.toJSONSchema(schema);
124
+ }
125
+ // Check if it's a Zod schema
126
+ if (schema?._def?.typeName) {
127
+ try {
128
+ return z.toJSONSchema(schema);
129
+ }
130
+ catch {
131
+ return {};
132
+ }
133
+ }
134
+ // TODO: this is going to only work for zod schema for now. need a way to handle others
135
+ // Unknown schema type
136
+ return {};
137
+ };
128
138
  export const createWorkbenchMetadataRoute = () => {
129
139
  const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY
130
140
  ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}`
@@ -146,20 +156,19 @@ export const createWorkbenchMetadataRoute = () => {
146
156
  }
147
157
  }
148
158
  const schemas = { agents: {} };
149
- // TODO: this is going to only work for zod schema for now. need a way to handle others
150
159
  for (const [, agent] of agents) {
151
- schemas.agents[agent.metadata.identifier] = {
160
+ schemas.agents[agent.metadata.id] = {
152
161
  schema: {
153
162
  input: agent.inputSchema
154
163
  ? {
155
164
  code: agent.metadata.inputSchemaCode || undefined,
156
- json: z.toJSONSchema(agent.inputSchema),
165
+ json: toJSONSchema(agent.inputSchema),
157
166
  }
158
167
  : undefined,
159
168
  output: agent.outputSchema
160
169
  ? {
161
170
  code: agent.metadata.outputSchemaCode || undefined,
162
- json: z.toJSONSchema(agent.outputSchema),
171
+ json: toJSONSchema(agent.outputSchema),
163
172
  }
164
173
  : undefined,
165
174
  },
@@ -1 +1 @@
1
- {"version":3,"file":"workbench.js","sourceRoot":"","sources":["../src/workbench.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workbench.js","sourceRoot":"","sources":["../src/workbench.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAY,EAAE;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACxD,CAAC,CAAC,UAAU,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE;QACpD,CAAC,CAAC,SAAS,CAAC;IACb,OAAO,KAAK,EAAE,GAAY,EAAE,EAAE;QAC7B,uBAAuB;QACvB,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;QAED,IAAI,CAAC;YACJ,IAAI,OAAe,CAAC;YACpB,IAAI,KAAc,CAAC;YACnB,IAAI,CAAC;gBACJ,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACzC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;gBAC9B,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;YAC3B,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBACjB,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,yCAAyC;YACzC,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;YAE9B,IAAI,QAAQ,CAAC;YACb,IAAI,SAAS,CAAC;YAEd,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;gBACvC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;oBACnC,QAAQ,GAAG,KAAK,CAAC;oBACjB,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACP,CAAC;YACF,CAAC;YAED,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC7B,OAAO,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACrD,CAAC;YAED,iEAAiE;YACjE,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC5C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;YAED,qCAAqC;YACrC,uEAAuE;YACvE,qDAAqD;YACrD,IAAI,MAAM,CAAC;YACX,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,8DAA8D;gBAC9D,MAAM,GAAG,MAAO,QAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACP,8DAA8D;gBAC9D,MAAM,GAAG,MAAO,QAAgB,CAAC,OAAO,EAAE,CAAC;YAC5C,CAAC;YAED,oDAAoD;YACpD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAC7C,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,CAAC;YAED,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,GAAG,CAAC,IAAI,CACd;gBACC,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC/D,EACD,EAAE,MAAM,EAAE,GAAG,EAAE,CACf,CAAC;QACH,CAAC;IACF,CAAC,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACzC,mEAAmE;IACnE,IAAI,CAAC;QACJ,sFAAsF;QACtF,IAAI,OAAO,iCAAiC,KAAK,WAAW,EAAE,CAAC;YAC9D,sFAAsF;YACtF,MAAM,OAAO,GAAG,iCAAiC,CAAC;YAElD,mDAAmD;YACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEhC,uDAAuD;YACvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;gBACnD,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBAClD,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,MAAM,CAAC;gBACjD,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,wDAAwD;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,+DAA+D;IAC/D,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjE,uBAAuB;IACvB,MAAM,CAAC,SAAS,CAAC,0BAA0B,EAAE,6BAA6B,EAAE,CAAC,CAAC;IAC9E,MAAM,CAAC,GAAG,CAAC,qCAAqC,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAClF,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,6BAA6B,EAAE,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,8DAA8D;AAC9D,MAAM,YAAY,GAAG,CAAC,MAAW,EAAE,EAAE;IACpC,gEAAgE;IAChE,IAAI,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;QACnD,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,6BAA6B;IAC7B,IAAI,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC;YACJ,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IACD,uFAAuF;IACvF,sBAAsB;IACtB,OAAO,EAAE,CAAC;AACX,CAAC,CAAC;AAEF,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,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG;gBACnC,MAAM,EAAE;oBACP,KAAK,EAAE,KAAK,CAAC,WAAW;wBACvB,CAAC,CAAC;4BACA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,eAAe,IAAI,SAAS;4BACjD,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC;yBACrC;wBACF,CAAC,CAAC,SAAS;oBACZ,MAAM,EAAE,KAAK,CAAC,YAAY;wBACzB,CAAC,CAAC;4BACA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,gBAAgB,IAAI,SAAS;4BAClD,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;yBACtC;wBACF,CAAC,CAAC,SAAS;iBACZ;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;AAEF,4DAA4D;AAC5D,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAuB,CAAC;AAE3D,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,EAAE;IACjD,OAAO,CAAC,IAAa,EAAE,EAAE;QACxB,OAAO,CAAC,EAAuB,EAAE,EAAE;YAClC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE;gBACd,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5B,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;gBAE3B,oEAAoE;gBACpE,IAAI,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;oBACrD,6EAA6E;oBAC7E,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;wBAC5C,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;4BACrB,IAAI,CAAC;gCACJ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;4BACxB,CAAC;4BAAC,OAAO,MAAM,EAAE,CAAC;gCACjB,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;4BACtC,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBACf,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;IACH,CAAC,CAAC;AACH,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentuity/runtime",
3
- "version": "0.0.68",
3
+ "version": "0.0.70",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Agentuity employees and contributors",
6
6
  "type": "module",
@@ -22,11 +22,12 @@
22
22
  "clean": "rm -rf dist",
23
23
  "build": "bunx tsc --build --force",
24
24
  "typecheck": "bunx tsc --noEmit",
25
+ "typecheck:tests": "bunx tsc --noEmit --project tsconfig.test.json",
25
26
  "prepublishOnly": "bun run clean && bun run build"
26
27
  },
27
28
  "dependencies": {
28
- "@agentuity/core": "0.0.68",
29
- "@agentuity/server": "0.0.68",
29
+ "@agentuity/core": "0.0.70",
30
+ "@agentuity/server": "0.0.70",
30
31
  "@opentelemetry/api": "^1.9.0",
31
32
  "@opentelemetry/api-logs": "^0.207.0",
32
33
  "@opentelemetry/auto-instrumentations-node": "^0.66.0",
@@ -44,16 +45,15 @@
44
45
  "@opentelemetry/semantic-conventions": "^1.37.0",
45
46
  "@traceloop/ai-semantic-conventions": "0.21.0",
46
47
  "@traceloop/node-server-sdk": "0.21.1",
48
+ "hono": "^4.7.13",
47
49
  "zod": "^4.1.12",
48
50
  "mailparser": "^3.7.1",
49
51
  "@types/mailparser": "^3.4.6",
50
52
  "ws": "^8.18.0",
51
53
  "@types/ws": "^8.5.13"
52
54
  },
53
- "peerDependencies": {
54
- "hono": "^4.10.3"
55
- },
56
55
  "devDependencies": {
56
+ "@agentuity/test-utils": "0.0.70",
57
57
  "@types/bun": "latest",
58
58
  "@types/react": "^19.2.2",
59
59
  "@types/react-dom": "^19.2.2",
package/src/_config.ts CHANGED
@@ -115,3 +115,22 @@ export function getEnvironment(): string {
115
115
  export function isAuthenticated(): boolean {
116
116
  return !!process.env.AGENTUITY_SDK_KEY;
117
117
  }
118
+
119
+ /**
120
+ * Symbol for accessing internal runtime state.
121
+ * Defined here to avoid circular dependency.
122
+ */
123
+ export const AGENT_RUNTIME = Symbol('AGENT_RUNTIME');
124
+
125
+ /**
126
+ * Symbol for accessing internal agent from AgentRunner.
127
+ * @internal
128
+ */
129
+ export const INTERNAL_AGENT = Symbol('INTERNAL_AGENT');
130
+
131
+ /**
132
+ * Symbol for tracking the current executing agent (for telemetry).
133
+ * Not exposed on public AgentContext interface.
134
+ * @internal
135
+ */
136
+ export const CURRENT_AGENT = Symbol('CURRENT_AGENT');
package/src/_context.ts CHANGED
@@ -4,11 +4,11 @@ import type { Tracer } from '@opentelemetry/api';
4
4
  import {
5
5
  StructuredError,
6
6
  type KeyValueStorage,
7
- type ObjectStorage,
8
7
  type StreamStorage,
9
8
  type VectorStorage,
10
9
  } from '@agentuity/core';
11
- import type { AgentContext, AgentName, AgentRegistry, AgentRunner } from './agent';
10
+ import type { AgentContext, AgentRegistry, AgentRunner, AgentRuntimeState } from './agent';
11
+ import { AGENT_RUNTIME, CURRENT_AGENT } from './_config';
12
12
  import type { Logger } from './logger';
13
13
  import type WaitUntilHandler from './_waituntil';
14
14
  import { registerServices } from './_services';
@@ -16,18 +16,11 @@ import type { Thread, Session } from './session';
16
16
 
17
17
  export interface RequestAgentContextArgs<
18
18
  TAgentMap extends AgentRegistry = AgentRegistry,
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
- TCurrent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
21
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
- TParent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
23
19
  TConfig = unknown,
24
20
  TAppState = Record<string, never>,
25
21
  > {
26
22
  sessionId: string;
27
23
  agent: TAgentMap;
28
- current: TCurrent;
29
- parent: TParent;
30
- agentName: AgentName;
31
24
  logger: Logger;
32
25
  tracer: Tracer;
33
26
  session: Session;
@@ -35,27 +28,20 @@ export interface RequestAgentContextArgs<
35
28
  handler: WaitUntilHandler;
36
29
  config: TConfig;
37
30
  app: TAppState;
31
+ runtime: AgentRuntimeState;
38
32
  }
39
33
 
40
34
  export class RequestAgentContext<
41
35
  TAgentMap extends AgentRegistry = AgentRegistry,
42
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
43
- TCurrent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
44
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
- TParent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
46
36
  TConfig = unknown,
47
37
  TAppState = Record<string, never>,
48
- > implements AgentContext<TAgentMap, TCurrent, TParent, TConfig, TAppState>
38
+ > implements AgentContext<TAgentMap, TConfig, TAppState>
49
39
  {
50
40
  agent: TAgentMap;
51
- current: TCurrent;
52
- parent: TParent;
53
- agentName: AgentName;
54
41
  logger: Logger;
55
42
  sessionId: string;
56
43
  tracer: Tracer;
57
44
  kv!: KeyValueStorage;
58
- objectstore!: ObjectStorage;
59
45
  stream!: StreamStorage;
60
46
  vector!: VectorStorage;
61
47
  state: Map<string, unknown>;
@@ -63,13 +49,11 @@ export class RequestAgentContext<
63
49
  thread: Thread;
64
50
  config: TConfig;
65
51
  app: TAppState;
52
+ [AGENT_RUNTIME]: AgentRuntimeState;
66
53
  private handler: WaitUntilHandler;
67
54
 
68
- constructor(args: RequestAgentContextArgs<TAgentMap, TCurrent, TParent, TConfig, TAppState>) {
55
+ constructor(args: RequestAgentContextArgs<TAgentMap, TConfig, TAppState>) {
69
56
  this.agent = args.agent;
70
- this.current = args.current;
71
- this.parent = args.parent;
72
- this.agentName = args.agentName;
73
57
  this.logger = args.logger;
74
58
  this.sessionId = args.sessionId;
75
59
  this.tracer = args.tracer;
@@ -77,6 +61,7 @@ export class RequestAgentContext<
77
61
  this.session = args.session;
78
62
  this.config = args.config;
79
63
  this.app = args.app;
64
+ this[AGENT_RUNTIME] = args.runtime;
80
65
  this.state = new Map<string, unknown>();
81
66
  this.handler = args.handler;
82
67
  registerServices(this, false); // agents already populated via args.agent
@@ -88,7 +73,7 @@ export class RequestAgentContext<
88
73
  }
89
74
 
90
75
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
91
- const agentAsyncLocalStorage = new AsyncLocalStorage<AgentContext<any, any, any, any, any>>();
76
+ const agentAsyncLocalStorage = new AsyncLocalStorage<AgentContext<any, any, any>>();
92
77
  const httpAsyncLocalStorage = new AsyncLocalStorage<HonoContext>();
93
78
 
94
79
  export const inAgentContext = (): boolean => {
@@ -107,7 +92,7 @@ const AgentContextNotAvailableError = StructuredError(
107
92
  );
108
93
 
109
94
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
- export const getAgentContext = (): AgentContext<any, any, any, any, any> => {
95
+ export const getAgentContext = (): AgentContext<any, any, any> => {
111
96
  const context = agentAsyncLocalStorage.getStore();
112
97
  if (!context) {
113
98
  throw new AgentContextNotAvailableError();
@@ -131,20 +116,29 @@ export const getHTTPContext = (): HonoContext => {
131
116
  export const getAgentAsyncLocalStorage = () => agentAsyncLocalStorage;
132
117
  export const getHTTPAsyncLocalStorage = () => httpAsyncLocalStorage;
133
118
 
134
- export const runInAgentContext = <
135
- TAgentMap extends AgentRegistry = AgentRegistry,
136
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
137
- TCurrent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
119
+ /**
120
+ * Get the current executing agent's metadata (for internal telemetry use only).
121
+ * Returns undefined if not in an agent context or no agent is executing.
122
+ * @internal
123
+ */
124
+ export const getCurrentAgentMetadata = (): AgentRunner['metadata'] | undefined => {
125
+ const context = agentAsyncLocalStorage.getStore();
126
+ if (!context) return undefined;
127
+ // Access internal symbol property
138
128
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
- TParent extends AgentRunner<any, any, any> | undefined = AgentRunner<any, any, any> | undefined,
129
+ return (context as any)[CURRENT_AGENT]?.metadata;
130
+ };
131
+
132
+ export const setupRequestAgentContext = <
133
+ TAgentMap extends AgentRegistry = AgentRegistry,
140
134
  TConfig = unknown,
141
135
  TAppState = Record<string, never>,
142
136
  >(
143
137
  ctxObject: Record<string, unknown>,
144
- args: RequestAgentContextArgs<TAgentMap, TCurrent, TParent, TConfig, TAppState>,
138
+ args: RequestAgentContextArgs<TAgentMap, TConfig, TAppState>,
145
139
  next: () => Promise<void>
146
140
  ) => {
147
- const ctx = new RequestAgentContext<TAgentMap, TCurrent, TParent, TConfig, TAppState>(args);
141
+ const ctx = new RequestAgentContext<TAgentMap, TConfig, TAppState>(args);
148
142
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
143
  const _ctx = ctx as any;
150
144
  Object.getOwnPropertyNames(ctx).forEach((k) => {
package/src/_server.ts CHANGED
@@ -26,7 +26,8 @@ import { register } from './otel/config';
26
26
  import type { Logger } from './logger';
27
27
  import { isIdle } from './_idle';
28
28
  import * as runtimeConfig from './_config';
29
- import { inAgentContext, getAgentContext, runInHTTPContext } from './_context';
29
+ import { inAgentContext, runInHTTPContext } from './_context';
30
+ import { runAgentShutdowns, createAgentMiddleware } from './agent';
30
31
  import {
31
32
  createServices,
32
33
  getThreadProvider,
@@ -107,12 +108,14 @@ function registerAgentuitySpanProcessor() {
107
108
  '@agentuity/environment': environment,
108
109
  };
109
110
  if (inAgentContext()) {
110
- const agentCtx = getAgentContext();
111
- if (agentCtx.current?.metadata) {
112
- attrs['@agentuity/agentId'] = agentCtx.current.metadata.id;
113
- attrs['@agentuity/agentInstanceId'] = agentCtx.current.metadata.agentId;
114
- attrs['@agentuity/agentDescription'] = agentCtx.current.metadata.description;
115
- attrs['@agentuity/agentName'] = agentCtx.current.metadata.name;
111
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
112
+ const { getCurrentAgentMetadata } = require('./_context');
113
+ const current = getCurrentAgentMetadata();
114
+ if (current) {
115
+ attrs['@agentuity/agentId'] = current.id;
116
+ attrs['@agentuity/agentInstanceId'] = current.agentId;
117
+ attrs['@agentuity/agentDescription'] = current.description;
118
+ attrs['@agentuity/agentName'] = current.name;
116
119
  }
117
120
  }
118
121
  span.setAttributes(attrs);
@@ -294,9 +297,14 @@ export const createServer = async <TAppState>(
294
297
  }
295
298
  const file = Bun.file(routeMappingPath);
296
299
  if (!(await file.exists())) {
297
- c.var.logger.fatal('error loading %s. this is a build issue!', routeMappingPath);
300
+ c.var.logger.warn(
301
+ 'Route mapping file not found at %s. Route tracking will be disabled.',
302
+ routeMappingPath
303
+ );
304
+ routeMapping = {}; // Empty mapping, no route tracking
305
+ } else {
306
+ routeMapping = (await file.json()) as Record<string, string>;
298
307
  }
299
- routeMapping = (await file.json()) as Record<string, string>;
300
308
  }
301
309
  const matches = matchedRoutes(c).filter(
302
310
  (m) => m.method !== 'ALL' && (m.path.startsWith('/api') || m.path.startsWith('/agent/'))
@@ -316,12 +324,10 @@ export const createServer = async <TAppState>(
316
324
  return next();
317
325
  });
318
326
 
319
- router.use('/agent/*', routePathMapper);
320
327
  router.use('/api/*', routePathMapper);
321
328
 
322
329
  // Attach services and agent registry to context for API routes
323
330
  router.use('/api/*', async (c, next) => {
324
- const { createAgentMiddleware } = await import('./agent');
325
331
  // Use a null agent name to just populate the agent registry without setting current agent
326
332
  return createAgentMiddleware('')(c, next);
327
333
  });
@@ -334,11 +340,18 @@ export const createServer = async <TAppState>(
334
340
  await next();
335
341
  });
336
342
  router.use(`/api/${trigger}/*`, middleware);
337
- router.use(`/agent/${trigger}/*`, middleware);
338
343
  }
339
344
 
340
345
  router.use('/api/*', otelMiddleware);
341
- router.use('/agent/*', otelMiddleware);
346
+
347
+ // Apply otelMiddleware to workbench routes for full telemetry and session tracking
348
+ if (config?.services?.workbench) {
349
+ router.use('/_agentuity/workbench/*', async (c, next) => {
350
+ // Use a null agent name to just populate the agent registry without setting current agent
351
+ return createAgentMiddleware('')(c, next);
352
+ });
353
+ router.use('/_agentuity/workbench/*', otelMiddleware);
354
+ }
342
355
 
343
356
  const shutdown = async () => {
344
357
  if (isShutdown) {
@@ -370,7 +383,6 @@ export const createServer = async <TAppState>(
370
383
  otel.logger.debug('no more pending connections');
371
384
 
372
385
  // Run agent shutdowns first
373
- const { runAgentShutdowns } = await import('./agent');
374
386
  await runAgentShutdowns(globalAppState);
375
387
 
376
388
  // Run app shutdown if provided
@@ -541,6 +553,7 @@ const otelMiddleware = createMiddleware<Env>(async (c, next) => {
541
553
  sessionEventProvider
542
554
  .complete({
543
555
  id: sessionId,
556
+ threadId: thread.empty() ? null : thread.id,
544
557
  statusCode: c.res.status,
545
558
  agentIds: Array.from(agentIds),
546
559
  userData,
@@ -565,6 +578,7 @@ const otelMiddleware = createMiddleware<Env>(async (c, next) => {
565
578
  sessionEventProvider
566
579
  .complete({
567
580
  id: sessionId,
581
+ threadId: thread.empty() ? null : thread.id,
568
582
  statusCode: c.res.status,
569
583
  error: message,
570
584
  agentIds: Array.from(agentIds),
@@ -584,6 +598,7 @@ const otelMiddleware = createMiddleware<Env>(async (c, next) => {
584
598
  sessionEventProvider
585
599
  .complete({
586
600
  id: sessionId,
601
+ threadId: thread.empty() ? null : thread.id,
587
602
  statusCode: c.res.status,
588
603
  agentIds: Array.from(agentIds),
589
604
  userData,
@@ -607,6 +622,7 @@ const otelMiddleware = createMiddleware<Env>(async (c, next) => {
607
622
  sessionEventProvider
608
623
  .complete({
609
624
  id: sessionId,
625
+ threadId: thread.empty() ? null : thread.id,
610
626
  statusCode: c.res.status,
611
627
  error: message,
612
628
  agentIds: Array.from(agentIds),