@openharness/react 0.2.3 → 0.2.5

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=use-open-harness.test.d.ts.map
@@ -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?: (message: OHUIMessage) => void;
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,EAAQ,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,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,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,oBAAoB,GAC3B,cAAc,CAAC,WAAW,CAAC,CAkB7B"}
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,CAwB7B"}
@@ -1,5 +1,5 @@
1
- import { useRef } from "react";
2
- import { useChat, Chat } from "@ai-sdk/react";
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,27 @@ import { createOHTransport } from "../transport.js";
12
12
  */
13
13
  export function useOpenHarness(config) {
14
14
  const { dispatch } = useOHContext();
15
- // Create a stable Chat instance so useChat doesn't recreate on every render
16
- const chatRef = useRef(null);
17
- if (!chatRef.current) {
18
- chatRef.current = new Chat({
19
- id: config.id,
20
- messages: config.messages,
21
- transport: createOHTransport(config.endpoint, config),
22
- onData: (part) => dispatch(part),
23
- onFinish: config.onFinish
24
- ? ({ message }) => config.onFinish(message)
25
- : undefined,
26
- });
27
- }
28
- return useChat({ chat: chatRef.current });
15
+ const chat = useChat({
16
+ // Only pass `id` when explicitly provided. Passing `undefined` causes
17
+ // AI SDK's useChat to recreate the Chat instance on every render because
18
+ // the auto-generated id never matches the `undefined` in options.
19
+ ...(config.id != null && { id: config.id }),
20
+ messages: config.messages,
21
+ transport: createOHTransport(config.endpoint, config),
22
+ onData: (part) => dispatch(part),
23
+ onFinish: config.onFinish,
24
+ });
25
+ const hydratedChatIdRef = useRef(null);
26
+ useEffect(() => {
27
+ if (!config.messages?.length)
28
+ return;
29
+ if (hydratedChatIdRef.current === chat.id)
30
+ return;
31
+ if (chat.messages.length > 0)
32
+ return;
33
+ chat.setMessages(config.messages);
34
+ hydratedChatIdRef.current = chat.id;
35
+ }, [chat.id, chat.messages.length, chat.setMessages, config.messages]);
36
+ return chat;
29
37
  }
30
38
  //# 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;AAC/B,OAAO,EAAE,OAAO,EAAuB,IAAI,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAA2B,MAAM,iBAAiB,CAAC;AAa7E;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA4B;IAE5B,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;IAEpC,4EAA4E;IAC5E,MAAM,OAAO,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,GAAG,IAAI,IAAI,CAAc;YACtC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,iBAAiB,CAAc,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;YAClE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACvB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAS,CAAC,OAAO,CAAC;gBAC5C,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAc,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AACzD,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,sEAAsE;QACtE,yEAAyE;QACzE,kEAAkE;QAClE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAC3C,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";
@@ -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,GAC1B,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"}
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,GAEf,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"}
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",
3
+ "version": "0.2.5",
4
4
  "type": "module",
5
5
  "description": "React hooks and provider for OpenHarness AI SDK 5 integration",
6
6
  "exports": {
@@ -45,7 +45,7 @@
45
45
  "react": "^19.1.0",
46
46
  "react-dom": "^19.1.0",
47
47
  "typescript": "^5.9.3",
48
- "@openharness/core": "0.4.4"
48
+ "@openharness/core": "0.5.2"
49
49
  },
50
50
  "license": "ISC",
51
51
  "scripts": {