@agentuity/runtime 0.0.91 → 0.0.93

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/dist/_config.d.ts CHANGED
@@ -81,4 +81,10 @@ export declare const INTERNAL_AGENT: unique symbol;
81
81
  * @internal
82
82
  */
83
83
  export declare const CURRENT_AGENT: unique symbol;
84
+ /**
85
+ * Symbol for tracking agent IDs that have executed in this session.
86
+ * Used in standalone contexts to track agents for session events.
87
+ * @internal
88
+ */
89
+ export declare const AGENT_IDS: unique symbol;
84
90
  //# sourceMappingURL=_config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_config.d.ts","sourceRoot":"","sources":["../src/_config.ts"],"names":[],"mappings":"AAMA,wBAAgB,IAAI,SAWnB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,eAA0B,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,cAAc,eAA2B,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,aAAa,eAA0B,CAAC"}
1
+ {"version":3,"file":"_config.d.ts","sourceRoot":"","sources":["../src/_config.ts"],"names":[],"mappings":"AAMA,wBAAgB,IAAI,SAWnB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,eAA0B,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,cAAc,eAA2B,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,aAAa,eAA0B,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,SAAS,eAAsB,CAAC"}
package/dist/_config.js CHANGED
@@ -119,4 +119,10 @@ export const INTERNAL_AGENT = Symbol('INTERNAL_AGENT');
119
119
  * @internal
120
120
  */
121
121
  export const CURRENT_AGENT = Symbol('CURRENT_AGENT');
122
+ /**
123
+ * Symbol for tracking agent IDs that have executed in this session.
124
+ * Used in standalone contexts to track agents for session events.
125
+ * @internal
126
+ */
127
+ export const AGENT_IDS = Symbol('AGENT_IDS');
122
128
  //# sourceMappingURL=_config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_config.js","sourceRoot":"","sources":["../src/_config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,IAAI,OAA2B,CAAC;AAChC,IAAI,UAA8B,CAAC;AAEnC,MAAM,UAAU,IAAI;IACnB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACjD,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;YACnB,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACR,wCAAwC;QACzC,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,SAAS,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACzB,OAAO,OAAO,IAAI,SAAS,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC5B,OAAO,UAAU,IAAI,SAAS,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,MAAM,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,SAAS,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"_config.js","sourceRoot":"","sources":["../src/_config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,IAAI,OAA2B,CAAC;AAChC,IAAI,UAA8B,CAAC;AAEnC,MAAM,UAAU,IAAI;IACnB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACjD,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;YACnB,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACR,wCAAwC;QACzC,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,SAAS,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACzB,OAAO,OAAO,IAAI,SAAS,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC5B,OAAO,UAAU,IAAI,SAAS,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,MAAM,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,SAAS,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC"}
@@ -0,0 +1,165 @@
1
+ import { type Context } from '@opentelemetry/api';
2
+ import type { KeyValueStorage, StreamStorage, VectorStorage } from '@agentuity/core';
3
+ import type { AgentContext, AgentRegistry, AgentRuntimeState } from './agent';
4
+ import { AGENT_RUNTIME, AGENT_IDS } from './_config';
5
+ import type { Logger } from './logger';
6
+ import type { Thread, Session } from './session';
7
+ /**
8
+ * Options for creating a standalone agent context.
9
+ *
10
+ * Use this when executing agents outside of HTTP requests (Discord bots, cron jobs, etc.)
11
+ */
12
+ export interface StandaloneContextOptions {
13
+ /**
14
+ * Session ID for this execution. If not provided, will be auto-generated from trace context.
15
+ */
16
+ sessionId?: string;
17
+ /**
18
+ * Thread for multi-turn conversations. If not provided, will be restored/created from thread provider.
19
+ */
20
+ thread?: Thread;
21
+ /**
22
+ * Session for this execution. If not provided, will be created.
23
+ */
24
+ session?: Session;
25
+ /**
26
+ * Parent OpenTelemetry context for distributed tracing.
27
+ */
28
+ parentContext?: Context;
29
+ /**
30
+ * Trigger type for this execution (used in telemetry and session events).
31
+ */
32
+ trigger?: import('@agentuity/core').SessionStartEvent['trigger'];
33
+ }
34
+ /**
35
+ * Options for invoke() method.
36
+ */
37
+ export interface InvokeOptions {
38
+ /**
39
+ * Span name for OpenTelemetry trace (default: 'agent-invocation')
40
+ */
41
+ spanName?: string;
42
+ }
43
+ /**
44
+ * Standalone agent context for executing agents outside of HTTP requests.
45
+ *
46
+ * This context provides the same infrastructure as HTTP request contexts:
47
+ * - OpenTelemetry tracing with proper span hierarchy
48
+ * - Session and thread management (save/restore)
49
+ * - Background task handling (waitUntil)
50
+ * - Session event tracking (start/complete)
51
+ * - Access to all services (kv, stream, vector)
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * import { createAgentContext } from '@agentuity/runtime';
56
+ * import myAgent from './agents/my-agent';
57
+ *
58
+ * // Simple usage:
59
+ * const ctx = createAgentContext();
60
+ * const result = await ctx.invoke(() => myAgent.run(input));
61
+ *
62
+ * // With custom session tracking:
63
+ * const ctx = createAgentContext({
64
+ * sessionId: discordMessage.id,
65
+ * trigger: 'discord'
66
+ * });
67
+ * const result = await ctx.invoke(() => myAgent.run(input));
68
+ *
69
+ * // Reuse context for multiple agents:
70
+ * const ctx = createAgentContext();
71
+ * const result1 = await ctx.invoke(() => agent1.run(input1));
72
+ * const result2 = await ctx.invoke(() => agent2.run(result1));
73
+ * ```
74
+ */
75
+ export declare class StandaloneAgentContext<TAgentMap extends AgentRegistry = AgentRegistry, TConfig = unknown, TAppState = Record<string, never>> implements AgentContext<TAgentMap, TConfig, TAppState> {
76
+ agent: TAgentMap;
77
+ logger: Logger;
78
+ tracer: import('@opentelemetry/api').Tracer;
79
+ kv: KeyValueStorage;
80
+ stream: StreamStorage;
81
+ vector: VectorStorage;
82
+ config: TConfig;
83
+ app: TAppState;
84
+ [AGENT_RUNTIME]: AgentRuntimeState;
85
+ sessionId: string;
86
+ state: Map<string, unknown>;
87
+ session: Session;
88
+ thread: Thread;
89
+ [AGENT_IDS]?: Set<string>;
90
+ private readonly parentContext;
91
+ private readonly trigger;
92
+ private readonly initialSessionId?;
93
+ constructor(options?: StandaloneContextOptions);
94
+ waitUntil(_callback: Promise<void> | (() => void | Promise<void>)): void;
95
+ /**
96
+ * Execute a function within this agent context.
97
+ *
98
+ * This method:
99
+ * 1. Creates an OpenTelemetry span for the invocation
100
+ * 2. Restores/creates session and thread
101
+ * 3. Sends session start event
102
+ * 4. Executes the function within AsyncLocalStorage context
103
+ * 5. Waits for background tasks (waitUntil)
104
+ * 6. Saves session and thread
105
+ * 7. Sends session complete event
106
+ *
107
+ * @param fn - Function to execute (typically () => agent.run(input))
108
+ * @param options - Optional configuration for the invocation
109
+ * @returns Promise that resolves to the function's return value
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * const result = await ctx.invoke(() => myAgent.run({ userId: '123' }));
114
+ * ```
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * // Multiple agents in sequence:
119
+ * const result = await ctx.invoke(async () => {
120
+ * const step1 = await agent1.run(input);
121
+ * return agent2.run(step1);
122
+ * });
123
+ * ```
124
+ */
125
+ invoke<T>(fn: () => Promise<T>, options?: InvokeOptions): Promise<T>;
126
+ }
127
+ /**
128
+ * Create a standalone agent context for executing agents outside of HTTP requests.
129
+ *
130
+ * This is useful for Discord bots, cron jobs, WebSocket callbacks, or any scenario
131
+ * where you need to run agents but don't have an HTTP request context.
132
+ *
133
+ * @param options - Optional configuration for the context
134
+ * @returns A StandaloneAgentContext instance
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * import { createAgentContext } from '@agentuity/runtime';
139
+ * import myAgent from './agents/my-agent';
140
+ *
141
+ * // Simple usage:
142
+ * const ctx = createAgentContext();
143
+ * const result = await ctx.invoke(() => myAgent.run(input));
144
+ *
145
+ * // Discord bot example:
146
+ * client.on('messageCreate', async (message) => {
147
+ * const ctx = createAgentContext({
148
+ * sessionId: message.id,
149
+ * trigger: 'discord'
150
+ * });
151
+ * const response = await ctx.invoke(() =>
152
+ * chatAgent.run({ message: message.content })
153
+ * );
154
+ * await message.reply(response.text);
155
+ * });
156
+ *
157
+ * // Cron job example:
158
+ * cron.schedule('0 * * * *', async () => {
159
+ * const ctx = createAgentContext({ trigger: 'cron' });
160
+ * await ctx.invoke(() => cleanupAgent.run());
161
+ * });
162
+ * ```
163
+ */
164
+ export declare function createAgentContext<TAppState = Record<string, never>>(options?: StandaloneContextOptions): StandaloneAgentContext<AgentRegistry, unknown, TAppState>;
165
+ //# sourceMappingURL=_standalone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_standalone.d.ts","sourceRoot":"","sources":["../src/_standalone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,OAAO,EAAS,MAAM,oBAAoB,CAAC;AAE5F,OAAO,KAAK,EACX,eAAe,EACf,aAAa,EACb,aAAa,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBjD;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACxC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,sBAAsB,CAClC,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,OAAO,GAAG,OAAO,EACjB,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAChC,YAAW,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC;IAGvD,KAAK,EAAE,SAAS,CAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,oBAAoB,EAAE,MAAM,CAAC;IAC5C,EAAE,EAAG,eAAe,CAAC;IACrB,MAAM,EAAG,aAAa,CAAC;IACvB,MAAM,EAAG,aAAa,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,SAAS,CAAC;IACf,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAInC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAG1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyD;IACjF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAS;gBAE/B,OAAO,CAAC,EAAE,wBAAwB;IAqD9C,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI;IAOxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC;CA+N1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACnE,OAAO,CAAC,EAAE,wBAAwB,GAChC,sBAAsB,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAE3D"}
@@ -0,0 +1,391 @@
1
+ import { context, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api';
2
+ import { TraceState } from '@opentelemetry/core';
3
+ import { AGENT_RUNTIME, AGENT_IDS } from './_config';
4
+ import { generateId } from './session';
5
+ import WaitUntilHandler from './_waituntil';
6
+ import { registerServices } from './_services';
7
+ import { getAgentAsyncLocalStorage } from './_context';
8
+ import { getLogger, getTracer, getAppState, } from './_server';
9
+ import { getThreadProvider, getSessionProvider, getSessionEventProvider, } from './_services';
10
+ import * as runtimeConfig from './_config';
11
+ /**
12
+ * Standalone agent context for executing agents outside of HTTP requests.
13
+ *
14
+ * This context provides the same infrastructure as HTTP request contexts:
15
+ * - OpenTelemetry tracing with proper span hierarchy
16
+ * - Session and thread management (save/restore)
17
+ * - Background task handling (waitUntil)
18
+ * - Session event tracking (start/complete)
19
+ * - Access to all services (kv, stream, vector)
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * import { createAgentContext } from '@agentuity/runtime';
24
+ * import myAgent from './agents/my-agent';
25
+ *
26
+ * // Simple usage:
27
+ * const ctx = createAgentContext();
28
+ * const result = await ctx.invoke(() => myAgent.run(input));
29
+ *
30
+ * // With custom session tracking:
31
+ * const ctx = createAgentContext({
32
+ * sessionId: discordMessage.id,
33
+ * trigger: 'discord'
34
+ * });
35
+ * const result = await ctx.invoke(() => myAgent.run(input));
36
+ *
37
+ * // Reuse context for multiple agents:
38
+ * const ctx = createAgentContext();
39
+ * const result1 = await ctx.invoke(() => agent1.run(input1));
40
+ * const result2 = await ctx.invoke(() => agent2.run(result1));
41
+ * ```
42
+ */
43
+ export class StandaloneAgentContext {
44
+ // Immutable context properties (safe for concurrent access)
45
+ agent = {};
46
+ logger;
47
+ tracer;
48
+ kv;
49
+ stream;
50
+ vector;
51
+ config;
52
+ app;
53
+ [AGENT_RUNTIME];
54
+ // Note: The following are mutable and will be set per-invocation via AsyncLocalStorage
55
+ // They exist on the interface for compatibility but are overwritten during invoke()
56
+ sessionId;
57
+ state;
58
+ session;
59
+ thread;
60
+ [AGENT_IDS];
61
+ // Immutable options stored from constructor
62
+ parentContext;
63
+ trigger;
64
+ initialSessionId;
65
+ constructor(options) {
66
+ const logger = getLogger();
67
+ const tracer = getTracer();
68
+ const app = getAppState();
69
+ if (!logger || !tracer || !app) {
70
+ throw new Error('Global state not initialized. Make sure createServer() has been called before createAgentContext().');
71
+ }
72
+ this.logger = logger;
73
+ this.tracer = tracer;
74
+ this.app = app;
75
+ this.config = {};
76
+ this.state = new Map();
77
+ this.parentContext = options?.parentContext ?? context.active();
78
+ this.trigger = options?.trigger ?? 'manual';
79
+ this.initialSessionId = options?.sessionId;
80
+ // Session ID will be set properly in invoke() after span is created
81
+ this.sessionId = options?.sessionId ?? 'pending';
82
+ // Thread and session will be restored in invoke()
83
+ this.thread = options?.thread ?? {
84
+ id: 'pending',
85
+ state: new Map(),
86
+ addEventListener: () => { },
87
+ removeEventListener: () => { },
88
+ destroy: async () => { },
89
+ empty: () => true,
90
+ };
91
+ this.session = options?.session ?? {
92
+ id: 'pending',
93
+ thread: this.thread,
94
+ state: new Map(),
95
+ addEventListener: () => { },
96
+ removeEventListener: () => { },
97
+ serializeUserData: () => undefined,
98
+ };
99
+ // Create isolated runtime state
100
+ this[AGENT_RUNTIME] = {
101
+ agents: new Map(),
102
+ agentConfigs: new Map(),
103
+ agentEventListeners: new WeakMap(),
104
+ };
105
+ // Register services (kv, stream, vector)
106
+ registerServices(this, true); // true = populate agents registry
107
+ }
108
+ waitUntil(_callback) {
109
+ // This will be called from within invoke() where waitUntilHandler is in scope
110
+ // We need to access the per-call waitUntilHandler from the current invocation
111
+ // This is handled by updating the context during invoke() via AsyncLocalStorage
112
+ throw new Error('waitUntil must be called from within invoke() execution context');
113
+ }
114
+ /**
115
+ * Execute a function within this agent context.
116
+ *
117
+ * This method:
118
+ * 1. Creates an OpenTelemetry span for the invocation
119
+ * 2. Restores/creates session and thread
120
+ * 3. Sends session start event
121
+ * 4. Executes the function within AsyncLocalStorage context
122
+ * 5. Waits for background tasks (waitUntil)
123
+ * 6. Saves session and thread
124
+ * 7. Sends session complete event
125
+ *
126
+ * @param fn - Function to execute (typically () => agent.run(input))
127
+ * @param options - Optional configuration for the invocation
128
+ * @returns Promise that resolves to the function's return value
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * const result = await ctx.invoke(() => myAgent.run({ userId: '123' }));
133
+ * ```
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * // Multiple agents in sequence:
138
+ * const result = await ctx.invoke(async () => {
139
+ * const step1 = await agent1.run(input);
140
+ * return agent2.run(step1);
141
+ * });
142
+ * ```
143
+ */
144
+ async invoke(fn, options) {
145
+ const threadProvider = getThreadProvider();
146
+ const sessionProvider = getSessionProvider();
147
+ const sessionEventProvider = getSessionEventProvider();
148
+ const storage = getAgentAsyncLocalStorage();
149
+ // Create per-invocation state (prevents race conditions on concurrent calls)
150
+ const waitUntilHandler = new WaitUntilHandler(this.tracer);
151
+ const agentIds = new Set();
152
+ let invocationSessionId = this.initialSessionId ?? 'pending';
153
+ let invocationThread;
154
+ let invocationSession;
155
+ const invocationState = new Map();
156
+ // Create a per-call context that inherits from this but has isolated mutable state
157
+ const callContext = Object.create(this);
158
+ callContext.sessionId = invocationSessionId;
159
+ callContext.state = invocationState;
160
+ callContext[AGENT_IDS] = agentIds;
161
+ callContext.waitUntil = (callback) => {
162
+ waitUntilHandler.waitUntil(callback);
163
+ };
164
+ // Execute within parent context (for distributed tracing)
165
+ return await context.with(this.parentContext, async () => {
166
+ // Create a span for this invocation (similar to otelMiddleware's HTTP span)
167
+ return await trace.getTracer('standalone-agent').startActiveSpan(options?.spanName ?? 'agent-invocation', {
168
+ kind: SpanKind.INTERNAL, // Not HTTP, but internal invocation
169
+ attributes: {
170
+ 'trigger': this.trigger,
171
+ },
172
+ }, async (span) => {
173
+ const sctx = span.spanContext();
174
+ // Generate sessionId from traceId if not provided
175
+ invocationSessionId = this.initialSessionId ?? (sctx?.traceId ? `sess_${sctx.traceId}` : generateId('sess'));
176
+ callContext.sessionId = invocationSessionId;
177
+ // Add to tracestate (like otelMiddleware does)
178
+ // Note: SpanContext.traceState is readonly, so we update it by setting the span with a new context
179
+ let traceState = sctx.traceState ?? new TraceState();
180
+ const projectId = runtimeConfig.getProjectId();
181
+ const orgId = runtimeConfig.getOrganizationId();
182
+ const deploymentId = runtimeConfig.getDeploymentId();
183
+ const isDevMode = runtimeConfig.isDevMode();
184
+ if (projectId) {
185
+ traceState = traceState.set('pid', projectId);
186
+ }
187
+ if (orgId) {
188
+ traceState = traceState.set('oid', orgId);
189
+ }
190
+ if (isDevMode) {
191
+ traceState = traceState.set('d', '1');
192
+ }
193
+ // Update the active context with the new trace state
194
+ // We do this by setting the span in the context with updated trace state
195
+ // Note: This creates a new context but we don't need to use it directly
196
+ // as the span already has the trace state we need for propagation
197
+ trace.setSpan(context.active(), trace.wrapSpanContext({
198
+ ...sctx,
199
+ traceState
200
+ }));
201
+ // Restore thread and session (like otelMiddleware does)
202
+ // For standalone contexts, we create a simple thread/session if not provided
203
+ // The threadProvider.restore expects a Hono context with cookie/header access
204
+ // For standalone contexts without HTTP, we just create a new thread
205
+ const { DefaultThread, generateId: genId } = await import('./session');
206
+ const threadId = genId('thrd');
207
+ invocationThread = new DefaultThread(threadProvider, threadId);
208
+ callContext.thread = invocationThread;
209
+ invocationSession = await sessionProvider.restore(invocationThread, invocationSessionId);
210
+ callContext.session = invocationSession;
211
+ // Send session start event (if configured)
212
+ const shouldSendSession = !!(orgId && projectId);
213
+ let canSendSessionEvents = true;
214
+ if (shouldSendSession) {
215
+ await sessionEventProvider
216
+ .start({
217
+ id: invocationSessionId,
218
+ orgId,
219
+ projectId,
220
+ threadId: invocationThread.id,
221
+ routeId: 'standalone', // No route for standalone contexts
222
+ deploymentId,
223
+ devmode: isDevMode,
224
+ environment: runtimeConfig.getEnvironment(),
225
+ method: 'STANDALONE',
226
+ url: '',
227
+ trigger: this.trigger,
228
+ })
229
+ .catch((ex) => {
230
+ canSendSessionEvents = false;
231
+ this.logger.error('error sending session start event: %s', ex);
232
+ });
233
+ }
234
+ let hasPendingWaits = false;
235
+ try {
236
+ // Execute function within AsyncLocalStorage context with per-call context
237
+ const result = await storage.run(callContext, fn);
238
+ // Wait for background tasks (like otelMiddleware does)
239
+ if (waitUntilHandler.hasPending()) {
240
+ hasPendingWaits = true;
241
+ waitUntilHandler
242
+ .waitUntilAll(this.logger, invocationSessionId)
243
+ .then(async () => {
244
+ this.logger.debug('wait until finished for session %s', invocationSessionId);
245
+ await sessionProvider.save(invocationSession);
246
+ await threadProvider.save(invocationThread);
247
+ span.setStatus({ code: SpanStatusCode.OK });
248
+ if (shouldSendSession && canSendSessionEvents) {
249
+ const userData = invocationSession.serializeUserData();
250
+ sessionEventProvider
251
+ .complete({
252
+ id: invocationSessionId,
253
+ threadId: invocationThread.empty() ? null : invocationThread.id,
254
+ statusCode: 200, // Success
255
+ agentIds: Array.from(agentIds),
256
+ userData,
257
+ })
258
+ .then(() => { })
259
+ .catch((ex) => this.logger.error(ex));
260
+ }
261
+ })
262
+ .catch((ex) => {
263
+ this.logger.error('wait until errored for session %s. %s', invocationSessionId, ex);
264
+ if (ex instanceof Error) {
265
+ span.recordException(ex);
266
+ }
267
+ const message = ex.message ?? String(ex);
268
+ span.setStatus({
269
+ code: SpanStatusCode.ERROR,
270
+ message,
271
+ });
272
+ this.logger.error(message);
273
+ if (shouldSendSession && canSendSessionEvents) {
274
+ const userData = invocationSession.serializeUserData();
275
+ sessionEventProvider
276
+ .complete({
277
+ id: invocationSessionId,
278
+ threadId: invocationThread.empty() ? null : invocationThread.id,
279
+ statusCode: 500, // Error
280
+ error: message,
281
+ agentIds: Array.from(agentIds),
282
+ userData,
283
+ })
284
+ .then(() => { })
285
+ .catch((ex) => this.logger.error(ex));
286
+ }
287
+ })
288
+ .finally(() => {
289
+ span.end();
290
+ });
291
+ }
292
+ else {
293
+ span.setStatus({ code: SpanStatusCode.OK });
294
+ if (shouldSendSession && canSendSessionEvents) {
295
+ const userData = invocationSession.serializeUserData();
296
+ sessionEventProvider
297
+ .complete({
298
+ id: invocationSessionId,
299
+ threadId: invocationThread.empty() ? null : invocationThread.id,
300
+ statusCode: 200,
301
+ agentIds: Array.from(agentIds),
302
+ userData,
303
+ })
304
+ .then(() => { })
305
+ .catch((ex) => this.logger.error(ex));
306
+ }
307
+ }
308
+ return result;
309
+ }
310
+ catch (ex) {
311
+ if (ex instanceof Error) {
312
+ span.recordException(ex);
313
+ }
314
+ const message = ex.message ?? String(ex);
315
+ span.setStatus({
316
+ code: SpanStatusCode.ERROR,
317
+ message,
318
+ });
319
+ this.logger.error(message);
320
+ if (shouldSendSession && canSendSessionEvents) {
321
+ const userData = invocationSession.serializeUserData();
322
+ sessionEventProvider
323
+ .complete({
324
+ id: invocationSessionId,
325
+ threadId: invocationThread.empty() ? null : invocationThread.id,
326
+ statusCode: 500,
327
+ error: message,
328
+ agentIds: Array.from(agentIds),
329
+ userData,
330
+ })
331
+ .then(() => { })
332
+ .catch((ex) => this.logger.error(ex));
333
+ }
334
+ throw ex;
335
+ }
336
+ finally {
337
+ if (!hasPendingWaits) {
338
+ try {
339
+ await sessionProvider.save(invocationSession);
340
+ await threadProvider.save(invocationThread);
341
+ }
342
+ finally {
343
+ span.end();
344
+ }
345
+ }
346
+ }
347
+ });
348
+ });
349
+ }
350
+ }
351
+ /**
352
+ * Create a standalone agent context for executing agents outside of HTTP requests.
353
+ *
354
+ * This is useful for Discord bots, cron jobs, WebSocket callbacks, or any scenario
355
+ * where you need to run agents but don't have an HTTP request context.
356
+ *
357
+ * @param options - Optional configuration for the context
358
+ * @returns A StandaloneAgentContext instance
359
+ *
360
+ * @example
361
+ * ```typescript
362
+ * import { createAgentContext } from '@agentuity/runtime';
363
+ * import myAgent from './agents/my-agent';
364
+ *
365
+ * // Simple usage:
366
+ * const ctx = createAgentContext();
367
+ * const result = await ctx.invoke(() => myAgent.run(input));
368
+ *
369
+ * // Discord bot example:
370
+ * client.on('messageCreate', async (message) => {
371
+ * const ctx = createAgentContext({
372
+ * sessionId: message.id,
373
+ * trigger: 'discord'
374
+ * });
375
+ * const response = await ctx.invoke(() =>
376
+ * chatAgent.run({ message: message.content })
377
+ * );
378
+ * await message.reply(response.text);
379
+ * });
380
+ *
381
+ * // Cron job example:
382
+ * cron.schedule('0 * * * *', async () => {
383
+ * const ctx = createAgentContext({ trigger: 'cron' });
384
+ * await ctx.invoke(() => cleanupAgent.run());
385
+ * });
386
+ * ```
387
+ */
388
+ export function createAgentContext(options) {
389
+ return new StandaloneAgentContext(options);
390
+ }
391
+ //# sourceMappingURL=_standalone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_standalone.js","sourceRoot":"","sources":["../src/_standalone.ts"],"names":[],"mappings":"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"}