@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,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":"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"}
@@ -0,0 +1,44 @@
1
+ import type { UIMessage } from "ai";
2
+ export type OHDataTypes = {
3
+ "oh:subagent.start": {
4
+ agentName: string;
5
+ task: string;
6
+ /** Full ancestry path from outermost to innermost agent, e.g. ["explore"] or ["explore", "search"]. */
7
+ path: string[];
8
+ };
9
+ "oh:subagent.done": {
10
+ agentName: string;
11
+ durationMs: number;
12
+ path: string[];
13
+ };
14
+ "oh:subagent.error": {
15
+ agentName: string;
16
+ error: string;
17
+ path: string[];
18
+ };
19
+ "oh:compaction.start": Record<string, never>;
20
+ "oh:compaction.done": {
21
+ messagesRemoved: number;
22
+ };
23
+ "oh:retry": {
24
+ attempt: number;
25
+ reason: string;
26
+ delayMs: number;
27
+ };
28
+ "oh:turn.start": {
29
+ turnIndex: number;
30
+ };
31
+ "oh:turn.done": {
32
+ turnIndex: number;
33
+ durationMs: number;
34
+ };
35
+ "oh:session.compacting": Record<string, never>;
36
+ };
37
+ export type OHMetadata = {
38
+ agentName?: string;
39
+ sessionId?: string;
40
+ turnIndex?: number;
41
+ wasCompacted?: boolean;
42
+ };
43
+ export type OHUIMessage = UIMessage<OHMetadata, OHDataTypes>;
44
+ //# 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,uGAAuG;QACvG,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;IACF,kBAAkB,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;IACF,mBAAmB,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ui-message.js.map
@@ -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,CAqRzB"}
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Maps a stream of SessionEvents into a ReadableStream of AI SDK 5
3
+ * UIMessageChunks. Handles text/reasoning part lifecycle (start/end),
4
+ * tool mapping, and OH-specific data parts for subagents, compaction,
5
+ * retry, and turn lifecycle.
6
+ */
7
+ export function sessionEventsToUIStream(events, options) {
8
+ return new ReadableStream({
9
+ async start(controller) {
10
+ let partCounter = 0;
11
+ const nextId = () => `oh-${++partCounter}`;
12
+ // Track active text/reasoning part IDs for start/end lifecycle
13
+ let textPartId = null;
14
+ let reasoningPartId = null;
15
+ // Track subagent start times and names for duration calculation and done/error events
16
+ const subagentStartTimes = new Map();
17
+ const subagentNames = new Map();
18
+ const enqueue = (chunk) => controller.enqueue(chunk);
19
+ const endTextPart = () => {
20
+ if (textPartId) {
21
+ enqueue({ type: "text-end", id: textPartId });
22
+ textPartId = null;
23
+ }
24
+ };
25
+ const endReasoningPart = () => {
26
+ if (reasoningPartId) {
27
+ enqueue({ type: "reasoning-end", id: reasoningPartId });
28
+ reasoningPartId = null;
29
+ }
30
+ };
31
+ // Emit stream start
32
+ enqueue({ type: "start" });
33
+ try {
34
+ for await (const event of events) {
35
+ if (options?.signal?.aborted) {
36
+ enqueue({ type: "abort", reason: "aborted" });
37
+ break;
38
+ }
39
+ switch (event.type) {
40
+ // ── Text ──────────────────────────────────────────────
41
+ case "text.delta": {
42
+ if (!textPartId) {
43
+ endReasoningPart();
44
+ textPartId = nextId();
45
+ enqueue({ type: "text-start", id: textPartId });
46
+ }
47
+ enqueue({ type: "text-delta", id: textPartId, delta: event.text });
48
+ break;
49
+ }
50
+ case "text.done": {
51
+ endTextPart();
52
+ break;
53
+ }
54
+ // ── Reasoning ─────────────────────────────────────────
55
+ case "reasoning.delta": {
56
+ if (!reasoningPartId) {
57
+ endTextPart();
58
+ reasoningPartId = nextId();
59
+ enqueue({ type: "reasoning-start", id: reasoningPartId });
60
+ }
61
+ enqueue({
62
+ type: "reasoning-delta",
63
+ id: reasoningPartId,
64
+ delta: event.text,
65
+ });
66
+ break;
67
+ }
68
+ case "reasoning.done": {
69
+ endReasoningPart();
70
+ break;
71
+ }
72
+ // ── Tools ─────────────────────────────────────────────
73
+ case "tool.start": {
74
+ endTextPart();
75
+ endReasoningPart();
76
+ // Emit tool-input-start + tool-input-available (OH has full input at start)
77
+ enqueue({
78
+ type: "tool-input-start",
79
+ toolCallId: event.toolCallId,
80
+ toolName: event.toolName,
81
+ });
82
+ enqueue({
83
+ type: "tool-input-available",
84
+ toolCallId: event.toolCallId,
85
+ toolName: event.toolName,
86
+ input: event.input,
87
+ });
88
+ // If this is a task tool (subagent), emit subagent start data part
89
+ if (event.toolName === "task") {
90
+ const input = event.input;
91
+ if (input.agent) {
92
+ subagentStartTimes.set(event.toolCallId, Date.now());
93
+ subagentNames.set(event.toolCallId, input.agent);
94
+ enqueue({
95
+ type: "data-oh:subagent.start",
96
+ data: {
97
+ agentName: input.agent,
98
+ task: input.prompt ?? "",
99
+ path: [input.agent],
100
+ },
101
+ });
102
+ }
103
+ }
104
+ break;
105
+ }
106
+ case "tool.done": {
107
+ enqueue({
108
+ type: "tool-output-available",
109
+ toolCallId: event.toolCallId,
110
+ output: event.output,
111
+ });
112
+ // If this is a task tool (subagent), emit subagent done data part
113
+ if (event.toolName === "task") {
114
+ const startTime = subagentStartTimes.get(event.toolCallId);
115
+ const durationMs = startTime ? Date.now() - startTime : 0;
116
+ const agentName = subagentNames.get(event.toolCallId) ?? "unknown";
117
+ subagentStartTimes.delete(event.toolCallId);
118
+ subagentNames.delete(event.toolCallId);
119
+ enqueue({
120
+ type: "data-oh:subagent.done",
121
+ data: {
122
+ agentName,
123
+ durationMs,
124
+ path: [agentName],
125
+ },
126
+ });
127
+ }
128
+ break;
129
+ }
130
+ case "tool.error": {
131
+ enqueue({
132
+ type: "tool-output-error",
133
+ toolCallId: event.toolCallId,
134
+ errorText: event.error,
135
+ });
136
+ // If this is a task tool (subagent), emit subagent error data part
137
+ if (event.toolName === "task") {
138
+ const agentName = subagentNames.get(event.toolCallId) ?? "unknown";
139
+ subagentStartTimes.delete(event.toolCallId);
140
+ subagentNames.delete(event.toolCallId);
141
+ enqueue({
142
+ type: "data-oh:subagent.error",
143
+ data: {
144
+ agentName,
145
+ error: event.error,
146
+ path: [agentName],
147
+ },
148
+ });
149
+ }
150
+ break;
151
+ }
152
+ // ── Steps ─────────────────────────────────────────────
153
+ case "step.start": {
154
+ endTextPart();
155
+ endReasoningPart();
156
+ enqueue({ type: "start-step" });
157
+ break;
158
+ }
159
+ case "step.done": {
160
+ endTextPart();
161
+ endReasoningPart();
162
+ enqueue({ type: "finish-step" });
163
+ break;
164
+ }
165
+ // ── Done ──────────────────────────────────────────────
166
+ case "done": {
167
+ endTextPart();
168
+ endReasoningPart();
169
+ const finishReason = event.result === "complete"
170
+ ? "stop"
171
+ : event.result === "max_steps"
172
+ ? "tool-calls"
173
+ : event.result === "error"
174
+ ? "error"
175
+ : "unknown";
176
+ enqueue({ type: "finish", finishReason });
177
+ break;
178
+ }
179
+ // ── Error ─────────────────────────────────────────────
180
+ case "error": {
181
+ enqueue({
182
+ type: "error",
183
+ errorText: event.error.message,
184
+ });
185
+ break;
186
+ }
187
+ // ── Session lifecycle → OH data parts ─────────────────
188
+ case "turn.start": {
189
+ enqueue({
190
+ type: "data-oh:turn.start",
191
+ data: { turnIndex: event.turnNumber },
192
+ });
193
+ break;
194
+ }
195
+ case "turn.done": {
196
+ enqueue({
197
+ type: "data-oh:turn.done",
198
+ data: {
199
+ turnIndex: event.turnNumber,
200
+ durationMs: 0, // not tracked by session currently
201
+ },
202
+ });
203
+ break;
204
+ }
205
+ case "compaction.start": {
206
+ enqueue({
207
+ type: "data-oh:session.compacting",
208
+ data: {},
209
+ });
210
+ enqueue({
211
+ type: "data-oh:compaction.start",
212
+ data: {},
213
+ });
214
+ break;
215
+ }
216
+ case "compaction.done": {
217
+ enqueue({
218
+ type: "data-oh:compaction.done",
219
+ data: { messagesRemoved: 0 },
220
+ });
221
+ break;
222
+ }
223
+ case "compaction.pruned": {
224
+ enqueue({
225
+ type: "data-oh:compaction.done",
226
+ data: { messagesRemoved: event.messagesRemoved },
227
+ });
228
+ break;
229
+ }
230
+ case "retry": {
231
+ enqueue({
232
+ type: "data-oh:retry",
233
+ data: {
234
+ attempt: event.attempt,
235
+ reason: event.error.message,
236
+ delayMs: event.delayMs,
237
+ },
238
+ });
239
+ break;
240
+ }
241
+ // compaction.summary — no UI-facing chunk needed
242
+ case "compaction.summary":
243
+ break;
244
+ }
245
+ }
246
+ }
247
+ catch (err) {
248
+ const message = err instanceof Error ? err.message : String(err);
249
+ controller.enqueue({ type: "error", errorText: message });
250
+ }
251
+ controller.close();
252
+ },
253
+ });
254
+ }
255
+ //# sourceMappingURL=ui-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-stream.js","sourceRoot":"","sources":["../src/ui-stream.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openharness/core",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "description": "Building blocks for capable, general-purpose agents",
6
6
  "exports": {
@@ -21,13 +21,6 @@
21
21
  "dist",
22
22
  "README.md"
23
23
  ],
24
- "scripts": {
25
- "build": "tsc",
26
- "cli": "tsx --env-file=.env example/cli.ts",
27
- "typecheck": "tsc --noEmit",
28
- "format": "oxfmt --write src example",
29
- "format:check": "oxfmt --check src example"
30
- },
31
24
  "keywords": [
32
25
  "agent",
33
26
  "ai",
@@ -45,13 +38,17 @@
45
38
  "@ai-sdk/anthropic": "^3.0.46",
46
39
  "@ai-sdk/openai": "^3.0.30",
47
40
  "@types/node": "^25.3.0",
48
- "chalk": "^5.6.2",
49
- "ora": "^9.3.0",
50
41
  "oxfmt": "^0.35.0",
51
42
  "tsx": "^4.21.0",
52
43
  "typescript": "^5.9.3"
53
44
  },
54
45
  "peerDependencies": {
55
46
  "zod": "^4.0.0"
47
+ },
48
+ "scripts": {
49
+ "build": "tsc",
50
+ "typecheck": "tsc --noEmit",
51
+ "format": "oxfmt --write src",
52
+ "format:check": "oxfmt --check src"
56
53
  }
57
- }
54
+ }