@coopah/bentley-react
v0.3.0
Published
React hooks and SSE client for Bentley
Downloads
255
Readme
@coopah/bentley-react
React hooks and SSE client for connecting to a Bentley server. Provides a high-level chat hook, a low-level streaming hook, and a framework-agnostic SSE client.
Install
pnpm add @coopah/bentley-reactPeer Dependencies
| Peer | Version |
|------|---------|
| react | >=18.0.0 |
This package has no @coopah/bentley-* dependencies — it communicates with the server over HTTP/SSE.
Usage
import { useBentleyChat } from "@coopah/bentley-react";
function Chat() {
const { messages, sendMessage, isStreaming, clearMessages } = useBentleyChat({
serverUrl: "http://localhost:3000",
shellId: "my-shell",
threadId: "user-123",
});
return (
<div>
{messages.map((msg) => (
<div key={msg.id}>
<strong>{msg.role}:</strong> {msg.content}
</div>
))}
<button onClick={() => sendMessage("Hello!")} disabled={isStreaming}>
Send
</button>
<button onClick={clearMessages}>Clear</button>
</div>
);
}Framework-Agnostic SSE Client
import { BentleySSEClient } from "@coopah/bentley-react";
const client = new BentleySSEClient("http://localhost:3000");
// Streaming
for await (const chunk of client.stream("Hello!", "thread-1")) {
if (chunk.type === "token") process.stdout.write(chunk.content ?? "");
if (chunk.type === "done") console.log("\nDone:", chunk.result);
}
// One-shot
const reply = await client.send("What is 2+2?");API
Hooks
useBentleyChat(options)
High-level chat interface with message history and streaming.
const {
messages, // ChatMessage[] — full conversation
sendMessage, // (text: string) => void
isStreaming, // boolean
error, // Error | null
clearMessages, // () => void
} = useBentleyChat({
serverUrl: string,
shellId?: string,
threadId?: string, // default: auto-generated
});useBentleyStream(options)
Low-level streaming hook — gives you raw SSEChunk events.
useBentleyShell(options)
Fetch shell info and status from the server.
Types
interface ChatMessage {
id: string;
role: "user" | "assistant";
content: string;
timestamp: number;
}
type SSEChunk =
| { type: "token"; content?: string }
| { type: "tool_start"; toolName?: string; input?: any }
| { type: "tool_end"; toolName?: string; output?: any }
| { type: "done"; result?: string }
| { type: "error"; message?: string };Related Packages
| Package | Role |
|---------|------|
| @coopah/bentley-server | Server this client connects to |
| @coopah/bentley-core | Core runtime (server-side only) |
License
MIT
