@openharness/react 0.2.2 → 0.2.4
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/README.md +4 -0
- package/dist/__tests__/use-open-harness.test.d.ts +2 -0
- package/dist/__tests__/use-open-harness.test.d.ts.map +1 -0
- package/dist/__tests__/use-open-harness.test.js +115 -0
- package/dist/__tests__/use-open-harness.test.js.map +1 -0
- package/dist/hooks/use-open-harness.d.ts +10 -2
- package/dist/hooks/use-open-harness.d.ts.map +1 -1
- package/dist/hooks/use-open-harness.js +21 -16
- package/dist/hooks/use-open-harness.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +7 -5
package/README.md
CHANGED
|
@@ -61,6 +61,10 @@ Context provider that holds subagent, session, and sandbox state. Wrap your app
|
|
|
61
61
|
|
|
62
62
|
Creates a chat session connected to your API endpoint. Returns the same interface as AI SDK 5's `useChat` (`messages`, `sendMessage`, `status`, `stop`, etc.), typed with `OHUIMessage`.
|
|
63
63
|
|
|
64
|
+
If you pass `messages`, the hook will also hydrate them when they arrive after the first render, which is useful for async persistence loads.
|
|
65
|
+
|
|
66
|
+
`onFinish` receives the full finish event, including `isAbort`, so persistence code can skip saving aborted assistant messages when desired.
|
|
67
|
+
|
|
64
68
|
### `useSubagentStatus()`
|
|
65
69
|
|
|
66
70
|
Derives reactive state from `data-oh:subagent.*` stream events:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-open-harness.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/use-open-harness.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// @vitest-environment jsdom
|
|
3
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
4
|
+
import { renderHook, waitFor } from "@testing-library/react";
|
|
5
|
+
import { useChat } from "@ai-sdk/react";
|
|
6
|
+
import { OpenHarnessProvider } from "../provider.js";
|
|
7
|
+
import { useOpenHarness } from "../hooks/use-open-harness.js";
|
|
8
|
+
vi.mock("@ai-sdk/react", () => ({
|
|
9
|
+
useChat: vi.fn(),
|
|
10
|
+
}));
|
|
11
|
+
function wrapper({ children }) {
|
|
12
|
+
return _jsx(OpenHarnessProvider, { children: children });
|
|
13
|
+
}
|
|
14
|
+
function createMockHelpers(overrides = {}) {
|
|
15
|
+
return {
|
|
16
|
+
id: "chat-1",
|
|
17
|
+
messages: [],
|
|
18
|
+
setMessages: vi.fn(),
|
|
19
|
+
sendMessage: vi.fn(),
|
|
20
|
+
regenerate: vi.fn(),
|
|
21
|
+
stop: vi.fn(),
|
|
22
|
+
resumeStream: vi.fn(),
|
|
23
|
+
addToolResult: vi.fn(),
|
|
24
|
+
addToolOutput: vi.fn(),
|
|
25
|
+
addToolApprovalResponse: vi.fn(),
|
|
26
|
+
status: "ready",
|
|
27
|
+
clearError: vi.fn(),
|
|
28
|
+
error: undefined,
|
|
29
|
+
...overrides,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
describe("useOpenHarness", () => {
|
|
33
|
+
const mockedUseChat = vi.mocked(useChat);
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
mockedUseChat.mockReset();
|
|
36
|
+
});
|
|
37
|
+
it("forwards the full onFinish callback to useChat", () => {
|
|
38
|
+
const helpers = createMockHelpers();
|
|
39
|
+
let options;
|
|
40
|
+
mockedUseChat.mockImplementation((nextOptions) => {
|
|
41
|
+
options = nextOptions;
|
|
42
|
+
return helpers;
|
|
43
|
+
});
|
|
44
|
+
const onFinish = vi.fn();
|
|
45
|
+
renderHook(() => useOpenHarness({
|
|
46
|
+
endpoint: "/api/chat",
|
|
47
|
+
onFinish,
|
|
48
|
+
}), { wrapper });
|
|
49
|
+
const message = {
|
|
50
|
+
id: "a1",
|
|
51
|
+
role: "assistant",
|
|
52
|
+
parts: [{ type: "text", text: "hello" }],
|
|
53
|
+
};
|
|
54
|
+
const event = {
|
|
55
|
+
message,
|
|
56
|
+
messages: [message],
|
|
57
|
+
isAbort: true,
|
|
58
|
+
isDisconnect: false,
|
|
59
|
+
isError: false,
|
|
60
|
+
finishReason: "stop",
|
|
61
|
+
};
|
|
62
|
+
options.onFinish(event);
|
|
63
|
+
expect(onFinish).toHaveBeenCalledWith(event);
|
|
64
|
+
});
|
|
65
|
+
it("hydrates persisted messages that arrive after the first render", async () => {
|
|
66
|
+
const persistedMessages = [
|
|
67
|
+
{
|
|
68
|
+
id: "m1",
|
|
69
|
+
role: "assistant",
|
|
70
|
+
parts: [{ type: "text", text: "persisted" }],
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
const helpers = createMockHelpers();
|
|
74
|
+
mockedUseChat.mockReturnValue(helpers);
|
|
75
|
+
const { rerender } = renderHook(({ messages }) => useOpenHarness({
|
|
76
|
+
endpoint: "/api/chat",
|
|
77
|
+
messages,
|
|
78
|
+
}), {
|
|
79
|
+
initialProps: { messages: undefined },
|
|
80
|
+
wrapper,
|
|
81
|
+
});
|
|
82
|
+
expect(helpers.setMessages).not.toHaveBeenCalled();
|
|
83
|
+
rerender({ messages: persistedMessages });
|
|
84
|
+
await waitFor(() => {
|
|
85
|
+
expect(helpers.setMessages).toHaveBeenCalledWith(persistedMessages);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
it("does not overwrite an active local chat with hydrated messages", async () => {
|
|
89
|
+
const persistedMessages = [
|
|
90
|
+
{
|
|
91
|
+
id: "m1",
|
|
92
|
+
role: "assistant",
|
|
93
|
+
parts: [{ type: "text", text: "persisted" }],
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
const helpers = createMockHelpers({
|
|
97
|
+
messages: [
|
|
98
|
+
{
|
|
99
|
+
id: "local-1",
|
|
100
|
+
role: "user",
|
|
101
|
+
parts: [{ type: "text", text: "live local state" }],
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
});
|
|
105
|
+
mockedUseChat.mockReturnValue(helpers);
|
|
106
|
+
renderHook(() => useOpenHarness({
|
|
107
|
+
endpoint: "/api/chat",
|
|
108
|
+
messages: persistedMessages,
|
|
109
|
+
}), { wrapper });
|
|
110
|
+
await waitFor(() => {
|
|
111
|
+
expect(helpers.setMessages).not.toHaveBeenCalled();
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=use-open-harness.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-open-harness.test.js","sourceRoot":"","sources":["../../src/__tests__/use-open-harness.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { type UseChatHelpers } from "@ai-sdk/react";
|
|
2
2
|
import type { OHUIMessage } from "@openharness/core";
|
|
3
3
|
import { type OHTransportOptions } from "../transport.js";
|
|
4
|
+
export interface UseOpenHarnessFinishEvent {
|
|
5
|
+
message: OHUIMessage;
|
|
6
|
+
messages: OHUIMessage[];
|
|
7
|
+
isAbort: boolean;
|
|
8
|
+
isDisconnect: boolean;
|
|
9
|
+
isError: boolean;
|
|
10
|
+
finishReason?: string;
|
|
11
|
+
}
|
|
4
12
|
export interface UseOpenHarnessConfig extends OHTransportOptions {
|
|
5
13
|
/** Your SSE endpoint URL. */
|
|
6
14
|
endpoint: string;
|
|
@@ -8,8 +16,8 @@ export interface UseOpenHarnessConfig extends OHTransportOptions {
|
|
|
8
16
|
id?: string;
|
|
9
17
|
/** Initial messages to populate the chat with (e.g. loaded from persistence). */
|
|
10
18
|
messages?: OHUIMessage[];
|
|
11
|
-
/** Called when the assistant message finishes streaming. */
|
|
12
|
-
onFinish?: (
|
|
19
|
+
/** Called when the assistant message finishes streaming, including abort/error metadata. */
|
|
20
|
+
onFinish?: (event: UseOpenHarnessFinishEvent) => void;
|
|
13
21
|
}
|
|
14
22
|
/**
|
|
15
23
|
* Primary hook for OpenHarness chat. Wraps AI SDK 5's `useChat` with:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-open-harness.d.ts","sourceRoot":"","sources":["../../src/hooks/use-open-harness.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"use-open-harness.d.ts","sourceRoot":"","sources":["../../src/hooks/use-open-harness.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACvD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,oBAAoB,GAC3B,cAAc,CAAC,WAAW,CAAC,CAqB7B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useRef } from "react";
|
|
2
|
-
import { useChat
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
import { useChat } from "@ai-sdk/react";
|
|
3
3
|
import { useOHContext } from "../context.js";
|
|
4
4
|
import { createOHTransport } from "../transport.js";
|
|
5
5
|
/**
|
|
@@ -12,19 +12,24 @@ import { createOHTransport } from "../transport.js";
|
|
|
12
12
|
*/
|
|
13
13
|
export function useOpenHarness(config) {
|
|
14
14
|
const { dispatch } = useOHContext();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
15
|
+
const chat = useChat({
|
|
16
|
+
id: config.id,
|
|
17
|
+
messages: config.messages,
|
|
18
|
+
transport: createOHTransport(config.endpoint, config),
|
|
19
|
+
onData: (part) => dispatch(part),
|
|
20
|
+
onFinish: config.onFinish,
|
|
21
|
+
});
|
|
22
|
+
const hydratedChatIdRef = useRef(null);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (!config.messages?.length)
|
|
25
|
+
return;
|
|
26
|
+
if (hydratedChatIdRef.current === chat.id)
|
|
27
|
+
return;
|
|
28
|
+
if (chat.messages.length > 0)
|
|
29
|
+
return;
|
|
30
|
+
chat.setMessages(config.messages);
|
|
31
|
+
hydratedChatIdRef.current = chat.id;
|
|
32
|
+
}, [chat.id, chat.messages.length, chat.setMessages, config.messages]);
|
|
33
|
+
return chat;
|
|
29
34
|
}
|
|
30
35
|
//# sourceMappingURL=use-open-harness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-open-harness.js","sourceRoot":"","sources":["../../src/hooks/use-open-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"use-open-harness.js","sourceRoot":"","sources":["../../src/hooks/use-open-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAuB,MAAM,eAAe,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAA2B,MAAM,iBAAiB,CAAC;AAsB7E;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA4B;IAE5B,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,OAAO,CAAc;QAChC,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,iBAAiB,CAAc,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;QAClE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM;YAAE,OAAO;QACrC,IAAI,iBAAiB,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE;YAAE,OAAO;QAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QAErC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IACtC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvE,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { OpenHarnessProvider, type OpenHarnessProviderProps, } from "./provider.js";
|
|
2
|
-
export { useOpenHarness, type UseOpenHarnessConfig, } from "./hooks/use-open-harness.js";
|
|
2
|
+
export { useOpenHarness, type UseOpenHarnessConfig, type UseOpenHarnessFinishEvent, } from "./hooks/use-open-harness.js";
|
|
3
3
|
export { useSubagentStatus, type UseSubagentStatusResult, } from "./hooks/use-subagent-status.js";
|
|
4
4
|
export { useSessionStatus } from "./hooks/use-session-status.js";
|
|
5
5
|
export { useSandboxStatus } from "./hooks/use-sandbox-status.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,GAC7B,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAIjE,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,OAAO,EACL,mBAAmB,GAEpB,MAAM,eAAe,CAAC;AAEvB,uEAAuE;AAEvE,OAAO,EACL,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,OAAO,EACL,mBAAmB,GAEpB,MAAM,eAAe,CAAC;AAEvB,uEAAuE;AAEvE,OAAO,EACL,cAAc,GAGf,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,iBAAiB,GAElB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,uEAAuE;AAEvE,OAAO,EACL,iBAAiB,GAElB,MAAM,gBAAgB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openharness/react",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "React hooks and provider for OpenHarness AI SDK 5 integration",
|
|
6
6
|
"exports": {
|
|
@@ -15,8 +15,11 @@
|
|
|
15
15
|
],
|
|
16
16
|
"peerDependencies": {
|
|
17
17
|
"@ai-sdk/react": "^3.0.0",
|
|
18
|
-
"
|
|
19
|
-
"
|
|
18
|
+
"@openharness/core": "^0.4.4",
|
|
19
|
+
"react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"ai": "^6.0.97"
|
|
20
23
|
},
|
|
21
24
|
"homepage": "https://github.com/MaxGfeller/open-harness/tree/main/packages/react#readme",
|
|
22
25
|
"repository": {
|
|
@@ -39,11 +42,10 @@
|
|
|
39
42
|
"@ai-sdk/react": "^3.0.0",
|
|
40
43
|
"@testing-library/react": "^16.3.0",
|
|
41
44
|
"@types/react": "^19.0.0",
|
|
42
|
-
"ai": "^6.0.97",
|
|
43
45
|
"react": "^19.1.0",
|
|
44
46
|
"react-dom": "^19.1.0",
|
|
45
47
|
"typescript": "^5.9.3",
|
|
46
|
-
"@openharness/core": "0.4.
|
|
48
|
+
"@openharness/core": "0.4.5"
|
|
47
49
|
},
|
|
48
50
|
"license": "ISC",
|
|
49
51
|
"scripts": {
|