@openharness/core 0.2.0 → 0.3.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 (38) hide show
  1. package/dist/__tests__/to-response.test.d.ts +2 -0
  2. package/dist/__tests__/to-response.test.d.ts.map +1 -0
  3. package/dist/__tests__/to-response.test.js +67 -0
  4. package/dist/__tests__/to-response.test.js.map +1 -0
  5. package/dist/__tests__/ui-stream.test.d.ts +2 -0
  6. package/dist/__tests__/ui-stream.test.d.ts.map +1 -0
  7. package/dist/__tests__/ui-stream.test.js +436 -0
  8. package/dist/__tests__/ui-stream.test.js.map +1 -0
  9. package/dist/agent.d.ts +17 -2
  10. package/dist/agent.d.ts.map +1 -1
  11. package/dist/agent.js +23 -6
  12. package/dist/agent.js.map +1 -1
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +8 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/session.d.ts +15 -0
  18. package/dist/session.d.ts.map +1 -1
  19. package/dist/session.js +21 -1
  20. package/dist/session.js.map +1 -1
  21. package/dist/types/__tests__/stream-parts.test.d.ts +2 -0
  22. package/dist/types/__tests__/stream-parts.test.d.ts.map +1 -0
  23. package/dist/types/__tests__/stream-parts.test.js +232 -0
  24. package/dist/types/__tests__/stream-parts.test.js.map +1 -0
  25. package/dist/types/stream-parts.d.ts +68 -0
  26. package/dist/types/stream-parts.d.ts.map +1 -0
  27. package/dist/types/stream-parts.js +53 -0
  28. package/dist/types/stream-parts.js.map +1 -0
  29. package/dist/types/ui-message.d.ts +44 -0
  30. package/dist/types/ui-message.d.ts.map +1 -0
  31. package/dist/types/ui-message.js +2 -0
  32. package/dist/types/ui-message.js.map +1 -0
  33. package/dist/ui-stream.d.ts +15 -0
  34. package/dist/ui-stream.d.ts.map +1 -0
  35. package/dist/ui-stream.js +255 -0
  36. package/dist/ui-stream.js.map +1 -0
  37. package/package.json +8 -11
  38. package/README.md +0 -451
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=to-response.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-response.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/to-response.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,67 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { Session } from "../session.js";
3
+ import { Agent } from "../agent.js";
4
+ // Minimal mock agent that yields a simple completion
5
+ function createMockAgent() {
6
+ const model = {
7
+ specificationVersion: "v2",
8
+ provider: "mock",
9
+ modelId: "mock-model",
10
+ doStream: vi.fn(),
11
+ doGenerate: vi.fn(),
12
+ };
13
+ // Create Agent with a model that we'll bypass via mock
14
+ return new Agent({
15
+ name: "test",
16
+ model: model,
17
+ maxSteps: 1,
18
+ instructions: false,
19
+ });
20
+ }
21
+ describe("Session.toResponse", () => {
22
+ it("returns a Response with correct SSE headers", () => {
23
+ const agent = createMockAgent();
24
+ const session = new Session({ agent });
25
+ // Mock session.send to yield minimal events
26
+ const originalSend = session.send.bind(session);
27
+ session.send = async function* () {
28
+ yield {
29
+ type: "done",
30
+ result: "complete",
31
+ messages: [],
32
+ totalUsage: {
33
+ inputTokens: 0,
34
+ outputTokens: 0,
35
+ totalTokens: 0,
36
+ },
37
+ };
38
+ };
39
+ const response = session.toResponse("hello");
40
+ expect(response).toBeInstanceOf(Response);
41
+ expect(response.headers.get("content-type")).toContain("text/event-stream");
42
+ expect(response.body).toBeTruthy();
43
+ // Restore
44
+ session.send = originalSend;
45
+ });
46
+ it("passes custom headers through", () => {
47
+ const agent = createMockAgent();
48
+ const session = new Session({ agent });
49
+ session.send = async function* () {
50
+ yield {
51
+ type: "done",
52
+ result: "complete",
53
+ messages: [],
54
+ totalUsage: {
55
+ inputTokens: 0,
56
+ outputTokens: 0,
57
+ totalTokens: 0,
58
+ },
59
+ };
60
+ };
61
+ const response = session.toResponse("hello", {
62
+ headers: { "X-Custom": "test" },
63
+ });
64
+ expect(response.headers.get("x-custom")).toBe("test");
65
+ });
66
+ });
67
+ //# sourceMappingURL=to-response.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-response.test.js","sourceRoot":"","sources":["../../src/__tests__/to-response.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,qDAAqD;AACrD,SAAS,eAAe;IACtB,MAAM,KAAK,GAAG;QACZ,oBAAoB,EAAE,IAAI;QAC1B,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,YAAY;QACrB,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;QACjB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;KACpB,CAAC;IAEF,uDAAuD;IACvD,OAAO,IAAI,KAAK,CAAC;QACf,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,KAAY;QACnB,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAEvC,4CAA4C;QAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,GAAG,KAAK,SAAS,CAAC;YAC5B,MAAM;gBACJ,IAAI,EAAE,MAAe;gBACrB,MAAM,EAAE,UAAmB;gBAC3B,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE;oBACV,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,CAAC;iBACf;aACF,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE7C,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC5E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;QAEnC,UAAU;QACV,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAEvC,OAAO,CAAC,IAAI,GAAG,KAAK,SAAS,CAAC;YAC5B,MAAM;gBACJ,IAAI,EAAE,MAAe;gBACrB,MAAM,EAAE,UAAmB;gBAC3B,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE;oBACV,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,CAAC;iBACf;aACF,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE;YAC3C,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;SAChC,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ui-stream.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-stream.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ui-stream.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,436 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { sessionEventsToUIStream } from "../ui-stream.js";
3
+ // ── Helpers ─────────────────────────────────────────────────────────
4
+ async function collectChunks(events) {
5
+ async function* gen() {
6
+ for (const e of events)
7
+ yield e;
8
+ }
9
+ const stream = sessionEventsToUIStream(gen());
10
+ const reader = stream.getReader();
11
+ const chunks = [];
12
+ while (true) {
13
+ const { done, value } = await reader.read();
14
+ if (done)
15
+ break;
16
+ chunks.push(value);
17
+ }
18
+ return chunks;
19
+ }
20
+ function findChunks(chunks, type) {
21
+ return chunks.filter((c) => c.type === type);
22
+ }
23
+ // ── Tests ───────────────────────────────────────────────────────────
24
+ describe("sessionEventsToUIStream", () => {
25
+ describe("stream lifecycle", () => {
26
+ it("emits start chunk at the beginning", async () => {
27
+ const chunks = await collectChunks([]);
28
+ expect(chunks[0]).toEqual({ type: "start" });
29
+ });
30
+ it("emits finish chunk on done event", async () => {
31
+ const chunks = await collectChunks([
32
+ {
33
+ type: "done",
34
+ result: "complete",
35
+ messages: [],
36
+ totalUsage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },
37
+ },
38
+ ]);
39
+ const finish = findChunks(chunks, "finish");
40
+ expect(finish).toHaveLength(1);
41
+ expect(finish[0].finishReason).toBe("stop");
42
+ });
43
+ it("maps result types to correct finish reasons", async () => {
44
+ const cases = [
45
+ ["complete", "stop"],
46
+ ["max_steps", "tool-calls"],
47
+ ["error", "error"],
48
+ ["stopped", "unknown"],
49
+ ];
50
+ for (const [result, expected] of cases) {
51
+ const chunks = await collectChunks([
52
+ {
53
+ type: "done",
54
+ result: result,
55
+ messages: [],
56
+ totalUsage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },
57
+ },
58
+ ]);
59
+ const finish = findChunks(chunks, "finish");
60
+ expect(finish[0].finishReason).toBe(expected);
61
+ }
62
+ });
63
+ });
64
+ describe("text streaming", () => {
65
+ it("emits text-start before first text-delta", async () => {
66
+ const chunks = await collectChunks([
67
+ { type: "text.delta", text: "Hello" },
68
+ { type: "text.done", text: "Hello world" },
69
+ ]);
70
+ const textStart = findChunks(chunks, "text-start");
71
+ expect(textStart).toHaveLength(1);
72
+ expect(textStart[0].id).toBeTruthy();
73
+ });
74
+ it("emits text-delta with matching id", async () => {
75
+ const chunks = await collectChunks([
76
+ { type: "text.delta", text: "Hello" },
77
+ { type: "text.delta", text: " world" },
78
+ { type: "text.done", text: "Hello world" },
79
+ ]);
80
+ const textStart = findChunks(chunks, "text-start")[0];
81
+ const deltas = findChunks(chunks, "text-delta");
82
+ expect(deltas).toHaveLength(2);
83
+ expect(deltas[0].id).toBe(textStart.id);
84
+ expect(deltas[0].delta).toBe("Hello");
85
+ expect(deltas[1].delta).toBe(" world");
86
+ });
87
+ it("emits text-end on text.done", async () => {
88
+ const chunks = await collectChunks([
89
+ { type: "text.delta", text: "Hi" },
90
+ { type: "text.done", text: "Hi" },
91
+ ]);
92
+ const textStart = findChunks(chunks, "text-start")[0];
93
+ const textEnd = findChunks(chunks, "text-end");
94
+ expect(textEnd).toHaveLength(1);
95
+ expect(textEnd[0].id).toBe(textStart.id);
96
+ });
97
+ });
98
+ describe("reasoning streaming", () => {
99
+ it("emits reasoning-start before first reasoning-delta", async () => {
100
+ const chunks = await collectChunks([
101
+ { type: "reasoning.delta", text: "thinking" },
102
+ { type: "reasoning.done", text: "thinking" },
103
+ ]);
104
+ const start = findChunks(chunks, "reasoning-start");
105
+ expect(start).toHaveLength(1);
106
+ });
107
+ it("emits reasoning-delta and reasoning-end", async () => {
108
+ const chunks = await collectChunks([
109
+ { type: "reasoning.delta", text: "step 1" },
110
+ { type: "reasoning.delta", text: " step 2" },
111
+ { type: "reasoning.done", text: "step 1 step 2" },
112
+ ]);
113
+ const start = findChunks(chunks, "reasoning-start")[0];
114
+ const deltas = findChunks(chunks, "reasoning-delta");
115
+ const end = findChunks(chunks, "reasoning-end");
116
+ expect(deltas).toHaveLength(2);
117
+ expect(deltas[0].id).toBe(start.id);
118
+ expect(end).toHaveLength(1);
119
+ expect(end[0].id).toBe(start.id);
120
+ });
121
+ it("closes text part before starting reasoning", async () => {
122
+ const chunks = await collectChunks([
123
+ { type: "text.delta", text: "Hi" },
124
+ { type: "reasoning.delta", text: "think" },
125
+ { type: "reasoning.done", text: "think" },
126
+ ]);
127
+ const types = chunks.map((c) => c.type);
128
+ const textEndIdx = types.indexOf("text-end");
129
+ const reasoningStartIdx = types.indexOf("reasoning-start");
130
+ expect(textEndIdx).toBeLessThan(reasoningStartIdx);
131
+ });
132
+ });
133
+ describe("tool events", () => {
134
+ it("emits tool-input-start and tool-input-available on tool.start", async () => {
135
+ const chunks = await collectChunks([
136
+ {
137
+ type: "tool.start",
138
+ toolCallId: "tc-1",
139
+ toolName: "readFile",
140
+ input: { path: "/test" },
141
+ },
142
+ ]);
143
+ const inputStart = findChunks(chunks, "tool-input-start");
144
+ expect(inputStart).toHaveLength(1);
145
+ expect(inputStart[0]).toEqual({
146
+ type: "tool-input-start",
147
+ toolCallId: "tc-1",
148
+ toolName: "readFile",
149
+ });
150
+ const inputAvailable = findChunks(chunks, "tool-input-available");
151
+ expect(inputAvailable).toHaveLength(1);
152
+ expect(inputAvailable[0].input).toEqual({ path: "/test" });
153
+ });
154
+ it("emits tool-output-available on tool.done", async () => {
155
+ const chunks = await collectChunks([
156
+ {
157
+ type: "tool.done",
158
+ toolCallId: "tc-1",
159
+ toolName: "readFile",
160
+ output: { content: "file contents" },
161
+ },
162
+ ]);
163
+ const output = findChunks(chunks, "tool-output-available");
164
+ expect(output).toHaveLength(1);
165
+ expect(output[0]).toEqual({
166
+ type: "tool-output-available",
167
+ toolCallId: "tc-1",
168
+ output: { content: "file contents" },
169
+ });
170
+ });
171
+ it("emits tool-output-error on tool.error", async () => {
172
+ const chunks = await collectChunks([
173
+ {
174
+ type: "tool.error",
175
+ toolCallId: "tc-1",
176
+ toolName: "readFile",
177
+ error: "File not found",
178
+ },
179
+ ]);
180
+ const errors = findChunks(chunks, "tool-output-error");
181
+ expect(errors).toHaveLength(1);
182
+ expect(errors[0]).toEqual({
183
+ type: "tool-output-error",
184
+ toolCallId: "tc-1",
185
+ errorText: "File not found",
186
+ });
187
+ });
188
+ it("closes text/reasoning parts before tool events", async () => {
189
+ const chunks = await collectChunks([
190
+ { type: "text.delta", text: "Let me check" },
191
+ {
192
+ type: "tool.start",
193
+ toolCallId: "tc-1",
194
+ toolName: "readFile",
195
+ input: {},
196
+ },
197
+ ]);
198
+ const types = chunks.map((c) => c.type);
199
+ const textEndIdx = types.indexOf("text-end");
200
+ const toolStartIdx = types.indexOf("tool-input-start");
201
+ expect(textEndIdx).toBeLessThan(toolStartIdx);
202
+ });
203
+ });
204
+ describe("subagent detection via task tool", () => {
205
+ it("emits data-oh:subagent.start for task tool calls", async () => {
206
+ const chunks = await collectChunks([
207
+ {
208
+ type: "tool.start",
209
+ toolCallId: "tc-1",
210
+ toolName: "task",
211
+ input: { agent: "explore", prompt: "search codebase" },
212
+ },
213
+ ]);
214
+ const subStart = findChunks(chunks, "data-oh:subagent.start");
215
+ expect(subStart).toHaveLength(1);
216
+ expect(subStart[0].data).toEqual({
217
+ agentName: "explore",
218
+ task: "search codebase",
219
+ path: ["explore"],
220
+ });
221
+ });
222
+ it("emits data-oh:subagent.done when task tool completes", async () => {
223
+ const chunks = await collectChunks([
224
+ {
225
+ type: "tool.start",
226
+ toolCallId: "tc-1",
227
+ toolName: "task",
228
+ input: { agent: "explore", prompt: "search" },
229
+ },
230
+ {
231
+ type: "tool.done",
232
+ toolCallId: "tc-1",
233
+ toolName: "task",
234
+ output: "result",
235
+ },
236
+ ]);
237
+ const subDone = findChunks(chunks, "data-oh:subagent.done");
238
+ expect(subDone).toHaveLength(1);
239
+ expect(subDone[0].data.durationMs).toBeGreaterThanOrEqual(0);
240
+ });
241
+ it("emits data-oh:subagent.error when task tool fails", async () => {
242
+ const chunks = await collectChunks([
243
+ {
244
+ type: "tool.start",
245
+ toolCallId: "tc-1",
246
+ toolName: "task",
247
+ input: { agent: "explore", prompt: "search" },
248
+ },
249
+ {
250
+ type: "tool.error",
251
+ toolCallId: "tc-1",
252
+ toolName: "task",
253
+ error: "Agent crashed",
254
+ },
255
+ ]);
256
+ const subError = findChunks(chunks, "data-oh:subagent.error");
257
+ expect(subError).toHaveLength(1);
258
+ expect(subError[0].data.error).toBe("Agent crashed");
259
+ });
260
+ it("does not emit subagent events for regular tools", async () => {
261
+ const chunks = await collectChunks([
262
+ {
263
+ type: "tool.start",
264
+ toolCallId: "tc-1",
265
+ toolName: "readFile",
266
+ input: { path: "/test" },
267
+ },
268
+ {
269
+ type: "tool.done",
270
+ toolCallId: "tc-1",
271
+ toolName: "readFile",
272
+ output: "ok",
273
+ },
274
+ ]);
275
+ const subEvents = chunks.filter((c) => c.type?.startsWith("data-oh:subagent."));
276
+ expect(subEvents).toHaveLength(0);
277
+ });
278
+ });
279
+ describe("step events", () => {
280
+ it("emits start-step and finish-step", async () => {
281
+ const chunks = await collectChunks([
282
+ { type: "step.start", stepNumber: 1 },
283
+ { type: "text.delta", text: "Hi" },
284
+ { type: "text.done", text: "Hi" },
285
+ {
286
+ type: "step.done",
287
+ stepNumber: 1,
288
+ usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 },
289
+ finishReason: "stop",
290
+ },
291
+ ]);
292
+ expect(findChunks(chunks, "start-step")).toHaveLength(1);
293
+ expect(findChunks(chunks, "finish-step")).toHaveLength(1);
294
+ });
295
+ });
296
+ describe("session lifecycle data parts", () => {
297
+ it("emits turn start/done data parts", async () => {
298
+ const chunks = await collectChunks([
299
+ { type: "turn.start", turnNumber: 3 },
300
+ {
301
+ type: "turn.done",
302
+ turnNumber: 3,
303
+ usage: { inputTokens: 100, outputTokens: 50, totalTokens: 150 },
304
+ },
305
+ ]);
306
+ const turnStart = findChunks(chunks, "data-oh:turn.start");
307
+ expect(turnStart).toHaveLength(1);
308
+ expect(turnStart[0].data).toEqual({ turnIndex: 3 });
309
+ const turnDone = findChunks(chunks, "data-oh:turn.done");
310
+ expect(turnDone).toHaveLength(1);
311
+ expect(turnDone[0].data.turnIndex).toBe(3);
312
+ });
313
+ it("emits compaction data parts", async () => {
314
+ const chunks = await collectChunks([
315
+ { type: "compaction.start", reason: "overflow", tokensBefore: 50000 },
316
+ { type: "compaction.pruned", tokensRemoved: 10000, messagesRemoved: 5 },
317
+ { type: "compaction.done", tokensBefore: 50000, tokensAfter: 30000 },
318
+ ]);
319
+ expect(findChunks(chunks, "data-oh:session.compacting")).toHaveLength(1);
320
+ expect(findChunks(chunks, "data-oh:compaction.start")).toHaveLength(1);
321
+ const compDone = findChunks(chunks, "data-oh:compaction.done");
322
+ // One from pruned, one from done
323
+ expect(compDone.length).toBeGreaterThanOrEqual(1);
324
+ });
325
+ it("emits retry data part", async () => {
326
+ const chunks = await collectChunks([
327
+ {
328
+ type: "retry",
329
+ attempt: 1,
330
+ maxRetries: 3,
331
+ delayMs: 2000,
332
+ error: new Error("rate limit exceeded"),
333
+ },
334
+ ]);
335
+ const retry = findChunks(chunks, "data-oh:retry");
336
+ expect(retry).toHaveLength(1);
337
+ expect(retry[0].data).toEqual({
338
+ attempt: 1,
339
+ reason: "rate limit exceeded",
340
+ delayMs: 2000,
341
+ });
342
+ });
343
+ });
344
+ describe("error handling", () => {
345
+ it("emits error chunk on error event", async () => {
346
+ const chunks = await collectChunks([
347
+ { type: "error", error: new Error("something went wrong") },
348
+ ]);
349
+ const errors = findChunks(chunks, "error");
350
+ expect(errors).toHaveLength(1);
351
+ expect(errors[0].errorText).toBe("something went wrong");
352
+ });
353
+ it("emits error chunk when generator throws", async () => {
354
+ async function* throwingGen() {
355
+ throw new Error("generator exploded");
356
+ }
357
+ const stream = sessionEventsToUIStream(throwingGen());
358
+ const reader = stream.getReader();
359
+ const chunks = [];
360
+ while (true) {
361
+ const { done, value } = await reader.read();
362
+ if (done)
363
+ break;
364
+ chunks.push(value);
365
+ }
366
+ const errors = chunks.filter((c) => c.type === "error");
367
+ expect(errors).toHaveLength(1);
368
+ expect(errors[0].errorText).toBe("generator exploded");
369
+ });
370
+ });
371
+ describe("full conversation flow", () => {
372
+ it("handles a complete multi-step conversation", async () => {
373
+ const events = [
374
+ { type: "turn.start", turnNumber: 1 },
375
+ { type: "step.start", stepNumber: 1 },
376
+ { type: "text.delta", text: "Let me " },
377
+ { type: "text.delta", text: "check." },
378
+ { type: "text.done", text: "Let me check." },
379
+ {
380
+ type: "tool.start",
381
+ toolCallId: "tc-1",
382
+ toolName: "readFile",
383
+ input: { path: "/src/index.ts" },
384
+ },
385
+ {
386
+ type: "tool.done",
387
+ toolCallId: "tc-1",
388
+ toolName: "readFile",
389
+ output: { content: "export {}" },
390
+ },
391
+ {
392
+ type: "step.done",
393
+ stepNumber: 1,
394
+ usage: { inputTokens: 100, outputTokens: 20, totalTokens: 120 },
395
+ finishReason: "tool-calls",
396
+ },
397
+ { type: "step.start", stepNumber: 2 },
398
+ { type: "text.delta", text: "The file exports nothing." },
399
+ { type: "text.done", text: "The file exports nothing." },
400
+ {
401
+ type: "step.done",
402
+ stepNumber: 2,
403
+ usage: { inputTokens: 200, outputTokens: 30, totalTokens: 230 },
404
+ finishReason: "stop",
405
+ },
406
+ {
407
+ type: "done",
408
+ result: "complete",
409
+ messages: [],
410
+ totalUsage: { inputTokens: 300, outputTokens: 50, totalTokens: 350 },
411
+ },
412
+ {
413
+ type: "turn.done",
414
+ turnNumber: 1,
415
+ usage: { inputTokens: 300, outputTokens: 50, totalTokens: 350 },
416
+ },
417
+ ];
418
+ const chunks = await collectChunks(events);
419
+ const types = chunks.map((c) => c.type);
420
+ // Stream structure
421
+ expect(types[0]).toBe("start");
422
+ expect(types[types.length - 1]).toBe("data-oh:turn.done");
423
+ expect(types).toContain("text-start");
424
+ expect(types).toContain("text-delta");
425
+ expect(types).toContain("text-end");
426
+ expect(types).toContain("tool-input-start");
427
+ expect(types).toContain("tool-input-available");
428
+ expect(types).toContain("tool-output-available");
429
+ expect(types).toContain("start-step");
430
+ expect(types).toContain("finish-step");
431
+ expect(types).toContain("finish");
432
+ expect(types).toContain("data-oh:turn.start");
433
+ });
434
+ });
435
+ });
436
+ //# sourceMappingURL=ui-stream.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-stream.test.js","sourceRoot":"","sources":["../../src/__tests__/ui-stream.test.ts"],"names":[],"mappings":"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"}
package/dist/agent.d.ts CHANGED
@@ -59,8 +59,14 @@ export interface ToolCallInfo {
59
59
  * Can be async — e.g. to prompt a user in a custom UI.
60
60
  */
61
61
  export type ApproveFn = (toolCall: ToolCallInfo) => boolean | Promise<boolean>;
62
- /** Called for every event emitted by a subagent during a task tool call. */
63
- export type SubagentEventFn = (agentName: string, event: AgentEvent) => void;
62
+ /**
63
+ * Called for every event emitted by a subagent during a task tool call.
64
+ *
65
+ * `path` is the ancestry chain from outermost to innermost agent, e.g.
66
+ * `["explore"]` for a direct subagent, or `["explore", "search"]` when
67
+ * a subagent spawns its own subagent.
68
+ */
69
+ export type SubagentEventFn = (path: string[], event: AgentEvent) => void;
64
70
  export declare class Agent {
65
71
  readonly name: string;
66
72
  readonly description?: string;
@@ -70,8 +76,11 @@ export declare class Agent {
70
76
  readonly temperature?: number;
71
77
  readonly maxTokens?: number;
72
78
  readonly instructions: boolean;
79
+ readonly maxSubagentDepth: number;
73
80
  readonly approve?: ApproveFn;
74
81
  readonly onSubagentEvent?: SubagentEventFn;
82
+ /** Original subagent templates (stored so nested children can inherit them). */
83
+ readonly subagents?: Agent[];
75
84
  /** Static tools provided at construction time. */
76
85
  readonly tools?: ToolSet;
77
86
  /** MCP server configs — connected lazily on first run. */
@@ -97,6 +106,12 @@ export declare class Agent {
97
106
  approve?: ApproveFn;
98
107
  /** Agents available as subagents via the auto-generated `task` tool. */
99
108
  subagents?: Agent[];
109
+ /**
110
+ * Maximum nesting depth for subagents. Defaults to `1` (direct subagents
111
+ * only, no nesting). Set to `2` to allow sub-subagents, etc.
112
+ * `0` effectively disables subagents even if `subagents` is provided.
113
+ */
114
+ maxSubagentDepth?: number;
100
115
  /** Called for every event emitted by a subagent during a task tool call. */
101
116
  onSubagentEvent?: SubagentEventFn;
102
117
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}