@openharness/react 0.2.0 → 0.2.2
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 +90 -0
- package/dist/context.d.ts +2 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/hooks/use-open-harness.d.ts +2 -0
- package/dist/hooks/use-open-harness.d.ts.map +1 -1
- package/dist/hooks/use-open-harness.js +1 -0
- package/dist/hooks/use-open-harness.js.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +13 -10
- package/dist/provider.js.map +1 -1
- package/package.json +22 -4
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# @openharness/react
|
|
2
|
+
|
|
3
|
+
React hooks and provider for [OpenHarness](https://github.com/MaxGfeller/open-harness) AI SDK 5 chat UIs.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @openharness/react
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Peer dependencies: `@openharness/core`, `@ai-sdk/react`, `react`
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import {
|
|
17
|
+
OpenHarnessProvider,
|
|
18
|
+
useOpenHarness,
|
|
19
|
+
useSubagentStatus,
|
|
20
|
+
useSessionStatus,
|
|
21
|
+
} from "@openharness/react";
|
|
22
|
+
|
|
23
|
+
function App() {
|
|
24
|
+
return (
|
|
25
|
+
<OpenHarnessProvider>
|
|
26
|
+
<Chat />
|
|
27
|
+
</OpenHarnessProvider>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function Chat() {
|
|
32
|
+
const { messages, sendMessage, status } = useOpenHarness({
|
|
33
|
+
endpoint: "/api/chat",
|
|
34
|
+
});
|
|
35
|
+
const { activeSubagents, hasActiveSubagents } = useSubagentStatus();
|
|
36
|
+
const session = useSessionStatus();
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<div>
|
|
40
|
+
{messages.map((msg) => (
|
|
41
|
+
<div key={msg.id}>
|
|
42
|
+
{msg.parts.map((part, i) =>
|
|
43
|
+
part.type === "text" ? <span key={i}>{part.text}</span> : null
|
|
44
|
+
)}
|
|
45
|
+
</div>
|
|
46
|
+
))}
|
|
47
|
+
{hasActiveSubagents && <p>Subagents working...</p>}
|
|
48
|
+
<button onClick={() => sendMessage({ text: "Hello" })}>Send</button>
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## API
|
|
55
|
+
|
|
56
|
+
### `<OpenHarnessProvider>`
|
|
57
|
+
|
|
58
|
+
Context provider that holds subagent, session, and sandbox state. Wrap your app or chat component with this.
|
|
59
|
+
|
|
60
|
+
### `useOpenHarness(config)`
|
|
61
|
+
|
|
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
|
+
|
|
64
|
+
### `useSubagentStatus()`
|
|
65
|
+
|
|
66
|
+
Derives reactive state from `data-oh:subagent.*` stream events:
|
|
67
|
+
|
|
68
|
+
- `activeSubagents` -- currently running subagents
|
|
69
|
+
- `recentSubagents` -- all subagents seen in this session
|
|
70
|
+
- `hasActiveSubagents` -- boolean shorthand
|
|
71
|
+
|
|
72
|
+
### `useSessionStatus()`
|
|
73
|
+
|
|
74
|
+
Tracks turn index, compaction state, and retry info from `data-oh:*` stream events.
|
|
75
|
+
|
|
76
|
+
### `useSandboxStatus()`
|
|
77
|
+
|
|
78
|
+
Tracks sandbox-related state from stream events.
|
|
79
|
+
|
|
80
|
+
### `createOHTransport(options)`
|
|
81
|
+
|
|
82
|
+
Low-level transport factory for custom integrations. Creates the SSE connection with OpenHarness data part handling.
|
|
83
|
+
|
|
84
|
+
## Documentation
|
|
85
|
+
|
|
86
|
+
See the [full documentation](https://github.com/MaxGfeller/open-harness#readme) for server setup, middleware composition, and the complete streaming protocol.
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
ISC
|
package/dist/context.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ export interface SubagentInfo {
|
|
|
2
2
|
name: string;
|
|
3
3
|
task: string;
|
|
4
4
|
status: "running" | "done" | "error";
|
|
5
|
-
|
|
5
|
+
/** Full ancestry path from outermost to innermost agent, e.g. ["explore"] or ["explore", "search"]. */
|
|
6
|
+
path: string[];
|
|
6
7
|
startedAt: number;
|
|
7
8
|
durationMs?: number;
|
|
8
9
|
error?: string;
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,uGAAuG;IACvG,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,2BAA2B,EAAE,MAAM,CAAC;CACrC;AAED,eAAO,MAAM,mBAAmB,EAAE,YAQjC,CAAC;AAIF,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;CAC5B;AAED,eAAO,MAAM,mBAAmB,EAAE,YAKjC,CAAC;AAIF,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;CAC5D;AAED,eAAO,MAAM,SAAS,gDAA6C,CAAC;AAEpE,wBAAgB,YAAY,IAAI,cAAc,CAQ7C"}
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AA2BlD,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,KAAK;IACjB,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,IAAI;IACtB,2BAA2B,EAAE,CAAC;CAC/B,CAAC;AAWF,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,cAAc,EAAE,KAAK;IACrB,MAAM,EAAE,KAAK;IACb,mBAAmB,EAAE,IAAI;IACzB,aAAa,EAAE,IAAI;CACpB,CAAC;AAWF,MAAM,CAAC,MAAM,SAAS,GAAG,aAAa,CAAwB,IAAI,CAAC,CAAC;AAEpE,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -6,6 +6,8 @@ export interface UseOpenHarnessConfig extends OHTransportOptions {
|
|
|
6
6
|
endpoint: string;
|
|
7
7
|
/** Stable chat ID for sharing state across components. */
|
|
8
8
|
id?: string;
|
|
9
|
+
/** Initial messages to populate the chat with (e.g. loaded from persistence). */
|
|
10
|
+
messages?: OHUIMessage[];
|
|
9
11
|
/** Called when the assistant message finishes streaming. */
|
|
10
12
|
onFinish?: (message: OHUIMessage) => void;
|
|
11
13
|
}
|
|
@@ -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,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,
|
|
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"}
|
|
@@ -17,6 +17,7 @@ export function useOpenHarness(config) {
|
|
|
17
17
|
if (!chatRef.current) {
|
|
18
18
|
chatRef.current = new Chat({
|
|
19
19
|
id: config.id,
|
|
20
|
+
messages: config.messages,
|
|
20
21
|
transport: createOHTransport(config.endpoint, config),
|
|
21
22
|
onData: (part) => dispatch(part),
|
|
22
23
|
onFinish: config.onFinish
|
|
@@ -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;
|
|
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"}
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAWtE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAWtE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE,wBAAwB,2CA2IzE"}
|
package/dist/provider.js
CHANGED
|
@@ -19,29 +19,31 @@ export function OpenHarnessProvider({ children }) {
|
|
|
19
19
|
switch (part.type) {
|
|
20
20
|
// ── Subagent events ──────────────────────────────────────
|
|
21
21
|
case "data-oh:subagent.start": {
|
|
22
|
-
const
|
|
22
|
+
const path = data?.path ?? [data?.agentName ?? "unknown"];
|
|
23
|
+
const key = path.join("/");
|
|
23
24
|
const info = {
|
|
24
|
-
name,
|
|
25
|
+
name: path[path.length - 1],
|
|
25
26
|
task: data?.task ?? "",
|
|
26
27
|
status: "running",
|
|
27
|
-
|
|
28
|
+
path,
|
|
28
29
|
startedAt: Date.now(),
|
|
29
30
|
};
|
|
30
31
|
setSubagents((prev) => {
|
|
31
32
|
const next = new Map(prev);
|
|
32
|
-
next.set(
|
|
33
|
+
next.set(key, info);
|
|
33
34
|
return next;
|
|
34
35
|
});
|
|
35
36
|
break;
|
|
36
37
|
}
|
|
37
38
|
case "data-oh:subagent.done": {
|
|
38
|
-
const
|
|
39
|
+
const path = data?.path ?? [data?.agentName ?? "unknown"];
|
|
40
|
+
const key = path.join("/");
|
|
39
41
|
setSubagents((prev) => {
|
|
40
|
-
const existing = prev.get(
|
|
42
|
+
const existing = prev.get(key);
|
|
41
43
|
if (!existing)
|
|
42
44
|
return prev;
|
|
43
45
|
const next = new Map(prev);
|
|
44
|
-
next.set(
|
|
46
|
+
next.set(key, {
|
|
45
47
|
...existing,
|
|
46
48
|
status: "done",
|
|
47
49
|
durationMs: data?.durationMs ?? Date.now() - existing.startedAt,
|
|
@@ -51,13 +53,14 @@ export function OpenHarnessProvider({ children }) {
|
|
|
51
53
|
break;
|
|
52
54
|
}
|
|
53
55
|
case "data-oh:subagent.error": {
|
|
54
|
-
const
|
|
56
|
+
const path = data?.path ?? [data?.agentName ?? "unknown"];
|
|
57
|
+
const key = path.join("/");
|
|
55
58
|
setSubagents((prev) => {
|
|
56
|
-
const existing = prev.get(
|
|
59
|
+
const existing = prev.get(key);
|
|
57
60
|
if (!existing)
|
|
58
61
|
return prev;
|
|
59
62
|
const next = new Map(prev);
|
|
60
|
-
next.set(
|
|
63
|
+
next.set(key, {
|
|
61
64
|
...existing,
|
|
62
65
|
status: "error",
|
|
63
66
|
error: data?.error ?? "Unknown error",
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAC;AACtE,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,mBAAmB,GAKpB,MAAM,cAAc,CAAC;AAMtB;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAA4B;IACxE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CACxC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAChB,CAAC;IACF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GACnC,QAAQ,CAAe,mBAAmB,CAAC,CAAC;IAC9C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GACnC,QAAQ,CAAe,mBAAmB,CAAC,CAAC;IAE9C,0DAA0D;IAC1D,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;IAEjC,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,IAAsC,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAuC,CAAC;QAE1D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,4DAA4D;YAC5D,KAAK,wBAAwB,CAAC,CAAC,CAAC;gBAC9B,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openharness/react",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "React hooks and provider for OpenHarness AI SDK 5 integration",
|
|
6
6
|
"exports": {
|
|
@@ -10,13 +10,31 @@
|
|
|
10
10
|
}
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
|
-
"dist"
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md"
|
|
14
15
|
],
|
|
15
16
|
"peerDependencies": {
|
|
16
17
|
"@ai-sdk/react": "^3.0.0",
|
|
17
18
|
"react": "^18.0.0 || ^19.0.0",
|
|
18
|
-
"@openharness/core": "0.
|
|
19
|
+
"@openharness/core": "0.4.2"
|
|
19
20
|
},
|
|
21
|
+
"homepage": "https://github.com/MaxGfeller/open-harness/tree/main/packages/react#readme",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/MaxGfeller/open-harness.git",
|
|
25
|
+
"directory": "packages/react"
|
|
26
|
+
},
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/MaxGfeller/open-harness/issues"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"agent",
|
|
32
|
+
"ai",
|
|
33
|
+
"react",
|
|
34
|
+
"hooks",
|
|
35
|
+
"chat",
|
|
36
|
+
"openharness"
|
|
37
|
+
],
|
|
20
38
|
"devDependencies": {
|
|
21
39
|
"@ai-sdk/react": "^3.0.0",
|
|
22
40
|
"@testing-library/react": "^16.3.0",
|
|
@@ -25,7 +43,7 @@
|
|
|
25
43
|
"react": "^19.1.0",
|
|
26
44
|
"react-dom": "^19.1.0",
|
|
27
45
|
"typescript": "^5.9.3",
|
|
28
|
-
"@openharness/core": "0.
|
|
46
|
+
"@openharness/core": "0.4.2"
|
|
29
47
|
},
|
|
30
48
|
"license": "ISC",
|
|
31
49
|
"scripts": {
|