@agnt5/sdk 0.2.1

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 (126) hide show
  1. package/README.md +183 -0
  2. package/dist/__tests__/integration/helpers.d.ts +41 -0
  3. package/dist/__tests__/integration/helpers.d.ts.map +1 -0
  4. package/dist/__tests__/integration/helpers.js +78 -0
  5. package/dist/__tests__/integration/helpers.js.map +1 -0
  6. package/dist/agent.d.ts +260 -0
  7. package/dist/agent.d.ts.map +1 -0
  8. package/dist/agent.js +493 -0
  9. package/dist/agent.js.map +1 -0
  10. package/dist/async-context.d.ts +57 -0
  11. package/dist/async-context.d.ts.map +1 -0
  12. package/dist/async-context.js +52 -0
  13. package/dist/async-context.js.map +1 -0
  14. package/dist/batch.d.ts +116 -0
  15. package/dist/batch.d.ts.map +1 -0
  16. package/dist/batch.js +98 -0
  17. package/dist/batch.js.map +1 -0
  18. package/dist/chat.d.ts +137 -0
  19. package/dist/chat.d.ts.map +1 -0
  20. package/dist/chat.js +278 -0
  21. package/dist/chat.js.map +1 -0
  22. package/dist/client.d.ts +394 -0
  23. package/dist/client.d.ts.map +1 -0
  24. package/dist/client.js +757 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/context.d.ts +47 -0
  27. package/dist/context.d.ts.map +1 -0
  28. package/dist/context.js +244 -0
  29. package/dist/context.js.map +1 -0
  30. package/dist/errors.d.ts +148 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +201 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/eval.d.ts +242 -0
  35. package/dist/eval.d.ts.map +1 -0
  36. package/dist/eval.js +452 -0
  37. package/dist/eval.js.map +1 -0
  38. package/dist/event-emitter.d.ts +28 -0
  39. package/dist/event-emitter.d.ts.map +1 -0
  40. package/dist/event-emitter.js +79 -0
  41. package/dist/event-emitter.js.map +1 -0
  42. package/dist/events.d.ts +285 -0
  43. package/dist/events.d.ts.map +1 -0
  44. package/dist/events.js +256 -0
  45. package/dist/events.js.map +1 -0
  46. package/dist/function.d.ts +61 -0
  47. package/dist/function.d.ts.map +1 -0
  48. package/dist/function.js +78 -0
  49. package/dist/function.js.map +1 -0
  50. package/dist/index.d.ts +67 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +80 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/lm.d.ts +301 -0
  55. package/dist/lm.d.ts.map +1 -0
  56. package/dist/lm.js +283 -0
  57. package/dist/lm.js.map +1 -0
  58. package/dist/logging.d.ts +68 -0
  59. package/dist/logging.d.ts.map +1 -0
  60. package/dist/logging.js +165 -0
  61. package/dist/logging.js.map +1 -0
  62. package/dist/mcp-server.d.ts +98 -0
  63. package/dist/mcp-server.d.ts.map +1 -0
  64. package/dist/mcp-server.js +307 -0
  65. package/dist/mcp-server.js.map +1 -0
  66. package/dist/mcp.d.ts +73 -0
  67. package/dist/mcp.d.ts.map +1 -0
  68. package/dist/mcp.js +224 -0
  69. package/dist/mcp.js.map +1 -0
  70. package/dist/memory.d.ts +234 -0
  71. package/dist/memory.d.ts.map +1 -0
  72. package/dist/memory.js +609 -0
  73. package/dist/memory.js.map +1 -0
  74. package/dist/platform-adapters.d.ts +121 -0
  75. package/dist/platform-adapters.d.ts.map +1 -0
  76. package/dist/platform-adapters.js +174 -0
  77. package/dist/platform-adapters.js.map +1 -0
  78. package/dist/platform-context.d.ts +55 -0
  79. package/dist/platform-context.d.ts.map +1 -0
  80. package/dist/platform-context.js +196 -0
  81. package/dist/platform-context.js.map +1 -0
  82. package/dist/retry-utils.d.ts +169 -0
  83. package/dist/retry-utils.d.ts.map +1 -0
  84. package/dist/retry-utils.js +304 -0
  85. package/dist/retry-utils.js.map +1 -0
  86. package/dist/sandbox.d.ts +103 -0
  87. package/dist/sandbox.d.ts.map +1 -0
  88. package/dist/sandbox.js +168 -0
  89. package/dist/sandbox.js.map +1 -0
  90. package/dist/schema-utils.d.ts +250 -0
  91. package/dist/schema-utils.d.ts.map +1 -0
  92. package/dist/schema-utils.js +444 -0
  93. package/dist/schema-utils.js.map +1 -0
  94. package/dist/scorer.d.ts +130 -0
  95. package/dist/scorer.d.ts.map +1 -0
  96. package/dist/scorer.js +211 -0
  97. package/dist/scorer.js.map +1 -0
  98. package/dist/state.d.ts +92 -0
  99. package/dist/state.d.ts.map +1 -0
  100. package/dist/state.js +151 -0
  101. package/dist/state.js.map +1 -0
  102. package/dist/tool.d.ts +120 -0
  103. package/dist/tool.d.ts.map +1 -0
  104. package/dist/tool.js +215 -0
  105. package/dist/tool.js.map +1 -0
  106. package/dist/tracing.d.ts +82 -0
  107. package/dist/tracing.d.ts.map +1 -0
  108. package/dist/tracing.js +206 -0
  109. package/dist/tracing.js.map +1 -0
  110. package/dist/types.d.ts +139 -0
  111. package/dist/types.d.ts.map +1 -0
  112. package/dist/types.js +2 -0
  113. package/dist/types.js.map +1 -0
  114. package/dist/worker.d.ts +111 -0
  115. package/dist/worker.d.ts.map +1 -0
  116. package/dist/worker.js +944 -0
  117. package/dist/worker.js.map +1 -0
  118. package/dist/workflow-utils.d.ts +257 -0
  119. package/dist/workflow-utils.d.ts.map +1 -0
  120. package/dist/workflow-utils.js +370 -0
  121. package/dist/workflow-utils.js.map +1 -0
  122. package/dist/workflow.d.ts +78 -0
  123. package/dist/workflow.d.ts.map +1 -0
  124. package/dist/workflow.js +138 -0
  125. package/dist/workflow.js.map +1 -0
  126. package/package.json +86 -0
package/dist/agent.js ADDED
@@ -0,0 +1,493 @@
1
+ /**
2
+ * Agent component for LLM-driven autonomous execution.
3
+ *
4
+ * Production ready with support for the new LM class and durable execution
5
+ */
6
+ import { Tool } from './tool.js';
7
+ import { ContextImpl } from './context.js';
8
+ import { randomUUID } from 'crypto';
9
+ import { agentStarted, agentCompleted, agentFailed, iterationStarted, iterationCompleted, toolCallStarted, toolCallCompleted, toolCallFailed, } from './events.js';
10
+ /**
11
+ * Message role in conversation (for backwards compatibility)
12
+ * @deprecated Use MessageRole from lm.js instead
13
+ */
14
+ export var MessageRole;
15
+ (function (MessageRole) {
16
+ MessageRole["System"] = "system";
17
+ MessageRole["User"] = "user";
18
+ MessageRole["Assistant"] = "assistant";
19
+ })(MessageRole || (MessageRole = {}));
20
+ /**
21
+ * Message factory functions
22
+ */
23
+ export const Message = {
24
+ system: (content) => ({ role: 'system', content }),
25
+ user: (content) => ({ role: 'user', content }),
26
+ assistant: (content) => ({ role: 'assistant', content })
27
+ };
28
+ /**
29
+ * Handoff configuration for agent-to-agent delegation
30
+ */
31
+ export class Handoff {
32
+ constructor(agent, description, toolName, passFullHistory = true) {
33
+ this.agent = agent;
34
+ this.description = description || agent.instructions || `Transfer to ${agent.name}`;
35
+ this.toolName = toolName || `transfer_to_${agent.name}`;
36
+ this.passFullHistory = passFullHistory;
37
+ }
38
+ }
39
+ /**
40
+ * Create a handoff configuration for agent delegation
41
+ */
42
+ export function handoff(agent, description, toolName, passFullHistory = true) {
43
+ return new Handoff(agent, description, toolName, passFullHistory);
44
+ }
45
+ /**
46
+ * Global registry for looking up agents by name.
47
+ *
48
+ * Provides discovery for multi-agent systems where agents need to find each
49
+ * other, and for the worker to enumerate registered agents.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const researcher = new Agent({ name: 'researcher', ... });
54
+ * // Agent is auto-registered in constructor
55
+ *
56
+ * // Look up later
57
+ * const found = AgentRegistry.get('researcher');
58
+ * ```
59
+ */
60
+ export class AgentRegistry {
61
+ static register(agent) {
62
+ if (this.agents.has(agent.name)) {
63
+ console.warn(`Overwriting existing agent '${agent.name}'`);
64
+ }
65
+ this.agents.set(agent.name, agent);
66
+ }
67
+ static get(name) {
68
+ return this.agents.get(name);
69
+ }
70
+ static all() {
71
+ return new Map(this.agents);
72
+ }
73
+ static listNames() {
74
+ return Array.from(this.agents.keys());
75
+ }
76
+ static clear() {
77
+ this.agents.clear();
78
+ }
79
+ }
80
+ AgentRegistry.agents = new Map();
81
+ /**
82
+ * Autonomous LLM-driven agent with tool orchestration
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * import { Agent, tool } from '@agnt5/sdk';
87
+ *
88
+ * const searchTool = tool('search_web', {
89
+ * description: 'Search the web for information',
90
+ * inputSchema: {
91
+ * type: 'object',
92
+ * properties: {
93
+ * query: { type: 'string', description: 'Search query' }
94
+ * },
95
+ * required: ['query']
96
+ * }
97
+ * }, async (ctx, args) => {
98
+ * const { query } = args;
99
+ * // Search implementation
100
+ * return [{ title: 'Result', url: '...' }];
101
+ * });
102
+ *
103
+ * const agent = new Agent({
104
+ * name: 'researcher',
105
+ * model: myLanguageModel,
106
+ * instructions: 'You are a research assistant.',
107
+ * tools: [searchTool]
108
+ * });
109
+ *
110
+ * const result = await agent.run('What are the latest AI trends?');
111
+ * console.log(result.output);
112
+ * ```
113
+ */
114
+ export class Agent {
115
+ constructor(options) {
116
+ this.tools = new Map();
117
+ this.handoffs = [];
118
+ this.name = options.name;
119
+ this.model = options.model;
120
+ this.instructions = options.instructions;
121
+ this.modelName = options.modelName || 'openai/gpt-4o-mini';
122
+ this.temperature = options.temperature ?? 0.7;
123
+ this.maxIterations = options.maxIterations || 10;
124
+ // Detect if it's the new LM class (has static factory methods)
125
+ this.isNewLM = 'generate' in options.model && !('stream' in options.model.constructor);
126
+ // Build tool registry
127
+ if (options.tools) {
128
+ for (const t of options.tools) {
129
+ this.addTool(t);
130
+ }
131
+ }
132
+ // Register handoff targets
133
+ if (options.handoffs) {
134
+ for (const item of options.handoffs) {
135
+ const h = item instanceof Handoff ? item : new Handoff(item);
136
+ this.handoffs.push(h);
137
+ // Create and register the transfer tool
138
+ const transferTool = this.createHandoffTool(h);
139
+ this.tools.set(transferTool.name, transferTool);
140
+ }
141
+ }
142
+ // Auto-register in global registry
143
+ AgentRegistry.register(this);
144
+ }
145
+ /**
146
+ * Add a tool to this agent's tool set
147
+ */
148
+ addTool(t) {
149
+ if (t instanceof Tool) {
150
+ this.tools.set(t.name, t);
151
+ }
152
+ else if (t instanceof Agent) {
153
+ // Agent-as-tool: wrap the agent in a Tool that invokes its run() method
154
+ // so a coordinator can delegate to specialist agents by name. Mirrors
155
+ // sdk-python's pattern of passing Agent instances directly in tools.
156
+ const subAgent = t;
157
+ const wrapped = new Tool(subAgent.name, `Delegate a task to the ${subAgent.name} agent. Pass the task as the 'message' argument.`, async (ctx, args) => {
158
+ const message = args.message || args.prompt || JSON.stringify(args);
159
+ const result = await subAgent.run(message, ctx);
160
+ return result.output;
161
+ }, {
162
+ inputSchema: {
163
+ type: 'object',
164
+ properties: {
165
+ message: {
166
+ type: 'string',
167
+ description: 'The task or question to delegate to this agent',
168
+ },
169
+ },
170
+ required: ['message'],
171
+ },
172
+ });
173
+ this.tools.set(subAgent.name, wrapped);
174
+ }
175
+ else if ('name' in t && 'getSchema' in t) {
176
+ this.tools.set(t.name, t);
177
+ }
178
+ else if ('_tool' in t) {
179
+ const toolInstance = t._tool;
180
+ this.tools.set(toolInstance.name, toolInstance);
181
+ }
182
+ }
183
+ /**
184
+ * Create an auto-generated transfer tool for a handoff target
185
+ */
186
+ createHandoffTool(h) {
187
+ const targetAgent = h.agent;
188
+ const passHistory = h.passFullHistory;
189
+ return new Tool(h.toolName, h.description, async (ctx, args) => {
190
+ const message = args.message || args.prompt || '';
191
+ // Run target agent to completion
192
+ const result = await targetAgent.run(message, ctx, passHistory ? ctx._agentConversation : undefined);
193
+ // Return with handoff marker
194
+ return {
195
+ _handoff: true,
196
+ to_agent: targetAgent.name,
197
+ output: result.output,
198
+ tool_calls: result.toolCalls,
199
+ };
200
+ }, {
201
+ inputSchema: {
202
+ type: 'object',
203
+ properties: {
204
+ message: { type: 'string', description: 'Message to send to the target agent' },
205
+ },
206
+ required: ['message'],
207
+ },
208
+ });
209
+ }
210
+ /**
211
+ * Convert ToolSchema to LM ToolDefinition
212
+ */
213
+ convertToolSchema(schema) {
214
+ return {
215
+ name: schema.name,
216
+ description: schema.description,
217
+ parameters: JSON.stringify(schema.input_schema),
218
+ strict: false,
219
+ };
220
+ }
221
+ /**
222
+ * Generate using the model (handles both old and new LM types)
223
+ */
224
+ async generateWithModel(messages, toolDefs) {
225
+ if (this.isNewLM) {
226
+ // New LM class - use new types
227
+ const lm = this.model;
228
+ const request = {
229
+ model: this.modelName,
230
+ systemPrompt: this.instructions,
231
+ messages: messages,
232
+ tools: toolDefs.length > 0 ? toolDefs.map(t => this.convertToolSchema(t)) : undefined,
233
+ config: {
234
+ temperature: this.temperature,
235
+ },
236
+ };
237
+ const response = await lm.generate(request);
238
+ // Convert response to old format
239
+ return {
240
+ text: response.text,
241
+ usage: response.usage ? {
242
+ promptTokens: response.usage.promptTokens || 0,
243
+ completionTokens: response.usage.completionTokens || 0,
244
+ totalTokens: response.usage.totalTokens || 0,
245
+ } : undefined,
246
+ finishReason: response.finishReason,
247
+ toolCalls: response.toolCalls,
248
+ };
249
+ }
250
+ else {
251
+ // Legacy LanguageModel - use old types
252
+ const legacyModel = this.model;
253
+ const request = {
254
+ model: this.modelName,
255
+ systemPrompt: this.instructions,
256
+ messages,
257
+ tools: toolDefs.length > 0 ? toolDefs : undefined,
258
+ config: {
259
+ temperature: this.temperature,
260
+ },
261
+ };
262
+ return await legacyModel.generate(request);
263
+ }
264
+ }
265
+ /**
266
+ * Stream agent execution, yielding events at each stage.
267
+ *
268
+ * @example
269
+ * ```typescript
270
+ * for await (const event of agent.stream('Analyze tech news')) {
271
+ * if (event.eventType === 'agent.completed') {
272
+ * console.log('Done:', event.outputLength);
273
+ * }
274
+ * }
275
+ * ```
276
+ */
277
+ async *stream(userMessage, context, history) {
278
+ const agentCorrelationId = randomUUID();
279
+ // Create context if not provided
280
+ const ctx = context || new ContextImpl(`agent-${this.name}-${Date.now()}`, `run-${Date.now()}`, 0, this.name);
281
+ // Stash conversation on context for handoff history passing
282
+ const messages = history ? [...history] : [];
283
+ messages.push(Message.user(userMessage));
284
+ ctx._agentConversation = messages;
285
+ const toolNames = Array.from(this.tools.keys());
286
+ const allToolCalls = [];
287
+ // ── AgentStarted ──
288
+ yield agentStarted(this.name, agentCorrelationId, {
289
+ agentModel: this.modelName,
290
+ toolNames,
291
+ maxIterations: this.maxIterations,
292
+ });
293
+ let completedIterations = 0;
294
+ try {
295
+ for (let iteration = 0; iteration < this.maxIterations; iteration++) {
296
+ const iterCorrelationId = randomUUID();
297
+ // ── IterationStarted ──
298
+ yield iterationStarted(iterCorrelationId, agentCorrelationId, {
299
+ iteration: iteration + 1,
300
+ maxIterations: this.maxIterations,
301
+ });
302
+ // Build tool definitions and call LLM
303
+ const toolDefs = Array.from(this.tools.values()).map(t => t.getSchema());
304
+ const response = await this.generateWithModel(messages, toolDefs);
305
+ messages.push(Message.assistant(response.text));
306
+ if (response.toolCalls && response.toolCalls.length > 0) {
307
+ // Execute tool calls
308
+ const toolResults = [];
309
+ for (const tc of response.toolCalls) {
310
+ const tcId = randomUUID();
311
+ const toolName = tc.name;
312
+ const toolArgsStr = tc.arguments;
313
+ allToolCalls.push({ name: toolName, arguments: toolArgsStr, iteration: iteration + 1 });
314
+ // ── ToolCallStarted ──
315
+ yield toolCallStarted(tcId, iterCorrelationId, { toolName, toolCallId: tcId });
316
+ try {
317
+ const toolArgs = JSON.parse(toolArgsStr);
318
+ const tool = this.tools.get(toolName);
319
+ if (!tool) {
320
+ yield toolCallFailed(tcId, iterCorrelationId, {
321
+ toolName,
322
+ toolCallId: tcId,
323
+ error: `Tool '${toolName}' not found`,
324
+ });
325
+ toolResults.push({ tool: toolName, result: null, error: `Tool '${toolName}' not found` });
326
+ continue;
327
+ }
328
+ const result = await tool.invoke(ctx, toolArgs);
329
+ // ── Handoff detection ──
330
+ if (result && typeof result === 'object' && result._handoff) {
331
+ yield toolCallCompleted(tcId, iterCorrelationId, { toolName, toolCallId: tcId });
332
+ completedIterations = iteration + 1;
333
+ const handoffResult = {
334
+ output: result.output,
335
+ toolCalls: [...allToolCalls, ...(result.tool_calls || [])],
336
+ context: ctx,
337
+ handoffTo: result.to_agent,
338
+ handoffMetadata: result,
339
+ };
340
+ // ── AgentCompleted (with handoff) ──
341
+ yield agentCompleted(this.name, agentCorrelationId, {
342
+ iterations: completedIterations,
343
+ toolCallsCount: allToolCalls.length,
344
+ handoffTo: result.to_agent,
345
+ outputLength: handoffResult.output.length,
346
+ });
347
+ yield handoffResult;
348
+ return;
349
+ }
350
+ const resultText = JSON.stringify(result);
351
+ yield toolCallCompleted(tcId, iterCorrelationId, { toolName, toolCallId: tcId });
352
+ toolResults.push({ tool: toolName, result: resultText, error: null });
353
+ }
354
+ catch (error) {
355
+ // HITL: WaitingForUserInputError must propagate to pause the
356
+ // workflow — do NOT treat it as a tool failure or the LLM will
357
+ // retry the tool in the next iteration.
358
+ if (error?.name === 'WaitingForUserInputError') {
359
+ throw error;
360
+ }
361
+ yield toolCallFailed(tcId, iterCorrelationId, {
362
+ toolName,
363
+ toolCallId: tcId,
364
+ error: String(error),
365
+ });
366
+ toolResults.push({ tool: toolName, result: null, error: String(error) });
367
+ }
368
+ }
369
+ // Add tool results to conversation
370
+ const resultsText = toolResults
371
+ .map(tr => tr.error ? `Tool: ${tr.tool}\nError: ${tr.error}` : `Tool: ${tr.tool}\nResult: ${tr.result}`)
372
+ .join('\n\n');
373
+ messages.push(Message.user(`Tool results:\n${resultsText}`));
374
+ // ── IterationCompleted (with tools) ──
375
+ yield iterationCompleted(iterCorrelationId, agentCorrelationId, {
376
+ iteration: iteration + 1,
377
+ hasToolCalls: true,
378
+ toolCallsCount: response.toolCalls.length,
379
+ });
380
+ completedIterations = iteration + 1;
381
+ }
382
+ else {
383
+ // No tool calls — agent is done
384
+ completedIterations = iteration + 1;
385
+ // ── IterationCompleted (final) ──
386
+ yield iterationCompleted(iterCorrelationId, agentCorrelationId, {
387
+ iteration: iteration + 1,
388
+ hasToolCalls: false,
389
+ toolCallsCount: 0,
390
+ });
391
+ // ── AgentCompleted ──
392
+ yield agentCompleted(this.name, agentCorrelationId, {
393
+ iterations: completedIterations,
394
+ toolCallsCount: allToolCalls.length,
395
+ handoffTo: null,
396
+ outputLength: response.text.length,
397
+ });
398
+ yield {
399
+ output: response.text,
400
+ toolCalls: allToolCalls,
401
+ context: ctx,
402
+ handoffTo: null,
403
+ handoffMetadata: {},
404
+ };
405
+ return;
406
+ }
407
+ }
408
+ // Max iterations reached
409
+ completedIterations = this.maxIterations;
410
+ const finalOutput = messages[messages.length - 1]?.content || 'No output generated';
411
+ yield agentCompleted(this.name, agentCorrelationId, {
412
+ iterations: completedIterations,
413
+ toolCallsCount: allToolCalls.length,
414
+ handoffTo: null,
415
+ outputLength: finalOutput.length,
416
+ });
417
+ yield {
418
+ output: finalOutput,
419
+ toolCalls: allToolCalls,
420
+ context: ctx,
421
+ handoffTo: null,
422
+ handoffMetadata: {},
423
+ };
424
+ }
425
+ catch (error) {
426
+ yield agentFailed(this.name, agentCorrelationId, {
427
+ iterations: completedIterations,
428
+ error: String(error),
429
+ });
430
+ throw error;
431
+ }
432
+ }
433
+ /**
434
+ * Run agent to completion (non-streaming).
435
+ * Consumes stream() internally and returns the final AgentResult.
436
+ *
437
+ * @example
438
+ * ```typescript
439
+ * const result = await agent.run('Analyze recent tech news');
440
+ * console.log(result.output);
441
+ * ```
442
+ */
443
+ async run(userMessage, context, history) {
444
+ let result;
445
+ for await (const event of this.stream(userMessage, context, history)) {
446
+ // The last yielded value that has 'output' is the AgentResult
447
+ if ('output' in event && 'toolCalls' in event && 'context' in event) {
448
+ result = event;
449
+ continue;
450
+ }
451
+ // Forward lifecycle events (agent.started/completed/failed, iteration.*,
452
+ // tool_call.started/completed/failed, output.*) to the platform via the
453
+ // provided context emitter. Without this, agent.run() called from inside
454
+ // a function or workflow handler silently swallows every tool-level
455
+ // event and downstream projections/tests can't see them.
456
+ if (context) {
457
+ try {
458
+ await context.emit(event);
459
+ }
460
+ catch {
461
+ // Best effort — emission failures should not break the agent
462
+ }
463
+ }
464
+ }
465
+ if (!result) {
466
+ throw new Error(`Agent '${this.name}' completed without producing a result`);
467
+ }
468
+ return result;
469
+ }
470
+ /**
471
+ * Continue multi-turn conversation
472
+ *
473
+ * @example
474
+ * ```typescript
475
+ * let messages: Message[] = [];
476
+ * let response: string;
477
+ *
478
+ * [response, messages] = await agent.chat('Hello', messages);
479
+ * [response, messages] = await agent.chat('Tell me more', messages);
480
+ * ```
481
+ */
482
+ async chat(userMessage, messages, context) {
483
+ const ctx = context || new ContextImpl(`agent-chat-${this.name}-${Date.now()}`, `run-${Date.now()}`, 0, this.name);
484
+ // Add user message
485
+ const conversation = [...messages, Message.user(userMessage)];
486
+ // Call LLM (no tools for simple chat, using helper)
487
+ const response = await this.generateWithModel(conversation, []);
488
+ // Add assistant response
489
+ conversation.push(Message.assistant(response.text));
490
+ return [response.text, conversation];
491
+ }
492
+ }
493
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Context propagation via Node.js AsyncLocalStorage.
3
+ *
4
+ * Provides implicit context propagation through async call chains
5
+ * without threading context through every function parameter.
6
+ *
7
+ * Usage:
8
+ * // In worker dispatch or middleware:
9
+ * runWithContext({ runId, sessionId, userId, correlationId }, async () => {
10
+ * // Deep inside a function/agent/workflow:
11
+ * const ctx = getCurrentContext();
12
+ * console.log(ctx?.runId);
13
+ * });
14
+ */
15
+ /**
16
+ * Propagated context data available throughout an async execution chain.
17
+ */
18
+ export interface PropagatedContext {
19
+ /** Current run ID */
20
+ runId: string;
21
+ /** Session ID for multi-turn conversations */
22
+ sessionId?: string;
23
+ /** User ID for user-scoped operations */
24
+ userId?: string;
25
+ /** Correlation ID for distributed tracing */
26
+ correlationId?: string;
27
+ /** Tenant ID for multi-tenant deployments */
28
+ tenantId?: string;
29
+ /** Arbitrary metadata */
30
+ metadata?: Record<string, any>;
31
+ }
32
+ /**
33
+ * Run a function with propagated context.
34
+ * All async operations within the callback can access this context
35
+ * via getCurrentContext().
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * await runWithContext(
40
+ * { runId: 'run-1', sessionId: 'sess-1', userId: 'user-42' },
41
+ * async () => {
42
+ * const ctx = getCurrentContext();
43
+ * console.log(ctx?.runId); // 'run-1'
44
+ * },
45
+ * );
46
+ * ```
47
+ */
48
+ export declare function runWithContext<T>(context: PropagatedContext, fn: () => T | Promise<T>): T | Promise<T>;
49
+ /**
50
+ * Get the current propagated context, or undefined if not within a context scope.
51
+ */
52
+ export declare function getCurrentContext(): PropagatedContext | undefined;
53
+ /**
54
+ * Get the current propagated context, throwing if not within a context scope.
55
+ */
56
+ export declare function requireContext(): PropagatedContext;
57
+ //# sourceMappingURL=async-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-context.d.ts","sourceRoot":"","sources":["../src/async-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,OAAO,EAAE,iBAAiB,EAC1B,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,GAAG,SAAS,CAEjE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,iBAAiB,CAQlD"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Context propagation via Node.js AsyncLocalStorage.
3
+ *
4
+ * Provides implicit context propagation through async call chains
5
+ * without threading context through every function parameter.
6
+ *
7
+ * Usage:
8
+ * // In worker dispatch or middleware:
9
+ * runWithContext({ runId, sessionId, userId, correlationId }, async () => {
10
+ * // Deep inside a function/agent/workflow:
11
+ * const ctx = getCurrentContext();
12
+ * console.log(ctx?.runId);
13
+ * });
14
+ */
15
+ import { AsyncLocalStorage } from 'async_hooks';
16
+ const asyncLocalStorage = new AsyncLocalStorage();
17
+ /**
18
+ * Run a function with propagated context.
19
+ * All async operations within the callback can access this context
20
+ * via getCurrentContext().
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * await runWithContext(
25
+ * { runId: 'run-1', sessionId: 'sess-1', userId: 'user-42' },
26
+ * async () => {
27
+ * const ctx = getCurrentContext();
28
+ * console.log(ctx?.runId); // 'run-1'
29
+ * },
30
+ * );
31
+ * ```
32
+ */
33
+ export function runWithContext(context, fn) {
34
+ return asyncLocalStorage.run(context, fn);
35
+ }
36
+ /**
37
+ * Get the current propagated context, or undefined if not within a context scope.
38
+ */
39
+ export function getCurrentContext() {
40
+ return asyncLocalStorage.getStore();
41
+ }
42
+ /**
43
+ * Get the current propagated context, throwing if not within a context scope.
44
+ */
45
+ export function requireContext() {
46
+ const ctx = asyncLocalStorage.getStore();
47
+ if (!ctx) {
48
+ throw new Error('No propagated context available. Ensure this code runs inside runWithContext().');
49
+ }
50
+ return ctx;
51
+ }
52
+ //# sourceMappingURL=async-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-context.js","sourceRoot":"","sources":["../src/async-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAoBhD,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAqB,CAAC;AAErE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA0B,EAC1B,EAAwB;IAExB,OAAO,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,iBAAiB,CAAC,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}