@agentuity/runtime 0.0.69 → 0.0.71
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.
- package/AGENTS.md +88 -10
- package/README.md +0 -2
- package/dist/_config.d.ts +16 -0
- package/dist/_config.d.ts.map +1 -1
- package/dist/_config.js +16 -0
- package/dist/_config.js.map +1 -1
- package/dist/_context.d.ts +17 -15
- package/dist/_context.d.ts.map +1 -1
- package/dist/_context.js +17 -8
- package/dist/_context.js.map +1 -1
- package/dist/_server.d.ts.map +1 -1
- package/dist/_server.js +44 -21
- package/dist/_server.js.map +1 -1
- package/dist/_services.d.ts.map +1 -1
- package/dist/_services.js +4 -32
- package/dist/_services.js.map +1 -1
- package/dist/_tokens.d.ts +1 -0
- package/dist/_tokens.d.ts.map +1 -1
- package/dist/_tokens.js +1 -0
- package/dist/_tokens.js.map +1 -1
- package/dist/_validation.d.ts +3 -3
- package/dist/_validation.d.ts.map +1 -1
- package/dist/_validation.js.map +1 -1
- package/dist/agent.d.ts +289 -107
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +206 -149
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts +6 -18
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/eval.d.ts +4 -4
- package/dist/eval.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/otel/config.d.ts.map +1 -1
- package/dist/otel/config.js +5 -2
- package/dist/otel/config.js.map +1 -1
- package/dist/otel/console.d.ts +10 -6
- package/dist/otel/console.d.ts.map +1 -1
- package/dist/otel/console.js +31 -13
- package/dist/otel/console.js.map +1 -1
- package/dist/otel/logger.d.ts.map +1 -1
- package/dist/otel/logger.js +0 -19
- package/dist/otel/logger.js.map +1 -1
- package/dist/otel/otel.d.ts +2 -1
- package/dist/otel/otel.d.ts.map +1 -1
- package/dist/otel/otel.js +28 -15
- package/dist/otel/otel.js.map +1 -1
- package/dist/services/local/_db.d.ts.map +1 -1
- package/dist/services/local/_db.js +1 -22
- package/dist/services/local/_db.js.map +1 -1
- package/dist/services/local/_router.d.ts.map +1 -1
- package/dist/services/local/_router.js +0 -32
- package/dist/services/local/_router.js.map +1 -1
- package/dist/services/local/index.d.ts +0 -1
- package/dist/services/local/index.d.ts.map +1 -1
- package/dist/services/local/index.js +0 -1
- package/dist/services/local/index.js.map +1 -1
- package/dist/session.d.ts +2 -2
- package/dist/validator.d.ts +140 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +146 -0
- package/dist/validator.js.map +1 -0
- package/dist/workbench.d.ts.map +1 -1
- package/dist/workbench.js +38 -29
- package/dist/workbench.js.map +1 -1
- package/package.json +7 -6
- package/src/_config.ts +19 -0
- package/src/_context.ts +25 -31
- package/src/_server.ts +49 -22
- package/src/_services.ts +2 -31
- package/src/_tokens.ts +1 -0
- package/src/_validation.ts +3 -7
- package/src/agent.ts +555 -348
- package/src/app.ts +5 -18
- package/src/eval.ts +6 -6
- package/src/index.ts +2 -1
- package/src/otel/config.ts +5 -2
- package/src/otel/console.ts +34 -20
- package/src/otel/logger.ts +0 -18
- package/src/otel/otel.ts +43 -29
- package/src/services/local/_db.ts +1 -27
- package/src/services/local/_router.ts +0 -46
- package/src/services/local/index.ts +0 -1
- package/src/session.ts +2 -2
- package/src/validator.ts +277 -0
- package/src/workbench.ts +38 -32
- package/dist/agent.validator.test.d.ts +0 -2
- package/dist/agent.validator.test.d.ts.map +0 -1
- package/dist/agent.validator.test.js +0 -508
- package/dist/agent.validator.test.js.map +0 -1
- package/dist/services/local/objectstore.d.ts +0 -19
- package/dist/services/local/objectstore.d.ts.map +0 -1
- package/dist/services/local/objectstore.js +0 -117
- package/dist/services/local/objectstore.js.map +0 -1
- package/src/agent.validator.test.ts +0 -587
- 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
|
|
39
|
+
const allAgents = getAgents();
|
|
38
40
|
let agentObj;
|
|
39
41
|
let agentName;
|
|
40
|
-
for (const [name, agent] of
|
|
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
|
-
//
|
|
51
|
-
|
|
52
|
-
if (agentObj.
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
64
|
+
result = await agentObj.handler(input);
|
|
75
65
|
}
|
|
76
66
|
else {
|
|
77
|
-
|
|
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.
|
|
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:
|
|
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:
|
|
171
|
+
json: toJSONSchema(agent.outputSchema),
|
|
163
172
|
}
|
|
164
173
|
: undefined,
|
|
165
174
|
},
|
package/dist/workbench.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbench.js","sourceRoot":"","sources":["../src/workbench.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
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.
|
|
3
|
+
"version": "0.0.71",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -22,11 +22,13 @@
|
|
|
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.
|
|
29
|
-
"@agentuity/
|
|
29
|
+
"@agentuity/core": "0.0.71",
|
|
30
|
+
"@agentuity/schema": "0.0.71",
|
|
31
|
+
"@agentuity/server": "0.0.71",
|
|
30
32
|
"@opentelemetry/api": "^1.9.0",
|
|
31
33
|
"@opentelemetry/api-logs": "^0.207.0",
|
|
32
34
|
"@opentelemetry/auto-instrumentations-node": "^0.66.0",
|
|
@@ -44,16 +46,15 @@
|
|
|
44
46
|
"@opentelemetry/semantic-conventions": "^1.37.0",
|
|
45
47
|
"@traceloop/ai-semantic-conventions": "0.21.0",
|
|
46
48
|
"@traceloop/node-server-sdk": "0.21.1",
|
|
49
|
+
"hono": "^4.7.13",
|
|
47
50
|
"zod": "^4.1.12",
|
|
48
51
|
"mailparser": "^3.7.1",
|
|
49
52
|
"@types/mailparser": "^3.4.6",
|
|
50
53
|
"ws": "^8.18.0",
|
|
51
54
|
"@types/ws": "^8.5.13"
|
|
52
55
|
},
|
|
53
|
-
"peerDependencies": {
|
|
54
|
-
"hono": "^4.10.3"
|
|
55
|
-
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
+
"@agentuity/test-utils": "0.0.71",
|
|
57
58
|
"@types/bun": "latest",
|
|
58
59
|
"@types/react": "^19.2.2",
|
|
59
60
|
"@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,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
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,
|
|
138
|
+
args: RequestAgentContextArgs<TAgentMap, TConfig, TAppState>,
|
|
145
139
|
next: () => Promise<void>
|
|
146
140
|
) => {
|
|
147
|
-
const ctx = new RequestAgentContext<TAgentMap,
|
|
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,
|
|
29
|
+
import { inAgentContext, runInHTTPContext } from './_context';
|
|
30
|
+
import { runAgentShutdowns, createAgentMiddleware } from './agent';
|
|
30
31
|
import {
|
|
31
32
|
createServices,
|
|
32
33
|
getThreadProvider,
|
|
@@ -35,7 +36,7 @@ import {
|
|
|
35
36
|
} from './_services';
|
|
36
37
|
import { generateId } from './session';
|
|
37
38
|
import WaitUntilHandler from './_waituntil';
|
|
38
|
-
import registerTokenProcessor, { TOKENS_HEADER } from './_tokens';
|
|
39
|
+
import registerTokenProcessor, { TOKENS_HEADER, DURATION_HEADER } from './_tokens';
|
|
39
40
|
|
|
40
41
|
const SESSION_HEADER = 'x-session-id';
|
|
41
42
|
|
|
@@ -107,12 +108,14 @@ function registerAgentuitySpanProcessor() {
|
|
|
107
108
|
'@agentuity/environment': environment,
|
|
108
109
|
};
|
|
109
110
|
if (inAgentContext()) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
attrs['@agentuity/
|
|
115
|
-
attrs['@agentuity/
|
|
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);
|
|
@@ -239,6 +242,13 @@ export const createServer = async <TAppState>(
|
|
|
239
242
|
|
|
240
243
|
await runInHTTPContext(c, next);
|
|
241
244
|
|
|
245
|
+
// Calculate and add duration header for all HTTP requests (not WebSocket)
|
|
246
|
+
if (!isWebSocket) {
|
|
247
|
+
const endTime = performance.now();
|
|
248
|
+
const duration = ((endTime - started) / 1000).toFixed(1); // Duration in seconds
|
|
249
|
+
c.header(DURATION_HEADER, `${duration}s`);
|
|
250
|
+
}
|
|
251
|
+
|
|
242
252
|
// Don't log completion for websocket upgrades - they stay open
|
|
243
253
|
if (!skipLogging && !isWebSocket) {
|
|
244
254
|
otel.logger.debug(
|
|
@@ -264,7 +274,13 @@ export const createServer = async <TAppState>(
|
|
|
264
274
|
'X-Requested-With',
|
|
265
275
|
],
|
|
266
276
|
allowMethods: ['POST', 'GET', 'OPTIONS', 'HEAD', 'PUT', 'DELETE', 'PATCH'],
|
|
267
|
-
exposeHeaders: [
|
|
277
|
+
exposeHeaders: [
|
|
278
|
+
'Content-Length',
|
|
279
|
+
TOKENS_HEADER,
|
|
280
|
+
DURATION_HEADER,
|
|
281
|
+
SESSION_HEADER,
|
|
282
|
+
'x-deployment',
|
|
283
|
+
],
|
|
268
284
|
maxAge: 600,
|
|
269
285
|
credentials: true,
|
|
270
286
|
...(config?.cors ?? {}), // allow the app config to override
|
|
@@ -294,9 +310,14 @@ export const createServer = async <TAppState>(
|
|
|
294
310
|
}
|
|
295
311
|
const file = Bun.file(routeMappingPath);
|
|
296
312
|
if (!(await file.exists())) {
|
|
297
|
-
c.var.logger.
|
|
313
|
+
c.var.logger.warn(
|
|
314
|
+
'Route mapping file not found at %s. Route tracking will be disabled.',
|
|
315
|
+
routeMappingPath
|
|
316
|
+
);
|
|
317
|
+
routeMapping = {}; // Empty mapping, no route tracking
|
|
318
|
+
} else {
|
|
319
|
+
routeMapping = (await file.json()) as Record<string, string>;
|
|
298
320
|
}
|
|
299
|
-
routeMapping = (await file.json()) as Record<string, string>;
|
|
300
321
|
}
|
|
301
322
|
const matches = matchedRoutes(c).filter(
|
|
302
323
|
(m) => m.method !== 'ALL' && (m.path.startsWith('/api') || m.path.startsWith('/agent/'))
|
|
@@ -316,16 +337,8 @@ export const createServer = async <TAppState>(
|
|
|
316
337
|
return next();
|
|
317
338
|
});
|
|
318
339
|
|
|
319
|
-
router.use('/agent/*', routePathMapper);
|
|
320
340
|
router.use('/api/*', routePathMapper);
|
|
321
341
|
|
|
322
|
-
// Attach services and agent registry to context for API routes
|
|
323
|
-
router.use('/api/*', async (c, next) => {
|
|
324
|
-
const { createAgentMiddleware } = await import('./agent');
|
|
325
|
-
// Use a null agent name to just populate the agent registry without setting current agent
|
|
326
|
-
return createAgentMiddleware('')(c, next);
|
|
327
|
-
});
|
|
328
|
-
|
|
329
342
|
// set the trigger for specific types
|
|
330
343
|
for (const trigger of ['sms', 'email', 'cron'] as const) {
|
|
331
344
|
const middleware = createMiddleware(async (c, next) => {
|
|
@@ -334,11 +347,26 @@ export const createServer = async <TAppState>(
|
|
|
334
347
|
await next();
|
|
335
348
|
});
|
|
336
349
|
router.use(`/api/${trigger}/*`, middleware);
|
|
337
|
-
router.use(`/agent/${trigger}/*`, middleware);
|
|
338
350
|
}
|
|
339
351
|
|
|
352
|
+
// otelMiddleware must run before createAgentMiddleware to set session/thread
|
|
340
353
|
router.use('/api/*', otelMiddleware);
|
|
341
|
-
|
|
354
|
+
|
|
355
|
+
// Attach services and agent registry to context for API routes
|
|
356
|
+
router.use('/api/*', async (c, next) => {
|
|
357
|
+
// Use a null agent name to just populate the agent registry without setting current agent
|
|
358
|
+
return createAgentMiddleware('')(c, next);
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
// Apply otelMiddleware to workbench routes for full telemetry and session tracking
|
|
362
|
+
if (config?.services?.workbench) {
|
|
363
|
+
// otelMiddleware must run before createAgentMiddleware to set session/thread
|
|
364
|
+
router.use('/_agentuity/workbench/*', otelMiddleware);
|
|
365
|
+
router.use('/_agentuity/workbench/*', async (c, next) => {
|
|
366
|
+
// Use a null agent name to just populate the agent registry without setting current agent
|
|
367
|
+
return createAgentMiddleware('')(c, next);
|
|
368
|
+
});
|
|
369
|
+
}
|
|
342
370
|
|
|
343
371
|
const shutdown = async () => {
|
|
344
372
|
if (isShutdown) {
|
|
@@ -370,7 +398,6 @@ export const createServer = async <TAppState>(
|
|
|
370
398
|
otel.logger.debug('no more pending connections');
|
|
371
399
|
|
|
372
400
|
// Run agent shutdowns first
|
|
373
|
-
const { runAgentShutdowns } = await import('./agent');
|
|
374
401
|
await runAgentShutdowns(globalAppState);
|
|
375
402
|
|
|
376
403
|
// 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,
|
|
@@ -32,6 +30,7 @@ import {
|
|
|
32
30
|
} from './services/evalrun';
|
|
33
31
|
import { injectTraceContextToHeaders } from './otel/http';
|
|
34
32
|
import { getTracer } from './_server';
|
|
33
|
+
import { populateAgentsRegistry } from './agent.js';
|
|
35
34
|
import { getSDKVersion, isAuthenticated, isProduction } from './_config';
|
|
36
35
|
import type { AppConfig } from './app';
|
|
37
36
|
import {
|
|
@@ -42,7 +41,6 @@ import {
|
|
|
42
41
|
} from './session';
|
|
43
42
|
import {
|
|
44
43
|
LocalKeyValueStorage,
|
|
45
|
-
LocalObjectStorage,
|
|
46
44
|
LocalStreamStorage,
|
|
47
45
|
LocalVectorStorage,
|
|
48
46
|
getLocalDB,
|
|
@@ -58,7 +56,6 @@ const serviceUrls = getServiceUrls(process.env.AGENTUITY_REGION ?? 'usc');
|
|
|
58
56
|
const kvBaseUrl = serviceUrls.keyvalue;
|
|
59
57
|
const streamBaseUrl = serviceUrls.stream;
|
|
60
58
|
const vectorBaseUrl = serviceUrls.vector;
|
|
61
|
-
const objectBaseUrl = serviceUrls.objectstore;
|
|
62
59
|
const catalystBaseUrl = serviceUrls.catalyst;
|
|
63
60
|
|
|
64
61
|
let adapter: FetchAdapter;
|
|
@@ -157,22 +154,6 @@ const createFetchAdapter = (logger: Logger) =>
|
|
|
157
154
|
}
|
|
158
155
|
break;
|
|
159
156
|
}
|
|
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
157
|
}
|
|
177
158
|
},
|
|
178
159
|
},
|
|
@@ -180,7 +161,6 @@ const createFetchAdapter = (logger: Logger) =>
|
|
|
180
161
|
);
|
|
181
162
|
|
|
182
163
|
let kv: KeyValueStorage;
|
|
183
|
-
let objectStore: ObjectStorage;
|
|
184
164
|
let stream: StreamStorage;
|
|
185
165
|
let vector: VectorStorage;
|
|
186
166
|
let session: SessionProvider;
|
|
@@ -217,7 +197,6 @@ export function createServices(logger: Logger, config?: AppConfig<any>, serverUr
|
|
|
217
197
|
logger.info('Using local services (development only)');
|
|
218
198
|
|
|
219
199
|
kv = config?.services?.keyvalue || new LocalKeyValueStorage(db, projectPath);
|
|
220
|
-
objectStore = config?.services?.object || new LocalObjectStorage(db, projectPath, serverUrl);
|
|
221
200
|
stream = config?.services?.stream || new LocalStreamStorage(db, projectPath, serverUrl);
|
|
222
201
|
vector = config?.services?.vector || new LocalVectorStorage(db, projectPath);
|
|
223
202
|
session = config?.services?.session || new DefaultSessionProvider();
|
|
@@ -245,7 +224,6 @@ export function createServices(logger: Logger, config?: AppConfig<any>, serverUr
|
|
|
245
224
|
|
|
246
225
|
// At this point we must be authenticated (since !authenticated would trigger local services above)
|
|
247
226
|
kv = config?.services?.keyvalue || new KeyValueStorageService(kvBaseUrl, adapter);
|
|
248
|
-
objectStore = config?.services?.object || new ObjectStorageService(objectBaseUrl, adapter);
|
|
249
227
|
stream = config?.services?.stream || new StreamStorageService(streamBaseUrl, adapter);
|
|
250
228
|
vector = config?.services?.vector || new VectorStorageService(vectorBaseUrl, adapter);
|
|
251
229
|
session = config?.services?.session || new DefaultSessionProvider();
|
|
@@ -304,11 +282,6 @@ export function registerServices(o: any, includeAgents = false) {
|
|
|
304
282
|
enumerable: false,
|
|
305
283
|
configurable: false,
|
|
306
284
|
});
|
|
307
|
-
Object.defineProperty(o, 'objectstore', {
|
|
308
|
-
get: () => objectStore,
|
|
309
|
-
enumerable: false,
|
|
310
|
-
configurable: false,
|
|
311
|
-
});
|
|
312
285
|
Object.defineProperty(o, 'stream', {
|
|
313
286
|
get: () => stream,
|
|
314
287
|
enumerable: false,
|
|
@@ -328,9 +301,7 @@ export function registerServices(o: any, includeAgents = false) {
|
|
|
328
301
|
Object.defineProperty(o, 'agent', {
|
|
329
302
|
get: () => {
|
|
330
303
|
if (!cachedRegistry) {
|
|
331
|
-
//
|
|
332
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
333
|
-
const { populateAgentsRegistry } = require('./agent');
|
|
304
|
+
// ESM-friendly: populateAgentsRegistry is imported statically
|
|
334
305
|
cachedRegistry = populateAgentsRegistry(o);
|
|
335
306
|
}
|
|
336
307
|
return cachedRegistry;
|
package/src/_tokens.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { SpanAttributes } from '@traceloop/ai-semantic-conventions';
|
|
|
6
6
|
import { addSpanProcessor } from './_server';
|
|
7
7
|
|
|
8
8
|
export const TOKENS_HEADER = 'x-agentuity-tokens';
|
|
9
|
+
export const DURATION_HEADER = 'x-agentuity-duration';
|
|
9
10
|
|
|
10
11
|
const AI_SDK_SPAN_NAME = 'ai.generateText';
|
|
11
12
|
const AI_SDK_MODEL_NAME = 'ai.model.id';
|
package/src/_validation.ts
CHANGED
|
@@ -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.
|