Wenchao An e2f19d8335
feat(plugins): full-stack plugin APIs and bookmarks (#5647)
* feat(plugins): add full-stack contributions and bookmarks example

* ci(plugins): provision bookmark gateway for browser tests

* fix(plugins): authenticate module downloads through configured backend

* fix(plugins): isolate contributions and localize extension UI

* fix(plugins): preserve bookmark agent routing and contain async callbacks

* fix(plugins): pin durable batch workers to app extension snapshots
2026-09-22 11:18:57 +08:00

38 lines
1.1 KiB
TypeScript

"use client";
import { useQuery } from "@tanstack/react-query";
import { toast } from "sonner";
import { useAuth } from "@/core/auth/AuthProvider";
import { fetchFrontendExtensions, frontendExtensionsQueryKey } from "./api";
import { loadFrontendExtensions } from "./registry";
import { conversationText, latestVisibleAnswer } from "./services";
export function useFrontendExtensions() {
const { user } = useAuth();
return useQuery({
queryKey: [...frontendExtensionsQueryKey, user?.id],
queryFn: async () =>
loadFrontendExtensions(await fetchFrontendExtensions()),
enabled: !!user,
staleTime: Infinity,
gcTime: Infinity,
refetchOnMount: false,
refetchOnWindowFocus: false,
refetchOnReconnect: false,
retry: false,
});
}
/** Eagerly capture the page's plugin set, even before its first chat is opened. */
export function ExtensionPageBootstrap() {
useFrontendExtensions();
return null;
}
export function useFrontendServices() {
return {
conversationText,
latestVisibleAnswer,
showMessage: (message: string) => toast.message(message),
};
}