@openharness/core 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/to-response.test.d.ts +2 -0
- package/dist/__tests__/to-response.test.d.ts.map +1 -0
- package/dist/__tests__/to-response.test.js +67 -0
- package/dist/__tests__/to-response.test.js.map +1 -0
- package/dist/__tests__/ui-stream.test.d.ts +2 -0
- package/dist/__tests__/ui-stream.test.d.ts.map +1 -0
- package/dist/__tests__/ui-stream.test.js +435 -0
- package/dist/__tests__/ui-stream.test.js.map +1 -0
- package/dist/agent.d.ts +1 -2
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +10 -9
- package/dist/agent.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/session.d.ts +174 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +370 -0
- package/dist/session.js.map +1 -0
- package/dist/types/__tests__/stream-parts.test.d.ts +2 -0
- package/dist/types/__tests__/stream-parts.test.d.ts.map +1 -0
- package/dist/types/__tests__/stream-parts.test.js +231 -0
- package/dist/types/__tests__/stream-parts.test.js.map +1 -0
- package/dist/types/stream-parts.d.ts +68 -0
- package/dist/types/stream-parts.d.ts.map +1 -0
- package/dist/types/stream-parts.js +53 -0
- package/dist/types/stream-parts.js.map +1 -0
- package/dist/types/ui-message.d.ts +41 -0
- package/dist/types/ui-message.d.ts.map +1 -0
- package/dist/types/ui-message.js +2 -0
- package/dist/types/ui-message.js.map +1 -0
- package/dist/ui-stream.d.ts +15 -0
- package/dist/ui-stream.d.ts.map +1 -0
- package/dist/ui-stream.js +246 -0
- package/dist/ui-stream.js.map +1 -0
- package/package.json +8 -11
- package/README.md +0 -267
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-parts.test.d.ts","sourceRoot":"","sources":["../../../src/types/__tests__/stream-parts.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
// Type guards
|
|
4
|
+
isOHDataPart, isSubagentEvent, isCompactionEvent, isRetryEvent, isSessionLifecycleEvent,
|
|
5
|
+
// SSE formatters
|
|
6
|
+
formatSSE, formatTextDelta, formatReasoningDelta, formatDataPart, formatToolStart, formatToolResult, formatToolError, formatStepStart, formatStepFinish, formatFinishMessage, formatDone, } from "../stream-parts.js";
|
|
7
|
+
// ── Type guards ─────────────────────────────────────────────────────
|
|
8
|
+
describe("isOHDataPart", () => {
|
|
9
|
+
it("matches any oh: prefixed data part", () => {
|
|
10
|
+
expect(isOHDataPart({ type: "data-oh:subagent.start" })).toBe(true);
|
|
11
|
+
expect(isOHDataPart({ type: "data-oh:retry" })).toBe(true);
|
|
12
|
+
expect(isOHDataPart({ type: "data-oh:session.compacting" })).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
it("rejects non-OH parts", () => {
|
|
15
|
+
expect(isOHDataPart({ type: "text" })).toBe(false);
|
|
16
|
+
expect(isOHDataPart({ type: "data-custom:foo" })).toBe(false);
|
|
17
|
+
expect(isOHDataPart({ type: "tool" })).toBe(false);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe("isSubagentEvent", () => {
|
|
21
|
+
it("matches subagent events", () => {
|
|
22
|
+
expect(isSubagentEvent({ type: "data-oh:subagent.start" })).toBe(true);
|
|
23
|
+
expect(isSubagentEvent({ type: "data-oh:subagent.done" })).toBe(true);
|
|
24
|
+
expect(isSubagentEvent({ type: "data-oh:subagent.error" })).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
it("rejects other OH events", () => {
|
|
27
|
+
expect(isSubagentEvent({ type: "data-oh:retry" })).toBe(false);
|
|
28
|
+
expect(isSubagentEvent({ type: "data-oh:compaction.start" })).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe("isCompactionEvent", () => {
|
|
32
|
+
it("matches compaction events", () => {
|
|
33
|
+
expect(isCompactionEvent({ type: "data-oh:compaction.start" })).toBe(true);
|
|
34
|
+
expect(isCompactionEvent({ type: "data-oh:compaction.done" })).toBe(true);
|
|
35
|
+
});
|
|
36
|
+
it("rejects other events", () => {
|
|
37
|
+
expect(isCompactionEvent({ type: "data-oh:subagent.start" })).toBe(false);
|
|
38
|
+
expect(isCompactionEvent({ type: "data-oh:turn.start" })).toBe(false);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe("isRetryEvent", () => {
|
|
42
|
+
it("matches retry events", () => {
|
|
43
|
+
expect(isRetryEvent({ type: "data-oh:retry" })).toBe(true);
|
|
44
|
+
});
|
|
45
|
+
it("rejects other events", () => {
|
|
46
|
+
expect(isRetryEvent({ type: "data-oh:subagent.start" })).toBe(false);
|
|
47
|
+
expect(isRetryEvent({ type: "data-oh:turn.start" })).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe("isSessionLifecycleEvent", () => {
|
|
51
|
+
it("matches turn and session compacting events", () => {
|
|
52
|
+
expect(isSessionLifecycleEvent({ type: "data-oh:turn.start" })).toBe(true);
|
|
53
|
+
expect(isSessionLifecycleEvent({ type: "data-oh:turn.done" })).toBe(true);
|
|
54
|
+
expect(isSessionLifecycleEvent({ type: "data-oh:session.compacting" })).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
it("rejects other events", () => {
|
|
57
|
+
expect(isSessionLifecycleEvent({ type: "data-oh:retry" })).toBe(false);
|
|
58
|
+
expect(isSessionLifecycleEvent({ type: "data-oh:subagent.start" })).toBe(false);
|
|
59
|
+
expect(isSessionLifecycleEvent({ type: "data-oh:compaction.start" })).toBe(false);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
// ── SSE formatters ──────────────────────────────────────────────────
|
|
63
|
+
describe("formatSSE", () => {
|
|
64
|
+
it("wraps data as SSE event", () => {
|
|
65
|
+
expect(formatSSE({ hello: "world" })).toBe('data: {"hello":"world"}\n\n');
|
|
66
|
+
});
|
|
67
|
+
it("handles strings", () => {
|
|
68
|
+
expect(formatSSE("test")).toBe('data: "test"\n\n');
|
|
69
|
+
});
|
|
70
|
+
it("handles null", () => {
|
|
71
|
+
expect(formatSSE(null)).toBe("data: null\n\n");
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe("formatTextDelta", () => {
|
|
75
|
+
it("produces text-delta SSE chunk", () => {
|
|
76
|
+
const result = formatTextDelta("part-1", "Hello");
|
|
77
|
+
const parsed = parseSSE(result);
|
|
78
|
+
expect(parsed).toEqual({ type: "text-delta", id: "part-1", delta: "Hello" });
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe("formatReasoningDelta", () => {
|
|
82
|
+
it("produces reasoning-delta SSE chunk", () => {
|
|
83
|
+
const result = formatReasoningDelta("r-1", "thinking...");
|
|
84
|
+
const parsed = parseSSE(result);
|
|
85
|
+
expect(parsed).toEqual({
|
|
86
|
+
type: "reasoning-delta",
|
|
87
|
+
id: "r-1",
|
|
88
|
+
delta: "thinking...",
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe("formatDataPart", () => {
|
|
93
|
+
it("produces data-oh:* SSE chunk for subagent start", () => {
|
|
94
|
+
const result = formatDataPart("oh:subagent.start", {
|
|
95
|
+
agentName: "explore",
|
|
96
|
+
task: "search the codebase",
|
|
97
|
+
});
|
|
98
|
+
const parsed = parseSSE(result);
|
|
99
|
+
expect(parsed).toEqual({
|
|
100
|
+
type: "data-oh:subagent.start",
|
|
101
|
+
data: { agentName: "explore", task: "search the codebase" },
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
it("produces data-oh:* SSE chunk for retry", () => {
|
|
105
|
+
const result = formatDataPart("oh:retry", {
|
|
106
|
+
attempt: 2,
|
|
107
|
+
reason: "rate limit",
|
|
108
|
+
delayMs: 3000,
|
|
109
|
+
});
|
|
110
|
+
const parsed = parseSSE(result);
|
|
111
|
+
expect(parsed).toEqual({
|
|
112
|
+
type: "data-oh:retry",
|
|
113
|
+
data: { attempt: 2, reason: "rate limit", delayMs: 3000 },
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
it("produces data-oh:* SSE chunk for empty data", () => {
|
|
117
|
+
const result = formatDataPart("oh:compaction.start", {});
|
|
118
|
+
const parsed = parseSSE(result);
|
|
119
|
+
expect(parsed).toEqual({
|
|
120
|
+
type: "data-oh:compaction.start",
|
|
121
|
+
data: {},
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe("formatToolStart", () => {
|
|
126
|
+
it("produces tool-input-start SSE chunk", () => {
|
|
127
|
+
const result = formatToolStart("tc-1", "readFile");
|
|
128
|
+
const parsed = parseSSE(result);
|
|
129
|
+
expect(parsed).toEqual({
|
|
130
|
+
type: "tool-input-start",
|
|
131
|
+
id: "tc-1",
|
|
132
|
+
toolName: "readFile",
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe("formatToolResult", () => {
|
|
137
|
+
it("produces tool-output-available SSE chunk", () => {
|
|
138
|
+
const result = formatToolResult("tc-1", { content: "file contents" });
|
|
139
|
+
const parsed = parseSSE(result);
|
|
140
|
+
expect(parsed).toEqual({
|
|
141
|
+
type: "tool-output-available",
|
|
142
|
+
id: "tc-1",
|
|
143
|
+
output: { content: "file contents" },
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
describe("formatToolError", () => {
|
|
148
|
+
it("produces tool-output-error SSE chunk", () => {
|
|
149
|
+
const result = formatToolError("tc-1", "File not found");
|
|
150
|
+
const parsed = parseSSE(result);
|
|
151
|
+
expect(parsed).toEqual({
|
|
152
|
+
type: "tool-output-error",
|
|
153
|
+
id: "tc-1",
|
|
154
|
+
error: "File not found",
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe("formatStepStart", () => {
|
|
159
|
+
it("produces start-step SSE chunk", () => {
|
|
160
|
+
const result = formatStepStart();
|
|
161
|
+
const parsed = parseSSE(result);
|
|
162
|
+
expect(parsed).toEqual({ type: "start-step" });
|
|
163
|
+
});
|
|
164
|
+
it("includes messageId when provided", () => {
|
|
165
|
+
const result = formatStepStart("msg-1");
|
|
166
|
+
const parsed = parseSSE(result);
|
|
167
|
+
expect(parsed).toEqual({ type: "start-step", messageId: "msg-1" });
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe("formatStepFinish", () => {
|
|
171
|
+
it("produces finish-step SSE chunk with reason", () => {
|
|
172
|
+
const result = formatStepFinish("stop");
|
|
173
|
+
const parsed = parseSSE(result);
|
|
174
|
+
expect(parsed).toEqual({ type: "finish-step", finishReason: "stop" });
|
|
175
|
+
});
|
|
176
|
+
it("includes usage when provided", () => {
|
|
177
|
+
const result = formatStepFinish("stop", {
|
|
178
|
+
inputTokens: 100,
|
|
179
|
+
outputTokens: 50,
|
|
180
|
+
totalTokens: 150,
|
|
181
|
+
});
|
|
182
|
+
const parsed = parseSSE(result);
|
|
183
|
+
expect(parsed).toEqual({
|
|
184
|
+
type: "finish-step",
|
|
185
|
+
finishReason: "stop",
|
|
186
|
+
usage: { inputTokens: 100, outputTokens: 50, totalTokens: 150 },
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
it("includes messageId when provided", () => {
|
|
190
|
+
const result = formatStepFinish("stop", undefined, "msg-1");
|
|
191
|
+
const parsed = parseSSE(result);
|
|
192
|
+
expect(parsed).toEqual({
|
|
193
|
+
type: "finish-step",
|
|
194
|
+
finishReason: "stop",
|
|
195
|
+
messageId: "msg-1",
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
describe("formatFinishMessage", () => {
|
|
200
|
+
it("produces finish SSE chunk", () => {
|
|
201
|
+
const result = formatFinishMessage("stop");
|
|
202
|
+
const parsed = parseSSE(result);
|
|
203
|
+
expect(parsed).toEqual({ type: "finish", finishReason: "stop" });
|
|
204
|
+
});
|
|
205
|
+
it("includes usage when provided", () => {
|
|
206
|
+
const result = formatFinishMessage("stop", {
|
|
207
|
+
inputTokens: 500,
|
|
208
|
+
outputTokens: 200,
|
|
209
|
+
totalTokens: 700,
|
|
210
|
+
});
|
|
211
|
+
const parsed = parseSSE(result);
|
|
212
|
+
expect(parsed).toEqual({
|
|
213
|
+
type: "finish",
|
|
214
|
+
finishReason: "stop",
|
|
215
|
+
usage: { inputTokens: 500, outputTokens: 200, totalTokens: 700 },
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
describe("formatDone", () => {
|
|
220
|
+
it("produces the SSE done sentinel", () => {
|
|
221
|
+
expect(formatDone()).toBe("data: [DONE]\n\n");
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
// ── Test helpers ────────────────────────────────────────────────────
|
|
225
|
+
function parseSSE(sse) {
|
|
226
|
+
const match = sse.match(/^data: (.*)\n\n$/);
|
|
227
|
+
if (!match)
|
|
228
|
+
throw new Error(`Invalid SSE format: ${sse}`);
|
|
229
|
+
return JSON.parse(match[1]);
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=stream-parts.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-parts.test.js","sourceRoot":"","sources":["../../../src/types/__tests__/stream-parts.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { OHDataTypes } from "./ui-message.js";
|
|
2
|
+
export type OHSubagentPart = {
|
|
3
|
+
type: "data-oh:subagent.start";
|
|
4
|
+
data: OHDataTypes["oh:subagent.start"];
|
|
5
|
+
} | {
|
|
6
|
+
type: "data-oh:subagent.done";
|
|
7
|
+
data: OHDataTypes["oh:subagent.done"];
|
|
8
|
+
} | {
|
|
9
|
+
type: "data-oh:subagent.error";
|
|
10
|
+
data: OHDataTypes["oh:subagent.error"];
|
|
11
|
+
};
|
|
12
|
+
export type OHCompactionPart = {
|
|
13
|
+
type: "data-oh:compaction.start";
|
|
14
|
+
data: OHDataTypes["oh:compaction.start"];
|
|
15
|
+
} | {
|
|
16
|
+
type: "data-oh:compaction.done";
|
|
17
|
+
data: OHDataTypes["oh:compaction.done"];
|
|
18
|
+
};
|
|
19
|
+
export type OHRetryPart = {
|
|
20
|
+
type: "data-oh:retry";
|
|
21
|
+
data: OHDataTypes["oh:retry"];
|
|
22
|
+
};
|
|
23
|
+
export type OHSessionLifecyclePart = {
|
|
24
|
+
type: "data-oh:turn.start";
|
|
25
|
+
data: OHDataTypes["oh:turn.start"];
|
|
26
|
+
} | {
|
|
27
|
+
type: "data-oh:turn.done";
|
|
28
|
+
data: OHDataTypes["oh:turn.done"];
|
|
29
|
+
} | {
|
|
30
|
+
type: "data-oh:session.compacting";
|
|
31
|
+
data: OHDataTypes["oh:session.compacting"];
|
|
32
|
+
};
|
|
33
|
+
export type OHDataPart = OHSubagentPart | OHCompactionPart | OHRetryPart | OHSessionLifecyclePart;
|
|
34
|
+
export declare const isOHDataPart: (part: {
|
|
35
|
+
type: string;
|
|
36
|
+
}) => part is OHDataPart;
|
|
37
|
+
export declare const isSubagentEvent: (part: {
|
|
38
|
+
type: string;
|
|
39
|
+
}) => part is OHSubagentPart;
|
|
40
|
+
export declare const isCompactionEvent: (part: {
|
|
41
|
+
type: string;
|
|
42
|
+
}) => part is OHCompactionPart;
|
|
43
|
+
export declare const isRetryEvent: (part: {
|
|
44
|
+
type: string;
|
|
45
|
+
}) => part is OHRetryPart;
|
|
46
|
+
export declare const isSessionLifecycleEvent: (part: {
|
|
47
|
+
type: string;
|
|
48
|
+
}) => part is OHSessionLifecyclePart;
|
|
49
|
+
export declare function formatSSE(data: unknown): string;
|
|
50
|
+
export declare function formatTextDelta(id: string, delta: string): string;
|
|
51
|
+
export declare function formatReasoningDelta(id: string, delta: string): string;
|
|
52
|
+
export declare function formatDataPart<K extends keyof OHDataTypes & string>(name: K, data: OHDataTypes[K]): string;
|
|
53
|
+
export declare function formatToolStart(id: string, toolName: string): string;
|
|
54
|
+
export declare function formatToolResult(id: string, output: unknown): string;
|
|
55
|
+
export declare function formatToolError(id: string, error: string): string;
|
|
56
|
+
export declare function formatStepStart(messageId?: string): string;
|
|
57
|
+
export declare function formatStepFinish(finishReason: string, usage?: {
|
|
58
|
+
inputTokens?: number;
|
|
59
|
+
outputTokens?: number;
|
|
60
|
+
totalTokens?: number;
|
|
61
|
+
}, messageId?: string): string;
|
|
62
|
+
export declare function formatFinishMessage(finishReason: string, usage?: {
|
|
63
|
+
inputTokens?: number;
|
|
64
|
+
outputTokens?: number;
|
|
65
|
+
totalTokens?: number;
|
|
66
|
+
}): string;
|
|
67
|
+
export declare function formatDone(): string;
|
|
68
|
+
//# sourceMappingURL=stream-parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-parts.d.ts","sourceRoot":"","sources":["../../src/types/stream-parts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMnD,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,IAAI,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;CACxC,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;CACvC,GACD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,IAAI,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;CACxC,CAAC;AAEN,MAAM,MAAM,gBAAgB,GACxB;IACE,IAAI,EAAE,0BAA0B,CAAC;IACjC,IAAI,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAC;CAC1C,GACD;IACE,IAAI,EAAE,yBAAyB,CAAC;IAChC,IAAI,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;CACzC,CAAC;AAEN,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAC9B;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;CACpC,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;CACnC,GACD;IACE,IAAI,EAAE,4BAA4B,CAAC;IACnC,IAAI,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC;CAC5C,CAAC;AAEN,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,gBAAgB,GAChB,WAAW,GACX,sBAAsB,CAAC;AAI3B,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,IAAI,IAAI,UAC5B,CAAC;AAEnC,eAAO,MAAM,eAAe,GAAI,MAAM;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,IAAI,IAAI,cACtB,CAAC;AAE5C,eAAO,MAAM,iBAAiB,GAAI,MAAM;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,IAAI,IAAI,gBACtB,CAAC;AAE9C,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,IAAI,IAAI,WAC/B,CAAC;AAEhC,eAAO,MAAM,uBAAuB,GAClC,MAAM;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KACrB,IAAI,IAAI,sBAC0E,CAAC;AAWtF,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE/C;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,WAAW,GAAG,MAAM,EACjE,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GACnB,MAAM,CAER;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAEpE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7E,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAOR;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,MAAM,CAER;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// ── Type guards ─────────────────────────────────────────────────────
|
|
2
|
+
export const isOHDataPart = (part) => part.type.startsWith("data-oh:");
|
|
3
|
+
export const isSubagentEvent = (part) => part.type.startsWith("data-oh:subagent.");
|
|
4
|
+
export const isCompactionEvent = (part) => part.type.startsWith("data-oh:compaction.");
|
|
5
|
+
export const isRetryEvent = (part) => part.type === "data-oh:retry";
|
|
6
|
+
export const isSessionLifecycleEvent = (part) => part.type.startsWith("data-oh:turn.") || part.type === "data-oh:session.compacting";
|
|
7
|
+
// ── SSE stream formatters ───────────────────────────────────────────
|
|
8
|
+
//
|
|
9
|
+
// These produce SSE-encoded strings matching the AI SDK 5 data stream
|
|
10
|
+
// protocol. Each returns a complete SSE event line (`data: ...\n\n`).
|
|
11
|
+
//
|
|
12
|
+
// Primary use: building raw ReadableStreams without `createUIMessageStream`.
|
|
13
|
+
// For the standard path, `toUIMessageStream` uses the AI SDK's writer
|
|
14
|
+
// and only needs the chunk objects (not SSE strings).
|
|
15
|
+
export function formatSSE(data) {
|
|
16
|
+
return `data: ${JSON.stringify(data)}\n\n`;
|
|
17
|
+
}
|
|
18
|
+
export function formatTextDelta(id, delta) {
|
|
19
|
+
return formatSSE({ type: "text-delta", id, delta });
|
|
20
|
+
}
|
|
21
|
+
export function formatReasoningDelta(id, delta) {
|
|
22
|
+
return formatSSE({ type: "reasoning-delta", id, delta });
|
|
23
|
+
}
|
|
24
|
+
export function formatDataPart(name, data) {
|
|
25
|
+
return formatSSE({ type: `data-${name}`, data });
|
|
26
|
+
}
|
|
27
|
+
export function formatToolStart(id, toolName) {
|
|
28
|
+
return formatSSE({ type: "tool-input-start", id, toolName });
|
|
29
|
+
}
|
|
30
|
+
export function formatToolResult(id, output) {
|
|
31
|
+
return formatSSE({ type: "tool-output-available", id, output });
|
|
32
|
+
}
|
|
33
|
+
export function formatToolError(id, error) {
|
|
34
|
+
return formatSSE({ type: "tool-output-error", id, error });
|
|
35
|
+
}
|
|
36
|
+
export function formatStepStart(messageId) {
|
|
37
|
+
return formatSSE({ type: "start-step", ...(messageId ? { messageId } : {}) });
|
|
38
|
+
}
|
|
39
|
+
export function formatStepFinish(finishReason, usage, messageId) {
|
|
40
|
+
return formatSSE({
|
|
41
|
+
type: "finish-step",
|
|
42
|
+
finishReason,
|
|
43
|
+
...(usage ? { usage } : {}),
|
|
44
|
+
...(messageId ? { messageId } : {}),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export function formatFinishMessage(finishReason, usage) {
|
|
48
|
+
return formatSSE({ type: "finish", finishReason, ...(usage ? { usage } : {}) });
|
|
49
|
+
}
|
|
50
|
+
export function formatDone() {
|
|
51
|
+
return "data: [DONE]\n\n";
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=stream-parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-parts.js","sourceRoot":"","sources":["../../src/types/stream-parts.ts"],"names":[],"mappings":"AAuDA,uEAAuE;AAEvE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAsB,EAAsB,EAAE,CACzE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAEnC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAsB,EAA0B,EAAE,CAChF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAsB,EAA4B,EAAE,CACpF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAsB,EAAuB,EAAE,CAC1E,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC;AAEhC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,IAAsB,EACU,EAAE,CAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,4BAA4B,CAAC;AAEtF,uEAAuE;AACvE,EAAE;AACF,sEAAsE;AACtE,sEAAsE;AACtE,EAAE;AACF,6EAA6E;AAC7E,sEAAsE;AACtE,sDAAsD;AAEtD,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,KAAa;IACvD,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAAU,EAAE,KAAa;IAC5D,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAO,EACP,IAAoB;IAEpB,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,QAAgB;IAC1D,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAU,EAAE,MAAe;IAC1D,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,KAAa;IACvD,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAkB;IAChD,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,YAAoB,EACpB,KAA6E,EAC7E,SAAkB;IAElB,OAAO,SAAS,CAAC;QACf,IAAI,EAAE,aAAa;QACnB,YAAY;QACZ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,YAAoB,EACpB,KAA6E;IAE7E,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { UIMessage } from "ai";
|
|
2
|
+
export type OHDataTypes = {
|
|
3
|
+
"oh:subagent.start": {
|
|
4
|
+
agentName: string;
|
|
5
|
+
task: string;
|
|
6
|
+
parentAgent?: string;
|
|
7
|
+
};
|
|
8
|
+
"oh:subagent.done": {
|
|
9
|
+
agentName: string;
|
|
10
|
+
durationMs: number;
|
|
11
|
+
};
|
|
12
|
+
"oh:subagent.error": {
|
|
13
|
+
agentName: string;
|
|
14
|
+
error: string;
|
|
15
|
+
};
|
|
16
|
+
"oh:compaction.start": Record<string, never>;
|
|
17
|
+
"oh:compaction.done": {
|
|
18
|
+
messagesRemoved: number;
|
|
19
|
+
};
|
|
20
|
+
"oh:retry": {
|
|
21
|
+
attempt: number;
|
|
22
|
+
reason: string;
|
|
23
|
+
delayMs: number;
|
|
24
|
+
};
|
|
25
|
+
"oh:turn.start": {
|
|
26
|
+
turnIndex: number;
|
|
27
|
+
};
|
|
28
|
+
"oh:turn.done": {
|
|
29
|
+
turnIndex: number;
|
|
30
|
+
durationMs: number;
|
|
31
|
+
};
|
|
32
|
+
"oh:session.compacting": Record<string, never>;
|
|
33
|
+
};
|
|
34
|
+
export type OHMetadata = {
|
|
35
|
+
agentName?: string;
|
|
36
|
+
sessionId?: string;
|
|
37
|
+
turnIndex?: number;
|
|
38
|
+
wasCompacted?: boolean;
|
|
39
|
+
};
|
|
40
|
+
export type OHUIMessage = UIMessage<OHMetadata, OHDataTypes>;
|
|
41
|
+
//# sourceMappingURL=ui-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-message.d.ts","sourceRoot":"","sources":["../../src/types/ui-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAOpC,MAAM,MAAM,WAAW,GAAG;IACxB,mBAAmB,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,kBAAkB,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,mBAAmB,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7C,oBAAoB,EAAE;QACpB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,cAAc,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAChD,CAAC;AAIF,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAIF,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-message.js","sourceRoot":"","sources":["../../src/types/ui-message.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UIMessageChunk } from "ai";
|
|
2
|
+
import type { SessionEvent } from "./session.js";
|
|
3
|
+
import type { OHDataTypes, OHMetadata } from "./types/ui-message.js";
|
|
4
|
+
type OHChunk = UIMessageChunk<OHMetadata, OHDataTypes>;
|
|
5
|
+
/**
|
|
6
|
+
* Maps a stream of SessionEvents into a ReadableStream of AI SDK 5
|
|
7
|
+
* UIMessageChunks. Handles text/reasoning part lifecycle (start/end),
|
|
8
|
+
* tool mapping, and OH-specific data parts for subagents, compaction,
|
|
9
|
+
* retry, and turn lifecycle.
|
|
10
|
+
*/
|
|
11
|
+
export declare function sessionEventsToUIStream(events: AsyncIterable<SessionEvent>, options?: {
|
|
12
|
+
signal?: AbortSignal;
|
|
13
|
+
}): ReadableStream<OHChunk>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=ui-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-stream.d.ts","sourceRoot":"","sources":["../src/ui-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAErE,KAAK,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,EACnC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACjC,cAAc,CAAC,OAAO,CAAC,CA4QzB"}
|