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 and user configurations.
- π 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 and users via
useCopilotToolanduseCopilotUser. - π§ Smart Resolution: Access Copilot instance by
nameorindex, 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.
npm install @copilotlive/react-sdk
# or
yarn add @copilotlive/react-sdkimport { CopilotProvider } from '@copilotlive/react-sdk';
function App() {
return (
<CopilotProvider
token="your-copilot-token"
config={{ theme: 'light', position: 'bottom-right' }}
>
<YourApp />
</CopilotProvider>
);
}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 { 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);// Single Instance
interface SingleInstance {
token: string;
config?: Record<string, any>;
scriptUrl?: string;
botName?: string;
}
// Multiple
interface MultiInstance {
instances: SingleInstance[];
}interface CopilotProps {
tools?: ToolDefinition | ToolDefinition[];
botName?: string | number;
}type ToolDefinition = {
name: string;
description: string;
parameters?: {
type: 'object';
properties: Record<string, ToolParameter>;
required?: string[];
};
timeout?: number;
handler: (args: Record<string, any>) => any;
};
interface ToolParameter {
type: string;
description?: string;
}type CopilotAPI = {
show: () => void;
hide: () => void;
tools: {
add: (tool: ToolDefinition | ToolDefinition[]) => void;
remove: (name: string) => void;
removeAll?: () => void;
};
users: {
set: (user: Record<string, any>) => void;
unset: () => void;
};
};useCopilot(idOrIndex?: string | number)β Get a Copilot instanceuseCopilotTool(tool, options)β Register a tool using a hookuseCopilotUser(user, options)β Register a user using a hook
yarn buildyarn typecheckyarn lint- Name: @copilotlive/react-sdk
- Version: 1.0.0
- License: MIT
- Keywords: copilot, sdk, react, chatbot, widget, assistant
We welcome contributions! Open a pull request or issue.
MIT License β see the LICENSE file for details.