Files
wehub-resource-sync e30e75b5d4
Changesets / Create Version PR (push) Has been cancelled
Deploy Shadcn Registry / Deploy Production (push) Has been cancelled
Template Metrics / LOC + Bundle Size (push) Has been cancelled
Code Quality / Oxlint + Oxfmt (push) Has been cancelled
Code Quality / Template Sync (push) Has been cancelled
Code Quality / Build Changed Packages (push) Has been cancelled
Code Quality / Test Changed Packages (push) Has been cancelled
Deploy Expo Example / Deploy Production (push) Has been cancelled
Deploy Ink Example / Deploy Production (push) Has been cancelled
Python Tests / pytest (assistant-stream, 3.10) (push) Has been cancelled
Python Tests / pytest (assistant-stream, 3.12) (push) Has been cancelled
Python Tests / pytest (assistant-ui-sync-server-api, 3.10) (push) Has been cancelled
Python Tests / pytest (assistant-ui-sync-server-api, 3.12) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:40:13 +08:00

40 lines
1.1 KiB
TypeScript

"use client";
import {
AssistantRuntimeProvider,
SimpleImageAttachmentAdapter,
} from "@assistant-ui/react";
import { createPiHttpClient, usePiRuntime } from "@assistant-ui/react-pi";
import { useMemo, type ReactNode } from "react";
/**
* Wires the browser `PiClient` (HTTP/SSE over `/api/pi`) into a Pi runtime. The
* client is stable for the app's lifetime; `workspacePath` scopes the thread
* list and seeds new sessions. Image attachments ride along as Pi
* `ImageContent` (the adapter's data URLs pass through `buildPiSendInput`).
*/
export function PiRuntimeProvider({
workspacePath,
children,
}: {
workspacePath?: string | undefined;
children: ReactNode;
}) {
const client = useMemo(() => createPiHttpClient(), []);
const adapters = useMemo(
() => ({ attachments: new SimpleImageAttachmentAdapter() }),
[],
);
const runtime = usePiRuntime({
client,
adapters,
...(workspacePath ? { workspacePath } : {}),
});
return (
<AssistantRuntimeProvider runtime={runtime}>
{children}
</AssistantRuntimeProvider>
);
}