@mastra/react 1.13.0-alpha.3 → 1.13.0-alpha.5

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.
Files changed (149) hide show
  1. package/dist/{accumulator-BmD8-x9I.cjs → accumulator-Bjfckb5t.cjs} +5 -9
  2. package/dist/{accumulator-BmD8-x9I.cjs.map → accumulator-Bjfckb5t.cjs.map} +1 -1
  3. package/dist/{accumulator-D9jAph99.js → accumulator-DysrPe6U.js} +5 -9
  4. package/dist/{accumulator-D9jAph99.js.map → accumulator-DysrPe6U.js.map} +1 -1
  5. package/dist/chat/index.cjs +1 -1
  6. package/dist/chat/index.js +1 -1
  7. package/dist/{combine-by-ids-CcaZKGT9.js → combine-by-ids-C-0oe4eH.js} +2 -3
  8. package/dist/{combine-by-ids-CcaZKGT9.js.map → combine-by-ids-C-0oe4eH.js.map} +1 -1
  9. package/dist/{combine-by-ids-D_lp6Dvq.cjs → combine-by-ids-ERVPXXBi.cjs} +2 -3
  10. package/dist/{combine-by-ids-D_lp6Dvq.cjs.map → combine-by-ids-ERVPXXBi.cjs.map} +1 -1
  11. package/dist/{experiments-CJw1N3FB.cjs → experiments-Duv0RgkM.cjs} +12 -19
  12. package/dist/{experiments-CJw1N3FB.cjs.map → experiments-Duv0RgkM.cjs.map} +1 -1
  13. package/dist/{experiments-B7vRMK5T.js → experiments-DyecjEut.js} +12 -19
  14. package/dist/{experiments-B7vRMK5T.js.map → experiments-DyecjEut.js.map} +1 -1
  15. package/dist/{feedback-refetch-interval-XD5FVc2k.cjs → feedback-refetch-interval-BBcT9r8s.cjs} +3 -4
  16. package/dist/{feedback-refetch-interval-XD5FVc2k.cjs.map → feedback-refetch-interval-BBcT9r8s.cjs.map} +1 -1
  17. package/dist/{feedback-refetch-interval-DLHzQoVV.js → feedback-refetch-interval-C12Nzb2r.js} +3 -4
  18. package/dist/{feedback-refetch-interval-DLHzQoVV.js.map → feedback-refetch-interval-C12Nzb2r.js.map} +1 -1
  19. package/dist/hooks/agents/index.cjs +19 -37
  20. package/dist/hooks/agents/index.cjs.map +1 -1
  21. package/dist/hooks/agents/index.js +19 -37
  22. package/dist/hooks/agents/index.js.map +1 -1
  23. package/dist/hooks/auth/index.cjs +11 -21
  24. package/dist/hooks/auth/index.cjs.map +1 -1
  25. package/dist/hooks/auth/index.js +11 -21
  26. package/dist/hooks/auth/index.js.map +1 -1
  27. package/dist/hooks/capabilities/index.cjs +11 -21
  28. package/dist/hooks/capabilities/index.cjs.map +1 -1
  29. package/dist/hooks/capabilities/index.js +11 -21
  30. package/dist/hooks/capabilities/index.js.map +1 -1
  31. package/dist/hooks/configuration/index.cjs +2 -3
  32. package/dist/hooks/configuration/index.js +2 -3
  33. package/dist/hooks/datasets/index.cjs +12 -21
  34. package/dist/hooks/datasets/index.cjs.map +1 -1
  35. package/dist/hooks/datasets/index.js +12 -21
  36. package/dist/hooks/datasets/index.js.map +1 -1
  37. package/dist/hooks/embedders/index.cjs +2 -3
  38. package/dist/hooks/embedders/index.js +2 -3
  39. package/dist/hooks/experiments/index.cjs +1 -1
  40. package/dist/hooks/experiments/index.js +1 -1
  41. package/dist/hooks/feedback/index.cjs +3 -4
  42. package/dist/hooks/feedback/index.js +3 -4
  43. package/dist/hooks/llm/index.cjs +2 -3
  44. package/dist/hooks/llm/index.js +2 -3
  45. package/dist/hooks/logs/index.cjs +4 -5
  46. package/dist/hooks/logs/index.js +4 -5
  47. package/dist/hooks/mcps/index.cjs +8 -15
  48. package/dist/hooks/mcps/index.cjs.map +1 -1
  49. package/dist/hooks/mcps/index.js +8 -15
  50. package/dist/hooks/mcps/index.js.map +1 -1
  51. package/dist/hooks/memory/index.cjs +5 -9
  52. package/dist/hooks/memory/index.cjs.map +1 -1
  53. package/dist/hooks/memory/index.js +5 -9
  54. package/dist/hooks/memory/index.js.map +1 -1
  55. package/dist/hooks/metrics/index.cjs +19 -36
  56. package/dist/hooks/metrics/index.cjs.map +1 -1
  57. package/dist/hooks/metrics/index.js +19 -36
  58. package/dist/hooks/metrics/index.js.map +1 -1
  59. package/dist/hooks/processors/index.cjs +2 -3
  60. package/dist/hooks/processors/index.js +2 -3
  61. package/dist/hooks/prompt-blocks/index.cjs +3 -5
  62. package/dist/hooks/prompt-blocks/index.cjs.map +1 -1
  63. package/dist/hooks/prompt-blocks/index.js +3 -5
  64. package/dist/hooks/prompt-blocks/index.js.map +1 -1
  65. package/dist/hooks/query/index.cjs +2 -3
  66. package/dist/hooks/query/index.js +2 -3
  67. package/dist/hooks/review/index.cjs +4 -6
  68. package/dist/hooks/review/index.cjs.map +1 -1
  69. package/dist/hooks/review/index.js +4 -6
  70. package/dist/hooks/review/index.js.map +1 -1
  71. package/dist/hooks/schedules/index.cjs +6 -10
  72. package/dist/hooks/schedules/index.cjs.map +1 -1
  73. package/dist/hooks/schedules/index.js +6 -10
  74. package/dist/hooks/schedules/index.js.map +1 -1
  75. package/dist/hooks/scores/index.cjs +8 -13
  76. package/dist/hooks/scores/index.cjs.map +1 -1
  77. package/dist/hooks/scores/index.js +8 -13
  78. package/dist/hooks/scores/index.js.map +1 -1
  79. package/dist/hooks/templates/index.cjs +2 -3
  80. package/dist/hooks/templates/index.js +2 -3
  81. package/dist/hooks/tool-providers/index.cjs +10 -19
  82. package/dist/hooks/tool-providers/index.cjs.map +1 -1
  83. package/dist/hooks/tool-providers/index.js +10 -19
  84. package/dist/hooks/tool-providers/index.js.map +1 -1
  85. package/dist/hooks/tools/index.cjs +3 -5
  86. package/dist/hooks/tools/index.cjs.map +1 -1
  87. package/dist/hooks/tools/index.js +3 -5
  88. package/dist/hooks/tools/index.js.map +1 -1
  89. package/dist/hooks/traces/index.cjs +71 -54
  90. package/dist/hooks/traces/index.cjs.map +1 -1
  91. package/dist/hooks/traces/index.d.ts +2 -0
  92. package/dist/hooks/traces/index.d.ts.map +1 -1
  93. package/dist/hooks/traces/index.js +70 -55
  94. package/dist/hooks/traces/index.js.map +1 -1
  95. package/dist/hooks/traces/use-span-aggregate.d.ts +16 -0
  96. package/dist/hooks/traces/use-span-aggregate.d.ts.map +1 -0
  97. package/dist/hooks/traces/use-trace-aggregate.d.ts +17 -0
  98. package/dist/hooks/traces/use-trace-aggregate.d.ts.map +1 -0
  99. package/dist/hooks/traces/use-trace-column-preferences-storage-key.d.ts +4 -2
  100. package/dist/hooks/traces/use-trace-column-preferences-storage-key.d.ts.map +1 -1
  101. package/dist/hooks/vectors/index.cjs +2 -3
  102. package/dist/hooks/vectors/index.js +2 -3
  103. package/dist/hooks/voice/index.cjs +3 -4
  104. package/dist/hooks/voice/index.js +3 -4
  105. package/dist/hooks/workflows/index.cjs +7 -11
  106. package/dist/hooks/workflows/index.cjs.map +1 -1
  107. package/dist/hooks/workflows/index.js +7 -11
  108. package/dist/hooks/workflows/index.js.map +1 -1
  109. package/dist/hooks/workspace/index.cjs +12 -22
  110. package/dist/hooks/workspace/index.cjs.map +1 -1
  111. package/dist/hooks/workspace/index.js +12 -22
  112. package/dist/hooks/workspace/index.js.map +1 -1
  113. package/dist/{hooks-XYsmqFCz.cjs → hooks-Bt15IwzP.cjs} +6 -9
  114. package/dist/{hooks-XYsmqFCz.cjs.map → hooks-Bt15IwzP.cjs.map} +1 -1
  115. package/dist/{hooks-DG-Y1KFe.js → hooks-Btt7PyI-.js} +6 -9
  116. package/dist/{hooks-DG-Y1KFe.js.map → hooks-Btt7PyI-.js.map} +1 -1
  117. package/dist/{hooks-BfysjY_K.js → hooks-CEikbhrN.js} +9 -15
  118. package/dist/{hooks-BfysjY_K.js.map → hooks-CEikbhrN.js.map} +1 -1
  119. package/dist/{hooks-BbUMSab8.cjs → hooks-D6LDSEcm.cjs} +9 -15
  120. package/dist/{hooks-BbUMSab8.cjs.map → hooks-D6LDSEcm.cjs.map} +1 -1
  121. package/dist/index.cjs +7 -9
  122. package/dist/index.cjs.map +1 -1
  123. package/dist/index.js +7 -9
  124. package/dist/index.js.map +1 -1
  125. package/dist/{map-CDv4fbu4.js → map-5-4U5rwA.js} +2 -3
  126. package/dist/{map-CDv4fbu4.js.map → map-5-4U5rwA.js.map} +1 -1
  127. package/dist/{map-wjmL1y5O.cjs → map-BGoWBTGy.cjs} +2 -3
  128. package/dist/{map-wjmL1y5O.cjs.map → map-BGoWBTGy.cjs.map} +1 -1
  129. package/dist/{mastra-client-context-Bx_g84YB.js → mastra-client-context-DQ5z_ze9.js} +2 -3
  130. package/dist/{mastra-client-context-Bx_g84YB.js.map → mastra-client-context-DQ5z_ze9.js.map} +1 -1
  131. package/dist/{mastra-client-context-DzX3f0RF.cjs → mastra-client-context-DX8wJM9p.cjs} +2 -3
  132. package/dist/{mastra-client-context-DzX3f0RF.cjs.map → mastra-client-context-DX8wJM9p.cjs.map} +1 -1
  133. package/dist/{query-utils-CcrChYgz.cjs → query-utils-BVgE_xxj.cjs} +2 -3
  134. package/dist/{query-utils-CcrChYgz.cjs.map → query-utils-BVgE_xxj.cjs.map} +1 -1
  135. package/dist/{query-utils-D1NgFnWU.js → query-utils-DvMERIwf.js} +2 -3
  136. package/dist/{query-utils-D1NgFnWU.js.map → query-utils-DvMERIwf.js.map} +1 -1
  137. package/dist/ui/index.cjs +15 -30
  138. package/dist/ui/index.cjs.map +1 -1
  139. package/dist/ui/index.js +14 -28
  140. package/dist/ui/index.js.map +1 -1
  141. package/dist/{use-in-view-B6eJO9Zi.cjs → use-in-view-BxdrrnCw.cjs} +2 -3
  142. package/dist/{use-in-view-B6eJO9Zi.cjs.map → use-in-view-BxdrrnCw.cjs.map} +1 -1
  143. package/dist/{use-in-view-C9sYPGRm.js → use-in-view-CyjKdplM.js} +2 -3
  144. package/dist/{use-in-view-C9sYPGRm.js.map → use-in-view-CyjKdplM.js.map} +1 -1
  145. package/dist/{voice-BOtUdMi8.cjs → voice-Didej2E1.cjs} +5 -8
  146. package/dist/{voice-BOtUdMi8.cjs.map → voice-Didej2E1.cjs.map} +1 -1
  147. package/dist/{voice-DgirjEyH.js → voice-ugGu7VyA.js} +5 -8
  148. package/dist/{voice-DgirjEyH.js.map → voice-ugGu7VyA.js.map} +1 -1
  149. package/package.json +19 -19
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-XYsmqFCz.cjs","names":["useState","useRef","useCallback","typedError","useMastraClient","useState","useRef","useCallback","mapWorkflowStreamChunkToWatchResult","useMastraClient"],"sources":["../src/lib/use-mutation.ts","../src/workflows/use-stream-workflow.ts","../src/workflows/hooks.ts"],"sourcesContent":["import { useState, useCallback, useRef } from 'react';\n\n/**\n * Represents the state of a mutation operation.\n * Mimics the essential return type of react-query's useMutation.\n */\nexport interface MutationState<TData, TError extends Error, TVariables> {\n /** Execute the mutation without waiting for the result */\n mutate: (variables: TVariables) => void;\n /** Execute the mutation and return a promise with the result */\n mutateAsync: (variables: TVariables) => Promise<TData>;\n /** Whether the mutation is currently executing */\n isPending: boolean;\n /** Whether the mutation completed successfully */\n isSuccess: boolean;\n /** Whether the mutation failed with an error */\n isError: boolean;\n /** The error if the mutation failed, null otherwise */\n error: TError | null;\n /** The data returned by the mutation if successful */\n data: TData | undefined;\n /** Reset the mutation state to initial values */\n reset: () => void;\n}\n\n/**\n * Internal helper hook that provides mutation-like functionality without react-query.\n * Tracks pending, success, and error states for async operations.\n */\nexport function useMutation<TData, TError extends Error, TVariables>(\n mutationFn: (variables: TVariables) => Promise<TData>,\n): MutationState<TData, TError, TVariables> {\n const [isPending, setIsPending] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [isError, setIsError] = useState(false);\n const [error, setError] = useState<TError | null>(null);\n const [data, setData] = useState<TData | undefined>(undefined);\n\n const mutationFnRef = useRef(mutationFn);\n mutationFnRef.current = mutationFn;\n\n const reset = useCallback(() => {\n setIsPending(false);\n setIsSuccess(false);\n setIsError(false);\n setError(null);\n setData(undefined);\n }, []);\n\n const mutateAsync = useCallback(async (variables: TVariables): Promise<TData> => {\n setIsPending(true);\n setIsSuccess(false);\n setIsError(false);\n setError(null);\n\n try {\n const result = await mutationFnRef.current(variables);\n setData(result);\n setIsSuccess(true);\n return result;\n } catch (err) {\n const typedError = err as TError;\n setError(typedError);\n setIsError(true);\n throw err;\n } finally {\n setIsPending(false);\n }\n }, []);\n\n const mutate = useCallback(\n (variables: TVariables) => {\n mutateAsync(variables).catch(() => {\n // Error is already captured in state\n });\n },\n [mutateAsync],\n );\n\n return {\n mutate,\n mutateAsync,\n isPending,\n isSuccess,\n isError,\n error,\n data,\n reset,\n };\n}\n","import type { StreamVNextChunkType } from '@mastra/client-js';\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport { mapWorkflowStreamChunkToWatchResult } from '../lib/mastra-db';\nimport { useMutation } from '../lib/use-mutation';\nimport { useMastraClient } from '../mastra-client-context';\nimport type {\n UseStreamWorkflowParams,\n WorkflowStreamResult,\n StreamWorkflowParams,\n ObserveWorkflowStreamParams,\n ResumeWorkflowStreamParams,\n TimeTravelWorkflowStreamParams,\n} from './types';\n\ntype StreamOperation = {\n controller: AbortController;\n reader?: ReadableStreamDefaultReader<StreamVNextChunkType>;\n};\n\nexport function useStreamWorkflow({ debugMode, tracingOptions, onError }: UseStreamWorkflowParams) {\n const client = useMastraClient();\n const [streamResult, setStreamResult] = useState<WorkflowStreamResult>();\n const [isStreaming, setIsStreaming] = useState(false);\n const activeStream = useRef<StreamOperation | undefined>(undefined);\n const isMountedRef = useRef(true);\n\n const closeActiveStream = useCallback(() => {\n const operation = activeStream.current;\n activeStream.current = undefined;\n if (!operation) return;\n operation.controller.abort();\n // An already errored transport may reject cancellation during disposal.\n void operation.reader?.cancel().catch(() => undefined);\n operation.reader?.releaseLock();\n operation.reader = undefined;\n }, []);\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n closeActiveStream();\n };\n }, [closeActiveStream]);\n\n async function consumeStream(\n openStream: (signal: AbortSignal) => Promise<ReadableStream<StreamVNextChunkType> | undefined>,\n defaultMessage: string,\n ) {\n if (!isMountedRef.current) return;\n closeActiveStream();\n const operation: StreamOperation = { controller: new AbortController() };\n activeStream.current = operation;\n const { signal } = operation.controller;\n setIsStreaming(true);\n\n try {\n const stream = await openStream(signal);\n if (signal.aborted) {\n await stream?.cancel();\n return;\n }\n if (!stream) {\n onError?.(new Error('No stream returned'), 'No stream returned');\n return;\n }\n const reader = stream.getReader();\n operation.reader = reader;\n\n while (!signal.aborted) {\n const { done, value } = await reader.read();\n if (done || signal.aborted) break;\n setStreamResult(previous => mapWorkflowStreamChunkToWatchResult(previous, value));\n if (value.type === 'workflow-step-start') setIsStreaming(true);\n if (value.type === 'workflow-step-suspended') setIsStreaming(false);\n if (value.type === 'workflow-finish' && value.payload.workflowStatus === 'failed') {\n throw new Error(value.payload.metadata?.errorMessage || 'Workflow execution failed');\n }\n }\n } catch (error) {\n // Releasing an obsolete reader rejects its pending read; real transport TypeErrors must still surface.\n if (!signal.aborted) {\n if (!operation.reader) throw error;\n onError?.(error instanceof Error ? error : new Error(defaultMessage), defaultMessage);\n }\n } finally {\n operation.reader?.releaseLock();\n operation.reader = undefined;\n if (activeStream.current === operation) {\n activeStream.current = undefined;\n setIsStreaming(false);\n }\n }\n }\n\n const streamWorkflow = useMutation<void, Error, StreamWorkflowParams>(\n ({ workflowId, runId, inputData, initialState, requestContext, perStep, resourceId }) => {\n setStreamResult({ status: 'pending', input: inputData, steps: {} });\n return consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId, resourceId });\n if (signal.aborted) return;\n return run.stream({\n inputData,\n initialState,\n requestContext,\n closeOnSuspend: true,\n tracingOptions,\n perStep: perStep ?? debugMode,\n resourceId,\n });\n }, 'Error streaming workflow');\n },\n );\n\n const observeWorkflowStream = useMutation<void, Error, ObserveWorkflowStreamParams>(\n async ({ workflowId, runId, storeRunResult }) => {\n if (!isMountedRef.current) return;\n setStreamResult(storeRunResult ?? undefined);\n if (storeRunResult?.status === 'suspended') {\n closeActiveStream();\n setIsStreaming(false);\n return;\n }\n await consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.observeStream();\n }, 'Error observing workflow');\n },\n );\n\n const resumeWorkflowStream = useMutation<void, Error, ResumeWorkflowStreamParams>(\n ({ workflowId, runId, step, resumeData, requestContext, perStep }) =>\n consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.resumeStream({ step, resumeData, requestContext, tracingOptions, perStep: perStep ?? debugMode });\n }, 'Error resuming workflow stream'),\n );\n\n const timeTravelWorkflowStream = useMutation<void, Error, TimeTravelWorkflowStreamParams>(\n ({ workflowId, requestContext, runId, perStep, ...params }) =>\n consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.timeTravelStream({\n ...params,\n perStep: perStep ?? debugMode,\n requestContext,\n tracingOptions,\n });\n }, 'Error time traveling workflow stream'),\n );\n\n const closeStreamsAndReset = useCallback(() => {\n closeActiveStream();\n setIsStreaming(false);\n setStreamResult(undefined);\n }, [closeActiveStream]);\n\n return {\n streamWorkflow,\n streamResult,\n isStreaming,\n observeWorkflowStream,\n closeStreamsAndReset,\n resumeWorkflowStream,\n timeTravelWorkflowStream,\n };\n}\n","import { useMutation } from '../lib/use-mutation';\nimport { useMastraClient } from '../mastra-client-context';\nimport type {\n CreateWorkflowRunParams,\n CreateWorkflowRunResult,\n CancelWorkflowRunParams,\n CancelWorkflowRunResult,\n} from './types';\n\nexport { useStreamWorkflow } from './use-stream-workflow';\n\n/**\n * Hook for creating workflow runs.\n * Returns a mutation for creating a new workflow run.\n *\n * @example\n * ```tsx\n * const createWorkflowRun = useCreateWorkflowRun();\n *\n * // Create a run\n * const { runId } = await createWorkflowRun.mutateAsync({\n * workflowId: 'my-workflow'\n * });\n * ```\n */\nexport function useCreateWorkflowRun() {\n const client = useMastraClient();\n\n return useMutation<CreateWorkflowRunResult, Error, CreateWorkflowRunParams>(\n async ({ workflowId, prevRunId, resourceId }) => {\n try {\n const workflow = client.getWorkflow(workflowId);\n const { runId: newRunId } = await workflow.createRun({ runId: prevRunId, resourceId });\n return { runId: newRunId };\n } catch (error) {\n console.error('Error creating workflow run:', error);\n throw error;\n }\n },\n );\n}\n\n/**\n * Hook for canceling workflow runs.\n * Returns a mutation for canceling a running workflow.\n *\n * @example\n * ```tsx\n * const cancelWorkflowRun = useCancelWorkflowRun();\n *\n * // Cancel a run\n * await cancelWorkflowRun.mutateAsync({\n * workflowId: 'my-workflow',\n * runId: 'run-123'\n * });\n * ```\n */\nexport function useCancelWorkflowRun() {\n const client = useMastraClient();\n\n return useMutation<CancelWorkflowRunResult, Error, CancelWorkflowRunParams>(async ({ workflowId, runId }) => {\n try {\n const workflow = client.getWorkflow(workflowId);\n const run = await workflow.createRun({ runId });\n return run.cancelRun();\n } catch (error) {\n console.error('Error canceling workflow run:', error);\n throw error;\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"hooks-Bt15IwzP.cjs","names":["useState","useRef","useCallback","typedError","useMastraClient","useState","useRef","useCallback","mapWorkflowStreamChunkToWatchResult","useMastraClient"],"sources":["../src/lib/use-mutation.ts","../src/workflows/use-stream-workflow.ts","../src/workflows/hooks.ts"],"sourcesContent":["import { useState, useCallback, useRef } from 'react';\n\n/**\n * Represents the state of a mutation operation.\n * Mimics the essential return type of react-query's useMutation.\n */\nexport interface MutationState<TData, TError extends Error, TVariables> {\n /** Execute the mutation without waiting for the result */\n mutate: (variables: TVariables) => void;\n /** Execute the mutation and return a promise with the result */\n mutateAsync: (variables: TVariables) => Promise<TData>;\n /** Whether the mutation is currently executing */\n isPending: boolean;\n /** Whether the mutation completed successfully */\n isSuccess: boolean;\n /** Whether the mutation failed with an error */\n isError: boolean;\n /** The error if the mutation failed, null otherwise */\n error: TError | null;\n /** The data returned by the mutation if successful */\n data: TData | undefined;\n /** Reset the mutation state to initial values */\n reset: () => void;\n}\n\n/**\n * Internal helper hook that provides mutation-like functionality without react-query.\n * Tracks pending, success, and error states for async operations.\n */\nexport function useMutation<TData, TError extends Error, TVariables>(\n mutationFn: (variables: TVariables) => Promise<TData>,\n): MutationState<TData, TError, TVariables> {\n const [isPending, setIsPending] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [isError, setIsError] = useState(false);\n const [error, setError] = useState<TError | null>(null);\n const [data, setData] = useState<TData | undefined>(undefined);\n\n const mutationFnRef = useRef(mutationFn);\n mutationFnRef.current = mutationFn;\n\n const reset = useCallback(() => {\n setIsPending(false);\n setIsSuccess(false);\n setIsError(false);\n setError(null);\n setData(undefined);\n }, []);\n\n const mutateAsync = useCallback(async (variables: TVariables): Promise<TData> => {\n setIsPending(true);\n setIsSuccess(false);\n setIsError(false);\n setError(null);\n\n try {\n const result = await mutationFnRef.current(variables);\n setData(result);\n setIsSuccess(true);\n return result;\n } catch (err) {\n const typedError = err as TError;\n setError(typedError);\n setIsError(true);\n throw err;\n } finally {\n setIsPending(false);\n }\n }, []);\n\n const mutate = useCallback(\n (variables: TVariables) => {\n mutateAsync(variables).catch(() => {\n // Error is already captured in state\n });\n },\n [mutateAsync],\n );\n\n return {\n mutate,\n mutateAsync,\n isPending,\n isSuccess,\n isError,\n error,\n data,\n reset,\n };\n}\n","import type { StreamVNextChunkType } from '@mastra/client-js';\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport { mapWorkflowStreamChunkToWatchResult } from '../lib/mastra-db';\nimport { useMutation } from '../lib/use-mutation';\nimport { useMastraClient } from '../mastra-client-context';\nimport type {\n UseStreamWorkflowParams,\n WorkflowStreamResult,\n StreamWorkflowParams,\n ObserveWorkflowStreamParams,\n ResumeWorkflowStreamParams,\n TimeTravelWorkflowStreamParams,\n} from './types';\n\ntype StreamOperation = {\n controller: AbortController;\n reader?: ReadableStreamDefaultReader<StreamVNextChunkType>;\n};\n\nexport function useStreamWorkflow({ debugMode, tracingOptions, onError }: UseStreamWorkflowParams) {\n const client = useMastraClient();\n const [streamResult, setStreamResult] = useState<WorkflowStreamResult>();\n const [isStreaming, setIsStreaming] = useState(false);\n const activeStream = useRef<StreamOperation | undefined>(undefined);\n const isMountedRef = useRef(true);\n\n const closeActiveStream = useCallback(() => {\n const operation = activeStream.current;\n activeStream.current = undefined;\n if (!operation) return;\n operation.controller.abort();\n // An already errored transport may reject cancellation during disposal.\n void operation.reader?.cancel().catch(() => undefined);\n operation.reader?.releaseLock();\n operation.reader = undefined;\n }, []);\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n closeActiveStream();\n };\n }, [closeActiveStream]);\n\n async function consumeStream(\n openStream: (signal: AbortSignal) => Promise<ReadableStream<StreamVNextChunkType> | undefined>,\n defaultMessage: string,\n ) {\n if (!isMountedRef.current) return;\n closeActiveStream();\n const operation: StreamOperation = { controller: new AbortController() };\n activeStream.current = operation;\n const { signal } = operation.controller;\n setIsStreaming(true);\n\n try {\n const stream = await openStream(signal);\n if (signal.aborted) {\n await stream?.cancel();\n return;\n }\n if (!stream) {\n onError?.(new Error('No stream returned'), 'No stream returned');\n return;\n }\n const reader = stream.getReader();\n operation.reader = reader;\n\n while (!signal.aborted) {\n const { done, value } = await reader.read();\n if (done || signal.aborted) break;\n setStreamResult(previous => mapWorkflowStreamChunkToWatchResult(previous, value));\n if (value.type === 'workflow-step-start') setIsStreaming(true);\n if (value.type === 'workflow-step-suspended') setIsStreaming(false);\n if (value.type === 'workflow-finish' && value.payload.workflowStatus === 'failed') {\n throw new Error(value.payload.metadata?.errorMessage || 'Workflow execution failed');\n }\n }\n } catch (error) {\n // Releasing an obsolete reader rejects its pending read; real transport TypeErrors must still surface.\n if (!signal.aborted) {\n if (!operation.reader) throw error;\n onError?.(error instanceof Error ? error : new Error(defaultMessage), defaultMessage);\n }\n } finally {\n operation.reader?.releaseLock();\n operation.reader = undefined;\n if (activeStream.current === operation) {\n activeStream.current = undefined;\n setIsStreaming(false);\n }\n }\n }\n\n const streamWorkflow = useMutation<void, Error, StreamWorkflowParams>(\n ({ workflowId, runId, inputData, initialState, requestContext, perStep, resourceId }) => {\n setStreamResult({ status: 'pending', input: inputData, steps: {} });\n return consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId, resourceId });\n if (signal.aborted) return;\n return run.stream({\n inputData,\n initialState,\n requestContext,\n closeOnSuspend: true,\n tracingOptions,\n perStep: perStep ?? debugMode,\n resourceId,\n });\n }, 'Error streaming workflow');\n },\n );\n\n const observeWorkflowStream = useMutation<void, Error, ObserveWorkflowStreamParams>(\n async ({ workflowId, runId, storeRunResult }) => {\n if (!isMountedRef.current) return;\n setStreamResult(storeRunResult ?? undefined);\n if (storeRunResult?.status === 'suspended') {\n closeActiveStream();\n setIsStreaming(false);\n return;\n }\n await consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.observeStream();\n }, 'Error observing workflow');\n },\n );\n\n const resumeWorkflowStream = useMutation<void, Error, ResumeWorkflowStreamParams>(\n ({ workflowId, runId, step, resumeData, requestContext, perStep }) =>\n consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.resumeStream({ step, resumeData, requestContext, tracingOptions, perStep: perStep ?? debugMode });\n }, 'Error resuming workflow stream'),\n );\n\n const timeTravelWorkflowStream = useMutation<void, Error, TimeTravelWorkflowStreamParams>(\n ({ workflowId, requestContext, runId, perStep, ...params }) =>\n consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.timeTravelStream({\n ...params,\n perStep: perStep ?? debugMode,\n requestContext,\n tracingOptions,\n });\n }, 'Error time traveling workflow stream'),\n );\n\n const closeStreamsAndReset = useCallback(() => {\n closeActiveStream();\n setIsStreaming(false);\n setStreamResult(undefined);\n }, [closeActiveStream]);\n\n return {\n streamWorkflow,\n streamResult,\n isStreaming,\n observeWorkflowStream,\n closeStreamsAndReset,\n resumeWorkflowStream,\n timeTravelWorkflowStream,\n };\n}\n","import { useMutation } from '../lib/use-mutation';\nimport { useMastraClient } from '../mastra-client-context';\nimport type {\n CreateWorkflowRunParams,\n CreateWorkflowRunResult,\n CancelWorkflowRunParams,\n CancelWorkflowRunResult,\n} from './types';\n\nexport { useStreamWorkflow } from './use-stream-workflow';\n\n/**\n * Hook for creating workflow runs.\n * Returns a mutation for creating a new workflow run.\n *\n * @example\n * ```tsx\n * const createWorkflowRun = useCreateWorkflowRun();\n *\n * // Create a run\n * const { runId } = await createWorkflowRun.mutateAsync({\n * workflowId: 'my-workflow'\n * });\n * ```\n */\nexport function useCreateWorkflowRun() {\n const client = useMastraClient();\n\n return useMutation<CreateWorkflowRunResult, Error, CreateWorkflowRunParams>(\n async ({ workflowId, prevRunId, resourceId }) => {\n try {\n const workflow = client.getWorkflow(workflowId);\n const { runId: newRunId } = await workflow.createRun({ runId: prevRunId, resourceId });\n return { runId: newRunId };\n } catch (error) {\n console.error('Error creating workflow run:', error);\n throw error;\n }\n },\n );\n}\n\n/**\n * Hook for canceling workflow runs.\n * Returns a mutation for canceling a running workflow.\n *\n * @example\n * ```tsx\n * const cancelWorkflowRun = useCancelWorkflowRun();\n *\n * // Cancel a run\n * await cancelWorkflowRun.mutateAsync({\n * workflowId: 'my-workflow',\n * runId: 'run-123'\n * });\n * ```\n */\nexport function useCancelWorkflowRun() {\n const client = useMastraClient();\n\n return useMutation<CancelWorkflowRunResult, Error, CancelWorkflowRunParams>(async ({ workflowId, runId }) => {\n try {\n const workflow = client.getWorkflow(workflowId);\n const run = await workflow.createRun({ runId });\n return run.cancelRun();\n } catch (error) {\n console.error('Error canceling workflow run:', error);\n throw error;\n }\n });\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { n as useMastraClient } from "./mastra-client-context-Bx_g84YB.js";
2
- import { i as mapWorkflowStreamChunkToWatchResult } from "./accumulator-D9jAph99.js";
1
+ import { n as useMastraClient } from "./mastra-client-context-DQ5z_ze9.js";
2
+ import { i as mapWorkflowStreamChunkToWatchResult } from "./accumulator-DysrPe6U.js";
3
3
  import { useCallback, useEffect, useRef, useState } from "react";
4
- //#region src/lib/use-mutation.ts
4
+ // src/lib/use-mutation.ts
5
5
  /**
6
6
  * Internal helper hook that provides mutation-like functionality without react-query.
7
7
  * Tracks pending, success, and error states for async operations.
@@ -52,8 +52,7 @@ function useMutation(mutationFn) {
52
52
  reset
53
53
  };
54
54
  }
55
- //#endregion
56
- //#region src/workflows/use-stream-workflow.ts
55
+ // src/workflows/use-stream-workflow.ts
57
56
  function useStreamWorkflow({ debugMode, tracingOptions, onError }) {
58
57
  const client = useMastraClient();
59
58
  const [streamResult, setStreamResult] = useState();
@@ -189,8 +188,7 @@ function useStreamWorkflow({ debugMode, tracingOptions, onError }) {
189
188
  timeTravelWorkflowStream
190
189
  };
191
190
  }
192
- //#endregion
193
- //#region src/workflows/hooks.ts
191
+ // src/workflows/hooks.ts
194
192
  /**
195
193
  * Hook for creating workflow runs.
196
194
  * Returns a mutation for creating a new workflow run.
@@ -246,7 +244,6 @@ function useCancelWorkflowRun() {
246
244
  }
247
245
  });
248
246
  }
249
- //#endregion
250
247
  export { useCreateWorkflowRun as n, useStreamWorkflow as r, useCancelWorkflowRun as t };
251
248
 
252
- //# sourceMappingURL=hooks-DG-Y1KFe.js.map
249
+ //# sourceMappingURL=hooks-Btt7PyI-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-DG-Y1KFe.js","names":["typedError"],"sources":["../src/lib/use-mutation.ts","../src/workflows/use-stream-workflow.ts","../src/workflows/hooks.ts"],"sourcesContent":["import { useState, useCallback, useRef } from 'react';\n\n/**\n * Represents the state of a mutation operation.\n * Mimics the essential return type of react-query's useMutation.\n */\nexport interface MutationState<TData, TError extends Error, TVariables> {\n /** Execute the mutation without waiting for the result */\n mutate: (variables: TVariables) => void;\n /** Execute the mutation and return a promise with the result */\n mutateAsync: (variables: TVariables) => Promise<TData>;\n /** Whether the mutation is currently executing */\n isPending: boolean;\n /** Whether the mutation completed successfully */\n isSuccess: boolean;\n /** Whether the mutation failed with an error */\n isError: boolean;\n /** The error if the mutation failed, null otherwise */\n error: TError | null;\n /** The data returned by the mutation if successful */\n data: TData | undefined;\n /** Reset the mutation state to initial values */\n reset: () => void;\n}\n\n/**\n * Internal helper hook that provides mutation-like functionality without react-query.\n * Tracks pending, success, and error states for async operations.\n */\nexport function useMutation<TData, TError extends Error, TVariables>(\n mutationFn: (variables: TVariables) => Promise<TData>,\n): MutationState<TData, TError, TVariables> {\n const [isPending, setIsPending] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [isError, setIsError] = useState(false);\n const [error, setError] = useState<TError | null>(null);\n const [data, setData] = useState<TData | undefined>(undefined);\n\n const mutationFnRef = useRef(mutationFn);\n mutationFnRef.current = mutationFn;\n\n const reset = useCallback(() => {\n setIsPending(false);\n setIsSuccess(false);\n setIsError(false);\n setError(null);\n setData(undefined);\n }, []);\n\n const mutateAsync = useCallback(async (variables: TVariables): Promise<TData> => {\n setIsPending(true);\n setIsSuccess(false);\n setIsError(false);\n setError(null);\n\n try {\n const result = await mutationFnRef.current(variables);\n setData(result);\n setIsSuccess(true);\n return result;\n } catch (err) {\n const typedError = err as TError;\n setError(typedError);\n setIsError(true);\n throw err;\n } finally {\n setIsPending(false);\n }\n }, []);\n\n const mutate = useCallback(\n (variables: TVariables) => {\n mutateAsync(variables).catch(() => {\n // Error is already captured in state\n });\n },\n [mutateAsync],\n );\n\n return {\n mutate,\n mutateAsync,\n isPending,\n isSuccess,\n isError,\n error,\n data,\n reset,\n };\n}\n","import type { StreamVNextChunkType } from '@mastra/client-js';\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport { mapWorkflowStreamChunkToWatchResult } from '../lib/mastra-db';\nimport { useMutation } from '../lib/use-mutation';\nimport { useMastraClient } from '../mastra-client-context';\nimport type {\n UseStreamWorkflowParams,\n WorkflowStreamResult,\n StreamWorkflowParams,\n ObserveWorkflowStreamParams,\n ResumeWorkflowStreamParams,\n TimeTravelWorkflowStreamParams,\n} from './types';\n\ntype StreamOperation = {\n controller: AbortController;\n reader?: ReadableStreamDefaultReader<StreamVNextChunkType>;\n};\n\nexport function useStreamWorkflow({ debugMode, tracingOptions, onError }: UseStreamWorkflowParams) {\n const client = useMastraClient();\n const [streamResult, setStreamResult] = useState<WorkflowStreamResult>();\n const [isStreaming, setIsStreaming] = useState(false);\n const activeStream = useRef<StreamOperation | undefined>(undefined);\n const isMountedRef = useRef(true);\n\n const closeActiveStream = useCallback(() => {\n const operation = activeStream.current;\n activeStream.current = undefined;\n if (!operation) return;\n operation.controller.abort();\n // An already errored transport may reject cancellation during disposal.\n void operation.reader?.cancel().catch(() => undefined);\n operation.reader?.releaseLock();\n operation.reader = undefined;\n }, []);\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n closeActiveStream();\n };\n }, [closeActiveStream]);\n\n async function consumeStream(\n openStream: (signal: AbortSignal) => Promise<ReadableStream<StreamVNextChunkType> | undefined>,\n defaultMessage: string,\n ) {\n if (!isMountedRef.current) return;\n closeActiveStream();\n const operation: StreamOperation = { controller: new AbortController() };\n activeStream.current = operation;\n const { signal } = operation.controller;\n setIsStreaming(true);\n\n try {\n const stream = await openStream(signal);\n if (signal.aborted) {\n await stream?.cancel();\n return;\n }\n if (!stream) {\n onError?.(new Error('No stream returned'), 'No stream returned');\n return;\n }\n const reader = stream.getReader();\n operation.reader = reader;\n\n while (!signal.aborted) {\n const { done, value } = await reader.read();\n if (done || signal.aborted) break;\n setStreamResult(previous => mapWorkflowStreamChunkToWatchResult(previous, value));\n if (value.type === 'workflow-step-start') setIsStreaming(true);\n if (value.type === 'workflow-step-suspended') setIsStreaming(false);\n if (value.type === 'workflow-finish' && value.payload.workflowStatus === 'failed') {\n throw new Error(value.payload.metadata?.errorMessage || 'Workflow execution failed');\n }\n }\n } catch (error) {\n // Releasing an obsolete reader rejects its pending read; real transport TypeErrors must still surface.\n if (!signal.aborted) {\n if (!operation.reader) throw error;\n onError?.(error instanceof Error ? error : new Error(defaultMessage), defaultMessage);\n }\n } finally {\n operation.reader?.releaseLock();\n operation.reader = undefined;\n if (activeStream.current === operation) {\n activeStream.current = undefined;\n setIsStreaming(false);\n }\n }\n }\n\n const streamWorkflow = useMutation<void, Error, StreamWorkflowParams>(\n ({ workflowId, runId, inputData, initialState, requestContext, perStep, resourceId }) => {\n setStreamResult({ status: 'pending', input: inputData, steps: {} });\n return consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId, resourceId });\n if (signal.aborted) return;\n return run.stream({\n inputData,\n initialState,\n requestContext,\n closeOnSuspend: true,\n tracingOptions,\n perStep: perStep ?? debugMode,\n resourceId,\n });\n }, 'Error streaming workflow');\n },\n );\n\n const observeWorkflowStream = useMutation<void, Error, ObserveWorkflowStreamParams>(\n async ({ workflowId, runId, storeRunResult }) => {\n if (!isMountedRef.current) return;\n setStreamResult(storeRunResult ?? undefined);\n if (storeRunResult?.status === 'suspended') {\n closeActiveStream();\n setIsStreaming(false);\n return;\n }\n await consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.observeStream();\n }, 'Error observing workflow');\n },\n );\n\n const resumeWorkflowStream = useMutation<void, Error, ResumeWorkflowStreamParams>(\n ({ workflowId, runId, step, resumeData, requestContext, perStep }) =>\n consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.resumeStream({ step, resumeData, requestContext, tracingOptions, perStep: perStep ?? debugMode });\n }, 'Error resuming workflow stream'),\n );\n\n const timeTravelWorkflowStream = useMutation<void, Error, TimeTravelWorkflowStreamParams>(\n ({ workflowId, requestContext, runId, perStep, ...params }) =>\n consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.timeTravelStream({\n ...params,\n perStep: perStep ?? debugMode,\n requestContext,\n tracingOptions,\n });\n }, 'Error time traveling workflow stream'),\n );\n\n const closeStreamsAndReset = useCallback(() => {\n closeActiveStream();\n setIsStreaming(false);\n setStreamResult(undefined);\n }, [closeActiveStream]);\n\n return {\n streamWorkflow,\n streamResult,\n isStreaming,\n observeWorkflowStream,\n closeStreamsAndReset,\n resumeWorkflowStream,\n timeTravelWorkflowStream,\n };\n}\n","import { useMutation } from '../lib/use-mutation';\nimport { useMastraClient } from '../mastra-client-context';\nimport type {\n CreateWorkflowRunParams,\n CreateWorkflowRunResult,\n CancelWorkflowRunParams,\n CancelWorkflowRunResult,\n} from './types';\n\nexport { useStreamWorkflow } from './use-stream-workflow';\n\n/**\n * Hook for creating workflow runs.\n * Returns a mutation for creating a new workflow run.\n *\n * @example\n * ```tsx\n * const createWorkflowRun = useCreateWorkflowRun();\n *\n * // Create a run\n * const { runId } = await createWorkflowRun.mutateAsync({\n * workflowId: 'my-workflow'\n * });\n * ```\n */\nexport function useCreateWorkflowRun() {\n const client = useMastraClient();\n\n return useMutation<CreateWorkflowRunResult, Error, CreateWorkflowRunParams>(\n async ({ workflowId, prevRunId, resourceId }) => {\n try {\n const workflow = client.getWorkflow(workflowId);\n const { runId: newRunId } = await workflow.createRun({ runId: prevRunId, resourceId });\n return { runId: newRunId };\n } catch (error) {\n console.error('Error creating workflow run:', error);\n throw error;\n }\n },\n );\n}\n\n/**\n * Hook for canceling workflow runs.\n * Returns a mutation for canceling a running workflow.\n *\n * @example\n * ```tsx\n * const cancelWorkflowRun = useCancelWorkflowRun();\n *\n * // Cancel a run\n * await cancelWorkflowRun.mutateAsync({\n * workflowId: 'my-workflow',\n * runId: 'run-123'\n * });\n * ```\n */\nexport function useCancelWorkflowRun() {\n const client = useMastraClient();\n\n return useMutation<CancelWorkflowRunResult, Error, CancelWorkflowRunParams>(async ({ workflowId, runId }) => {\n try {\n const workflow = client.getWorkflow(workflowId);\n const run = await workflow.createRun({ runId });\n return run.cancelRun();\n } catch (error) {\n console.error('Error canceling workflow run:', error);\n throw error;\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"hooks-Btt7PyI-.js","names":["typedError"],"sources":["../src/lib/use-mutation.ts","../src/workflows/use-stream-workflow.ts","../src/workflows/hooks.ts"],"sourcesContent":["import { useState, useCallback, useRef } from 'react';\n\n/**\n * Represents the state of a mutation operation.\n * Mimics the essential return type of react-query's useMutation.\n */\nexport interface MutationState<TData, TError extends Error, TVariables> {\n /** Execute the mutation without waiting for the result */\n mutate: (variables: TVariables) => void;\n /** Execute the mutation and return a promise with the result */\n mutateAsync: (variables: TVariables) => Promise<TData>;\n /** Whether the mutation is currently executing */\n isPending: boolean;\n /** Whether the mutation completed successfully */\n isSuccess: boolean;\n /** Whether the mutation failed with an error */\n isError: boolean;\n /** The error if the mutation failed, null otherwise */\n error: TError | null;\n /** The data returned by the mutation if successful */\n data: TData | undefined;\n /** Reset the mutation state to initial values */\n reset: () => void;\n}\n\n/**\n * Internal helper hook that provides mutation-like functionality without react-query.\n * Tracks pending, success, and error states for async operations.\n */\nexport function useMutation<TData, TError extends Error, TVariables>(\n mutationFn: (variables: TVariables) => Promise<TData>,\n): MutationState<TData, TError, TVariables> {\n const [isPending, setIsPending] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [isError, setIsError] = useState(false);\n const [error, setError] = useState<TError | null>(null);\n const [data, setData] = useState<TData | undefined>(undefined);\n\n const mutationFnRef = useRef(mutationFn);\n mutationFnRef.current = mutationFn;\n\n const reset = useCallback(() => {\n setIsPending(false);\n setIsSuccess(false);\n setIsError(false);\n setError(null);\n setData(undefined);\n }, []);\n\n const mutateAsync = useCallback(async (variables: TVariables): Promise<TData> => {\n setIsPending(true);\n setIsSuccess(false);\n setIsError(false);\n setError(null);\n\n try {\n const result = await mutationFnRef.current(variables);\n setData(result);\n setIsSuccess(true);\n return result;\n } catch (err) {\n const typedError = err as TError;\n setError(typedError);\n setIsError(true);\n throw err;\n } finally {\n setIsPending(false);\n }\n }, []);\n\n const mutate = useCallback(\n (variables: TVariables) => {\n mutateAsync(variables).catch(() => {\n // Error is already captured in state\n });\n },\n [mutateAsync],\n );\n\n return {\n mutate,\n mutateAsync,\n isPending,\n isSuccess,\n isError,\n error,\n data,\n reset,\n };\n}\n","import type { StreamVNextChunkType } from '@mastra/client-js';\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport { mapWorkflowStreamChunkToWatchResult } from '../lib/mastra-db';\nimport { useMutation } from '../lib/use-mutation';\nimport { useMastraClient } from '../mastra-client-context';\nimport type {\n UseStreamWorkflowParams,\n WorkflowStreamResult,\n StreamWorkflowParams,\n ObserveWorkflowStreamParams,\n ResumeWorkflowStreamParams,\n TimeTravelWorkflowStreamParams,\n} from './types';\n\ntype StreamOperation = {\n controller: AbortController;\n reader?: ReadableStreamDefaultReader<StreamVNextChunkType>;\n};\n\nexport function useStreamWorkflow({ debugMode, tracingOptions, onError }: UseStreamWorkflowParams) {\n const client = useMastraClient();\n const [streamResult, setStreamResult] = useState<WorkflowStreamResult>();\n const [isStreaming, setIsStreaming] = useState(false);\n const activeStream = useRef<StreamOperation | undefined>(undefined);\n const isMountedRef = useRef(true);\n\n const closeActiveStream = useCallback(() => {\n const operation = activeStream.current;\n activeStream.current = undefined;\n if (!operation) return;\n operation.controller.abort();\n // An already errored transport may reject cancellation during disposal.\n void operation.reader?.cancel().catch(() => undefined);\n operation.reader?.releaseLock();\n operation.reader = undefined;\n }, []);\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n closeActiveStream();\n };\n }, [closeActiveStream]);\n\n async function consumeStream(\n openStream: (signal: AbortSignal) => Promise<ReadableStream<StreamVNextChunkType> | undefined>,\n defaultMessage: string,\n ) {\n if (!isMountedRef.current) return;\n closeActiveStream();\n const operation: StreamOperation = { controller: new AbortController() };\n activeStream.current = operation;\n const { signal } = operation.controller;\n setIsStreaming(true);\n\n try {\n const stream = await openStream(signal);\n if (signal.aborted) {\n await stream?.cancel();\n return;\n }\n if (!stream) {\n onError?.(new Error('No stream returned'), 'No stream returned');\n return;\n }\n const reader = stream.getReader();\n operation.reader = reader;\n\n while (!signal.aborted) {\n const { done, value } = await reader.read();\n if (done || signal.aborted) break;\n setStreamResult(previous => mapWorkflowStreamChunkToWatchResult(previous, value));\n if (value.type === 'workflow-step-start') setIsStreaming(true);\n if (value.type === 'workflow-step-suspended') setIsStreaming(false);\n if (value.type === 'workflow-finish' && value.payload.workflowStatus === 'failed') {\n throw new Error(value.payload.metadata?.errorMessage || 'Workflow execution failed');\n }\n }\n } catch (error) {\n // Releasing an obsolete reader rejects its pending read; real transport TypeErrors must still surface.\n if (!signal.aborted) {\n if (!operation.reader) throw error;\n onError?.(error instanceof Error ? error : new Error(defaultMessage), defaultMessage);\n }\n } finally {\n operation.reader?.releaseLock();\n operation.reader = undefined;\n if (activeStream.current === operation) {\n activeStream.current = undefined;\n setIsStreaming(false);\n }\n }\n }\n\n const streamWorkflow = useMutation<void, Error, StreamWorkflowParams>(\n ({ workflowId, runId, inputData, initialState, requestContext, perStep, resourceId }) => {\n setStreamResult({ status: 'pending', input: inputData, steps: {} });\n return consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId, resourceId });\n if (signal.aborted) return;\n return run.stream({\n inputData,\n initialState,\n requestContext,\n closeOnSuspend: true,\n tracingOptions,\n perStep: perStep ?? debugMode,\n resourceId,\n });\n }, 'Error streaming workflow');\n },\n );\n\n const observeWorkflowStream = useMutation<void, Error, ObserveWorkflowStreamParams>(\n async ({ workflowId, runId, storeRunResult }) => {\n if (!isMountedRef.current) return;\n setStreamResult(storeRunResult ?? undefined);\n if (storeRunResult?.status === 'suspended') {\n closeActiveStream();\n setIsStreaming(false);\n return;\n }\n await consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.observeStream();\n }, 'Error observing workflow');\n },\n );\n\n const resumeWorkflowStream = useMutation<void, Error, ResumeWorkflowStreamParams>(\n ({ workflowId, runId, step, resumeData, requestContext, perStep }) =>\n consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.resumeStream({ step, resumeData, requestContext, tracingOptions, perStep: perStep ?? debugMode });\n }, 'Error resuming workflow stream'),\n );\n\n const timeTravelWorkflowStream = useMutation<void, Error, TimeTravelWorkflowStreamParams>(\n ({ workflowId, requestContext, runId, perStep, ...params }) =>\n consumeStream(async signal => {\n const run = await client.getWorkflow(workflowId).createRun({ runId });\n if (signal.aborted) return;\n return run.timeTravelStream({\n ...params,\n perStep: perStep ?? debugMode,\n requestContext,\n tracingOptions,\n });\n }, 'Error time traveling workflow stream'),\n );\n\n const closeStreamsAndReset = useCallback(() => {\n closeActiveStream();\n setIsStreaming(false);\n setStreamResult(undefined);\n }, [closeActiveStream]);\n\n return {\n streamWorkflow,\n streamResult,\n isStreaming,\n observeWorkflowStream,\n closeStreamsAndReset,\n resumeWorkflowStream,\n timeTravelWorkflowStream,\n };\n}\n","import { useMutation } from '../lib/use-mutation';\nimport { useMastraClient } from '../mastra-client-context';\nimport type {\n CreateWorkflowRunParams,\n CreateWorkflowRunResult,\n CancelWorkflowRunParams,\n CancelWorkflowRunResult,\n} from './types';\n\nexport { useStreamWorkflow } from './use-stream-workflow';\n\n/**\n * Hook for creating workflow runs.\n * Returns a mutation for creating a new workflow run.\n *\n * @example\n * ```tsx\n * const createWorkflowRun = useCreateWorkflowRun();\n *\n * // Create a run\n * const { runId } = await createWorkflowRun.mutateAsync({\n * workflowId: 'my-workflow'\n * });\n * ```\n */\nexport function useCreateWorkflowRun() {\n const client = useMastraClient();\n\n return useMutation<CreateWorkflowRunResult, Error, CreateWorkflowRunParams>(\n async ({ workflowId, prevRunId, resourceId }) => {\n try {\n const workflow = client.getWorkflow(workflowId);\n const { runId: newRunId } = await workflow.createRun({ runId: prevRunId, resourceId });\n return { runId: newRunId };\n } catch (error) {\n console.error('Error creating workflow run:', error);\n throw error;\n }\n },\n );\n}\n\n/**\n * Hook for canceling workflow runs.\n * Returns a mutation for canceling a running workflow.\n *\n * @example\n * ```tsx\n * const cancelWorkflowRun = useCancelWorkflowRun();\n *\n * // Cancel a run\n * await cancelWorkflowRun.mutateAsync({\n * workflowId: 'my-workflow',\n * runId: 'run-123'\n * });\n * ```\n */\nexport function useCancelWorkflowRun() {\n const client = useMastraClient();\n\n return useMutation<CancelWorkflowRunResult, Error, CancelWorkflowRunParams>(async ({ workflowId, runId }) => {\n try {\n const workflow = client.getWorkflow(workflowId);\n const run = await workflow.createRun({ runId });\n return run.cancelRun();\n } catch (error) {\n console.error('Error canceling workflow run:', error);\n throw error;\n }\n });\n}\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { n as useMastraClient } from "./mastra-client-context-Bx_g84YB.js";
2
- import { a as CLIENT_MESSAGE_ID_KEY, n as accumulateNetworkChunk, o as convertSignalDataToBase64String, r as finishStreamingAssistantMessage, s as encodeFilePartDataForStorage, t as accumulateChunk } from "./accumulator-D9jAph99.js";
1
+ import { n as useMastraClient } from "./mastra-client-context-DQ5z_ze9.js";
2
+ import { a as CLIENT_MESSAGE_ID_KEY, n as accumulateNetworkChunk, o as convertSignalDataToBase64String, r as finishStreamingAssistantMessage, s as encodeFilePartDataForStorage, t as accumulateChunk } from "./accumulator-DysrPe6U.js";
3
3
  import { MastraClient } from "@mastra/client-js";
4
4
  import { useCallback, useEffect, useRef, useState } from "react";
5
5
  import { v4 } from "@lukeed/uuid";
6
6
  import { AIV5Adapter } from "@mastra/core/agent/message-list";
7
- //#region src/lib/mastra-db/fromCoreUserMessage.ts
7
+ // src/lib/mastra-db/fromCoreUserMessage.ts
8
8
  /**
9
9
  * Convert a CoreUserMessage into a canonical `MastraDBMessage` (`format: 2`).
10
10
  *
@@ -61,8 +61,7 @@ const fromCoreUserMessageToMastraDBMessage = (coreUserMessage) => newUserMessage
61
61
  * display conversion alone cannot combine separately persisted messages.
62
62
  */
63
63
  const fromCoreUserMessagesToMastraDBMessage = (coreUserMessages) => newUserMessage(coreUserMessages.flatMap(coreUserMessageToParts));
64
- //#endregion
65
- //#region src/agent/extract-tasks.ts
64
+ // src/agent/extract-tasks.ts
66
65
  const TASK_TOOL_NAMES = /* @__PURE__ */ new Set([
67
66
  "task_write",
68
67
  "task_update",
@@ -144,8 +143,7 @@ const extractLatestTasksFromMessages = (messages) => {
144
143
  }
145
144
  return latest ?? [];
146
145
  };
147
- //#endregion
148
- //#region src/agent/extractRunIdFromMessages.ts
146
+ // src/agent/extractRunIdFromMessages.ts
149
147
  const isRecord = (value) => value !== null && typeof value === "object";
150
148
  const runIdMetadataKeys = [
151
149
  "pendingToolApprovals",
@@ -172,8 +170,7 @@ const getRunIdMetadataSources = (metadata) => {
172
170
  const extractRunIdFromMessages = (messages) => {
173
171
  for (const message of messages) for (const source of getRunIdMetadataSources(message.content?.metadata)) for (const entry of Object.values(source)) if (isRecord(entry) && typeof entry.runId === "string" && entry.runId.length > 0) return entry.runId;
174
172
  };
175
- //#endregion
176
- //#region src/agent/merge-history.ts
173
+ // src/agent/merge-history.ts
177
174
  const liveClientMessageId = (message) => {
178
175
  const clientMessageId = message.content.metadata?.[CLIENT_MESSAGE_ID_KEY];
179
176
  return typeof clientMessageId === "string" ? clientMessageId : void 0;
@@ -212,8 +209,7 @@ const mergeHistoryIntoConversation = ({ conversation, history, previousHistory }
212
209
  });
213
210
  return [...mergedHistory, ...unstoredLive];
214
211
  };
215
- //#endregion
216
- //#region src/agent/user-message.ts
212
+ // src/agent/user-message.ts
217
213
  const messageParts = (message) => {
218
214
  const parts = typeof message.content === "string" ? [{
219
215
  type: "text",
@@ -241,8 +237,7 @@ const createUserMessage = (text, attachments = []) => ({
241
237
  text
242
238
  }] : [], ...attachments.flatMap(messageParts)]
243
239
  });
244
- //#endregion
245
- //#region src/agent/hooks.ts
240
+ // src/agent/hooks.ts
246
241
  const extractPendingToolApprovalIdsFromMessages = (messages, runId) => {
247
242
  const pendingToolApprovalIds = /* @__PURE__ */ new Set();
248
243
  for (const message of messages) {
@@ -1286,7 +1281,6 @@ const useChat = ({ agentId, resourceId, threadId, initialMessages, requestContex
1286
1281
  networkToolCallApprovals
1287
1282
  };
1288
1283
  };
1289
- //#endregion
1290
1284
  export { fromCoreUserMessageToMastraDBMessage as n, fromCoreUserMessagesToMastraDBMessage as r, useChat as t };
1291
1285
 
1292
- //# sourceMappingURL=hooks-BfysjY_K.js.map
1286
+ //# sourceMappingURL=hooks-CEikbhrN.js.map