@hazeljs/agent 0.2.0-alpha.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 (166) hide show
  1. package/IMPLEMENTATION_SUMMARY.md +400 -0
  2. package/LICENSE +192 -0
  3. package/PERSISTENCE.md +201 -0
  4. package/PRISMA_INTEGRATION.md +499 -0
  5. package/PRODUCTION_READINESS.md +264 -0
  6. package/QUICKSTART.md +135 -0
  7. package/README.md +541 -0
  8. package/STATE_VS_MEMORY.md +243 -0
  9. package/benchmarks/performance.benchmark.ts +157 -0
  10. package/coverage/clover.xml +1508 -0
  11. package/coverage/lcov-report/base.css +224 -0
  12. package/coverage/lcov-report/block-navigation.js +87 -0
  13. package/coverage/lcov-report/favicon.png +0 -0
  14. package/coverage/lcov-report/index.html +296 -0
  15. package/coverage/lcov-report/prettify.css +1 -0
  16. package/coverage/lcov-report/prettify.js +2 -0
  17. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  18. package/coverage/lcov-report/sorter.js +210 -0
  19. package/coverage/lcov.info +2722 -0
  20. package/dist/agent.module.d.ts +57 -0
  21. package/dist/agent.module.d.ts.map +1 -0
  22. package/dist/agent.module.js +99 -0
  23. package/dist/agent.module.js.map +1 -0
  24. package/dist/context/agent.context.d.ts +27 -0
  25. package/dist/context/agent.context.d.ts.map +1 -0
  26. package/dist/context/agent.context.js +98 -0
  27. package/dist/context/agent.context.js.map +1 -0
  28. package/dist/decorators/agent.decorator.d.ts +21 -0
  29. package/dist/decorators/agent.decorator.d.ts.map +1 -0
  30. package/dist/decorators/agent.decorator.js +38 -0
  31. package/dist/decorators/agent.decorator.js.map +1 -0
  32. package/dist/decorators/delegate.decorator.d.ts +66 -0
  33. package/dist/decorators/delegate.decorator.d.ts.map +1 -0
  34. package/dist/decorators/delegate.decorator.js +108 -0
  35. package/dist/decorators/delegate.decorator.js.map +1 -0
  36. package/dist/decorators/tool.decorator.d.ts +23 -0
  37. package/dist/decorators/tool.decorator.d.ts.map +1 -0
  38. package/dist/decorators/tool.decorator.js +61 -0
  39. package/dist/decorators/tool.decorator.js.map +1 -0
  40. package/dist/events/event.emitter.d.ts +45 -0
  41. package/dist/events/event.emitter.d.ts.map +1 -0
  42. package/dist/events/event.emitter.js +96 -0
  43. package/dist/events/event.emitter.js.map +1 -0
  44. package/dist/executor/agent.executor.d.ts +58 -0
  45. package/dist/executor/agent.executor.d.ts.map +1 -0
  46. package/dist/executor/agent.executor.js +312 -0
  47. package/dist/executor/agent.executor.js.map +1 -0
  48. package/dist/executor/tool.executor.d.ts +55 -0
  49. package/dist/executor/tool.executor.d.ts.map +1 -0
  50. package/dist/executor/tool.executor.js +266 -0
  51. package/dist/executor/tool.executor.js.map +1 -0
  52. package/dist/graph/agent-graph.d.ts +131 -0
  53. package/dist/graph/agent-graph.d.ts.map +1 -0
  54. package/dist/graph/agent-graph.js +462 -0
  55. package/dist/graph/agent-graph.js.map +1 -0
  56. package/dist/graph/agent-graph.types.d.ts +210 -0
  57. package/dist/graph/agent-graph.types.d.ts.map +1 -0
  58. package/dist/graph/agent-graph.types.js +12 -0
  59. package/dist/graph/agent-graph.types.js.map +1 -0
  60. package/dist/index.d.ts +34 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +51 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/prompts/agent-system.prompt.d.ts +10 -0
  65. package/dist/prompts/agent-system.prompt.d.ts.map +1 -0
  66. package/dist/prompts/agent-system.prompt.js +18 -0
  67. package/dist/prompts/agent-system.prompt.js.map +1 -0
  68. package/dist/prompts/index.d.ts +4 -0
  69. package/dist/prompts/index.d.ts.map +1 -0
  70. package/dist/prompts/index.js +20 -0
  71. package/dist/prompts/index.js.map +1 -0
  72. package/dist/prompts/supervisor-routing.prompt.d.ts +9 -0
  73. package/dist/prompts/supervisor-routing.prompt.d.ts.map +1 -0
  74. package/dist/prompts/supervisor-routing.prompt.js +22 -0
  75. package/dist/prompts/supervisor-routing.prompt.js.map +1 -0
  76. package/dist/prompts/supervisor-system.prompt.d.ts +9 -0
  77. package/dist/prompts/supervisor-system.prompt.d.ts.map +1 -0
  78. package/dist/prompts/supervisor-system.prompt.js +21 -0
  79. package/dist/prompts/supervisor-system.prompt.js.map +1 -0
  80. package/dist/registry/agent.registry.d.ts +49 -0
  81. package/dist/registry/agent.registry.d.ts.map +1 -0
  82. package/dist/registry/agent.registry.js +90 -0
  83. package/dist/registry/agent.registry.js.map +1 -0
  84. package/dist/registry/tool.registry.d.ts +54 -0
  85. package/dist/registry/tool.registry.d.ts.map +1 -0
  86. package/dist/registry/tool.registry.js +153 -0
  87. package/dist/registry/tool.registry.js.map +1 -0
  88. package/dist/runtime/agent.runtime.d.ts +218 -0
  89. package/dist/runtime/agent.runtime.d.ts.map +1 -0
  90. package/dist/runtime/agent.runtime.extensions.d.ts +49 -0
  91. package/dist/runtime/agent.runtime.extensions.d.ts.map +1 -0
  92. package/dist/runtime/agent.runtime.extensions.js +93 -0
  93. package/dist/runtime/agent.runtime.extensions.js.map +1 -0
  94. package/dist/runtime/agent.runtime.js +448 -0
  95. package/dist/runtime/agent.runtime.js.map +1 -0
  96. package/dist/state/agent-state.interface.d.ts +63 -0
  97. package/dist/state/agent-state.interface.d.ts.map +1 -0
  98. package/dist/state/agent-state.interface.js +7 -0
  99. package/dist/state/agent-state.interface.js.map +1 -0
  100. package/dist/state/agent.state.d.ts +67 -0
  101. package/dist/state/agent.state.d.ts.map +1 -0
  102. package/dist/state/agent.state.js +172 -0
  103. package/dist/state/agent.state.js.map +1 -0
  104. package/dist/state/database-state.manager.d.ts +63 -0
  105. package/dist/state/database-state.manager.d.ts.map +1 -0
  106. package/dist/state/database-state.manager.js +282 -0
  107. package/dist/state/database-state.manager.js.map +1 -0
  108. package/dist/state/redis-state.manager.d.ts +81 -0
  109. package/dist/state/redis-state.manager.d.ts.map +1 -0
  110. package/dist/state/redis-state.manager.js +253 -0
  111. package/dist/state/redis-state.manager.js.map +1 -0
  112. package/dist/supervisor/supervisor.d.ts +81 -0
  113. package/dist/supervisor/supervisor.d.ts.map +1 -0
  114. package/dist/supervisor/supervisor.js +220 -0
  115. package/dist/supervisor/supervisor.js.map +1 -0
  116. package/dist/types/agent.types.d.ts +166 -0
  117. package/dist/types/agent.types.d.ts.map +1 -0
  118. package/dist/types/agent.types.js +32 -0
  119. package/dist/types/agent.types.js.map +1 -0
  120. package/dist/types/event.types.d.ts +198 -0
  121. package/dist/types/event.types.d.ts.map +1 -0
  122. package/dist/types/event.types.js +46 -0
  123. package/dist/types/event.types.js.map +1 -0
  124. package/dist/types/llm.types.d.ts +66 -0
  125. package/dist/types/llm.types.d.ts.map +1 -0
  126. package/dist/types/llm.types.js +7 -0
  127. package/dist/types/llm.types.js.map +1 -0
  128. package/dist/types/rag.types.d.ts +40 -0
  129. package/dist/types/rag.types.d.ts.map +1 -0
  130. package/dist/types/rag.types.js +7 -0
  131. package/dist/types/rag.types.js.map +1 -0
  132. package/dist/types/tool.types.d.ts +118 -0
  133. package/dist/types/tool.types.d.ts.map +1 -0
  134. package/dist/types/tool.types.js +19 -0
  135. package/dist/types/tool.types.js.map +1 -0
  136. package/dist/utils/circuit-breaker.d.ts +9 -0
  137. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  138. package/dist/utils/circuit-breaker.js +16 -0
  139. package/dist/utils/circuit-breaker.js.map +1 -0
  140. package/dist/utils/health-check.d.ts +71 -0
  141. package/dist/utils/health-check.d.ts.map +1 -0
  142. package/dist/utils/health-check.js +156 -0
  143. package/dist/utils/health-check.js.map +1 -0
  144. package/dist/utils/logger.d.ts +53 -0
  145. package/dist/utils/logger.d.ts.map +1 -0
  146. package/dist/utils/logger.js +133 -0
  147. package/dist/utils/logger.js.map +1 -0
  148. package/dist/utils/metrics.d.ts +90 -0
  149. package/dist/utils/metrics.d.ts.map +1 -0
  150. package/dist/utils/metrics.js +186 -0
  151. package/dist/utils/metrics.js.map +1 -0
  152. package/dist/utils/rate-limiter.d.ts +44 -0
  153. package/dist/utils/rate-limiter.d.ts.map +1 -0
  154. package/dist/utils/rate-limiter.js +82 -0
  155. package/dist/utils/rate-limiter.js.map +1 -0
  156. package/dist/utils/retry.d.ts +42 -0
  157. package/dist/utils/retry.d.ts.map +1 -0
  158. package/dist/utils/retry.js +103 -0
  159. package/dist/utils/retry.js.map +1 -0
  160. package/jest.config.js +30 -0
  161. package/logs/combined.log +1 -0
  162. package/logs/error.log +0 -0
  163. package/package.json +74 -0
  164. package/prisma-schema.example.prisma +76 -0
  165. package/tests/setup.ts +17 -0
  166. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ /**
3
+ * Tool Executor
4
+ * Executes tools with approval workflow and error handling
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ToolExecutor = void 0;
8
+ const crypto_1 = require("crypto");
9
+ const tool_types_1 = require("../types/tool.types");
10
+ const event_types_1 = require("../types/event.types");
11
+ /**
12
+ * Tool Executor
13
+ * Handles tool execution with approval and retry logic
14
+ */
15
+ class ToolExecutor {
16
+ constructor(eventEmitter, guardrailsService) {
17
+ this.eventEmitter = eventEmitter;
18
+ this.guardrailsService = guardrailsService;
19
+ this.pendingApprovals = new Map();
20
+ this.executionContexts = new Map();
21
+ }
22
+ /**
23
+ * Execute a tool
24
+ */
25
+ async execute(tool, input, agentId, sessionId, userId) {
26
+ const executionId = (0, crypto_1.randomUUID)();
27
+ const startTime = Date.now();
28
+ const context = {
29
+ executionId,
30
+ toolName: tool.name,
31
+ agentId,
32
+ sessionId,
33
+ userId,
34
+ input,
35
+ status: tool_types_1.ToolExecutionStatus.PENDING,
36
+ startedAt: new Date(),
37
+ };
38
+ this.executionContexts.set(executionId, context);
39
+ this.emitEvent(event_types_1.AgentEventType.TOOL_EXECUTION_STARTED, {
40
+ toolName: tool.name,
41
+ input,
42
+ });
43
+ try {
44
+ if (this.guardrailsService) {
45
+ const inputResult = this.guardrailsService.checkInput(input);
46
+ if (!inputResult.allowed) {
47
+ context.status = tool_types_1.ToolExecutionStatus.FAILED;
48
+ context.completedAt = new Date();
49
+ context.duration = Date.now() - startTime;
50
+ this.emitEvent(event_types_1.AgentEventType.TOOL_EXECUTION_FAILED, {
51
+ toolName: tool.name,
52
+ input,
53
+ error: inputResult.blockedReason ?? 'Input blocked by guardrails',
54
+ duration: context.duration,
55
+ });
56
+ return {
57
+ success: false,
58
+ error: new Error(inputResult.blockedReason ?? 'Input blocked by guardrails'),
59
+ duration: context.duration,
60
+ };
61
+ }
62
+ if (inputResult.modified !== undefined) {
63
+ Object.assign(input, inputResult.modified);
64
+ }
65
+ }
66
+ if (tool.requiresApproval) {
67
+ const approved = await this.requestApproval(tool, input, agentId, executionId);
68
+ if (!approved) {
69
+ context.status = tool_types_1.ToolExecutionStatus.REJECTED;
70
+ this.emitEvent(event_types_1.AgentEventType.TOOL_APPROVAL_DENIED, {
71
+ requestId: executionId,
72
+ toolName: tool.name,
73
+ input,
74
+ });
75
+ return {
76
+ success: false,
77
+ error: new Error('Tool execution rejected by user'),
78
+ duration: Date.now() - startTime,
79
+ };
80
+ }
81
+ context.status = tool_types_1.ToolExecutionStatus.APPROVED;
82
+ this.emitEvent(event_types_1.AgentEventType.TOOL_APPROVAL_GRANTED, {
83
+ requestId: executionId,
84
+ toolName: tool.name,
85
+ input,
86
+ });
87
+ }
88
+ context.status = tool_types_1.ToolExecutionStatus.EXECUTING;
89
+ const result = await this.executeWithRetry(tool, input, tool.retries || 0);
90
+ context.status = tool_types_1.ToolExecutionStatus.COMPLETED;
91
+ context.completedAt = new Date();
92
+ context.duration = Date.now() - startTime;
93
+ this.emitEvent(event_types_1.AgentEventType.TOOL_EXECUTION_COMPLETED, {
94
+ toolName: tool.name,
95
+ input,
96
+ output: result,
97
+ duration: context.duration,
98
+ });
99
+ return {
100
+ success: true,
101
+ output: result,
102
+ duration: context.duration,
103
+ };
104
+ }
105
+ catch (error) {
106
+ context.status = tool_types_1.ToolExecutionStatus.FAILED;
107
+ context.completedAt = new Date();
108
+ context.duration = Date.now() - startTime;
109
+ this.emitEvent(event_types_1.AgentEventType.TOOL_EXECUTION_FAILED, {
110
+ toolName: tool.name,
111
+ input,
112
+ error: error.message,
113
+ duration: context.duration,
114
+ });
115
+ return {
116
+ success: false,
117
+ error: error,
118
+ duration: context.duration,
119
+ };
120
+ }
121
+ finally {
122
+ this.executionContexts.delete(executionId);
123
+ }
124
+ }
125
+ /**
126
+ * Execute tool with retry logic
127
+ */
128
+ async executeWithRetry(tool, input, maxRetries) {
129
+ let lastError;
130
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
131
+ try {
132
+ const timeout = tool.timeout || 30000;
133
+ const result = await this.executeWithTimeout(tool, input, timeout);
134
+ return result;
135
+ }
136
+ catch (error) {
137
+ lastError = error;
138
+ if (attempt < maxRetries) {
139
+ await this.delay(Math.pow(2, attempt) * 1000);
140
+ }
141
+ }
142
+ }
143
+ throw lastError;
144
+ }
145
+ /**
146
+ * Execute tool with timeout
147
+ */
148
+ async executeWithTimeout(tool, input, timeout) {
149
+ let timeoutId;
150
+ try {
151
+ const result = await Promise.race([
152
+ tool.method.call(tool.target, input),
153
+ new Promise((_, reject) => {
154
+ timeoutId = setTimeout(() => reject(new Error(`Tool execution timeout after ${timeout}ms`)), timeout);
155
+ }),
156
+ ]);
157
+ if (this.guardrailsService && result !== undefined && result !== null) {
158
+ const outputResult = this.guardrailsService.checkOutput(result);
159
+ if (!outputResult.allowed) {
160
+ throw new Error(outputResult.blockedReason ?? 'Output blocked by guardrails');
161
+ }
162
+ return outputResult.modified ?? result;
163
+ }
164
+ return result;
165
+ }
166
+ finally {
167
+ if (timeoutId) {
168
+ clearTimeout(timeoutId);
169
+ }
170
+ }
171
+ }
172
+ /**
173
+ * Request approval for tool execution
174
+ */
175
+ async requestApproval(tool, input, agentId, executionId) {
176
+ const requestId = (0, crypto_1.randomUUID)();
177
+ const request = {
178
+ requestId,
179
+ executionId,
180
+ toolName: tool.name,
181
+ agentId,
182
+ input,
183
+ requestedAt: new Date(),
184
+ expiresAt: new Date(Date.now() + 300000),
185
+ };
186
+ this.pendingApprovals.set(requestId, request);
187
+ this.emitEvent(event_types_1.AgentEventType.TOOL_APPROVAL_REQUESTED, {
188
+ requestId,
189
+ toolName: tool.name,
190
+ input,
191
+ });
192
+ return new Promise((resolve) => {
193
+ const checkInterval = setInterval(() => {
194
+ const req = this.pendingApprovals.get(requestId);
195
+ if (!req) {
196
+ // Request was removed unexpectedly
197
+ clearInterval(checkInterval);
198
+ resolve(false);
199
+ return;
200
+ }
201
+ // Check if approved
202
+ if (req.status === 'approved') {
203
+ this.pendingApprovals.delete(requestId);
204
+ clearInterval(checkInterval);
205
+ resolve(true);
206
+ return;
207
+ }
208
+ // Check if rejected
209
+ if (req.status === 'rejected') {
210
+ this.pendingApprovals.delete(requestId);
211
+ clearInterval(checkInterval);
212
+ resolve(false);
213
+ return;
214
+ }
215
+ // Check if expired
216
+ if (req.expiresAt && req.expiresAt < new Date()) {
217
+ this.pendingApprovals.delete(requestId);
218
+ clearInterval(checkInterval);
219
+ resolve(false);
220
+ }
221
+ }, 1000);
222
+ });
223
+ }
224
+ /**
225
+ * Approve a tool execution
226
+ */
227
+ approveExecution(requestId, approvedBy) {
228
+ const request = this.pendingApprovals.get(requestId);
229
+ if (request) {
230
+ request.status =
231
+ 'approved';
232
+ request.approvedBy = approvedBy;
233
+ }
234
+ }
235
+ /**
236
+ * Reject a tool execution
237
+ */
238
+ rejectExecution(requestId) {
239
+ const request = this.pendingApprovals.get(requestId);
240
+ if (request) {
241
+ request.status = 'rejected';
242
+ }
243
+ }
244
+ /**
245
+ * Get pending approval requests
246
+ */
247
+ getPendingApprovals() {
248
+ return Array.from(this.pendingApprovals.values());
249
+ }
250
+ /**
251
+ * Emit event
252
+ */
253
+ emitEvent(type, data) {
254
+ if (this.eventEmitter) {
255
+ this.eventEmitter(type, data);
256
+ }
257
+ }
258
+ /**
259
+ * Delay helper
260
+ */
261
+ delay(ms) {
262
+ return new Promise((resolve) => setTimeout(resolve, ms));
263
+ }
264
+ }
265
+ exports.ToolExecutor = ToolExecutor;
266
+ //# sourceMappingURL=tool.executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.executor.js","sourceRoot":"","sources":["../../src/executor/tool.executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * AgentGraph — Multi-Agent Orchestration Graph
3
+ *
4
+ * Provides a LangGraph-inspired DAG runtime for orchestrating multiple agents.
5
+ * Supports sequential pipelines, conditional routing, and parallel fan-out/fan-in.
6
+ *
7
+ * @example Sequential pipeline
8
+ * ```ts
9
+ * const graph = runtime.createGraph('pipeline')
10
+ * .addNode('researcher', { type: 'agent', agentName: 'ResearchAgent' })
11
+ * .addNode('writer', { type: 'agent', agentName: 'WriterAgent' })
12
+ * .addEdge('researcher', 'writer')
13
+ * .addEdge('writer', END)
14
+ * .setEntryPoint('researcher')
15
+ * .compile();
16
+ *
17
+ * const result = await graph.execute('Write a blog about LLMs');
18
+ * ```
19
+ *
20
+ * @example Conditional routing
21
+ * ```ts
22
+ * const graph = runtime.createGraph('router')
23
+ * .addNode('classifier', { type: 'agent', agentName: 'ClassifierAgent' })
24
+ * .addNode('coder', { type: 'agent', agentName: 'CoderAgent' })
25
+ * .addNode('writer', { type: 'agent', agentName: 'WriterAgent' })
26
+ * .setEntryPoint('classifier')
27
+ * .addConditionalEdge('classifier', state => state.data.type === 'code' ? 'coder' : 'writer')
28
+ * .addEdge('coder', END)
29
+ * .addEdge('writer', END)
30
+ * .compile();
31
+ * ```
32
+ *
33
+ * @example Parallel fan-out / fan-in
34
+ * ```ts
35
+ * const graph = runtime.createGraph('parallel')
36
+ * .addNode('splitter', { type: 'function', fn: splitTask })
37
+ * .addNode('parallel-1', { type: 'parallel', branches: ['agent-a', 'agent-b'] })
38
+ * .addNode('agent-a', { type: 'agent', agentName: 'AgentA' })
39
+ * .addNode('agent-b', { type: 'agent', agentName: 'AgentB' })
40
+ * .addNode('combiner', { type: 'function', fn: combineResults })
41
+ * .addEdge('splitter', 'parallel-1')
42
+ * .addEdge('parallel-1', 'combiner')
43
+ * .addEdge('combiner', END)
44
+ * .setEntryPoint('splitter')
45
+ * .compile();
46
+ * ```
47
+ */
48
+ import { GraphNode, GraphNodeConfig, GraphEdge, RouterFunction, GraphExecutionOptions, GraphExecutionResult, GraphStreamChunk } from './agent-graph.types';
49
+ import { AgentExecutionResult } from '../types/agent.types';
50
+ interface RuntimeLike {
51
+ execute(agentName: string, input: string, options?: Record<string, unknown>): Promise<AgentExecutionResult>;
52
+ getAgentMetadata(agentName: string): {
53
+ description?: string;
54
+ } | undefined;
55
+ }
56
+ /**
57
+ * Fluent builder for constructing a multi-agent graph.
58
+ * Call `.compile()` to get an executable `CompiledGraph`.
59
+ */
60
+ export declare class AgentGraph {
61
+ private readonly graphId;
62
+ private readonly runtime;
63
+ private readonly nodes;
64
+ private readonly edges;
65
+ private entryPoint?;
66
+ constructor(graphId: string, runtime: RuntimeLike);
67
+ /**
68
+ * Add a node to the graph.
69
+ *
70
+ * Node types:
71
+ * - `'agent'` — runs a named agent via AgentRuntime
72
+ * - `'function'` — runs an arbitrary async function
73
+ * - `'parallel'` — fans-out to multiple child nodes concurrently
74
+ */
75
+ addNode(id: string, config: GraphNodeConfig): this;
76
+ /**
77
+ * Add an unconditional directed edge from `from` → `to`.
78
+ * Use `END` as the target to terminate the graph.
79
+ */
80
+ addEdge(from: string, to: string): this;
81
+ /**
82
+ * Add a conditional edge from `from`.
83
+ * The `routerFn` inspects the current `GraphState` and returns the ID of
84
+ * the next node (or `END` to stop).
85
+ *
86
+ * @param routeMap Optional mapping of routerFn return values to node IDs,
87
+ * so you can use short keys like `'code'` → `'CoderNode'`.
88
+ */
89
+ addConditionalEdge(from: string, routerFn: RouterFunction, routeMap?: Record<string, string>): this;
90
+ /** Set the node where graph execution begins */
91
+ setEntryPoint(nodeId: string): this;
92
+ /**
93
+ * Validate the graph and return an executable `CompiledGraph`.
94
+ * Throws if the graph is malformed (missing entry point, dangling edges, etc.)
95
+ */
96
+ compile(): CompiledGraph;
97
+ }
98
+ /**
99
+ * Executable graph produced by `AgentGraph.compile()`.
100
+ */
101
+ export declare class CompiledGraph {
102
+ private readonly graphId;
103
+ private readonly nodes;
104
+ private readonly edges;
105
+ private readonly entryPoint;
106
+ private readonly runtime;
107
+ constructor(graphId: string, nodes: Map<string, GraphNode>, edges: GraphEdge[], entryPoint: string, runtime: RuntimeLike);
108
+ /**
109
+ * Execute the graph synchronously (collects all results before returning).
110
+ */
111
+ execute(input: string, options?: GraphExecutionOptions): Promise<GraphExecutionResult>;
112
+ /**
113
+ * Execute the graph and yield a `GraphStreamChunk` after each node completes.
114
+ * Useful for streaming progress updates to the client in real-time.
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * for await (const chunk of graph.stream('Research LLMs')) {
119
+ * console.log(`[${chunk.nodeId}]`, chunk.chunk);
120
+ * }
121
+ * ```
122
+ */
123
+ stream(input: string, options?: GraphExecutionOptions): AsyncGenerator<GraphStreamChunk>;
124
+ private executeNode;
125
+ private executeParallelBranches;
126
+ private defaultMerge;
127
+ private resolveNextNode;
128
+ private applyPatch;
129
+ }
130
+ export {};
131
+ //# sourceMappingURL=agent-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-graph.d.ts","sourceRoot":"","sources":["../../src/graph/agent-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAGH,OAAO,EAGL,SAAS,EACT,eAAe,EACf,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EAEpB,gBAAgB,EAGjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAI5D,UAAU,WAAW;IACnB,OAAO,CACL,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACjC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC3E;AAMD;;;GAGG;AACH,qBAAa,UAAU;IAMnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,UAAU,CAAC,CAAS;gBAGT,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW;IAUvC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAelD;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAKvC;;;;;;;OAOG;IACH,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,cAAc,EACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,IAAI;IAYP,gDAAgD;IAChD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASnC;;;OAGG;IACH,OAAO,IAAI,aAAa;CAyCzB;AAMD;;GAEG;AACH,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAJP,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC7B,KAAK,EAAE,SAAS,EAAE,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW;IAOvC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmGhG;;;;;;;;;;OAUG;IACI,MAAM,CACX,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAAC,gBAAgB,CAAC;YA+ErB,WAAW;YAyEX,uBAAuB;IAqBrC,OAAO,CAAC,YAAY;IAmCpB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,UAAU;CAUnB"}