mirror of
https://github.com/CopilotKit/CopilotKit.git
synced 2026-09-14 16:26:20 +08:00
7eaade9201
Add a new example app at examples/v2/react-router demonstrating CopilotKit with React Router v7 (SSR/framework mode) and TanStack AI as the default agent. - React Router v7 SSR with Hono server via react-router-hono-server - CopilotKit runtime mounted as a Hono route on the same server - TanStackAIAgent: thin AbstractAgent wrapper that accepts a chat() factory callback, giving users full type safety over TanStack AI's adapter/model config - Proper AG-UI event normalization bridging TanStack AI's event format to what CopilotKit's @ag-ui/client pipeline expects - Full-page CopilotChat UI with Tailwind CSS v4
57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
import {
|
|
Links,
|
|
Meta,
|
|
Outlet,
|
|
Scripts,
|
|
ScrollRestoration,
|
|
isRouteErrorResponse,
|
|
} from "react-router";
|
|
import type { Route } from "./+types/root";
|
|
import "./tailwind.css";
|
|
|
|
export function Layout({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<html lang="en">
|
|
<head>
|
|
<meta charSet="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<Meta />
|
|
<Links />
|
|
</head>
|
|
<body>
|
|
{children}
|
|
<ScrollRestoration />
|
|
<Scripts />
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|
|
|
|
export default function Root() {
|
|
return <Outlet />;
|
|
}
|
|
|
|
export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) {
|
|
let message = "Oops!";
|
|
let details = "An unexpected error occurred.";
|
|
|
|
if (isRouteErrorResponse(error)) {
|
|
message = error.status === 404 ? "404" : "Error";
|
|
details =
|
|
error.status === 404
|
|
? "The requested page could not be found."
|
|
: error.statusText || details;
|
|
} else if (error && error instanceof Error) {
|
|
details = error.message;
|
|
}
|
|
|
|
return (
|
|
<main className="flex min-h-screen items-center justify-center p-4">
|
|
<div className="text-center">
|
|
<h1 className="text-4xl font-bold">{message}</h1>
|
|
<p className="mt-2 text-gray-600">{details}</p>
|
|
</div>
|
|
</main>
|
|
);
|
|
}
|