@agentuity/runtime 0.0.69 → 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 (95) hide show
  1. package/AGENTS.md +88 -10
  2. package/README.md +0 -2
  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 +23 -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 +3 -3
  18. package/dist/_validation.d.ts.map +1 -1
  19. package/dist/_validation.js.map +1 -1
  20. package/dist/agent.d.ts +289 -107
  21. package/dist/agent.d.ts.map +1 -1
  22. package/dist/agent.js +206 -149
  23. package/dist/agent.js.map +1 -1
  24. package/dist/app.d.ts +6 -18
  25. package/dist/app.d.ts.map +1 -1
  26. package/dist/app.js +1 -1
  27. package/dist/app.js.map +1 -1
  28. package/dist/eval.d.ts +4 -4
  29. package/dist/eval.d.ts.map +1 -1
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/otel/config.d.ts.map +1 -1
  35. package/dist/otel/config.js +5 -2
  36. package/dist/otel/config.js.map +1 -1
  37. package/dist/otel/console.d.ts +10 -6
  38. package/dist/otel/console.d.ts.map +1 -1
  39. package/dist/otel/console.js +31 -13
  40. package/dist/otel/console.js.map +1 -1
  41. package/dist/otel/logger.d.ts.map +1 -1
  42. package/dist/otel/logger.js +0 -19
  43. package/dist/otel/logger.js.map +1 -1
  44. package/dist/otel/otel.d.ts +2 -1
  45. package/dist/otel/otel.d.ts.map +1 -1
  46. package/dist/otel/otel.js +28 -15
  47. package/dist/otel/otel.js.map +1 -1
  48. package/dist/services/local/_db.d.ts.map +1 -1
  49. package/dist/services/local/_db.js +1 -22
  50. package/dist/services/local/_db.js.map +1 -1
  51. package/dist/services/local/_router.d.ts.map +1 -1
  52. package/dist/services/local/_router.js +0 -32
  53. package/dist/services/local/_router.js.map +1 -1
  54. package/dist/services/local/index.d.ts +0 -1
  55. package/dist/services/local/index.d.ts.map +1 -1
  56. package/dist/services/local/index.js +0 -1
  57. package/dist/services/local/index.js.map +1 -1
  58. package/dist/session.d.ts +2 -2
  59. package/dist/validator.d.ts +140 -0
  60. package/dist/validator.d.ts.map +1 -0
  61. package/dist/validator.js +146 -0
  62. package/dist/validator.js.map +1 -0
  63. package/dist/workbench.d.ts.map +1 -1
  64. package/dist/workbench.js +38 -29
  65. package/dist/workbench.js.map +1 -1
  66. package/package.json +6 -6
  67. package/src/_config.ts +19 -0
  68. package/src/_context.ts +25 -31
  69. package/src/_server.ts +26 -14
  70. package/src/_services.ts +0 -28
  71. package/src/_validation.ts +3 -7
  72. package/src/agent.ts +555 -348
  73. package/src/app.ts +5 -18
  74. package/src/eval.ts +6 -6
  75. package/src/index.ts +2 -1
  76. package/src/otel/config.ts +5 -2
  77. package/src/otel/console.ts +34 -20
  78. package/src/otel/logger.ts +0 -18
  79. package/src/otel/otel.ts +43 -29
  80. package/src/services/local/_db.ts +1 -27
  81. package/src/services/local/_router.ts +0 -46
  82. package/src/services/local/index.ts +0 -1
  83. package/src/session.ts +2 -2
  84. package/src/validator.ts +277 -0
  85. package/src/workbench.ts +38 -32
  86. package/dist/agent.validator.test.d.ts +0 -2
  87. package/dist/agent.validator.test.d.ts.map +0 -1
  88. package/dist/agent.validator.test.js +0 -508
  89. package/dist/agent.validator.test.js.map +0 -1
  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/agent.validator.test.ts +0 -587
  95. package/src/services/local/objectstore.ts +0 -177
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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentuity/runtime",
3
- "version": "0.0.69",
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.69",
29
- "@agentuity/server": "0.0.69",
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
package/src/_services.ts CHANGED
@@ -1,12 +1,10 @@
1
1
  import { context, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api';
2
2
  import {
3
3
  KeyValueStorageService,
4
- ObjectStorageService,
5
4
  StreamStorageService,
6
5
  VectorStorageService,
7
6
  type FetchAdapter,
8
7
  type KeyValueStorage,
9
- type ObjectStorage,
10
8
  type StreamStorage,
11
9
  type VectorStorage,
12
10
  type ListStreamsResponse,
@@ -42,7 +40,6 @@ import {
42
40
  } from './session';
43
41
  import {
44
42
  LocalKeyValueStorage,
45
- LocalObjectStorage,
46
43
  LocalStreamStorage,
47
44
  LocalVectorStorage,
48
45
  getLocalDB,
@@ -58,7 +55,6 @@ const serviceUrls = getServiceUrls(process.env.AGENTUITY_REGION ?? 'usc');
58
55
  const kvBaseUrl = serviceUrls.keyvalue;
59
56
  const streamBaseUrl = serviceUrls.stream;
60
57
  const vectorBaseUrl = serviceUrls.vector;
61
- const objectBaseUrl = serviceUrls.objectstore;
62
58
  const catalystBaseUrl = serviceUrls.catalyst;
63
59
 
64
60
  let adapter: FetchAdapter;
@@ -157,22 +153,6 @@ const createFetchAdapter = (logger: Logger) =>
157
153
  }
158
154
  break;
159
155
  }
160
- case 'agentuity.objectstore.get': {
161
- if (result.response.status === 404) {
162
- span?.addEvent('miss');
163
- } else if (result.response.ok) {
164
- span?.addEvent('hit');
165
- }
166
- break;
167
- }
168
- case 'agentuity.objectstore.delete': {
169
- if (result.response.status === 404) {
170
- span?.addEvent('not_found', { deleted: false });
171
- } else if (result.response.ok) {
172
- span?.addEvent('deleted', { deleted: true });
173
- }
174
- break;
175
- }
176
156
  }
177
157
  },
178
158
  },
@@ -180,7 +160,6 @@ const createFetchAdapter = (logger: Logger) =>
180
160
  );
181
161
 
182
162
  let kv: KeyValueStorage;
183
- let objectStore: ObjectStorage;
184
163
  let stream: StreamStorage;
185
164
  let vector: VectorStorage;
186
165
  let session: SessionProvider;
@@ -217,7 +196,6 @@ export function createServices(logger: Logger, config?: AppConfig<any>, serverUr
217
196
  logger.info('Using local services (development only)');
218
197
 
219
198
  kv = config?.services?.keyvalue || new LocalKeyValueStorage(db, projectPath);
220
- objectStore = config?.services?.object || new LocalObjectStorage(db, projectPath, serverUrl);
221
199
  stream = config?.services?.stream || new LocalStreamStorage(db, projectPath, serverUrl);
222
200
  vector = config?.services?.vector || new LocalVectorStorage(db, projectPath);
223
201
  session = config?.services?.session || new DefaultSessionProvider();
@@ -245,7 +223,6 @@ export function createServices(logger: Logger, config?: AppConfig<any>, serverUr
245
223
 
246
224
  // At this point we must be authenticated (since !authenticated would trigger local services above)
247
225
  kv = config?.services?.keyvalue || new KeyValueStorageService(kvBaseUrl, adapter);
248
- objectStore = config?.services?.object || new ObjectStorageService(objectBaseUrl, adapter);
249
226
  stream = config?.services?.stream || new StreamStorageService(streamBaseUrl, adapter);
250
227
  vector = config?.services?.vector || new VectorStorageService(vectorBaseUrl, adapter);
251
228
  session = config?.services?.session || new DefaultSessionProvider();
@@ -304,11 +281,6 @@ export function registerServices(o: any, includeAgents = false) {
304
281
  enumerable: false,
305
282
  configurable: false,
306
283
  });
307
- Object.defineProperty(o, 'objectstore', {
308
- get: () => objectStore,
309
- enumerable: false,
310
- configurable: false,
311
- });
312
284
  Object.defineProperty(o, 'stream', {
313
285
  get: () => stream,
314
286
  enumerable: false,
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import type { StandardSchemaV1 } from '@agentuity/core';
2
+ import type { StandardSchemaV1, InferInput, InferOutput } from '@agentuity/core';
3
3
 
4
4
  /**
5
5
  * Schema definition for routes that can have input (POST, PUT, PATCH, DELETE).
@@ -50,9 +50,7 @@ export type GetRouteSchema<
50
50
  *
51
51
  * @template T - Schema type
52
52
  */
53
- export type InferSchemaInput<T> = T extends StandardSchemaV1
54
- ? StandardSchemaV1.InferInput<T>
55
- : undefined;
53
+ export type InferSchemaInput<T> = T extends StandardSchemaV1 ? InferInput<T> : undefined;
56
54
 
57
55
  /**
58
56
  * Infer the output type from a StandardSchema.
@@ -60,9 +58,7 @@ export type InferSchemaInput<T> = T extends StandardSchemaV1
60
58
  *
61
59
  * @template T - Schema type
62
60
  */
63
- export type InferSchemaOutput<T> = T extends StandardSchemaV1
64
- ? StandardSchemaV1.InferOutput<T>
65
- : undefined;
61
+ export type InferSchemaOutput<T> = T extends StandardSchemaV1 ? InferOutput<T> : undefined;
66
62
 
67
63
  /**
68
64
  * Extract input schema from RouteSchema or GetRouteSchema.