@hazeljs/agent 0.2.2 → 0.2.3
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/coverage/clover.xml +389 -213
- package/coverage/lcov-report/index.html +39 -39
- package/coverage/lcov.info +581 -313
- package/dist/executor/agent.executor.d.ts +5 -0
- package/dist/executor/agent.executor.d.ts.map +1 -1
- package/dist/executor/agent.executor.js +139 -0
- package/dist/executor/agent.executor.js.map +1 -1
- package/dist/executor/agent.executor.streaming.d.ts +13 -0
- package/dist/executor/agent.executor.streaming.d.ts.map +1 -0
- package/dist/executor/agent.executor.streaming.js +103 -0
- package/dist/executor/agent.executor.streaming.js.map +1 -0
- package/dist/types/streaming.types.d.ts +117 -0
- package/dist/types/streaming.types.d.ts.map +1 -0
- package/dist/types/streaming.types.js +7 -0
- package/dist/types/streaming.types.js.map +1 -0
- package/dist/utils/__tests__/streaming.utils.test.d.ts +2 -0
- package/dist/utils/__tests__/streaming.utils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/streaming.utils.test.js +282 -0
- package/dist/utils/__tests__/streaming.utils.test.js.map +1 -0
- package/dist/utils/streaming.utils.d.ts +54 -0
- package/dist/utils/streaming.utils.d.ts.map +1 -0
- package/dist/utils/streaming.utils.js +180 -0
- package/dist/utils/streaming.utils.js.map +1 -0
- package/logs/combined.log +1 -1
- package/package.json +6 -6
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const streaming_utils_1 = require("../streaming.utils");
|
|
4
|
+
const agent_types_1 = require("../../types/agent.types");
|
|
5
|
+
describe('Streaming Utils', () => {
|
|
6
|
+
describe('collectTokens', () => {
|
|
7
|
+
it('should collect all tokens from a stream', async () => {
|
|
8
|
+
async function* mockStream() {
|
|
9
|
+
yield { type: 'token', content: 'Hello' };
|
|
10
|
+
yield { type: 'token', content: ' World' };
|
|
11
|
+
}
|
|
12
|
+
const result = await (0, streaming_utils_1.collectTokens)(mockStream());
|
|
13
|
+
expect(result).toBe('Hello World');
|
|
14
|
+
});
|
|
15
|
+
it('should handle empty stream', async () => {
|
|
16
|
+
async function* mockStream() {
|
|
17
|
+
// Empty
|
|
18
|
+
}
|
|
19
|
+
const result = await (0, streaming_utils_1.collectTokens)(mockStream());
|
|
20
|
+
expect(result).toBe('');
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('bufferTokens', () => {
|
|
24
|
+
it('should buffer tokens', async () => {
|
|
25
|
+
async function* mockStream() {
|
|
26
|
+
yield { type: 'token', content: 'a' };
|
|
27
|
+
yield { type: 'token', content: 'b' };
|
|
28
|
+
yield { type: 'token', content: 'c' };
|
|
29
|
+
}
|
|
30
|
+
const results = [];
|
|
31
|
+
for await (const chunk of (0, streaming_utils_1.bufferTokens)(mockStream(), 2)) {
|
|
32
|
+
results.push(chunk);
|
|
33
|
+
}
|
|
34
|
+
expect(results.length).toBeGreaterThan(0);
|
|
35
|
+
});
|
|
36
|
+
it('should pass through non-token chunks', async () => {
|
|
37
|
+
async function* mockStream() {
|
|
38
|
+
yield { type: 'token', content: 'a' };
|
|
39
|
+
yield {
|
|
40
|
+
type: 'step',
|
|
41
|
+
step: {
|
|
42
|
+
id: '1',
|
|
43
|
+
agentId: 'test',
|
|
44
|
+
executionId: 'exec1',
|
|
45
|
+
stepNumber: 1,
|
|
46
|
+
state: agent_types_1.AgentState.THINKING,
|
|
47
|
+
timestamp: new Date(),
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const results = [];
|
|
52
|
+
for await (const chunk of (0, streaming_utils_1.bufferTokens)(mockStream(), 5)) {
|
|
53
|
+
results.push(chunk);
|
|
54
|
+
}
|
|
55
|
+
expect(results.some((c) => c.type === 'step')).toBe(true);
|
|
56
|
+
});
|
|
57
|
+
it('should flush remaining tokens when buffer not full', async () => {
|
|
58
|
+
async function* mockStream() {
|
|
59
|
+
yield { type: 'token', content: 'a' };
|
|
60
|
+
yield { type: 'token', content: 'b' };
|
|
61
|
+
}
|
|
62
|
+
const results = [];
|
|
63
|
+
for await (const chunk of (0, streaming_utils_1.bufferTokens)(mockStream(), 10)) {
|
|
64
|
+
results.push(chunk);
|
|
65
|
+
}
|
|
66
|
+
expect(results.length).toBe(1);
|
|
67
|
+
expect(results[0].type).toBe('token');
|
|
68
|
+
if (results[0].type === 'token') {
|
|
69
|
+
expect(results[0].content).toBe('ab');
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
it('should handle mixed token and non-token chunks', async () => {
|
|
73
|
+
async function* mockStream() {
|
|
74
|
+
yield { type: 'token', content: 'a' };
|
|
75
|
+
yield {
|
|
76
|
+
type: 'done',
|
|
77
|
+
result: { state: agent_types_1.AgentState.COMPLETED, duration: 100, response: 'done' },
|
|
78
|
+
};
|
|
79
|
+
yield { type: 'token', content: 'b' };
|
|
80
|
+
}
|
|
81
|
+
const results = [];
|
|
82
|
+
for await (const chunk of (0, streaming_utils_1.bufferTokens)(mockStream(), 5)) {
|
|
83
|
+
results.push(chunk);
|
|
84
|
+
}
|
|
85
|
+
expect(results.some((c) => c.type === 'done')).toBe(true);
|
|
86
|
+
expect(results.some((c) => c.type === 'token')).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('StreamingProgressTracker', () => {
|
|
90
|
+
it('should track token updates', () => {
|
|
91
|
+
const tracker = new streaming_utils_1.StreamingProgressTracker(5);
|
|
92
|
+
tracker.update({ type: 'token', content: 'test' });
|
|
93
|
+
const progress = tracker.getProgress();
|
|
94
|
+
expect(progress.tokensGenerated).toBe(1);
|
|
95
|
+
});
|
|
96
|
+
it('should track step updates', () => {
|
|
97
|
+
const tracker = new streaming_utils_1.StreamingProgressTracker(3);
|
|
98
|
+
tracker.update({
|
|
99
|
+
type: 'step',
|
|
100
|
+
step: {
|
|
101
|
+
id: '1',
|
|
102
|
+
agentId: 'test',
|
|
103
|
+
executionId: 'exec1',
|
|
104
|
+
stepNumber: 1,
|
|
105
|
+
state: agent_types_1.AgentState.COMPLETED,
|
|
106
|
+
timestamp: new Date(),
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
const progress = tracker.getProgress();
|
|
110
|
+
expect(progress.currentStep).toBe(1);
|
|
111
|
+
});
|
|
112
|
+
it('should track tool calls', () => {
|
|
113
|
+
const tracker = new streaming_utils_1.StreamingProgressTracker(3);
|
|
114
|
+
tracker.update({
|
|
115
|
+
type: 'step',
|
|
116
|
+
step: {
|
|
117
|
+
id: '1',
|
|
118
|
+
agentId: 'test',
|
|
119
|
+
executionId: 'exec1',
|
|
120
|
+
stepNumber: 1,
|
|
121
|
+
state: agent_types_1.AgentState.COMPLETED,
|
|
122
|
+
timestamp: new Date(),
|
|
123
|
+
action: {
|
|
124
|
+
type: agent_types_1.AgentActionType.USE_TOOL,
|
|
125
|
+
toolName: 'testTool',
|
|
126
|
+
toolInput: {},
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
const progress = tracker.getProgress();
|
|
131
|
+
expect(progress.toolsCalled).toBe(1);
|
|
132
|
+
});
|
|
133
|
+
it('should reset tracker', () => {
|
|
134
|
+
const tracker = new streaming_utils_1.StreamingProgressTracker(5);
|
|
135
|
+
tracker.update({ type: 'token', content: 'test' });
|
|
136
|
+
tracker.reset();
|
|
137
|
+
const progress = tracker.getProgress();
|
|
138
|
+
expect(progress.tokensGenerated).toBe(0);
|
|
139
|
+
});
|
|
140
|
+
it('should calculate elapsed time', () => {
|
|
141
|
+
const tracker = new streaming_utils_1.StreamingProgressTracker(5);
|
|
142
|
+
const progress = tracker.getProgress();
|
|
143
|
+
expect(progress.elapsedTime).toBeGreaterThanOrEqual(0);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
describe('StreamingEventEmitter', () => {
|
|
147
|
+
it('should register and call handlers', async () => {
|
|
148
|
+
const emitter = new streaming_utils_1.StreamingEventEmitter();
|
|
149
|
+
const handler = jest.fn();
|
|
150
|
+
emitter.on('token', handler);
|
|
151
|
+
async function* mockStream() {
|
|
152
|
+
yield { type: 'token', content: 'test' };
|
|
153
|
+
}
|
|
154
|
+
await emitter.process(mockStream());
|
|
155
|
+
expect(handler).toHaveBeenCalledTimes(1);
|
|
156
|
+
});
|
|
157
|
+
it('should handle multiple handlers', async () => {
|
|
158
|
+
const emitter = new streaming_utils_1.StreamingEventEmitter();
|
|
159
|
+
const handler1 = jest.fn();
|
|
160
|
+
const handler2 = jest.fn();
|
|
161
|
+
emitter.on('token', handler1);
|
|
162
|
+
emitter.on('token', handler2);
|
|
163
|
+
async function* mockStream() {
|
|
164
|
+
yield { type: 'token', content: 'test' };
|
|
165
|
+
}
|
|
166
|
+
await emitter.process(mockStream());
|
|
167
|
+
expect(handler1).toHaveBeenCalledTimes(1);
|
|
168
|
+
expect(handler2).toHaveBeenCalledTimes(1);
|
|
169
|
+
});
|
|
170
|
+
it('should only call matching handlers', async () => {
|
|
171
|
+
const emitter = new streaming_utils_1.StreamingEventEmitter();
|
|
172
|
+
const tokenHandler = jest.fn();
|
|
173
|
+
const stepHandler = jest.fn();
|
|
174
|
+
emitter.on('token', tokenHandler);
|
|
175
|
+
emitter.on('step', stepHandler);
|
|
176
|
+
async function* mockStream() {
|
|
177
|
+
yield { type: 'token', content: 'test' };
|
|
178
|
+
}
|
|
179
|
+
await emitter.process(mockStream());
|
|
180
|
+
expect(tokenHandler).toHaveBeenCalledTimes(1);
|
|
181
|
+
expect(stepHandler).not.toHaveBeenCalled();
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe('filterChunks', () => {
|
|
185
|
+
it('should filter chunks by type', async () => {
|
|
186
|
+
async function* mockStream() {
|
|
187
|
+
yield { type: 'token', content: 'a' };
|
|
188
|
+
yield { type: 'step', step: {} };
|
|
189
|
+
yield { type: 'token', content: 'b' };
|
|
190
|
+
}
|
|
191
|
+
const results = [];
|
|
192
|
+
for await (const chunk of (0, streaming_utils_1.filterChunks)(mockStream(), ['token'])) {
|
|
193
|
+
results.push(chunk);
|
|
194
|
+
}
|
|
195
|
+
expect(results.length).toBe(2);
|
|
196
|
+
expect(results.every((c) => c.type === 'token')).toBe(true);
|
|
197
|
+
});
|
|
198
|
+
it('should handle empty filter', async () => {
|
|
199
|
+
async function* mockStream() {
|
|
200
|
+
yield { type: 'token', content: 'a' };
|
|
201
|
+
}
|
|
202
|
+
const results = [];
|
|
203
|
+
for await (const chunk of (0, streaming_utils_1.filterChunks)(mockStream(), [])) {
|
|
204
|
+
results.push(chunk);
|
|
205
|
+
}
|
|
206
|
+
expect(results.length).toBe(0);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('transformStream', () => {
|
|
210
|
+
it('should transform chunks', async () => {
|
|
211
|
+
async function* mockStream() {
|
|
212
|
+
yield { type: 'token', content: 'hello' };
|
|
213
|
+
yield { type: 'token', content: 'world' };
|
|
214
|
+
}
|
|
215
|
+
const results = [];
|
|
216
|
+
for await (const transformed of (0, streaming_utils_1.transformStream)(mockStream(), (chunk) => chunk.type === 'token' ? chunk.content.toUpperCase() : null)) {
|
|
217
|
+
results.push(transformed);
|
|
218
|
+
}
|
|
219
|
+
expect(results).toEqual(['HELLO', 'WORLD']);
|
|
220
|
+
});
|
|
221
|
+
it('should filter out null transforms', async () => {
|
|
222
|
+
async function* mockStream() {
|
|
223
|
+
yield { type: 'token', content: 'a' };
|
|
224
|
+
yield { type: 'step', step: {} };
|
|
225
|
+
}
|
|
226
|
+
const results = [];
|
|
227
|
+
for await (const transformed of (0, streaming_utils_1.transformStream)(mockStream(), (chunk) => chunk.type === 'token' ? chunk.content : null)) {
|
|
228
|
+
results.push(transformed);
|
|
229
|
+
}
|
|
230
|
+
expect(results).toEqual(['a']);
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
describe('ConsoleStreamFormatter', () => {
|
|
234
|
+
it('should format token chunks', () => {
|
|
235
|
+
const formatter = new streaming_utils_1.ConsoleStreamFormatter();
|
|
236
|
+
const result = formatter.format({ type: 'token', content: 'Hello' });
|
|
237
|
+
expect(result).toBe('Hello');
|
|
238
|
+
});
|
|
239
|
+
it('should format step chunks', () => {
|
|
240
|
+
const formatter = new streaming_utils_1.ConsoleStreamFormatter();
|
|
241
|
+
const result = formatter.format({
|
|
242
|
+
type: 'step',
|
|
243
|
+
step: {
|
|
244
|
+
id: '1',
|
|
245
|
+
agentId: 'test',
|
|
246
|
+
executionId: 'exec1',
|
|
247
|
+
stepNumber: 1,
|
|
248
|
+
state: agent_types_1.AgentState.THINKING,
|
|
249
|
+
timestamp: new Date(),
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
expect(result).toContain('[Step 1]');
|
|
253
|
+
expect(result).toContain('thinking');
|
|
254
|
+
});
|
|
255
|
+
it('should format done chunks', () => {
|
|
256
|
+
const formatter = new streaming_utils_1.ConsoleStreamFormatter();
|
|
257
|
+
const result = formatter.format({
|
|
258
|
+
type: 'done',
|
|
259
|
+
result: {
|
|
260
|
+
state: agent_types_1.AgentState.COMPLETED,
|
|
261
|
+
duration: 1500,
|
|
262
|
+
response: 'test',
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
expect(result).toContain('Complete');
|
|
266
|
+
expect(result).toContain('1500ms');
|
|
267
|
+
});
|
|
268
|
+
it('should return null for unknown types', () => {
|
|
269
|
+
const formatter = new streaming_utils_1.ConsoleStreamFormatter();
|
|
270
|
+
const result = formatter.format({ type: 'unknown' });
|
|
271
|
+
expect(result).toBeNull();
|
|
272
|
+
});
|
|
273
|
+
it('should reset formatter', () => {
|
|
274
|
+
const formatter = new streaming_utils_1.ConsoleStreamFormatter();
|
|
275
|
+
formatter.format({ type: 'token', content: 'test' });
|
|
276
|
+
formatter.reset();
|
|
277
|
+
expect(formatter['currentLine']).toBe('');
|
|
278
|
+
expect(formatter['stepCount']).toBe(0);
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
//# sourceMappingURL=streaming.utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.utils.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/streaming.utils.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming Utilities for Agent Runtime
|
|
3
|
+
* Helper functions for working with agent streaming
|
|
4
|
+
*/
|
|
5
|
+
import { AgentStreamChunk } from '../types/agent.types';
|
|
6
|
+
import { StreamingProgress } from '../types/streaming.types';
|
|
7
|
+
/**
|
|
8
|
+
* Collect all tokens from a stream into a single string
|
|
9
|
+
*/
|
|
10
|
+
export declare function collectTokens(stream: AsyncIterable<AgentStreamChunk>): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Buffer tokens and yield them in batches for reduced network overhead
|
|
13
|
+
*/
|
|
14
|
+
export declare function bufferTokens(stream: AsyncIterable<AgentStreamChunk>, bufferSize?: number): AsyncGenerator<AgentStreamChunk>;
|
|
15
|
+
/**
|
|
16
|
+
* Filter stream to only include specific chunk types
|
|
17
|
+
*/
|
|
18
|
+
export declare function filterChunks(stream: AsyncIterable<AgentStreamChunk>, types: AgentStreamChunk['type'][]): AsyncGenerator<AgentStreamChunk>;
|
|
19
|
+
/**
|
|
20
|
+
* Transform stream chunks with a custom function
|
|
21
|
+
*/
|
|
22
|
+
export declare function transformStream<T>(stream: AsyncIterable<AgentStreamChunk>, transform: (chunk: AgentStreamChunk) => T | null): AsyncGenerator<T>;
|
|
23
|
+
/**
|
|
24
|
+
* Create a progress tracker for streaming execution
|
|
25
|
+
*/
|
|
26
|
+
export declare class StreamingProgressTracker {
|
|
27
|
+
private startTime;
|
|
28
|
+
private stepCount;
|
|
29
|
+
private tokenCount;
|
|
30
|
+
private toolCallCount;
|
|
31
|
+
private maxSteps;
|
|
32
|
+
constructor(maxSteps?: number);
|
|
33
|
+
update(chunk: AgentStreamChunk): void;
|
|
34
|
+
getProgress(): StreamingProgress;
|
|
35
|
+
reset(): void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a streaming event emitter for easier event handling
|
|
39
|
+
*/
|
|
40
|
+
export declare class StreamingEventEmitter {
|
|
41
|
+
private handlers;
|
|
42
|
+
on(type: AgentStreamChunk['type'], handler: (chunk: AgentStreamChunk) => void): void;
|
|
43
|
+
process(stream: AsyncIterable<AgentStreamChunk>): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Format streaming output for console display
|
|
47
|
+
*/
|
|
48
|
+
export declare class ConsoleStreamFormatter {
|
|
49
|
+
private currentLine;
|
|
50
|
+
private stepCount;
|
|
51
|
+
format(chunk: AgentStreamChunk): string | null;
|
|
52
|
+
reset(): void;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=streaming.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.utils.d.ts","sourceRoot":"","sources":["../../src/utils/streaming.utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAU5F;AAED;;GAEG;AACH,wBAAuB,YAAY,CACjC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,EACvC,UAAU,GAAE,MAAU,GACrB,cAAc,CAAC,gBAAgB,CAAC,CAmClC;AAED;;GAEG;AACH,wBAAuB,YAAY,CACjC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,EACvC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,GAChC,cAAc,CAAC,gBAAgB,CAAC,CAMlC;AAED;;GAEG;AACH,wBAAuB,eAAe,CAAC,CAAC,EACtC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,EACvC,SAAS,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,CAAC,GAAG,IAAI,GAC/C,cAAc,CAAC,CAAC,CAAC,CAOnB;AAED;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,GAAE,MAAW;IAKjC,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAcrC,WAAW,IAAI,iBAAiB;IAgBhC,KAAK,IAAI,IAAI;CAMd;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CACJ;IAEZ,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI;IAO9E,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAUtE;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,SAAS,CAAK;IAEtB,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI;IAkB9C,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Streaming Utilities for Agent Runtime
|
|
4
|
+
* Helper functions for working with agent streaming
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ConsoleStreamFormatter = exports.StreamingEventEmitter = exports.StreamingProgressTracker = void 0;
|
|
8
|
+
exports.collectTokens = collectTokens;
|
|
9
|
+
exports.bufferTokens = bufferTokens;
|
|
10
|
+
exports.filterChunks = filterChunks;
|
|
11
|
+
exports.transformStream = transformStream;
|
|
12
|
+
/**
|
|
13
|
+
* Collect all tokens from a stream into a single string
|
|
14
|
+
*/
|
|
15
|
+
async function collectTokens(stream) {
|
|
16
|
+
let result = '';
|
|
17
|
+
for await (const chunk of stream) {
|
|
18
|
+
if (chunk.type === 'token') {
|
|
19
|
+
result += chunk.content;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Buffer tokens and yield them in batches for reduced network overhead
|
|
26
|
+
*/
|
|
27
|
+
async function* bufferTokens(stream, bufferSize = 5) {
|
|
28
|
+
let tokenBuffer = [];
|
|
29
|
+
for await (const chunk of stream) {
|
|
30
|
+
if (chunk.type === 'token') {
|
|
31
|
+
tokenBuffer.push(chunk.content);
|
|
32
|
+
if (tokenBuffer.length >= bufferSize) {
|
|
33
|
+
yield {
|
|
34
|
+
type: 'token',
|
|
35
|
+
content: tokenBuffer.join(''),
|
|
36
|
+
};
|
|
37
|
+
tokenBuffer = [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// Flush any buffered tokens first
|
|
42
|
+
if (tokenBuffer.length > 0) {
|
|
43
|
+
yield {
|
|
44
|
+
type: 'token',
|
|
45
|
+
content: tokenBuffer.join(''),
|
|
46
|
+
};
|
|
47
|
+
tokenBuffer = [];
|
|
48
|
+
}
|
|
49
|
+
yield chunk;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Flush remaining tokens
|
|
53
|
+
if (tokenBuffer.length > 0) {
|
|
54
|
+
yield {
|
|
55
|
+
type: 'token',
|
|
56
|
+
content: tokenBuffer.join(''),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Filter stream to only include specific chunk types
|
|
62
|
+
*/
|
|
63
|
+
async function* filterChunks(stream, types) {
|
|
64
|
+
for await (const chunk of stream) {
|
|
65
|
+
if (types.includes(chunk.type)) {
|
|
66
|
+
yield chunk;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Transform stream chunks with a custom function
|
|
72
|
+
*/
|
|
73
|
+
async function* transformStream(stream, transform) {
|
|
74
|
+
for await (const chunk of stream) {
|
|
75
|
+
const transformed = transform(chunk);
|
|
76
|
+
if (transformed !== null) {
|
|
77
|
+
yield transformed;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create a progress tracker for streaming execution
|
|
83
|
+
*/
|
|
84
|
+
class StreamingProgressTracker {
|
|
85
|
+
constructor(maxSteps = 10) {
|
|
86
|
+
this.stepCount = 0;
|
|
87
|
+
this.tokenCount = 0;
|
|
88
|
+
this.toolCallCount = 0;
|
|
89
|
+
this.startTime = Date.now();
|
|
90
|
+
this.maxSteps = maxSteps;
|
|
91
|
+
}
|
|
92
|
+
update(chunk) {
|
|
93
|
+
switch (chunk.type) {
|
|
94
|
+
case 'step':
|
|
95
|
+
this.stepCount++;
|
|
96
|
+
if (chunk.step.action?.toolName) {
|
|
97
|
+
this.toolCallCount++;
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
case 'token':
|
|
101
|
+
this.tokenCount++;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
getProgress() {
|
|
106
|
+
const elapsed = Date.now() - this.startTime;
|
|
107
|
+
const progress = this.stepCount / this.maxSteps;
|
|
108
|
+
const estimatedTotal = progress > 0 ? elapsed / progress : undefined;
|
|
109
|
+
const estimatedRemaining = estimatedTotal ? estimatedTotal - elapsed : undefined;
|
|
110
|
+
return {
|
|
111
|
+
currentStep: this.stepCount,
|
|
112
|
+
maxSteps: this.maxSteps,
|
|
113
|
+
elapsedTime: elapsed,
|
|
114
|
+
estimatedTimeRemaining: estimatedRemaining,
|
|
115
|
+
tokensGenerated: this.tokenCount,
|
|
116
|
+
toolsCalled: this.toolCallCount,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
reset() {
|
|
120
|
+
this.startTime = Date.now();
|
|
121
|
+
this.stepCount = 0;
|
|
122
|
+
this.tokenCount = 0;
|
|
123
|
+
this.toolCallCount = 0;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.StreamingProgressTracker = StreamingProgressTracker;
|
|
127
|
+
/**
|
|
128
|
+
* Create a streaming event emitter for easier event handling
|
|
129
|
+
*/
|
|
130
|
+
class StreamingEventEmitter {
|
|
131
|
+
constructor() {
|
|
132
|
+
this.handlers = new Map();
|
|
133
|
+
}
|
|
134
|
+
on(type, handler) {
|
|
135
|
+
if (!this.handlers.has(type)) {
|
|
136
|
+
this.handlers.set(type, []);
|
|
137
|
+
}
|
|
138
|
+
this.handlers.get(type).push(handler);
|
|
139
|
+
}
|
|
140
|
+
async process(stream) {
|
|
141
|
+
for await (const chunk of stream) {
|
|
142
|
+
const handlers = this.handlers.get(chunk.type);
|
|
143
|
+
if (handlers) {
|
|
144
|
+
for (const handler of handlers) {
|
|
145
|
+
await handler(chunk);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.StreamingEventEmitter = StreamingEventEmitter;
|
|
152
|
+
/**
|
|
153
|
+
* Format streaming output for console display
|
|
154
|
+
*/
|
|
155
|
+
class ConsoleStreamFormatter {
|
|
156
|
+
constructor() {
|
|
157
|
+
this.currentLine = '';
|
|
158
|
+
this.stepCount = 0;
|
|
159
|
+
}
|
|
160
|
+
format(chunk) {
|
|
161
|
+
switch (chunk.type) {
|
|
162
|
+
case 'step':
|
|
163
|
+
this.stepCount++;
|
|
164
|
+
return `\n[Step ${this.stepCount}] ${chunk.step.state}`;
|
|
165
|
+
case 'token':
|
|
166
|
+
this.currentLine += chunk.content;
|
|
167
|
+
return chunk.content;
|
|
168
|
+
case 'done':
|
|
169
|
+
return `\n\n✅ Complete (${chunk.result.duration}ms)`;
|
|
170
|
+
default:
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
reset() {
|
|
175
|
+
this.currentLine = '';
|
|
176
|
+
this.stepCount = 0;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.ConsoleStreamFormatter = ConsoleStreamFormatter;
|
|
180
|
+
//# sourceMappingURL=streaming.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.utils.js","sourceRoot":"","sources":["../../src/utils/streaming.utils.ts"],"names":[],"mappings":"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"}
|
package/logs/combined.log
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2026-03-
|
|
1
|
+
2026-03-21 09:50:44 [INFO] Application started | {"service":"hazeljs","version":"0.1.0","environment":"test"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hazeljs/agent",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "AI-native Agent Runtime for HazelJS - stateful, long-running agents with tools, memory, and human-in-the-loop",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@hazeljs/core": "^0.2.
|
|
37
|
-
"@hazeljs/prompts": "^0.2.
|
|
38
|
-
"@hazeljs/rag": "^0.2.
|
|
39
|
-
"@hazeljs/resilience": "^0.2.
|
|
36
|
+
"@hazeljs/core": "^0.2.3",
|
|
37
|
+
"@hazeljs/prompts": "^0.2.3",
|
|
38
|
+
"@hazeljs/rag": "^0.2.3",
|
|
39
|
+
"@hazeljs/resilience": "^0.2.3",
|
|
40
40
|
"reflect-metadata": "^0.2.1"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"url": "https://github.com/hazeljs/hazel-js/issues"
|
|
71
71
|
},
|
|
72
72
|
"homepage": "https://hazeljs.ai",
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "23464d4bf09c22e092b31b2a037bec062f2353da"
|
|
74
74
|
}
|