@mastra/react 1.9.0-alpha.7 → 1.9.0-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/datasets/index.cjs +14 -0
- package/dist/hooks/datasets/index.cjs.map +1 -1
- package/dist/hooks/datasets/index.js +14 -1
- package/dist/hooks/datasets/index.js.map +1 -1
- package/dist/hooks/datasets/use-dataset-mutations.d.ts.map +1 -1
- package/dist/hooks/datasets/use-experiments.d.ts +8 -0
- package/dist/hooks/datasets/use-experiments.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -209,6 +209,7 @@ const useDatasetMutations = ({ queryOptions } = {}) => {
|
|
|
209
209
|
mutationFn: (experimentId) => client.deleteExperiment(experimentId),
|
|
210
210
|
onSuccess: () => {
|
|
211
211
|
queryClient.invalidateQueries({ queryKey: ["experiments"] });
|
|
212
|
+
queryClient.invalidateQueries({ queryKey: ["experiment"] });
|
|
212
213
|
queryClient.invalidateQueries({ queryKey: ["dataset-experiments"] });
|
|
213
214
|
queryClient.invalidateQueries({ queryKey: ["dataset-experiment"] });
|
|
214
215
|
queryClient.invalidateQueries({ queryKey: ["dataset-experiment-results"] });
|
|
@@ -222,6 +223,7 @@ const useDatasetMutations = ({ queryOptions } = {}) => {
|
|
|
222
223
|
mutationFn: (params) => client.updateDatasetExperiment(params),
|
|
223
224
|
onSuccess: (_, variables) => {
|
|
224
225
|
queryClient.invalidateQueries({ queryKey: ["experiments"] });
|
|
226
|
+
queryClient.invalidateQueries({ queryKey: ["experiment", variables.experimentId] });
|
|
225
227
|
queryClient.invalidateQueries({ queryKey: ["dataset-experiments", variables.datasetId] });
|
|
226
228
|
queryClient.invalidateQueries({ queryKey: [
|
|
227
229
|
"dataset-experiment",
|
|
@@ -575,6 +577,17 @@ const useExperiments = ({ pagination, queryOptions } = {}) => {
|
|
|
575
577
|
...queryOptions
|
|
576
578
|
});
|
|
577
579
|
};
|
|
580
|
+
/**
|
|
581
|
+
* Hook to fetch a single experiment by ID without knowing its dataset
|
|
582
|
+
*/
|
|
583
|
+
const useExperiment = ({ experimentId, queryOptions }) => {
|
|
584
|
+
const client = require_mastra_client_context.useMastraClient();
|
|
585
|
+
return (0, _tanstack_react_query.useQuery)({
|
|
586
|
+
queryKey: ["experiment", experimentId],
|
|
587
|
+
queryFn: () => client.getExperiment(experimentId),
|
|
588
|
+
...queryOptions
|
|
589
|
+
});
|
|
590
|
+
};
|
|
578
591
|
//#endregion
|
|
579
592
|
//#region src/hooks/datasets/use-workflow-schema.ts
|
|
580
593
|
/**
|
|
@@ -607,6 +620,7 @@ exports.useDatasetItems = useDatasetItems;
|
|
|
607
620
|
exports.useDatasetMutations = useDatasetMutations;
|
|
608
621
|
exports.useDatasetVersions = useDatasetVersions;
|
|
609
622
|
exports.useDatasets = useDatasets;
|
|
623
|
+
exports.useExperiment = useExperiment;
|
|
610
624
|
exports.useExperiments = useExperiments;
|
|
611
625
|
exports.useInfiniteDatasets = useInfiniteDatasets;
|
|
612
626
|
exports.useScoresByExperimentId = useScoresByExperimentId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["useMastraClient","PER_PAGE","useInView","useMastraClient","useMastraClient","useInView","useMastraClient","useMastraClient","useInView","useMastraClient","useMastraClient","useMastraClient","useMastraClient"],"sources":["../../../src/hooks/datasets/use-dataset-items.ts","../../../src/hooks/datasets/use-dataset-mutations.ts","../../../src/hooks/datasets/use-datasets.ts","../../../src/hooks/datasets/use-compare-experiments.ts","../../../src/hooks/datasets/use-dataset-experiments.ts","../../../src/hooks/datasets/use-dataset-item-versions.ts","../../../src/hooks/datasets/use-dataset-versions.ts","../../../src/hooks/datasets/use-experiments.ts","../../../src/hooks/datasets/use-workflow-schema.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset item by ID\n */\ntype DatasetItemResponse = Awaited<ReturnType<MastraClient['getDatasetItem']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItem = <TData = DatasetItemResponse>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-item', datasetId, itemId],\n queryFn: () => client.getDatasetItem(datasetId, itemId),\n retry: false, // Don't retry 404s for deleted items\n ...queryOptions,\n });\n};\n\nconst PER_PAGE = 10;\n\ntype ListDatasetItemsResponse = Awaited<ReturnType<MastraClient['listDatasetItems']>>;\n\nexport type UseDatasetItemsResult = Omit<\n UseInfiniteQueryResult<InfiniteData<ListDatasetItemsResponse>, Error>,\n 'data'\n> & {\n data: ListDatasetItemsResponse['items'];\n total: number | undefined;\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list items in a dataset with infinite scroll pagination and optional search\n * @param version - Optional version timestamp to view historical snapshot\n */\nexport type DatasetItemsOrderBy = NonNullable<NonNullable<Parameters<MastraClient['listDatasetItems']>[1]>['orderBy']>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItems = ({\n datasetId,\n search,\n version,\n orderBy,\n queryOptions,\n}: {\n datasetId: string;\n search?: string;\n version?: number | null;\n orderBy?: DatasetItemsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<\n ListDatasetItemsResponse,\n InfiniteData<ListDatasetItemsResponse, number>,\n QueryKey,\n number\n >;\n}): UseDatasetItemsResult => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-items', datasetId, search, version, orderBy],\n queryFn: async ({ pageParam }) => {\n const res = await client.listDatasetItems(datasetId, {\n page: pageParam,\n perPage: PER_PAGE,\n search: search || undefined,\n version: version || undefined,\n orderBy,\n });\n return res;\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.items?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n retry: false,\n ...queryOptions,\n });\n\n const items = query.data?.pages.flatMap(page => page?.items ?? []) ?? [];\n const total = query.data?.pages[0]?.pagination?.total;\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, data: items, total, setEndOfListElement };\n};\n","import type {\n CreateDatasetParams,\n UpdateDatasetParams,\n AddDatasetItemParams,\n UpdateDatasetItemParams,\n TriggerDatasetExperimentParams,\n UpdateDatasetExperimentParams,\n UpdateExperimentResultParams,\n BatchInsertDatasetItemsParams,\n BatchDeleteDatasetItemsParams,\n MastraClient,\n} from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype DatasetItemMutationVariables = {\n datasetId: string;\n itemId: string;\n};\n\ntype ClientResult<K extends keyof MastraClient> = MastraClient[K] extends (...args: any[]) => Promise<infer R>\n ? R\n : never;\n\nexport interface DatasetMutationsQueryOptions {\n createDataset?: MastraMutationOptions<ClientResult<'createDataset'>, CreateDatasetParams>;\n updateDataset?: MastraMutationOptions<ClientResult<'updateDataset'>, UpdateDatasetParams>;\n deleteDataset?: MastraMutationOptions<ClientResult<'deleteDataset'>, string>;\n addItem?: MastraMutationOptions<ClientResult<'addDatasetItem'>, AddDatasetItemParams>;\n updateItem?: MastraMutationOptions<ClientResult<'updateDatasetItem'>, UpdateDatasetItemParams>;\n deleteItem?: MastraMutationOptions<ClientResult<'deleteDatasetItem'>, DatasetItemMutationVariables>;\n purgeItem?: MastraMutationOptions<ClientResult<'purgeDatasetItem'>, DatasetItemMutationVariables>;\n deleteItems?: MastraMutationOptions<\n ClientResult<'batchDeleteDatasetItems'>,\n { datasetId: string; itemIds: string[] }\n >;\n batchInsertItems?: MastraMutationOptions<ClientResult<'batchInsertDatasetItems'>, BatchInsertDatasetItemsParams>;\n batchDeleteItems?: MastraMutationOptions<ClientResult<'batchDeleteDatasetItems'>, BatchDeleteDatasetItemsParams>;\n triggerExperiment?: MastraMutationOptions<ClientResult<'triggerDatasetExperiment'>, TriggerDatasetExperimentParams>;\n deleteExperiment?: MastraMutationOptions<ClientResult<'deleteExperiment'>, string>;\n updateExperiment?: MastraMutationOptions<ClientResult<'updateDatasetExperiment'>, UpdateDatasetExperimentParams>;\n updateExperimentResult?: MastraMutationOptions<\n ClientResult<'updateDatasetExperimentResult'>,\n UpdateExperimentResultParams\n >;\n}\n\n/**\n * Hook providing mutation functions for datasets, items, and runs\n * All mutations invalidate relevant query caches on success.\n * `queryOptions` is keyed by returned mutation name and spread last; a user `onSuccess` replaces the internal invalidation.\n */\nexport const useDatasetMutations = ({ queryOptions }: { queryOptions?: DatasetMutationsQueryOptions } = {}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const createDataset = useMutation({\n mutationFn: (params: CreateDatasetParams) => client.createDataset(params),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.createDataset,\n });\n\n const updateDataset = useMutation({\n mutationFn: (params: UpdateDatasetParams) => client.updateDataset(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n },\n ...queryOptions?.updateDataset,\n });\n\n const deleteDataset = useMutation({\n mutationFn: (datasetId: string) => client.deleteDataset(datasetId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.deleteDataset,\n });\n\n const addItem = useMutation({\n mutationFn: (params: AddDatasetItemParams) => client.addDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.addItem,\n });\n\n const updateItem = useMutation({\n mutationFn: (params: UpdateDatasetItemParams) => client.updateDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.updateItem,\n });\n\n const deleteItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.deleteDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItem,\n });\n\n const purgeItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.purgeDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.purgeItem,\n });\n\n // Batch insert items using the batch endpoint\n const batchInsertItems = useMutation({\n mutationFn: (params: BatchInsertDatasetItemsParams) => client.batchInsertDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchInsertItems,\n });\n\n // Batch delete items using the batch endpoint\n const batchDeleteItems = useMutation({\n mutationFn: (params: BatchDeleteDatasetItemsParams) => client.batchDeleteDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchDeleteItems,\n });\n\n // @deprecated - use batchDeleteItems mutation instead\n const deleteItems = useMutation({\n mutationFn: async ({ datasetId, itemIds }: { datasetId: string; itemIds: string[] }) => {\n return client.batchDeleteDatasetItems({ datasetId, itemIds });\n },\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItems,\n });\n\n const triggerExperiment = useMutation({\n mutationFn: (params: TriggerDatasetExperimentParams) => client.triggerDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n },\n ...queryOptions?.triggerExperiment,\n });\n\n const deleteExperiment = useMutation({\n mutationFn: (experimentId: string) => client.deleteExperiment(experimentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.deleteExperiment,\n });\n\n const updateExperiment = useMutation({\n mutationFn: (params: UpdateDatasetExperimentParams) => client.updateDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-experiment', variables.datasetId, variables.experimentId],\n });\n },\n ...queryOptions?.updateExperiment,\n });\n\n const updateExperimentResult = useMutation({\n mutationFn: (params: UpdateExperimentResultParams) => client.updateDatasetExperimentResult(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiment-results', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.updateExperimentResult,\n });\n\n return {\n createDataset,\n updateDataset,\n deleteDataset,\n addItem,\n updateItem,\n deleteItem,\n purgeItem,\n deleteItems,\n batchInsertItems,\n batchDeleteItems,\n triggerExperiment,\n deleteExperiment,\n updateExperiment,\n updateExperimentResult,\n };\n};\n","import type { ExperimentTargetType, ListDatasetsParams, MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery, useQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\ntype ListDatasetsResponse = Awaited<ReturnType<MastraClient['listDatasets']>>;\ntype DatasetResponse = Awaited<ReturnType<MastraClient['getDataset']>>;\n\n/**\n * Hook to list all datasets with optional pagination\n */\nexport const useDatasets = <TData = ListDatasetsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListDatasetsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['datasets', pagination],\n queryFn: () => client.listDatasets(pagination),\n placeholderData: previousData => previousData,\n ...queryOptions,\n });\n};\n\nconst DATASETS_PER_PAGE = 20;\n\nexport interface DatasetTargetFilter {\n targetType?: ExperimentTargetType | '';\n targetId?: string;\n}\n\nexport type DatasetsOrderBy = NonNullable<ListDatasetsParams['orderBy']>;\n\ntype DatasetRecord = ListDatasetsResponse['datasets'][number];\n\nexport type UseInfiniteDatasetsResult<TData = DatasetRecord[]> = UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list datasets with infinite scroll pagination, optionally scoped server-side to a target.\n * `data` defaults to the flattened dataset list; a user `select` replaces that flattening.\n */\nexport const useInfiniteDatasets = <TData = DatasetRecord[]>({\n filter,\n orderBy,\n queryOptions,\n}: {\n filter?: DatasetTargetFilter;\n orderBy?: DatasetsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ListDatasetsResponse, TData, QueryKey, number>;\n} = {}): UseInfiniteDatasetsResult<TData> => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const targetType = filter?.targetType || undefined;\n const targetIds = filter?.targetId ? [filter.targetId] : undefined;\n\n const query = useInfiniteQuery({\n queryKey: ['datasets', 'infinite', { targetType, targetIds, orderBy }],\n queryFn: ({ pageParam }) =>\n client.listDatasets({ page: pageParam, perPage: DATASETS_PER_PAGE, targetType, targetIds, orderBy }),\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.datasets?.length || !lastPage.pagination?.hasMore) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n select: (data: InfiniteData<ListDatasetsResponse, number>) =>\n data.pages.flatMap(page => page?.datasets ?? []) as TData,\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Hook to fetch a single dataset by ID\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDataset = <TData = DatasetResponse>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraQueryOptions<DatasetResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset', datasetId],\n queryFn: () => client.getDataset(datasetId),\n ...queryOptions,\n });\n};\n","import type { CompareExperimentsParams, CompareExperimentsResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype CompareExperimentsOptions = Omit<CompareExperimentsParams, 'datasetId' | 'experimentIdA' | 'experimentIdB'>;\n\n/**\n * Hook to compare two dataset experiments for regression detection\n * @param datasetId - ID of the dataset\n * @param experimentIdA - ID of the first experiment (baseline)\n * @param experimentIdB - ID of the second experiment (comparison)\n * @param options - Optional thresholds for regression detection\n * @param queryOptions - TanStack Query options, spread last to override defaults\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useCompareExperiments = <TData = CompareExperimentsResponse>({\n datasetId,\n experimentIdA,\n experimentIdB,\n options,\n queryOptions,\n}: {\n datasetId: string;\n experimentIdA: string;\n experimentIdB: string;\n options?: CompareExperimentsOptions;\n queryOptions?: MastraQueryOptions<CompareExperimentsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['compare-experiments', datasetId, experimentIdA, experimentIdB, options],\n queryFn: () => client.compareExperiments({ datasetId, experimentIdA, experimentIdB, ...options }),\n ...queryOptions,\n });\n};\n","import type { ClientScoreRowData, DatasetExperimentResult, MastraClient } from '@mastra/client-js';\nimport type { ExperimentStatus } from '@mastra/core/storage';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset experiment with polling while running\n * Polls every 2 seconds while status is 'running' or 'pending'\n */\ntype DatasetExperimentResponse = Awaited<ReturnType<MastraClient['getDatasetExperiment']>>;\ntype ExperimentResultsPage = Awaited<ReturnType<MastraClient['listDatasetExperimentResults']>>;\ntype ExperimentScoresByEntity = Record<string, ClientScoreRowData[]>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperiment = <TData = DatasetExperimentResponse>({\n datasetId,\n experimentId,\n queryOptions,\n}: {\n datasetId: string;\n experimentId: string;\n queryOptions?: MastraQueryOptions<DatasetExperimentResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-experiment', datasetId, experimentId],\n queryFn: () => client.getDatasetExperiment(datasetId, experimentId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval: query => {\n // Poll while running, stop when complete\n const status = query.state.data?.status;\n return status === 'running' || status === 'pending' ? 2000 : false;\n },\n ...queryOptions,\n });\n};\n\nconst RESULTS_PER_PAGE = 100;\n\nexport type ExperimentResultsOrderBy = NonNullable<\n NonNullable<Parameters<MastraClient['listDatasetExperimentResults']>[2]>['orderBy']\n>;\n\ninterface UseDatasetExperimentResultsParams<TData = DatasetExperimentResult[]> {\n datasetId: string;\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n orderBy?: ExperimentResultsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ExperimentResultsPage, TData, QueryKey, number>;\n}\n\n/**\n * Hook to list results for a dataset experiment with infinite scroll pagination.\n * Polls every 2 seconds while experiment status is 'pending' or 'running'.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperimentResults = <TData = DatasetExperimentResult[]>({\n datasetId,\n experimentId,\n experimentStatus,\n orderBy,\n queryOptions,\n}: UseDatasetExperimentResultsParams<TData>): UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n} => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-experiment-results', datasetId, experimentId, experimentStatus, orderBy],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetExperimentResults(datasetId, experimentId, {\n page: pageParam,\n perPage: RESULTS_PER_PAGE,\n orderBy,\n });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.results?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * RESULTS_PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n refetchInterval: experimentStatus === 'running' || experimentStatus === 'pending' ? 2000 : false,\n select: (data: InfiniteData<ExperimentResultsPage, number>) => {\n return data.pages.flatMap(page => page?.results ?? []) as TData;\n },\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Hook to fetch all scores for an experiment, transformed to Record<entityId, ClientScoreRowData[]>\n * Paginates through all pages to ensure no scores are silently dropped.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useScoresByExperimentId = <TData = ExperimentScoresByEntity>({\n experimentId,\n experimentStatus,\n queryOptions,\n}: {\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n queryOptions?: MastraQueryOptions<ExperimentScoresByEntity, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-experiment-scores', experimentId, experimentStatus],\n queryFn: async (): Promise<ExperimentScoresByEntity> => {\n const allScores: ClientScoreRowData[] = [];\n let page = 0;\n const perPage = 100;\n\n while (true) {\n const response = await client.listScoresByRunId({ runId: experimentId, page, perPage });\n allScores.push(...response.scores);\n if (!response.pagination.hasMore) break;\n page++;\n }\n\n const grouped: Record<string, ClientScoreRowData[]> = {};\n for (const row of allScores) {\n if (!grouped[row.entityId]) {\n grouped[row.entityId] = [];\n }\n grouped[row.entityId].push(row);\n }\n return grouped;\n },\n refetchInterval: experimentStatus === 'running' || experimentStatus === 'pending' ? 2000 : false,\n ...queryOptions,\n });\n};\n","import type { DatasetItemVersionResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport type DatasetItemVersion = DatasetItemVersionResponse & {\n validTo: number | null;\n isDeleted: boolean;\n isLatest: boolean;\n};\n\n/**\n * Hook to fetch full item history (SCD-2 rows).\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersions = <TData = DatasetItemVersion[]>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemVersion[], TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-versions', datasetId, itemId],\n queryFn: async (): Promise<DatasetItemVersion[]> => {\n const res = await client.getItemHistory(datasetId, itemId);\n\n return (res?.history ?? []).map(\n (version, index): DatasetItemVersion => ({\n id: version.id,\n datasetId: version.datasetId,\n datasetVersion: version.datasetVersion,\n input: version.input,\n groundTruth: version.groundTruth,\n expectedTrajectory: version.expectedTrajectory,\n toolMocks: version.toolMocks ?? undefined,\n scorerIds: version.scorerIds ?? undefined,\n requestContext: version.requestContext ?? undefined,\n metadata: version.metadata ?? undefined,\n validTo: version.validTo,\n isDeleted: version.isDeleted,\n createdAt: version.createdAt,\n updatedAt: version.updatedAt,\n isLatest: index === 0,\n }),\n );\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a specific version of a dataset item.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersion = <TData = DatasetItemVersion>({\n datasetId,\n itemId,\n datasetVersion,\n latestVersion,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n datasetVersion: number;\n latestVersion?: number;\n queryOptions?: MastraQueryOptions<DatasetItemVersion, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-version', datasetId, itemId, datasetVersion],\n queryFn: async (): Promise<DatasetItemVersion> => {\n const v = await client.getDatasetItemVersion(datasetId, itemId, datasetVersion);\n\n return {\n id: v.id,\n datasetId: v.datasetId,\n datasetVersion: v.datasetVersion,\n input: v.input,\n groundTruth: v.groundTruth,\n expectedTrajectory: v.expectedTrajectory,\n toolMocks: v.toolMocks ?? undefined,\n scorerIds: v.scorerIds ?? undefined,\n requestContext: v.requestContext ?? undefined,\n metadata: v.metadata ?? undefined,\n validTo: null,\n isDeleted: false,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n isLatest: latestVersion != null ? datasetVersion === latestVersion : false,\n };\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions } from '../shared/query-options';\n\nexport interface DatasetVersion {\n id?: string;\n datasetId?: string;\n version: number;\n createdAt?: Date | string;\n isCurrent: boolean;\n}\n\ntype DatasetVersionsPage = Awaited<ReturnType<MastraClient['listDatasetVersions']>>;\n\nconst PER_PAGE = 10;\n\n/**\n * Hook to fetch dataset versions from the API with infinite pagination.\n * `data` defaults to the flattened `DatasetVersion[]`; a user `select` replaces that.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetVersions = <TData = DatasetVersion[]>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraInfiniteQueryOptions<DatasetVersionsPage, TData, QueryKey, number>;\n}) => {\n const client = useMastraClient();\n\n return useInfiniteQuery({\n queryKey: ['dataset-versions', datasetId],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetVersions(datasetId, { page: pageParam, perPage: PER_PAGE });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n },\n select: (data: InfiniteData<DatasetVersionsPage, number>) => {\n return data.pages\n .flatMap(page => page?.versions ?? [])\n .map(\n (v, index): DatasetVersion => ({\n id: v.id,\n datasetId: v.datasetId,\n version: v.version,\n createdAt: v.createdAt,\n isCurrent: index === 0,\n }),\n ) as TData;\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ListExperimentsResponse = Awaited<ReturnType<MastraClient['listExperiments']>>;\n\n/**\n * Hook to list all experiments across all datasets with optional pagination\n */\nexport const useExperiments = <TData = ListExperimentsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListExperimentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiments', pagination],\n queryFn: () => client.listExperiments(pagination),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype WorkflowSchemaResponse = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['getSchema']>>;\n\n/**\n * Hook to fetch workflow input/output schema by workflow ID.\n * Returns { inputSchema, outputSchema } where each is Record<string, unknown> | null.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function useWorkflowSchema<TData = WorkflowSchemaResponse>({\n workflowId,\n queryOptions,\n}: {\n workflowId: string | null;\n queryOptions?: MastraQueryOptions<WorkflowSchemaResponse, TData>;\n}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['workflow-schema', workflowId],\n queryFn: async () => {\n if (!workflowId) throw new Error('No workflow selected');\n return client.getWorkflow(workflowId).getSchema();\n },\n staleTime: 5 * 60 * 1000, // Cache for 5 minutes\n ...queryOptions,\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["useMastraClient","PER_PAGE","useInView","useMastraClient","useMastraClient","useInView","useMastraClient","useMastraClient","useInView","useMastraClient","useMastraClient","useMastraClient","useMastraClient"],"sources":["../../../src/hooks/datasets/use-dataset-items.ts","../../../src/hooks/datasets/use-dataset-mutations.ts","../../../src/hooks/datasets/use-datasets.ts","../../../src/hooks/datasets/use-compare-experiments.ts","../../../src/hooks/datasets/use-dataset-experiments.ts","../../../src/hooks/datasets/use-dataset-item-versions.ts","../../../src/hooks/datasets/use-dataset-versions.ts","../../../src/hooks/datasets/use-experiments.ts","../../../src/hooks/datasets/use-workflow-schema.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset item by ID\n */\ntype DatasetItemResponse = Awaited<ReturnType<MastraClient['getDatasetItem']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItem = <TData = DatasetItemResponse>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-item', datasetId, itemId],\n queryFn: () => client.getDatasetItem(datasetId, itemId),\n retry: false, // Don't retry 404s for deleted items\n ...queryOptions,\n });\n};\n\nconst PER_PAGE = 10;\n\ntype ListDatasetItemsResponse = Awaited<ReturnType<MastraClient['listDatasetItems']>>;\n\nexport type UseDatasetItemsResult = Omit<\n UseInfiniteQueryResult<InfiniteData<ListDatasetItemsResponse>, Error>,\n 'data'\n> & {\n data: ListDatasetItemsResponse['items'];\n total: number | undefined;\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list items in a dataset with infinite scroll pagination and optional search\n * @param version - Optional version timestamp to view historical snapshot\n */\nexport type DatasetItemsOrderBy = NonNullable<NonNullable<Parameters<MastraClient['listDatasetItems']>[1]>['orderBy']>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItems = ({\n datasetId,\n search,\n version,\n orderBy,\n queryOptions,\n}: {\n datasetId: string;\n search?: string;\n version?: number | null;\n orderBy?: DatasetItemsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<\n ListDatasetItemsResponse,\n InfiniteData<ListDatasetItemsResponse, number>,\n QueryKey,\n number\n >;\n}): UseDatasetItemsResult => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-items', datasetId, search, version, orderBy],\n queryFn: async ({ pageParam }) => {\n const res = await client.listDatasetItems(datasetId, {\n page: pageParam,\n perPage: PER_PAGE,\n search: search || undefined,\n version: version || undefined,\n orderBy,\n });\n return res;\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.items?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n retry: false,\n ...queryOptions,\n });\n\n const items = query.data?.pages.flatMap(page => page?.items ?? []) ?? [];\n const total = query.data?.pages[0]?.pagination?.total;\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, data: items, total, setEndOfListElement };\n};\n","import type {\n CreateDatasetParams,\n UpdateDatasetParams,\n AddDatasetItemParams,\n UpdateDatasetItemParams,\n TriggerDatasetExperimentParams,\n UpdateDatasetExperimentParams,\n UpdateExperimentResultParams,\n BatchInsertDatasetItemsParams,\n BatchDeleteDatasetItemsParams,\n MastraClient,\n} from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype DatasetItemMutationVariables = {\n datasetId: string;\n itemId: string;\n};\n\ntype ClientResult<K extends keyof MastraClient> = MastraClient[K] extends (...args: any[]) => Promise<infer R>\n ? R\n : never;\n\nexport interface DatasetMutationsQueryOptions {\n createDataset?: MastraMutationOptions<ClientResult<'createDataset'>, CreateDatasetParams>;\n updateDataset?: MastraMutationOptions<ClientResult<'updateDataset'>, UpdateDatasetParams>;\n deleteDataset?: MastraMutationOptions<ClientResult<'deleteDataset'>, string>;\n addItem?: MastraMutationOptions<ClientResult<'addDatasetItem'>, AddDatasetItemParams>;\n updateItem?: MastraMutationOptions<ClientResult<'updateDatasetItem'>, UpdateDatasetItemParams>;\n deleteItem?: MastraMutationOptions<ClientResult<'deleteDatasetItem'>, DatasetItemMutationVariables>;\n purgeItem?: MastraMutationOptions<ClientResult<'purgeDatasetItem'>, DatasetItemMutationVariables>;\n deleteItems?: MastraMutationOptions<\n ClientResult<'batchDeleteDatasetItems'>,\n { datasetId: string; itemIds: string[] }\n >;\n batchInsertItems?: MastraMutationOptions<ClientResult<'batchInsertDatasetItems'>, BatchInsertDatasetItemsParams>;\n batchDeleteItems?: MastraMutationOptions<ClientResult<'batchDeleteDatasetItems'>, BatchDeleteDatasetItemsParams>;\n triggerExperiment?: MastraMutationOptions<ClientResult<'triggerDatasetExperiment'>, TriggerDatasetExperimentParams>;\n deleteExperiment?: MastraMutationOptions<ClientResult<'deleteExperiment'>, string>;\n updateExperiment?: MastraMutationOptions<ClientResult<'updateDatasetExperiment'>, UpdateDatasetExperimentParams>;\n updateExperimentResult?: MastraMutationOptions<\n ClientResult<'updateDatasetExperimentResult'>,\n UpdateExperimentResultParams\n >;\n}\n\n/**\n * Hook providing mutation functions for datasets, items, and runs\n * All mutations invalidate relevant query caches on success.\n * `queryOptions` is keyed by returned mutation name and spread last; a user `onSuccess` replaces the internal invalidation.\n */\nexport const useDatasetMutations = ({ queryOptions }: { queryOptions?: DatasetMutationsQueryOptions } = {}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const createDataset = useMutation({\n mutationFn: (params: CreateDatasetParams) => client.createDataset(params),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.createDataset,\n });\n\n const updateDataset = useMutation({\n mutationFn: (params: UpdateDatasetParams) => client.updateDataset(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n },\n ...queryOptions?.updateDataset,\n });\n\n const deleteDataset = useMutation({\n mutationFn: (datasetId: string) => client.deleteDataset(datasetId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.deleteDataset,\n });\n\n const addItem = useMutation({\n mutationFn: (params: AddDatasetItemParams) => client.addDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.addItem,\n });\n\n const updateItem = useMutation({\n mutationFn: (params: UpdateDatasetItemParams) => client.updateDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.updateItem,\n });\n\n const deleteItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.deleteDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItem,\n });\n\n const purgeItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.purgeDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.purgeItem,\n });\n\n // Batch insert items using the batch endpoint\n const batchInsertItems = useMutation({\n mutationFn: (params: BatchInsertDatasetItemsParams) => client.batchInsertDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchInsertItems,\n });\n\n // Batch delete items using the batch endpoint\n const batchDeleteItems = useMutation({\n mutationFn: (params: BatchDeleteDatasetItemsParams) => client.batchDeleteDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchDeleteItems,\n });\n\n // @deprecated - use batchDeleteItems mutation instead\n const deleteItems = useMutation({\n mutationFn: async ({ datasetId, itemIds }: { datasetId: string; itemIds: string[] }) => {\n return client.batchDeleteDatasetItems({ datasetId, itemIds });\n },\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItems,\n });\n\n const triggerExperiment = useMutation({\n mutationFn: (params: TriggerDatasetExperimentParams) => client.triggerDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n },\n ...queryOptions?.triggerExperiment,\n });\n\n const deleteExperiment = useMutation({\n mutationFn: (experimentId: string) => client.deleteExperiment(experimentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.deleteExperiment,\n });\n\n const updateExperiment = useMutation({\n mutationFn: (params: UpdateDatasetExperimentParams) => client.updateDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-experiment', variables.datasetId, variables.experimentId],\n });\n },\n ...queryOptions?.updateExperiment,\n });\n\n const updateExperimentResult = useMutation({\n mutationFn: (params: UpdateExperimentResultParams) => client.updateDatasetExperimentResult(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiment-results', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.updateExperimentResult,\n });\n\n return {\n createDataset,\n updateDataset,\n deleteDataset,\n addItem,\n updateItem,\n deleteItem,\n purgeItem,\n deleteItems,\n batchInsertItems,\n batchDeleteItems,\n triggerExperiment,\n deleteExperiment,\n updateExperiment,\n updateExperimentResult,\n };\n};\n","import type { ExperimentTargetType, ListDatasetsParams, MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery, useQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\ntype ListDatasetsResponse = Awaited<ReturnType<MastraClient['listDatasets']>>;\ntype DatasetResponse = Awaited<ReturnType<MastraClient['getDataset']>>;\n\n/**\n * Hook to list all datasets with optional pagination\n */\nexport const useDatasets = <TData = ListDatasetsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListDatasetsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['datasets', pagination],\n queryFn: () => client.listDatasets(pagination),\n placeholderData: previousData => previousData,\n ...queryOptions,\n });\n};\n\nconst DATASETS_PER_PAGE = 20;\n\nexport interface DatasetTargetFilter {\n targetType?: ExperimentTargetType | '';\n targetId?: string;\n}\n\nexport type DatasetsOrderBy = NonNullable<ListDatasetsParams['orderBy']>;\n\ntype DatasetRecord = ListDatasetsResponse['datasets'][number];\n\nexport type UseInfiniteDatasetsResult<TData = DatasetRecord[]> = UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list datasets with infinite scroll pagination, optionally scoped server-side to a target.\n * `data` defaults to the flattened dataset list; a user `select` replaces that flattening.\n */\nexport const useInfiniteDatasets = <TData = DatasetRecord[]>({\n filter,\n orderBy,\n queryOptions,\n}: {\n filter?: DatasetTargetFilter;\n orderBy?: DatasetsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ListDatasetsResponse, TData, QueryKey, number>;\n} = {}): UseInfiniteDatasetsResult<TData> => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const targetType = filter?.targetType || undefined;\n const targetIds = filter?.targetId ? [filter.targetId] : undefined;\n\n const query = useInfiniteQuery({\n queryKey: ['datasets', 'infinite', { targetType, targetIds, orderBy }],\n queryFn: ({ pageParam }) =>\n client.listDatasets({ page: pageParam, perPage: DATASETS_PER_PAGE, targetType, targetIds, orderBy }),\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.datasets?.length || !lastPage.pagination?.hasMore) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n select: (data: InfiniteData<ListDatasetsResponse, number>) =>\n data.pages.flatMap(page => page?.datasets ?? []) as TData,\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Hook to fetch a single dataset by ID\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDataset = <TData = DatasetResponse>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraQueryOptions<DatasetResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset', datasetId],\n queryFn: () => client.getDataset(datasetId),\n ...queryOptions,\n });\n};\n","import type { CompareExperimentsParams, CompareExperimentsResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype CompareExperimentsOptions = Omit<CompareExperimentsParams, 'datasetId' | 'experimentIdA' | 'experimentIdB'>;\n\n/**\n * Hook to compare two dataset experiments for regression detection\n * @param datasetId - ID of the dataset\n * @param experimentIdA - ID of the first experiment (baseline)\n * @param experimentIdB - ID of the second experiment (comparison)\n * @param options - Optional thresholds for regression detection\n * @param queryOptions - TanStack Query options, spread last to override defaults\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useCompareExperiments = <TData = CompareExperimentsResponse>({\n datasetId,\n experimentIdA,\n experimentIdB,\n options,\n queryOptions,\n}: {\n datasetId: string;\n experimentIdA: string;\n experimentIdB: string;\n options?: CompareExperimentsOptions;\n queryOptions?: MastraQueryOptions<CompareExperimentsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['compare-experiments', datasetId, experimentIdA, experimentIdB, options],\n queryFn: () => client.compareExperiments({ datasetId, experimentIdA, experimentIdB, ...options }),\n ...queryOptions,\n });\n};\n","import type { ClientScoreRowData, DatasetExperimentResult, MastraClient } from '@mastra/client-js';\nimport type { ExperimentStatus } from '@mastra/core/storage';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset experiment with polling while running\n * Polls every 2 seconds while status is 'running' or 'pending'\n */\ntype DatasetExperimentResponse = Awaited<ReturnType<MastraClient['getDatasetExperiment']>>;\ntype ExperimentResultsPage = Awaited<ReturnType<MastraClient['listDatasetExperimentResults']>>;\ntype ExperimentScoresByEntity = Record<string, ClientScoreRowData[]>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperiment = <TData = DatasetExperimentResponse>({\n datasetId,\n experimentId,\n queryOptions,\n}: {\n datasetId: string;\n experimentId: string;\n queryOptions?: MastraQueryOptions<DatasetExperimentResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-experiment', datasetId, experimentId],\n queryFn: () => client.getDatasetExperiment(datasetId, experimentId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval: query => {\n // Poll while running, stop when complete\n const status = query.state.data?.status;\n return status === 'running' || status === 'pending' ? 2000 : false;\n },\n ...queryOptions,\n });\n};\n\nconst RESULTS_PER_PAGE = 100;\n\nexport type ExperimentResultsOrderBy = NonNullable<\n NonNullable<Parameters<MastraClient['listDatasetExperimentResults']>[2]>['orderBy']\n>;\n\ninterface UseDatasetExperimentResultsParams<TData = DatasetExperimentResult[]> {\n datasetId: string;\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n orderBy?: ExperimentResultsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ExperimentResultsPage, TData, QueryKey, number>;\n}\n\n/**\n * Hook to list results for a dataset experiment with infinite scroll pagination.\n * Polls every 2 seconds while experiment status is 'pending' or 'running'.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperimentResults = <TData = DatasetExperimentResult[]>({\n datasetId,\n experimentId,\n experimentStatus,\n orderBy,\n queryOptions,\n}: UseDatasetExperimentResultsParams<TData>): UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n} => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-experiment-results', datasetId, experimentId, experimentStatus, orderBy],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetExperimentResults(datasetId, experimentId, {\n page: pageParam,\n perPage: RESULTS_PER_PAGE,\n orderBy,\n });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.results?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * RESULTS_PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n refetchInterval: experimentStatus === 'running' || experimentStatus === 'pending' ? 2000 : false,\n select: (data: InfiniteData<ExperimentResultsPage, number>) => {\n return data.pages.flatMap(page => page?.results ?? []) as TData;\n },\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Hook to fetch all scores for an experiment, transformed to Record<entityId, ClientScoreRowData[]>\n * Paginates through all pages to ensure no scores are silently dropped.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useScoresByExperimentId = <TData = ExperimentScoresByEntity>({\n experimentId,\n experimentStatus,\n queryOptions,\n}: {\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n queryOptions?: MastraQueryOptions<ExperimentScoresByEntity, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-experiment-scores', experimentId, experimentStatus],\n queryFn: async (): Promise<ExperimentScoresByEntity> => {\n const allScores: ClientScoreRowData[] = [];\n let page = 0;\n const perPage = 100;\n\n while (true) {\n const response = await client.listScoresByRunId({ runId: experimentId, page, perPage });\n allScores.push(...response.scores);\n if (!response.pagination.hasMore) break;\n page++;\n }\n\n const grouped: Record<string, ClientScoreRowData[]> = {};\n for (const row of allScores) {\n if (!grouped[row.entityId]) {\n grouped[row.entityId] = [];\n }\n grouped[row.entityId].push(row);\n }\n return grouped;\n },\n refetchInterval: experimentStatus === 'running' || experimentStatus === 'pending' ? 2000 : false,\n ...queryOptions,\n });\n};\n","import type { DatasetItemVersionResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport type DatasetItemVersion = DatasetItemVersionResponse & {\n validTo: number | null;\n isDeleted: boolean;\n isLatest: boolean;\n};\n\n/**\n * Hook to fetch full item history (SCD-2 rows).\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersions = <TData = DatasetItemVersion[]>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemVersion[], TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-versions', datasetId, itemId],\n queryFn: async (): Promise<DatasetItemVersion[]> => {\n const res = await client.getItemHistory(datasetId, itemId);\n\n return (res?.history ?? []).map(\n (version, index): DatasetItemVersion => ({\n id: version.id,\n datasetId: version.datasetId,\n datasetVersion: version.datasetVersion,\n input: version.input,\n groundTruth: version.groundTruth,\n expectedTrajectory: version.expectedTrajectory,\n toolMocks: version.toolMocks ?? undefined,\n scorerIds: version.scorerIds ?? undefined,\n requestContext: version.requestContext ?? undefined,\n metadata: version.metadata ?? undefined,\n validTo: version.validTo,\n isDeleted: version.isDeleted,\n createdAt: version.createdAt,\n updatedAt: version.updatedAt,\n isLatest: index === 0,\n }),\n );\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a specific version of a dataset item.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersion = <TData = DatasetItemVersion>({\n datasetId,\n itemId,\n datasetVersion,\n latestVersion,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n datasetVersion: number;\n latestVersion?: number;\n queryOptions?: MastraQueryOptions<DatasetItemVersion, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-version', datasetId, itemId, datasetVersion],\n queryFn: async (): Promise<DatasetItemVersion> => {\n const v = await client.getDatasetItemVersion(datasetId, itemId, datasetVersion);\n\n return {\n id: v.id,\n datasetId: v.datasetId,\n datasetVersion: v.datasetVersion,\n input: v.input,\n groundTruth: v.groundTruth,\n expectedTrajectory: v.expectedTrajectory,\n toolMocks: v.toolMocks ?? undefined,\n scorerIds: v.scorerIds ?? undefined,\n requestContext: v.requestContext ?? undefined,\n metadata: v.metadata ?? undefined,\n validTo: null,\n isDeleted: false,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n isLatest: latestVersion != null ? datasetVersion === latestVersion : false,\n };\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions } from '../shared/query-options';\n\nexport interface DatasetVersion {\n id?: string;\n datasetId?: string;\n version: number;\n createdAt?: Date | string;\n isCurrent: boolean;\n}\n\ntype DatasetVersionsPage = Awaited<ReturnType<MastraClient['listDatasetVersions']>>;\n\nconst PER_PAGE = 10;\n\n/**\n * Hook to fetch dataset versions from the API with infinite pagination.\n * `data` defaults to the flattened `DatasetVersion[]`; a user `select` replaces that.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetVersions = <TData = DatasetVersion[]>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraInfiniteQueryOptions<DatasetVersionsPage, TData, QueryKey, number>;\n}) => {\n const client = useMastraClient();\n\n return useInfiniteQuery({\n queryKey: ['dataset-versions', datasetId],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetVersions(datasetId, { page: pageParam, perPage: PER_PAGE });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n },\n select: (data: InfiniteData<DatasetVersionsPage, number>) => {\n return data.pages\n .flatMap(page => page?.versions ?? [])\n .map(\n (v, index): DatasetVersion => ({\n id: v.id,\n datasetId: v.datasetId,\n version: v.version,\n createdAt: v.createdAt,\n isCurrent: index === 0,\n }),\n ) as TData;\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ListExperimentsResponse = Awaited<ReturnType<MastraClient['listExperiments']>>;\ntype GetExperimentResponse = Awaited<ReturnType<MastraClient['getExperiment']>>;\n\n/**\n * Hook to list all experiments across all datasets with optional pagination\n */\nexport const useExperiments = <TData = ListExperimentsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListExperimentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiments', pagination],\n queryFn: () => client.listExperiments(pagination),\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a single experiment by ID without knowing its dataset\n */\nexport const useExperiment = <TData = GetExperimentResponse>({\n experimentId,\n queryOptions,\n}: {\n experimentId: string;\n queryOptions?: MastraQueryOptions<GetExperimentResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiment', experimentId],\n queryFn: () => client.getExperiment(experimentId),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype WorkflowSchemaResponse = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['getSchema']>>;\n\n/**\n * Hook to fetch workflow input/output schema by workflow ID.\n * Returns { inputSchema, outputSchema } where each is Record<string, unknown> | null.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function useWorkflowSchema<TData = WorkflowSchemaResponse>({\n workflowId,\n queryOptions,\n}: {\n workflowId: string | null;\n queryOptions?: MastraQueryOptions<WorkflowSchemaResponse, TData>;\n}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['workflow-schema', workflowId],\n queryFn: async () => {\n if (!workflowId) throw new Error('No workflow selected');\n return client.getWorkflow(workflowId).getSchema();\n },\n staleTime: 5 * 60 * 1000, // Cache for 5 minutes\n ...queryOptions,\n });\n}\n"],"mappings":"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"}
|
|
@@ -208,6 +208,7 @@ const useDatasetMutations = ({ queryOptions } = {}) => {
|
|
|
208
208
|
mutationFn: (experimentId) => client.deleteExperiment(experimentId),
|
|
209
209
|
onSuccess: () => {
|
|
210
210
|
queryClient.invalidateQueries({ queryKey: ["experiments"] });
|
|
211
|
+
queryClient.invalidateQueries({ queryKey: ["experiment"] });
|
|
211
212
|
queryClient.invalidateQueries({ queryKey: ["dataset-experiments"] });
|
|
212
213
|
queryClient.invalidateQueries({ queryKey: ["dataset-experiment"] });
|
|
213
214
|
queryClient.invalidateQueries({ queryKey: ["dataset-experiment-results"] });
|
|
@@ -221,6 +222,7 @@ const useDatasetMutations = ({ queryOptions } = {}) => {
|
|
|
221
222
|
mutationFn: (params) => client.updateDatasetExperiment(params),
|
|
222
223
|
onSuccess: (_, variables) => {
|
|
223
224
|
queryClient.invalidateQueries({ queryKey: ["experiments"] });
|
|
225
|
+
queryClient.invalidateQueries({ queryKey: ["experiment", variables.experimentId] });
|
|
224
226
|
queryClient.invalidateQueries({ queryKey: ["dataset-experiments", variables.datasetId] });
|
|
225
227
|
queryClient.invalidateQueries({ queryKey: [
|
|
226
228
|
"dataset-experiment",
|
|
@@ -574,6 +576,17 @@ const useExperiments = ({ pagination, queryOptions } = {}) => {
|
|
|
574
576
|
...queryOptions
|
|
575
577
|
});
|
|
576
578
|
};
|
|
579
|
+
/**
|
|
580
|
+
* Hook to fetch a single experiment by ID without knowing its dataset
|
|
581
|
+
*/
|
|
582
|
+
const useExperiment = ({ experimentId, queryOptions }) => {
|
|
583
|
+
const client = useMastraClient();
|
|
584
|
+
return useQuery({
|
|
585
|
+
queryKey: ["experiment", experimentId],
|
|
586
|
+
queryFn: () => client.getExperiment(experimentId),
|
|
587
|
+
...queryOptions
|
|
588
|
+
});
|
|
589
|
+
};
|
|
577
590
|
//#endregion
|
|
578
591
|
//#region src/hooks/datasets/use-workflow-schema.ts
|
|
579
592
|
/**
|
|
@@ -595,6 +608,6 @@ function useWorkflowSchema({ workflowId, queryOptions }) {
|
|
|
595
608
|
});
|
|
596
609
|
}
|
|
597
610
|
//#endregion
|
|
598
|
-
export { useCompareExperiments, useDataset, useDatasetExperiment, useDatasetExperimentResults, useDatasetItem, useDatasetItemVersion, useDatasetItemVersions, useDatasetItems, useDatasetMutations, useDatasetVersions, useDatasets, useExperiments, useInfiniteDatasets, useScoresByExperimentId, useWorkflowSchema };
|
|
611
|
+
export { useCompareExperiments, useDataset, useDatasetExperiment, useDatasetExperimentResults, useDatasetItem, useDatasetItemVersion, useDatasetItemVersions, useDatasetItems, useDatasetMutations, useDatasetVersions, useDatasets, useExperiment, useExperiments, useInfiniteDatasets, useScoresByExperimentId, useWorkflowSchema };
|
|
599
612
|
|
|
600
613
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["PER_PAGE"],"sources":["../../../src/hooks/datasets/use-dataset-items.ts","../../../src/hooks/datasets/use-dataset-mutations.ts","../../../src/hooks/datasets/use-datasets.ts","../../../src/hooks/datasets/use-compare-experiments.ts","../../../src/hooks/datasets/use-dataset-experiments.ts","../../../src/hooks/datasets/use-dataset-item-versions.ts","../../../src/hooks/datasets/use-dataset-versions.ts","../../../src/hooks/datasets/use-experiments.ts","../../../src/hooks/datasets/use-workflow-schema.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset item by ID\n */\ntype DatasetItemResponse = Awaited<ReturnType<MastraClient['getDatasetItem']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItem = <TData = DatasetItemResponse>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-item', datasetId, itemId],\n queryFn: () => client.getDatasetItem(datasetId, itemId),\n retry: false, // Don't retry 404s for deleted items\n ...queryOptions,\n });\n};\n\nconst PER_PAGE = 10;\n\ntype ListDatasetItemsResponse = Awaited<ReturnType<MastraClient['listDatasetItems']>>;\n\nexport type UseDatasetItemsResult = Omit<\n UseInfiniteQueryResult<InfiniteData<ListDatasetItemsResponse>, Error>,\n 'data'\n> & {\n data: ListDatasetItemsResponse['items'];\n total: number | undefined;\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list items in a dataset with infinite scroll pagination and optional search\n * @param version - Optional version timestamp to view historical snapshot\n */\nexport type DatasetItemsOrderBy = NonNullable<NonNullable<Parameters<MastraClient['listDatasetItems']>[1]>['orderBy']>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItems = ({\n datasetId,\n search,\n version,\n orderBy,\n queryOptions,\n}: {\n datasetId: string;\n search?: string;\n version?: number | null;\n orderBy?: DatasetItemsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<\n ListDatasetItemsResponse,\n InfiniteData<ListDatasetItemsResponse, number>,\n QueryKey,\n number\n >;\n}): UseDatasetItemsResult => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-items', datasetId, search, version, orderBy],\n queryFn: async ({ pageParam }) => {\n const res = await client.listDatasetItems(datasetId, {\n page: pageParam,\n perPage: PER_PAGE,\n search: search || undefined,\n version: version || undefined,\n orderBy,\n });\n return res;\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.items?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n retry: false,\n ...queryOptions,\n });\n\n const items = query.data?.pages.flatMap(page => page?.items ?? []) ?? [];\n const total = query.data?.pages[0]?.pagination?.total;\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, data: items, total, setEndOfListElement };\n};\n","import type {\n CreateDatasetParams,\n UpdateDatasetParams,\n AddDatasetItemParams,\n UpdateDatasetItemParams,\n TriggerDatasetExperimentParams,\n UpdateDatasetExperimentParams,\n UpdateExperimentResultParams,\n BatchInsertDatasetItemsParams,\n BatchDeleteDatasetItemsParams,\n MastraClient,\n} from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype DatasetItemMutationVariables = {\n datasetId: string;\n itemId: string;\n};\n\ntype ClientResult<K extends keyof MastraClient> = MastraClient[K] extends (...args: any[]) => Promise<infer R>\n ? R\n : never;\n\nexport interface DatasetMutationsQueryOptions {\n createDataset?: MastraMutationOptions<ClientResult<'createDataset'>, CreateDatasetParams>;\n updateDataset?: MastraMutationOptions<ClientResult<'updateDataset'>, UpdateDatasetParams>;\n deleteDataset?: MastraMutationOptions<ClientResult<'deleteDataset'>, string>;\n addItem?: MastraMutationOptions<ClientResult<'addDatasetItem'>, AddDatasetItemParams>;\n updateItem?: MastraMutationOptions<ClientResult<'updateDatasetItem'>, UpdateDatasetItemParams>;\n deleteItem?: MastraMutationOptions<ClientResult<'deleteDatasetItem'>, DatasetItemMutationVariables>;\n purgeItem?: MastraMutationOptions<ClientResult<'purgeDatasetItem'>, DatasetItemMutationVariables>;\n deleteItems?: MastraMutationOptions<\n ClientResult<'batchDeleteDatasetItems'>,\n { datasetId: string; itemIds: string[] }\n >;\n batchInsertItems?: MastraMutationOptions<ClientResult<'batchInsertDatasetItems'>, BatchInsertDatasetItemsParams>;\n batchDeleteItems?: MastraMutationOptions<ClientResult<'batchDeleteDatasetItems'>, BatchDeleteDatasetItemsParams>;\n triggerExperiment?: MastraMutationOptions<ClientResult<'triggerDatasetExperiment'>, TriggerDatasetExperimentParams>;\n deleteExperiment?: MastraMutationOptions<ClientResult<'deleteExperiment'>, string>;\n updateExperiment?: MastraMutationOptions<ClientResult<'updateDatasetExperiment'>, UpdateDatasetExperimentParams>;\n updateExperimentResult?: MastraMutationOptions<\n ClientResult<'updateDatasetExperimentResult'>,\n UpdateExperimentResultParams\n >;\n}\n\n/**\n * Hook providing mutation functions for datasets, items, and runs\n * All mutations invalidate relevant query caches on success.\n * `queryOptions` is keyed by returned mutation name and spread last; a user `onSuccess` replaces the internal invalidation.\n */\nexport const useDatasetMutations = ({ queryOptions }: { queryOptions?: DatasetMutationsQueryOptions } = {}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const createDataset = useMutation({\n mutationFn: (params: CreateDatasetParams) => client.createDataset(params),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.createDataset,\n });\n\n const updateDataset = useMutation({\n mutationFn: (params: UpdateDatasetParams) => client.updateDataset(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n },\n ...queryOptions?.updateDataset,\n });\n\n const deleteDataset = useMutation({\n mutationFn: (datasetId: string) => client.deleteDataset(datasetId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.deleteDataset,\n });\n\n const addItem = useMutation({\n mutationFn: (params: AddDatasetItemParams) => client.addDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.addItem,\n });\n\n const updateItem = useMutation({\n mutationFn: (params: UpdateDatasetItemParams) => client.updateDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.updateItem,\n });\n\n const deleteItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.deleteDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItem,\n });\n\n const purgeItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.purgeDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.purgeItem,\n });\n\n // Batch insert items using the batch endpoint\n const batchInsertItems = useMutation({\n mutationFn: (params: BatchInsertDatasetItemsParams) => client.batchInsertDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchInsertItems,\n });\n\n // Batch delete items using the batch endpoint\n const batchDeleteItems = useMutation({\n mutationFn: (params: BatchDeleteDatasetItemsParams) => client.batchDeleteDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchDeleteItems,\n });\n\n // @deprecated - use batchDeleteItems mutation instead\n const deleteItems = useMutation({\n mutationFn: async ({ datasetId, itemIds }: { datasetId: string; itemIds: string[] }) => {\n return client.batchDeleteDatasetItems({ datasetId, itemIds });\n },\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItems,\n });\n\n const triggerExperiment = useMutation({\n mutationFn: (params: TriggerDatasetExperimentParams) => client.triggerDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n },\n ...queryOptions?.triggerExperiment,\n });\n\n const deleteExperiment = useMutation({\n mutationFn: (experimentId: string) => client.deleteExperiment(experimentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.deleteExperiment,\n });\n\n const updateExperiment = useMutation({\n mutationFn: (params: UpdateDatasetExperimentParams) => client.updateDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-experiment', variables.datasetId, variables.experimentId],\n });\n },\n ...queryOptions?.updateExperiment,\n });\n\n const updateExperimentResult = useMutation({\n mutationFn: (params: UpdateExperimentResultParams) => client.updateDatasetExperimentResult(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiment-results', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.updateExperimentResult,\n });\n\n return {\n createDataset,\n updateDataset,\n deleteDataset,\n addItem,\n updateItem,\n deleteItem,\n purgeItem,\n deleteItems,\n batchInsertItems,\n batchDeleteItems,\n triggerExperiment,\n deleteExperiment,\n updateExperiment,\n updateExperimentResult,\n };\n};\n","import type { ExperimentTargetType, ListDatasetsParams, MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery, useQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\ntype ListDatasetsResponse = Awaited<ReturnType<MastraClient['listDatasets']>>;\ntype DatasetResponse = Awaited<ReturnType<MastraClient['getDataset']>>;\n\n/**\n * Hook to list all datasets with optional pagination\n */\nexport const useDatasets = <TData = ListDatasetsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListDatasetsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['datasets', pagination],\n queryFn: () => client.listDatasets(pagination),\n placeholderData: previousData => previousData,\n ...queryOptions,\n });\n};\n\nconst DATASETS_PER_PAGE = 20;\n\nexport interface DatasetTargetFilter {\n targetType?: ExperimentTargetType | '';\n targetId?: string;\n}\n\nexport type DatasetsOrderBy = NonNullable<ListDatasetsParams['orderBy']>;\n\ntype DatasetRecord = ListDatasetsResponse['datasets'][number];\n\nexport type UseInfiniteDatasetsResult<TData = DatasetRecord[]> = UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list datasets with infinite scroll pagination, optionally scoped server-side to a target.\n * `data` defaults to the flattened dataset list; a user `select` replaces that flattening.\n */\nexport const useInfiniteDatasets = <TData = DatasetRecord[]>({\n filter,\n orderBy,\n queryOptions,\n}: {\n filter?: DatasetTargetFilter;\n orderBy?: DatasetsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ListDatasetsResponse, TData, QueryKey, number>;\n} = {}): UseInfiniteDatasetsResult<TData> => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const targetType = filter?.targetType || undefined;\n const targetIds = filter?.targetId ? [filter.targetId] : undefined;\n\n const query = useInfiniteQuery({\n queryKey: ['datasets', 'infinite', { targetType, targetIds, orderBy }],\n queryFn: ({ pageParam }) =>\n client.listDatasets({ page: pageParam, perPage: DATASETS_PER_PAGE, targetType, targetIds, orderBy }),\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.datasets?.length || !lastPage.pagination?.hasMore) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n select: (data: InfiniteData<ListDatasetsResponse, number>) =>\n data.pages.flatMap(page => page?.datasets ?? []) as TData,\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Hook to fetch a single dataset by ID\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDataset = <TData = DatasetResponse>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraQueryOptions<DatasetResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset', datasetId],\n queryFn: () => client.getDataset(datasetId),\n ...queryOptions,\n });\n};\n","import type { CompareExperimentsParams, CompareExperimentsResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype CompareExperimentsOptions = Omit<CompareExperimentsParams, 'datasetId' | 'experimentIdA' | 'experimentIdB'>;\n\n/**\n * Hook to compare two dataset experiments for regression detection\n * @param datasetId - ID of the dataset\n * @param experimentIdA - ID of the first experiment (baseline)\n * @param experimentIdB - ID of the second experiment (comparison)\n * @param options - Optional thresholds for regression detection\n * @param queryOptions - TanStack Query options, spread last to override defaults\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useCompareExperiments = <TData = CompareExperimentsResponse>({\n datasetId,\n experimentIdA,\n experimentIdB,\n options,\n queryOptions,\n}: {\n datasetId: string;\n experimentIdA: string;\n experimentIdB: string;\n options?: CompareExperimentsOptions;\n queryOptions?: MastraQueryOptions<CompareExperimentsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['compare-experiments', datasetId, experimentIdA, experimentIdB, options],\n queryFn: () => client.compareExperiments({ datasetId, experimentIdA, experimentIdB, ...options }),\n ...queryOptions,\n });\n};\n","import type { ClientScoreRowData, DatasetExperimentResult, MastraClient } from '@mastra/client-js';\nimport type { ExperimentStatus } from '@mastra/core/storage';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset experiment with polling while running\n * Polls every 2 seconds while status is 'running' or 'pending'\n */\ntype DatasetExperimentResponse = Awaited<ReturnType<MastraClient['getDatasetExperiment']>>;\ntype ExperimentResultsPage = Awaited<ReturnType<MastraClient['listDatasetExperimentResults']>>;\ntype ExperimentScoresByEntity = Record<string, ClientScoreRowData[]>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperiment = <TData = DatasetExperimentResponse>({\n datasetId,\n experimentId,\n queryOptions,\n}: {\n datasetId: string;\n experimentId: string;\n queryOptions?: MastraQueryOptions<DatasetExperimentResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-experiment', datasetId, experimentId],\n queryFn: () => client.getDatasetExperiment(datasetId, experimentId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval: query => {\n // Poll while running, stop when complete\n const status = query.state.data?.status;\n return status === 'running' || status === 'pending' ? 2000 : false;\n },\n ...queryOptions,\n });\n};\n\nconst RESULTS_PER_PAGE = 100;\n\nexport type ExperimentResultsOrderBy = NonNullable<\n NonNullable<Parameters<MastraClient['listDatasetExperimentResults']>[2]>['orderBy']\n>;\n\ninterface UseDatasetExperimentResultsParams<TData = DatasetExperimentResult[]> {\n datasetId: string;\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n orderBy?: ExperimentResultsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ExperimentResultsPage, TData, QueryKey, number>;\n}\n\n/**\n * Hook to list results for a dataset experiment with infinite scroll pagination.\n * Polls every 2 seconds while experiment status is 'pending' or 'running'.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperimentResults = <TData = DatasetExperimentResult[]>({\n datasetId,\n experimentId,\n experimentStatus,\n orderBy,\n queryOptions,\n}: UseDatasetExperimentResultsParams<TData>): UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n} => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-experiment-results', datasetId, experimentId, experimentStatus, orderBy],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetExperimentResults(datasetId, experimentId, {\n page: pageParam,\n perPage: RESULTS_PER_PAGE,\n orderBy,\n });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.results?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * RESULTS_PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n refetchInterval: experimentStatus === 'running' || experimentStatus === 'pending' ? 2000 : false,\n select: (data: InfiniteData<ExperimentResultsPage, number>) => {\n return data.pages.flatMap(page => page?.results ?? []) as TData;\n },\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Hook to fetch all scores for an experiment, transformed to Record<entityId, ClientScoreRowData[]>\n * Paginates through all pages to ensure no scores are silently dropped.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useScoresByExperimentId = <TData = ExperimentScoresByEntity>({\n experimentId,\n experimentStatus,\n queryOptions,\n}: {\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n queryOptions?: MastraQueryOptions<ExperimentScoresByEntity, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-experiment-scores', experimentId, experimentStatus],\n queryFn: async (): Promise<ExperimentScoresByEntity> => {\n const allScores: ClientScoreRowData[] = [];\n let page = 0;\n const perPage = 100;\n\n while (true) {\n const response = await client.listScoresByRunId({ runId: experimentId, page, perPage });\n allScores.push(...response.scores);\n if (!response.pagination.hasMore) break;\n page++;\n }\n\n const grouped: Record<string, ClientScoreRowData[]> = {};\n for (const row of allScores) {\n if (!grouped[row.entityId]) {\n grouped[row.entityId] = [];\n }\n grouped[row.entityId].push(row);\n }\n return grouped;\n },\n refetchInterval: experimentStatus === 'running' || experimentStatus === 'pending' ? 2000 : false,\n ...queryOptions,\n });\n};\n","import type { DatasetItemVersionResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport type DatasetItemVersion = DatasetItemVersionResponse & {\n validTo: number | null;\n isDeleted: boolean;\n isLatest: boolean;\n};\n\n/**\n * Hook to fetch full item history (SCD-2 rows).\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersions = <TData = DatasetItemVersion[]>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemVersion[], TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-versions', datasetId, itemId],\n queryFn: async (): Promise<DatasetItemVersion[]> => {\n const res = await client.getItemHistory(datasetId, itemId);\n\n return (res?.history ?? []).map(\n (version, index): DatasetItemVersion => ({\n id: version.id,\n datasetId: version.datasetId,\n datasetVersion: version.datasetVersion,\n input: version.input,\n groundTruth: version.groundTruth,\n expectedTrajectory: version.expectedTrajectory,\n toolMocks: version.toolMocks ?? undefined,\n scorerIds: version.scorerIds ?? undefined,\n requestContext: version.requestContext ?? undefined,\n metadata: version.metadata ?? undefined,\n validTo: version.validTo,\n isDeleted: version.isDeleted,\n createdAt: version.createdAt,\n updatedAt: version.updatedAt,\n isLatest: index === 0,\n }),\n );\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a specific version of a dataset item.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersion = <TData = DatasetItemVersion>({\n datasetId,\n itemId,\n datasetVersion,\n latestVersion,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n datasetVersion: number;\n latestVersion?: number;\n queryOptions?: MastraQueryOptions<DatasetItemVersion, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-version', datasetId, itemId, datasetVersion],\n queryFn: async (): Promise<DatasetItemVersion> => {\n const v = await client.getDatasetItemVersion(datasetId, itemId, datasetVersion);\n\n return {\n id: v.id,\n datasetId: v.datasetId,\n datasetVersion: v.datasetVersion,\n input: v.input,\n groundTruth: v.groundTruth,\n expectedTrajectory: v.expectedTrajectory,\n toolMocks: v.toolMocks ?? undefined,\n scorerIds: v.scorerIds ?? undefined,\n requestContext: v.requestContext ?? undefined,\n metadata: v.metadata ?? undefined,\n validTo: null,\n isDeleted: false,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n isLatest: latestVersion != null ? datasetVersion === latestVersion : false,\n };\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions } from '../shared/query-options';\n\nexport interface DatasetVersion {\n id?: string;\n datasetId?: string;\n version: number;\n createdAt?: Date | string;\n isCurrent: boolean;\n}\n\ntype DatasetVersionsPage = Awaited<ReturnType<MastraClient['listDatasetVersions']>>;\n\nconst PER_PAGE = 10;\n\n/**\n * Hook to fetch dataset versions from the API with infinite pagination.\n * `data` defaults to the flattened `DatasetVersion[]`; a user `select` replaces that.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetVersions = <TData = DatasetVersion[]>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraInfiniteQueryOptions<DatasetVersionsPage, TData, QueryKey, number>;\n}) => {\n const client = useMastraClient();\n\n return useInfiniteQuery({\n queryKey: ['dataset-versions', datasetId],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetVersions(datasetId, { page: pageParam, perPage: PER_PAGE });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n },\n select: (data: InfiniteData<DatasetVersionsPage, number>) => {\n return data.pages\n .flatMap(page => page?.versions ?? [])\n .map(\n (v, index): DatasetVersion => ({\n id: v.id,\n datasetId: v.datasetId,\n version: v.version,\n createdAt: v.createdAt,\n isCurrent: index === 0,\n }),\n ) as TData;\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ListExperimentsResponse = Awaited<ReturnType<MastraClient['listExperiments']>>;\n\n/**\n * Hook to list all experiments across all datasets with optional pagination\n */\nexport const useExperiments = <TData = ListExperimentsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListExperimentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiments', pagination],\n queryFn: () => client.listExperiments(pagination),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype WorkflowSchemaResponse = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['getSchema']>>;\n\n/**\n * Hook to fetch workflow input/output schema by workflow ID.\n * Returns { inputSchema, outputSchema } where each is Record<string, unknown> | null.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function useWorkflowSchema<TData = WorkflowSchemaResponse>({\n workflowId,\n queryOptions,\n}: {\n workflowId: string | null;\n queryOptions?: MastraQueryOptions<WorkflowSchemaResponse, TData>;\n}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['workflow-schema', workflowId],\n queryFn: async () => {\n if (!workflowId) throw new Error('No workflow selected');\n return client.getWorkflow(workflowId).getSchema();\n },\n staleTime: 5 * 60 * 1000, // Cache for 5 minutes\n ...queryOptions,\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["PER_PAGE"],"sources":["../../../src/hooks/datasets/use-dataset-items.ts","../../../src/hooks/datasets/use-dataset-mutations.ts","../../../src/hooks/datasets/use-datasets.ts","../../../src/hooks/datasets/use-compare-experiments.ts","../../../src/hooks/datasets/use-dataset-experiments.ts","../../../src/hooks/datasets/use-dataset-item-versions.ts","../../../src/hooks/datasets/use-dataset-versions.ts","../../../src/hooks/datasets/use-experiments.ts","../../../src/hooks/datasets/use-workflow-schema.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset item by ID\n */\ntype DatasetItemResponse = Awaited<ReturnType<MastraClient['getDatasetItem']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItem = <TData = DatasetItemResponse>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-item', datasetId, itemId],\n queryFn: () => client.getDatasetItem(datasetId, itemId),\n retry: false, // Don't retry 404s for deleted items\n ...queryOptions,\n });\n};\n\nconst PER_PAGE = 10;\n\ntype ListDatasetItemsResponse = Awaited<ReturnType<MastraClient['listDatasetItems']>>;\n\nexport type UseDatasetItemsResult = Omit<\n UseInfiniteQueryResult<InfiniteData<ListDatasetItemsResponse>, Error>,\n 'data'\n> & {\n data: ListDatasetItemsResponse['items'];\n total: number | undefined;\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list items in a dataset with infinite scroll pagination and optional search\n * @param version - Optional version timestamp to view historical snapshot\n */\nexport type DatasetItemsOrderBy = NonNullable<NonNullable<Parameters<MastraClient['listDatasetItems']>[1]>['orderBy']>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItems = ({\n datasetId,\n search,\n version,\n orderBy,\n queryOptions,\n}: {\n datasetId: string;\n search?: string;\n version?: number | null;\n orderBy?: DatasetItemsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<\n ListDatasetItemsResponse,\n InfiniteData<ListDatasetItemsResponse, number>,\n QueryKey,\n number\n >;\n}): UseDatasetItemsResult => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-items', datasetId, search, version, orderBy],\n queryFn: async ({ pageParam }) => {\n const res = await client.listDatasetItems(datasetId, {\n page: pageParam,\n perPage: PER_PAGE,\n search: search || undefined,\n version: version || undefined,\n orderBy,\n });\n return res;\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.items?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n retry: false,\n ...queryOptions,\n });\n\n const items = query.data?.pages.flatMap(page => page?.items ?? []) ?? [];\n const total = query.data?.pages[0]?.pagination?.total;\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, data: items, total, setEndOfListElement };\n};\n","import type {\n CreateDatasetParams,\n UpdateDatasetParams,\n AddDatasetItemParams,\n UpdateDatasetItemParams,\n TriggerDatasetExperimentParams,\n UpdateDatasetExperimentParams,\n UpdateExperimentResultParams,\n BatchInsertDatasetItemsParams,\n BatchDeleteDatasetItemsParams,\n MastraClient,\n} from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype DatasetItemMutationVariables = {\n datasetId: string;\n itemId: string;\n};\n\ntype ClientResult<K extends keyof MastraClient> = MastraClient[K] extends (...args: any[]) => Promise<infer R>\n ? R\n : never;\n\nexport interface DatasetMutationsQueryOptions {\n createDataset?: MastraMutationOptions<ClientResult<'createDataset'>, CreateDatasetParams>;\n updateDataset?: MastraMutationOptions<ClientResult<'updateDataset'>, UpdateDatasetParams>;\n deleteDataset?: MastraMutationOptions<ClientResult<'deleteDataset'>, string>;\n addItem?: MastraMutationOptions<ClientResult<'addDatasetItem'>, AddDatasetItemParams>;\n updateItem?: MastraMutationOptions<ClientResult<'updateDatasetItem'>, UpdateDatasetItemParams>;\n deleteItem?: MastraMutationOptions<ClientResult<'deleteDatasetItem'>, DatasetItemMutationVariables>;\n purgeItem?: MastraMutationOptions<ClientResult<'purgeDatasetItem'>, DatasetItemMutationVariables>;\n deleteItems?: MastraMutationOptions<\n ClientResult<'batchDeleteDatasetItems'>,\n { datasetId: string; itemIds: string[] }\n >;\n batchInsertItems?: MastraMutationOptions<ClientResult<'batchInsertDatasetItems'>, BatchInsertDatasetItemsParams>;\n batchDeleteItems?: MastraMutationOptions<ClientResult<'batchDeleteDatasetItems'>, BatchDeleteDatasetItemsParams>;\n triggerExperiment?: MastraMutationOptions<ClientResult<'triggerDatasetExperiment'>, TriggerDatasetExperimentParams>;\n deleteExperiment?: MastraMutationOptions<ClientResult<'deleteExperiment'>, string>;\n updateExperiment?: MastraMutationOptions<ClientResult<'updateDatasetExperiment'>, UpdateDatasetExperimentParams>;\n updateExperimentResult?: MastraMutationOptions<\n ClientResult<'updateDatasetExperimentResult'>,\n UpdateExperimentResultParams\n >;\n}\n\n/**\n * Hook providing mutation functions for datasets, items, and runs\n * All mutations invalidate relevant query caches on success.\n * `queryOptions` is keyed by returned mutation name and spread last; a user `onSuccess` replaces the internal invalidation.\n */\nexport const useDatasetMutations = ({ queryOptions }: { queryOptions?: DatasetMutationsQueryOptions } = {}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const createDataset = useMutation({\n mutationFn: (params: CreateDatasetParams) => client.createDataset(params),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.createDataset,\n });\n\n const updateDataset = useMutation({\n mutationFn: (params: UpdateDatasetParams) => client.updateDataset(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n },\n ...queryOptions?.updateDataset,\n });\n\n const deleteDataset = useMutation({\n mutationFn: (datasetId: string) => client.deleteDataset(datasetId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.deleteDataset,\n });\n\n const addItem = useMutation({\n mutationFn: (params: AddDatasetItemParams) => client.addDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.addItem,\n });\n\n const updateItem = useMutation({\n mutationFn: (params: UpdateDatasetItemParams) => client.updateDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.updateItem,\n });\n\n const deleteItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.deleteDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItem,\n });\n\n const purgeItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.purgeDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.purgeItem,\n });\n\n // Batch insert items using the batch endpoint\n const batchInsertItems = useMutation({\n mutationFn: (params: BatchInsertDatasetItemsParams) => client.batchInsertDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchInsertItems,\n });\n\n // Batch delete items using the batch endpoint\n const batchDeleteItems = useMutation({\n mutationFn: (params: BatchDeleteDatasetItemsParams) => client.batchDeleteDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchDeleteItems,\n });\n\n // @deprecated - use batchDeleteItems mutation instead\n const deleteItems = useMutation({\n mutationFn: async ({ datasetId, itemIds }: { datasetId: string; itemIds: string[] }) => {\n return client.batchDeleteDatasetItems({ datasetId, itemIds });\n },\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItems,\n });\n\n const triggerExperiment = useMutation({\n mutationFn: (params: TriggerDatasetExperimentParams) => client.triggerDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n },\n ...queryOptions?.triggerExperiment,\n });\n\n const deleteExperiment = useMutation({\n mutationFn: (experimentId: string) => client.deleteExperiment(experimentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.deleteExperiment,\n });\n\n const updateExperiment = useMutation({\n mutationFn: (params: UpdateDatasetExperimentParams) => client.updateDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-experiment', variables.datasetId, variables.experimentId],\n });\n },\n ...queryOptions?.updateExperiment,\n });\n\n const updateExperimentResult = useMutation({\n mutationFn: (params: UpdateExperimentResultParams) => client.updateDatasetExperimentResult(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiment-results', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.updateExperimentResult,\n });\n\n return {\n createDataset,\n updateDataset,\n deleteDataset,\n addItem,\n updateItem,\n deleteItem,\n purgeItem,\n deleteItems,\n batchInsertItems,\n batchDeleteItems,\n triggerExperiment,\n deleteExperiment,\n updateExperiment,\n updateExperimentResult,\n };\n};\n","import type { ExperimentTargetType, ListDatasetsParams, MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery, useQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\ntype ListDatasetsResponse = Awaited<ReturnType<MastraClient['listDatasets']>>;\ntype DatasetResponse = Awaited<ReturnType<MastraClient['getDataset']>>;\n\n/**\n * Hook to list all datasets with optional pagination\n */\nexport const useDatasets = <TData = ListDatasetsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListDatasetsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['datasets', pagination],\n queryFn: () => client.listDatasets(pagination),\n placeholderData: previousData => previousData,\n ...queryOptions,\n });\n};\n\nconst DATASETS_PER_PAGE = 20;\n\nexport interface DatasetTargetFilter {\n targetType?: ExperimentTargetType | '';\n targetId?: string;\n}\n\nexport type DatasetsOrderBy = NonNullable<ListDatasetsParams['orderBy']>;\n\ntype DatasetRecord = ListDatasetsResponse['datasets'][number];\n\nexport type UseInfiniteDatasetsResult<TData = DatasetRecord[]> = UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list datasets with infinite scroll pagination, optionally scoped server-side to a target.\n * `data` defaults to the flattened dataset list; a user `select` replaces that flattening.\n */\nexport const useInfiniteDatasets = <TData = DatasetRecord[]>({\n filter,\n orderBy,\n queryOptions,\n}: {\n filter?: DatasetTargetFilter;\n orderBy?: DatasetsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ListDatasetsResponse, TData, QueryKey, number>;\n} = {}): UseInfiniteDatasetsResult<TData> => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const targetType = filter?.targetType || undefined;\n const targetIds = filter?.targetId ? [filter.targetId] : undefined;\n\n const query = useInfiniteQuery({\n queryKey: ['datasets', 'infinite', { targetType, targetIds, orderBy }],\n queryFn: ({ pageParam }) =>\n client.listDatasets({ page: pageParam, perPage: DATASETS_PER_PAGE, targetType, targetIds, orderBy }),\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.datasets?.length || !lastPage.pagination?.hasMore) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n select: (data: InfiniteData<ListDatasetsResponse, number>) =>\n data.pages.flatMap(page => page?.datasets ?? []) as TData,\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Hook to fetch a single dataset by ID\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDataset = <TData = DatasetResponse>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraQueryOptions<DatasetResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset', datasetId],\n queryFn: () => client.getDataset(datasetId),\n ...queryOptions,\n });\n};\n","import type { CompareExperimentsParams, CompareExperimentsResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype CompareExperimentsOptions = Omit<CompareExperimentsParams, 'datasetId' | 'experimentIdA' | 'experimentIdB'>;\n\n/**\n * Hook to compare two dataset experiments for regression detection\n * @param datasetId - ID of the dataset\n * @param experimentIdA - ID of the first experiment (baseline)\n * @param experimentIdB - ID of the second experiment (comparison)\n * @param options - Optional thresholds for regression detection\n * @param queryOptions - TanStack Query options, spread last to override defaults\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useCompareExperiments = <TData = CompareExperimentsResponse>({\n datasetId,\n experimentIdA,\n experimentIdB,\n options,\n queryOptions,\n}: {\n datasetId: string;\n experimentIdA: string;\n experimentIdB: string;\n options?: CompareExperimentsOptions;\n queryOptions?: MastraQueryOptions<CompareExperimentsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['compare-experiments', datasetId, experimentIdA, experimentIdB, options],\n queryFn: () => client.compareExperiments({ datasetId, experimentIdA, experimentIdB, ...options }),\n ...queryOptions,\n });\n};\n","import type { ClientScoreRowData, DatasetExperimentResult, MastraClient } from '@mastra/client-js';\nimport type { ExperimentStatus } from '@mastra/core/storage';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset experiment with polling while running\n * Polls every 2 seconds while status is 'running' or 'pending'\n */\ntype DatasetExperimentResponse = Awaited<ReturnType<MastraClient['getDatasetExperiment']>>;\ntype ExperimentResultsPage = Awaited<ReturnType<MastraClient['listDatasetExperimentResults']>>;\ntype ExperimentScoresByEntity = Record<string, ClientScoreRowData[]>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperiment = <TData = DatasetExperimentResponse>({\n datasetId,\n experimentId,\n queryOptions,\n}: {\n datasetId: string;\n experimentId: string;\n queryOptions?: MastraQueryOptions<DatasetExperimentResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-experiment', datasetId, experimentId],\n queryFn: () => client.getDatasetExperiment(datasetId, experimentId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval: query => {\n // Poll while running, stop when complete\n const status = query.state.data?.status;\n return status === 'running' || status === 'pending' ? 2000 : false;\n },\n ...queryOptions,\n });\n};\n\nconst RESULTS_PER_PAGE = 100;\n\nexport type ExperimentResultsOrderBy = NonNullable<\n NonNullable<Parameters<MastraClient['listDatasetExperimentResults']>[2]>['orderBy']\n>;\n\ninterface UseDatasetExperimentResultsParams<TData = DatasetExperimentResult[]> {\n datasetId: string;\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n orderBy?: ExperimentResultsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ExperimentResultsPage, TData, QueryKey, number>;\n}\n\n/**\n * Hook to list results for a dataset experiment with infinite scroll pagination.\n * Polls every 2 seconds while experiment status is 'pending' or 'running'.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperimentResults = <TData = DatasetExperimentResult[]>({\n datasetId,\n experimentId,\n experimentStatus,\n orderBy,\n queryOptions,\n}: UseDatasetExperimentResultsParams<TData>): UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n} => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-experiment-results', datasetId, experimentId, experimentStatus, orderBy],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetExperimentResults(datasetId, experimentId, {\n page: pageParam,\n perPage: RESULTS_PER_PAGE,\n orderBy,\n });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.results?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * RESULTS_PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n refetchInterval: experimentStatus === 'running' || experimentStatus === 'pending' ? 2000 : false,\n select: (data: InfiniteData<ExperimentResultsPage, number>) => {\n return data.pages.flatMap(page => page?.results ?? []) as TData;\n },\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Hook to fetch all scores for an experiment, transformed to Record<entityId, ClientScoreRowData[]>\n * Paginates through all pages to ensure no scores are silently dropped.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useScoresByExperimentId = <TData = ExperimentScoresByEntity>({\n experimentId,\n experimentStatus,\n queryOptions,\n}: {\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n queryOptions?: MastraQueryOptions<ExperimentScoresByEntity, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-experiment-scores', experimentId, experimentStatus],\n queryFn: async (): Promise<ExperimentScoresByEntity> => {\n const allScores: ClientScoreRowData[] = [];\n let page = 0;\n const perPage = 100;\n\n while (true) {\n const response = await client.listScoresByRunId({ runId: experimentId, page, perPage });\n allScores.push(...response.scores);\n if (!response.pagination.hasMore) break;\n page++;\n }\n\n const grouped: Record<string, ClientScoreRowData[]> = {};\n for (const row of allScores) {\n if (!grouped[row.entityId]) {\n grouped[row.entityId] = [];\n }\n grouped[row.entityId].push(row);\n }\n return grouped;\n },\n refetchInterval: experimentStatus === 'running' || experimentStatus === 'pending' ? 2000 : false,\n ...queryOptions,\n });\n};\n","import type { DatasetItemVersionResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport type DatasetItemVersion = DatasetItemVersionResponse & {\n validTo: number | null;\n isDeleted: boolean;\n isLatest: boolean;\n};\n\n/**\n * Hook to fetch full item history (SCD-2 rows).\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersions = <TData = DatasetItemVersion[]>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemVersion[], TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-versions', datasetId, itemId],\n queryFn: async (): Promise<DatasetItemVersion[]> => {\n const res = await client.getItemHistory(datasetId, itemId);\n\n return (res?.history ?? []).map(\n (version, index): DatasetItemVersion => ({\n id: version.id,\n datasetId: version.datasetId,\n datasetVersion: version.datasetVersion,\n input: version.input,\n groundTruth: version.groundTruth,\n expectedTrajectory: version.expectedTrajectory,\n toolMocks: version.toolMocks ?? undefined,\n scorerIds: version.scorerIds ?? undefined,\n requestContext: version.requestContext ?? undefined,\n metadata: version.metadata ?? undefined,\n validTo: version.validTo,\n isDeleted: version.isDeleted,\n createdAt: version.createdAt,\n updatedAt: version.updatedAt,\n isLatest: index === 0,\n }),\n );\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a specific version of a dataset item.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersion = <TData = DatasetItemVersion>({\n datasetId,\n itemId,\n datasetVersion,\n latestVersion,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n datasetVersion: number;\n latestVersion?: number;\n queryOptions?: MastraQueryOptions<DatasetItemVersion, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-version', datasetId, itemId, datasetVersion],\n queryFn: async (): Promise<DatasetItemVersion> => {\n const v = await client.getDatasetItemVersion(datasetId, itemId, datasetVersion);\n\n return {\n id: v.id,\n datasetId: v.datasetId,\n datasetVersion: v.datasetVersion,\n input: v.input,\n groundTruth: v.groundTruth,\n expectedTrajectory: v.expectedTrajectory,\n toolMocks: v.toolMocks ?? undefined,\n scorerIds: v.scorerIds ?? undefined,\n requestContext: v.requestContext ?? undefined,\n metadata: v.metadata ?? undefined,\n validTo: null,\n isDeleted: false,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n isLatest: latestVersion != null ? datasetVersion === latestVersion : false,\n };\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions } from '../shared/query-options';\n\nexport interface DatasetVersion {\n id?: string;\n datasetId?: string;\n version: number;\n createdAt?: Date | string;\n isCurrent: boolean;\n}\n\ntype DatasetVersionsPage = Awaited<ReturnType<MastraClient['listDatasetVersions']>>;\n\nconst PER_PAGE = 10;\n\n/**\n * Hook to fetch dataset versions from the API with infinite pagination.\n * `data` defaults to the flattened `DatasetVersion[]`; a user `select` replaces that.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetVersions = <TData = DatasetVersion[]>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraInfiniteQueryOptions<DatasetVersionsPage, TData, QueryKey, number>;\n}) => {\n const client = useMastraClient();\n\n return useInfiniteQuery({\n queryKey: ['dataset-versions', datasetId],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetVersions(datasetId, { page: pageParam, perPage: PER_PAGE });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n },\n select: (data: InfiniteData<DatasetVersionsPage, number>) => {\n return data.pages\n .flatMap(page => page?.versions ?? [])\n .map(\n (v, index): DatasetVersion => ({\n id: v.id,\n datasetId: v.datasetId,\n version: v.version,\n createdAt: v.createdAt,\n isCurrent: index === 0,\n }),\n ) as TData;\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ListExperimentsResponse = Awaited<ReturnType<MastraClient['listExperiments']>>;\ntype GetExperimentResponse = Awaited<ReturnType<MastraClient['getExperiment']>>;\n\n/**\n * Hook to list all experiments across all datasets with optional pagination\n */\nexport const useExperiments = <TData = ListExperimentsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListExperimentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiments', pagination],\n queryFn: () => client.listExperiments(pagination),\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a single experiment by ID without knowing its dataset\n */\nexport const useExperiment = <TData = GetExperimentResponse>({\n experimentId,\n queryOptions,\n}: {\n experimentId: string;\n queryOptions?: MastraQueryOptions<GetExperimentResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiment', experimentId],\n queryFn: () => client.getExperiment(experimentId),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype WorkflowSchemaResponse = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['getSchema']>>;\n\n/**\n * Hook to fetch workflow input/output schema by workflow ID.\n * Returns { inputSchema, outputSchema } where each is Record<string, unknown> | null.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function useWorkflowSchema<TData = WorkflowSchemaResponse>({\n workflowId,\n queryOptions,\n}: {\n workflowId: string | null;\n queryOptions?: MastraQueryOptions<WorkflowSchemaResponse, TData>;\n}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['workflow-schema', workflowId],\n queryFn: async () => {\n if (!workflowId) throw new Error('No workflow selected');\n return client.getWorkflow(workflowId).getSchema();\n },\n staleTime: 5 * 60 * 1000, // Cache for 5 minutes\n ...queryOptions,\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-dataset-mutations.d.ts","sourceRoot":"","sources":["../../../src/hooks/datasets/use-dataset-mutations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-dataset-mutations.d.ts","sourceRoot":"","sources":["../../../src/hooks/datasets/use-dataset-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { MastraClient } from '@mastra/client-js';
|
|
|
2
2
|
import type { UseQueryResult } from '@tanstack/react-query';
|
|
3
3
|
import type { MastraQueryOptions } from '../shared/query-options.js';
|
|
4
4
|
type ListExperimentsResponse = Awaited<ReturnType<MastraClient['listExperiments']>>;
|
|
5
|
+
type GetExperimentResponse = Awaited<ReturnType<MastraClient['getExperiment']>>;
|
|
5
6
|
/**
|
|
6
7
|
* Hook to list all experiments across all datasets with optional pagination
|
|
7
8
|
*/
|
|
@@ -12,5 +13,12 @@ export declare const useExperiments: <TData = ListExperimentsResponse>({ paginat
|
|
|
12
13
|
};
|
|
13
14
|
queryOptions?: MastraQueryOptions<ListExperimentsResponse, TData>;
|
|
14
15
|
}) => UseQueryResult<TData, Error>;
|
|
16
|
+
/**
|
|
17
|
+
* Hook to fetch a single experiment by ID without knowing its dataset
|
|
18
|
+
*/
|
|
19
|
+
export declare const useExperiment: <TData = GetExperimentResponse>({ experimentId, queryOptions, }: {
|
|
20
|
+
experimentId: string;
|
|
21
|
+
queryOptions?: MastraQueryOptions<GetExperimentResponse, TData>;
|
|
22
|
+
}) => UseQueryResult<TData, Error>;
|
|
15
23
|
export {};
|
|
16
24
|
//# sourceMappingURL=use-experiments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-experiments.d.ts","sourceRoot":"","sources":["../../../src/hooks/datasets/use-experiments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,KAAK,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"use-experiments.d.ts","sourceRoot":"","sources":["../../../src/hooks/datasets/use-experiments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,KAAK,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACpF,KAAK,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,GAAG,uBAAuB,kCAG3D;IACD,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,YAAY,CAAC,EAAE,kBAAkB,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;CACnE,KAAQ,cAAc,CAAC,KAAK,EAAE,KAAK,CAOnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,GAAG,qBAAqB,mCAGxD;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;CACjE,KAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAO9B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/react",
|
|
3
|
-
"version": "1.9.0-alpha.
|
|
3
|
+
"version": "1.9.0-alpha.8",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/mastra-ai/mastra.git",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"lucide-react": "^1.37.0",
|
|
70
70
|
"shiki": "^1.29.2",
|
|
71
71
|
"tailwind-merge": "^3.5.0",
|
|
72
|
-
"@mastra/client-js": "1.53.0-alpha.
|
|
72
|
+
"@mastra/client-js": "1.53.0-alpha.8"
|
|
73
73
|
},
|
|
74
74
|
"peerDependencies": {
|
|
75
75
|
"@mastra/core": ">=1.67.0-0 <2.0.0-0",
|
|
@@ -102,9 +102,9 @@
|
|
|
102
102
|
"vite": "^7.3.1",
|
|
103
103
|
"vitest": "4.1.11",
|
|
104
104
|
"zod": "^3.25.76",
|
|
105
|
-
"@internal/lint": "0.0.141",
|
|
106
105
|
"@internal/types-builder": "0.0.116",
|
|
107
|
-
"@
|
|
106
|
+
"@internal/lint": "0.0.141",
|
|
107
|
+
"@mastra/core": "1.76.0-alpha.8"
|
|
108
108
|
},
|
|
109
109
|
"eslintConfig": {
|
|
110
110
|
"extends": [
|