A React component library for integrating the Copilot chat widget into your applications. This library provides a flexible and type-safe way to manage single or multiple Copilot instances with custom tools, user configurations, and full telemetry observability.
- π Automatic Single/Multi Mode: Automatically detects and supports both single and multiple Copilot instances.
- π Custom Tools Integration: Register powerful tools with support for async handlers.
- π₯ User Management: Easily set/unset user information across sessions.
- πͺ Ergonomic Hooks: Intuitive and declarative hooks to register tools, context, eventLoggers, and users via
useCopilotTool
,useCopilotContext
,useTelemetry
, anduseCopilotUser
. - π§ Smart Resolution: Access Copilot instance by
name
orindex
, with graceful fallback and validation. - β‘ Type-Safe: Built in TypeScript with full type support and validation helpers.
- π Simple Integration: Drop-in provider and hook system for seamless integration.
- π Telemetry Observability: Full telemetry event tracking with fallback handling, throttling, and section-level filtering.
npm install @copilotlive/react-sdk
# or
yarn add @copilotlive/react-sdk
import { CopilotProvider } from '@copilotlive/react-sdk';
function App() {
return (
<CopilotProvider
token="your-copilot-token"
config={{ theme: 'light', position: 'bottom-right' }}
>
<YourApp />
</CopilotProvider>
);
}
import { useTelemetry } from '@copilotlive/react-sdk';
import { TelemetryEvent } from '@copilotlive/react-sdk/types';
// All events
const all = useTelemetry();
// All 'user:*' events
const userEvents = useTelemetry(TelemetryEvent.User);
// Specific telemetry
const widgetClose = useTelemetry(TelemetryEvent.Widget.Close);
// Only unknown/unclassified telemetry
const unknown = useTelemetry(TelemetryEvent.Other);
// Throttled
const throttled = useTelemetry(TelemetryEvent.Call.Connect, { throttleDuration: 1000 });
import { CopilotProvider } from '@copilotlive/react-sdk';
function App() {
return (
<CopilotProvider
instances={[
{ token: 'token-1', config: { theme: 'light' } },
{ token: 'token-2', config: { theme: 'dark' } }
]}
>
<YourApp />
</CopilotProvider>
);
}
import { Copilot, ToolDefinition } from '@copilotlive/react-sdk';
const tools: ToolDefinition[] = [
{
name: 'get_user_info',
description: 'Retrieves user info',
parameters: {
type: 'object',
properties: {
userId: { type: 'string', description: 'User ID' },
},
required: ['userId']
},
handler: async ({ userId }) => fetch(`/api/users/${userId}`).then(res => res.json())
}
];
function ToolsLoader() {
return <Copilot tools={tools} />;
}
import { useCopilotTool } from '@copilotlive/react-sdk';
useCopilotTool({
name: 'calculate_sum',
description: 'Adds two numbers',
parameters: {
type: 'object',
properties: {
a: { type: 'number' },
b: { type: 'number' }
},
required: ['a', 'b']
},
handler: ({ a, b }) => ({ result: a + b })
}, { removeOnUnmount: true });
import { useCopilotUser } from '@copilotlive/react-sdk';
useCopilotUser({
id: 'user123',
name: 'Jane Doe',
email: 'jane@example.com'
}, { unsetOnUnmount: true });
import { useCopilotContext } from '@copilotlive/react-sdk';
useCopilotContext(
{
description: "Product the user is viewing",
store: "product",
value: {
product_id: "12345",
product_name: "Men's Classic T-Shirt",
price: 19.99,
currency: "USD",
in_stock: true,
},
},
{
unsetOnUnmount: true,
}
);
import { useCopilot } from '@copilotlive/react-sdk';
function Controls() {
const copilot = useCopilot(); // Defaults to index 0
return (
<>
<button onClick={() => copilot.show?.()}>Open</button>
<button onClick={() => copilot.hide?.()}>Close</button>
</>
);
}
const copilotA = useCopilot('copilot1');
const copilotB = useCopilot(1);
Includes CopilotProvider
, useCopilot
, useTelemetry
, and all telemetry types.
Refer to source or documentation for full schemas.
yarn build
yarn typecheck
yarn lint
- Name: @copilotlive/react-sdk
- Version: 1.0.0
- License: MIT
We welcome contributions! Open a pull request or issue.
MIT License β see the LICENSE file for details.