@mastra/react 1.5.1-alpha.3 → 1.6.0-alpha.4
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/index.cjs +114 -305
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +115 -251
- package/dist/index.js.map +1 -1
- package/dist/lib/mastra-db/accumulator.d.ts +1 -1
- package/dist/lib/mastra-db/accumulator.d.ts.map +1 -1
- package/dist/ui/index.cjs +575 -56
- package/dist/ui/index.cjs.map +1 -0
- package/dist/ui/index.js +497 -1
- package/dist/ui/index.js.map +1 -0
- package/dist/workflows/use-stream-workflow.d.ts +1 -29
- package/dist/workflows/use-stream-workflow.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/ui-BQyoxYsH.js +0 -498
- package/dist/ui-BQyoxYsH.js.map +0 -1
- package/dist/ui-C979LXC_.cjs +0 -850
- package/dist/ui-C979LXC_.cjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_ui = require("./ui-C979LXC_.cjs");
|
|
3
2
|
let _mastra_client_js = require("@mastra/client-js");
|
|
4
3
|
let react = require("react");
|
|
5
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -268,39 +267,47 @@ const mergeBgTaskMetadata = (existing, mode, args, otherMetadata) => {
|
|
|
268
267
|
* `mapWorkflowStreamChunkToWatchResult` from the previous accumulator.
|
|
269
268
|
*/
|
|
270
269
|
const mapWorkflowStreamChunkToWatchResult = (prev, chunk) => {
|
|
270
|
+
const previous = prev ?? {
|
|
271
|
+
status: "running",
|
|
272
|
+
input: void 0,
|
|
273
|
+
steps: {}
|
|
274
|
+
};
|
|
271
275
|
if (chunk.type === "workflow-start") return {
|
|
272
|
-
input:
|
|
276
|
+
input: previous.input,
|
|
273
277
|
status: "running",
|
|
274
|
-
steps:
|
|
278
|
+
steps: previous.steps
|
|
275
279
|
};
|
|
276
280
|
if (chunk.type === "workflow-canceled") return {
|
|
277
|
-
...
|
|
281
|
+
...previous,
|
|
278
282
|
status: "canceled"
|
|
279
283
|
};
|
|
284
|
+
if (chunk.type === "workflow-paused") return {
|
|
285
|
+
...previous,
|
|
286
|
+
status: "paused"
|
|
287
|
+
};
|
|
280
288
|
if (chunk.type === "workflow-finish") {
|
|
281
289
|
const finalStatus = chunk.payload.workflowStatus;
|
|
282
|
-
const
|
|
283
|
-
const lastStep = Object.values(prevSteps).pop();
|
|
290
|
+
const lastStep = Object.values(previous.steps).pop();
|
|
284
291
|
return {
|
|
285
|
-
...
|
|
292
|
+
...previous,
|
|
286
293
|
status: chunk.payload.workflowStatus,
|
|
287
294
|
...finalStatus === "success" && lastStep?.status === "success" ? { result: lastStep?.output } : finalStatus === "failed" && lastStep?.status === "failed" ? { error: lastStep?.error } : finalStatus === "tripwire" && chunk.payload.tripwire ? { tripwire: chunk.payload.tripwire } : {}
|
|
288
295
|
};
|
|
289
296
|
}
|
|
290
297
|
const { stepCallId: _stepCallId, stepName: _stepName, ...newPayload } = chunk.payload ?? {};
|
|
291
298
|
const newSteps = {
|
|
292
|
-
...
|
|
299
|
+
...previous.steps,
|
|
293
300
|
[chunk.payload.id]: {
|
|
294
|
-
...
|
|
301
|
+
...previous.steps[chunk.payload.id],
|
|
295
302
|
...newPayload
|
|
296
303
|
}
|
|
297
304
|
};
|
|
298
305
|
if (chunk.type === "workflow-step-start") return {
|
|
299
|
-
...
|
|
306
|
+
...previous,
|
|
300
307
|
steps: newSteps
|
|
301
308
|
};
|
|
302
309
|
if (chunk.type === "workflow-step-suspended") {
|
|
303
|
-
const
|
|
310
|
+
const suspended = Object.entries(newSteps).flatMap(([stepId, stepResult]) => {
|
|
304
311
|
if (stepResult?.status === "suspended") {
|
|
305
312
|
const nestedPath = stepResult?.suspendPayload?.__workflow_meta?.path;
|
|
306
313
|
return nestedPath ? [[stepId, ...nestedPath]] : [[stepId]];
|
|
@@ -308,24 +315,24 @@ const mapWorkflowStreamChunkToWatchResult = (prev, chunk) => {
|
|
|
308
315
|
return [];
|
|
309
316
|
});
|
|
310
317
|
return {
|
|
311
|
-
...
|
|
318
|
+
...previous,
|
|
312
319
|
status: "suspended",
|
|
313
320
|
steps: newSteps,
|
|
314
321
|
suspendPayload: chunk.payload.suspendPayload,
|
|
315
|
-
suspended
|
|
322
|
+
suspended
|
|
316
323
|
};
|
|
317
324
|
}
|
|
318
325
|
if (chunk.type === "workflow-step-waiting") return {
|
|
319
|
-
...
|
|
326
|
+
...previous,
|
|
320
327
|
status: "waiting",
|
|
321
328
|
steps: newSteps
|
|
322
329
|
};
|
|
323
330
|
if (chunk.type === "workflow-step-progress") return {
|
|
324
|
-
...
|
|
331
|
+
...previous,
|
|
325
332
|
steps: {
|
|
326
|
-
...
|
|
333
|
+
...previous.steps,
|
|
327
334
|
[chunk.payload.id]: {
|
|
328
|
-
...
|
|
335
|
+
...previous.steps[chunk.payload.id],
|
|
329
336
|
foreachProgress: {
|
|
330
337
|
completedCount: chunk.payload.completedCount,
|
|
331
338
|
totalCount: chunk.payload.totalCount,
|
|
@@ -337,10 +344,10 @@ const mapWorkflowStreamChunkToWatchResult = (prev, chunk) => {
|
|
|
337
344
|
}
|
|
338
345
|
};
|
|
339
346
|
if (chunk.type === "workflow-step-result") return {
|
|
340
|
-
...
|
|
347
|
+
...previous,
|
|
341
348
|
steps: newSteps
|
|
342
349
|
};
|
|
343
|
-
return
|
|
350
|
+
return previous;
|
|
344
351
|
};
|
|
345
352
|
const signalContentsToUserMessages = (contents, metadata) => {
|
|
346
353
|
const makeUserMessage = (parts) => ({
|
|
@@ -917,7 +924,7 @@ const accumulateChunk = ({ chunk, conversation, metadata }) => {
|
|
|
917
924
|
const { toolName, toolCallId, args } = toolPart.toolInvocation;
|
|
918
925
|
const payloadOutput = chunk.type === "background-task-output" ? chunk.payload.payload.payload.output : chunk.payload.output;
|
|
919
926
|
if (payloadOutput?.type?.startsWith("workflow-")) {
|
|
920
|
-
const existingWorkflowState = toolPart.toolInvocation.result
|
|
927
|
+
const existingWorkflowState = toolPart.toolInvocation.result;
|
|
921
928
|
const updated = mapWorkflowStreamChunkToWatchResult(existingWorkflowState, payloadOutput);
|
|
922
929
|
parts[toolPartIndex] = {
|
|
923
930
|
...toolPart,
|
|
@@ -1147,8 +1154,7 @@ const accumulateChunk = ({ chunk, conversation, metadata }) => {
|
|
|
1147
1154
|
case "network-validation-start":
|
|
1148
1155
|
case "network-validation-end":
|
|
1149
1156
|
case "network-object":
|
|
1150
|
-
case "network-object-result":
|
|
1151
|
-
case "tool-output-denied": return result;
|
|
1157
|
+
case "network-object-result": return result;
|
|
1152
1158
|
default: return assertExhaustive(chunk, result);
|
|
1153
1159
|
}
|
|
1154
1160
|
};
|
|
@@ -2817,275 +2823,133 @@ function useMutation(mutationFn) {
|
|
|
2817
2823
|
}
|
|
2818
2824
|
//#endregion
|
|
2819
2825
|
//#region src/workflows/use-stream-workflow.ts
|
|
2820
|
-
/**
|
|
2821
|
-
* Hook for streaming workflow execution with support for observing, resuming, and time-travel.
|
|
2822
|
-
*
|
|
2823
|
-
* @example
|
|
2824
|
-
* ```tsx
|
|
2825
|
-
* const {
|
|
2826
|
-
* streamWorkflow,
|
|
2827
|
-
* streamResult,
|
|
2828
|
-
* isStreaming,
|
|
2829
|
-
* observeWorkflowStream,
|
|
2830
|
-
* closeStreamsAndReset,
|
|
2831
|
-
* resumeWorkflowStream,
|
|
2832
|
-
* timeTravelWorkflowStream,
|
|
2833
|
-
* } = useStreamWorkflow({
|
|
2834
|
-
* debugMode: true,
|
|
2835
|
-
* tracingOptions: { enabled: true },
|
|
2836
|
-
* onError: (error, defaultMessage) => console.error(defaultMessage, error),
|
|
2837
|
-
* });
|
|
2838
|
-
*
|
|
2839
|
-
* // Start streaming a workflow
|
|
2840
|
-
* await streamWorkflow.mutateAsync({
|
|
2841
|
-
* workflowId: 'my-workflow',
|
|
2842
|
-
* runId: 'run-123',
|
|
2843
|
-
* inputData: { key: 'value' },
|
|
2844
|
-
* requestContext: {},
|
|
2845
|
-
* });
|
|
2846
|
-
* ```
|
|
2847
|
-
*/
|
|
2848
2826
|
function useStreamWorkflow({ debugMode, tracingOptions, onError }) {
|
|
2849
2827
|
const client = useMastraClient();
|
|
2850
|
-
const [streamResult, setStreamResult] = (0, react.useState)(
|
|
2828
|
+
const [streamResult, setStreamResult] = (0, react.useState)();
|
|
2851
2829
|
const [isStreaming, setIsStreaming] = (0, react.useState)(false);
|
|
2852
|
-
const
|
|
2853
|
-
const observerRef = (0, react.useRef)(null);
|
|
2854
|
-
const resumeStreamRef = (0, react.useRef)(null);
|
|
2855
|
-
const timeTravelStreamRef = (0, react.useRef)(null);
|
|
2830
|
+
const activeStream = (0, react.useRef)(void 0);
|
|
2856
2831
|
const isMountedRef = (0, react.useRef)(true);
|
|
2832
|
+
const closeActiveStream = (0, react.useCallback)(() => {
|
|
2833
|
+
const operation = activeStream.current;
|
|
2834
|
+
activeStream.current = void 0;
|
|
2835
|
+
if (!operation) return;
|
|
2836
|
+
operation.controller.abort();
|
|
2837
|
+
operation.reader?.cancel().catch(() => void 0);
|
|
2838
|
+
operation.reader?.releaseLock();
|
|
2839
|
+
operation.reader = void 0;
|
|
2840
|
+
}, []);
|
|
2857
2841
|
(0, react.useEffect)(() => {
|
|
2858
2842
|
isMountedRef.current = true;
|
|
2859
2843
|
return () => {
|
|
2860
2844
|
isMountedRef.current = false;
|
|
2861
|
-
|
|
2862
|
-
try {
|
|
2863
|
-
readerRef.current.releaseLock();
|
|
2864
|
-
} catch {}
|
|
2865
|
-
readerRef.current = null;
|
|
2866
|
-
}
|
|
2867
|
-
if (observerRef.current) {
|
|
2868
|
-
try {
|
|
2869
|
-
observerRef.current.releaseLock();
|
|
2870
|
-
} catch {}
|
|
2871
|
-
observerRef.current = null;
|
|
2872
|
-
}
|
|
2873
|
-
if (resumeStreamRef.current) {
|
|
2874
|
-
try {
|
|
2875
|
-
resumeStreamRef.current.releaseLock();
|
|
2876
|
-
} catch {}
|
|
2877
|
-
resumeStreamRef.current = null;
|
|
2878
|
-
}
|
|
2879
|
-
if (timeTravelStreamRef.current) {
|
|
2880
|
-
try {
|
|
2881
|
-
timeTravelStreamRef.current.releaseLock();
|
|
2882
|
-
} catch {}
|
|
2883
|
-
timeTravelStreamRef.current = null;
|
|
2884
|
-
}
|
|
2845
|
+
closeActiveStream();
|
|
2885
2846
|
};
|
|
2886
|
-
}, []);
|
|
2887
|
-
|
|
2888
|
-
if (err instanceof TypeError) return;
|
|
2889
|
-
const error = err instanceof Error ? err : new Error(defaultMessage);
|
|
2890
|
-
onError?.(error, defaultMessage);
|
|
2891
|
-
setStreamingState?.(false);
|
|
2892
|
-
}, [onError]);
|
|
2893
|
-
const handleWorkflowFinish = (0, react.useCallback)((value) => {
|
|
2894
|
-
if (value.type === "workflow-finish") {
|
|
2895
|
-
const streamStatus = value.payload?.workflowStatus;
|
|
2896
|
-
const metadata = value.payload?.metadata;
|
|
2897
|
-
setStreamResult((prev) => ({
|
|
2898
|
-
...prev,
|
|
2899
|
-
status: streamStatus
|
|
2900
|
-
}));
|
|
2901
|
-
if (streamStatus === "failed") throw new Error(metadata?.errorMessage || "Workflow execution failed");
|
|
2902
|
-
}
|
|
2903
|
-
}, []);
|
|
2904
|
-
const streamWorkflow = useMutation(async ({ workflowId, runId, inputData, initialState, requestContext: playgroundRequestContext, perStep }) => {
|
|
2905
|
-
if (readerRef.current) readerRef.current.releaseLock();
|
|
2847
|
+
}, [closeActiveStream]);
|
|
2848
|
+
async function consumeStream(openStream, defaultMessage) {
|
|
2906
2849
|
if (!isMountedRef.current) return;
|
|
2850
|
+
closeActiveStream();
|
|
2851
|
+
const operation = { controller: new AbortController() };
|
|
2852
|
+
activeStream.current = operation;
|
|
2853
|
+
const { signal } = operation.controller;
|
|
2907
2854
|
setIsStreaming(true);
|
|
2908
|
-
setStreamResult({ input: inputData });
|
|
2909
|
-
const stream = await (await client.getWorkflow(workflowId).createRun({ runId })).stream({
|
|
2910
|
-
inputData,
|
|
2911
|
-
initialState,
|
|
2912
|
-
requestContext: playgroundRequestContext,
|
|
2913
|
-
closeOnSuspend: true,
|
|
2914
|
-
tracingOptions,
|
|
2915
|
-
perStep: perStep ?? debugMode
|
|
2916
|
-
});
|
|
2917
|
-
if (!stream) return handleStreamError(/* @__PURE__ */ new Error("No stream returned"), "No stream returned", setIsStreaming);
|
|
2918
|
-
const reader = stream.getReader();
|
|
2919
|
-
readerRef.current = reader;
|
|
2920
2855
|
try {
|
|
2921
|
-
|
|
2922
|
-
|
|
2856
|
+
const stream = await openStream(signal);
|
|
2857
|
+
if (signal.aborted) {
|
|
2858
|
+
await stream?.cancel();
|
|
2859
|
+
return;
|
|
2860
|
+
}
|
|
2861
|
+
if (!stream) {
|
|
2862
|
+
onError?.(/* @__PURE__ */ new Error("No stream returned"), "No stream returned");
|
|
2863
|
+
return;
|
|
2864
|
+
}
|
|
2865
|
+
const reader = stream.getReader();
|
|
2866
|
+
operation.reader = reader;
|
|
2867
|
+
while (!signal.aborted) {
|
|
2923
2868
|
const { done, value } = await reader.read();
|
|
2924
|
-
if (done) break;
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2869
|
+
if (done || signal.aborted) break;
|
|
2870
|
+
setStreamResult((previous) => mapWorkflowStreamChunkToWatchResult(previous, value));
|
|
2871
|
+
if (value.type === "workflow-step-start") setIsStreaming(true);
|
|
2872
|
+
if (value.type === "workflow-step-suspended") setIsStreaming(false);
|
|
2873
|
+
if (value.type === "workflow-finish" && value.payload.workflowStatus === "failed") throw new Error(value.payload.metadata?.errorMessage || "Workflow execution failed");
|
|
2874
|
+
}
|
|
2875
|
+
} catch (error) {
|
|
2876
|
+
if (!signal.aborted) {
|
|
2877
|
+
if (!operation.reader) throw error;
|
|
2878
|
+
onError?.(error instanceof Error ? error : new Error(defaultMessage), defaultMessage);
|
|
2933
2879
|
}
|
|
2934
|
-
} catch (err) {
|
|
2935
|
-
handleStreamError(err, "Error streaming workflow");
|
|
2936
2880
|
} finally {
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2881
|
+
operation.reader?.releaseLock();
|
|
2882
|
+
operation.reader = void 0;
|
|
2883
|
+
if (activeStream.current === operation) {
|
|
2884
|
+
activeStream.current = void 0;
|
|
2885
|
+
setIsStreaming(false);
|
|
2941
2886
|
}
|
|
2942
2887
|
}
|
|
2888
|
+
}
|
|
2889
|
+
const streamWorkflow = useMutation(({ workflowId, runId, inputData, initialState, requestContext, perStep }) => {
|
|
2890
|
+
setStreamResult({
|
|
2891
|
+
status: "pending",
|
|
2892
|
+
input: inputData,
|
|
2893
|
+
steps: {}
|
|
2894
|
+
});
|
|
2895
|
+
return consumeStream(async (signal) => {
|
|
2896
|
+
const run = await client.getWorkflow(workflowId).createRun({ runId });
|
|
2897
|
+
if (signal.aborted) return;
|
|
2898
|
+
return run.stream({
|
|
2899
|
+
inputData,
|
|
2900
|
+
initialState,
|
|
2901
|
+
requestContext,
|
|
2902
|
+
closeOnSuspend: true,
|
|
2903
|
+
tracingOptions,
|
|
2904
|
+
perStep: perStep ?? debugMode
|
|
2905
|
+
});
|
|
2906
|
+
}, "Error streaming workflow");
|
|
2943
2907
|
});
|
|
2944
2908
|
const observeWorkflowStream = useMutation(async ({ workflowId, runId, storeRunResult }) => {
|
|
2945
|
-
if (observerRef.current) observerRef.current.releaseLock();
|
|
2946
2909
|
if (!isMountedRef.current) return;
|
|
2947
|
-
|
|
2948
|
-
setStreamResult(storeRunResult || {});
|
|
2910
|
+
setStreamResult(storeRunResult ?? void 0);
|
|
2949
2911
|
if (storeRunResult?.status === "suspended") {
|
|
2912
|
+
closeActiveStream();
|
|
2950
2913
|
setIsStreaming(false);
|
|
2951
2914
|
return;
|
|
2952
2915
|
}
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
while (true) {
|
|
2959
|
-
if (!isMountedRef.current) break;
|
|
2960
|
-
const { done, value } = await reader.read();
|
|
2961
|
-
if (done) break;
|
|
2962
|
-
if (isMountedRef.current) {
|
|
2963
|
-
setStreamResult((prev) => {
|
|
2964
|
-
return mapWorkflowStreamChunkToWatchResult(prev, value);
|
|
2965
|
-
});
|
|
2966
|
-
if (value.type === "workflow-step-start") setIsStreaming(true);
|
|
2967
|
-
if (value.type === "workflow-step-suspended") setIsStreaming(false);
|
|
2968
|
-
if (value.type === "workflow-finish") handleWorkflowFinish(value);
|
|
2969
|
-
}
|
|
2970
|
-
}
|
|
2971
|
-
} catch (err) {
|
|
2972
|
-
handleStreamError(err, "Error observing workflow");
|
|
2973
|
-
} finally {
|
|
2974
|
-
if (isMountedRef.current) setIsStreaming(false);
|
|
2975
|
-
if (observerRef.current) {
|
|
2976
|
-
observerRef.current.releaseLock();
|
|
2977
|
-
observerRef.current = null;
|
|
2978
|
-
}
|
|
2979
|
-
}
|
|
2916
|
+
await consumeStream(async (signal) => {
|
|
2917
|
+
const run = await client.getWorkflow(workflowId).createRun({ runId });
|
|
2918
|
+
if (signal.aborted) return;
|
|
2919
|
+
return run.observeStream();
|
|
2920
|
+
}, "Error observing workflow");
|
|
2980
2921
|
});
|
|
2981
|
-
const resumeWorkflowStream = useMutation(
|
|
2982
|
-
|
|
2983
|
-
if (
|
|
2984
|
-
|
|
2985
|
-
const stream = await (await client.getWorkflow(workflowId).createRun({ runId })).resumeStream({
|
|
2922
|
+
const resumeWorkflowStream = useMutation(({ workflowId, runId, step, resumeData, requestContext, perStep }) => consumeStream(async (signal) => {
|
|
2923
|
+
const run = await client.getWorkflow(workflowId).createRun({ runId });
|
|
2924
|
+
if (signal.aborted) return;
|
|
2925
|
+
return run.resumeStream({
|
|
2986
2926
|
step,
|
|
2987
2927
|
resumeData,
|
|
2988
|
-
requestContext
|
|
2928
|
+
requestContext,
|
|
2989
2929
|
tracingOptions,
|
|
2990
2930
|
perStep: perStep ?? debugMode
|
|
2991
2931
|
});
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
2997
|
-
if (!isMountedRef.current) break;
|
|
2998
|
-
const { done, value } = await reader.read();
|
|
2999
|
-
if (done) break;
|
|
3000
|
-
if (isMountedRef.current) {
|
|
3001
|
-
setStreamResult((prev) => {
|
|
3002
|
-
return mapWorkflowStreamChunkToWatchResult(prev, value);
|
|
3003
|
-
});
|
|
3004
|
-
if (value.type === "workflow-step-start") setIsStreaming(true);
|
|
3005
|
-
if (value.type === "workflow-step-suspended") setIsStreaming(false);
|
|
3006
|
-
if (value.type === "workflow-finish") handleWorkflowFinish(value);
|
|
3007
|
-
}
|
|
3008
|
-
}
|
|
3009
|
-
} catch (err) {
|
|
3010
|
-
handleStreamError(err, "Error resuming workflow stream");
|
|
3011
|
-
} finally {
|
|
3012
|
-
if (isMountedRef.current) setIsStreaming(false);
|
|
3013
|
-
if (resumeStreamRef.current) {
|
|
3014
|
-
resumeStreamRef.current.releaseLock();
|
|
3015
|
-
resumeStreamRef.current = null;
|
|
3016
|
-
}
|
|
3017
|
-
}
|
|
3018
|
-
});
|
|
3019
|
-
const timeTravelWorkflowStream = useMutation(async ({ workflowId, requestContext: playgroundRequestContext, runId, perStep, ...params }) => {
|
|
3020
|
-
if (timeTravelStreamRef.current) timeTravelStreamRef.current.releaseLock();
|
|
3021
|
-
if (!isMountedRef.current) return;
|
|
3022
|
-
setIsStreaming(true);
|
|
3023
|
-
const stream = await (await client.getWorkflow(workflowId).createRun({ runId })).timeTravelStream({
|
|
2932
|
+
}, "Error resuming workflow stream"));
|
|
2933
|
+
const timeTravelWorkflowStream = useMutation(({ workflowId, requestContext, runId, perStep, ...params }) => consumeStream(async (signal) => {
|
|
2934
|
+
const run = await client.getWorkflow(workflowId).createRun({ runId });
|
|
2935
|
+
if (signal.aborted) return;
|
|
2936
|
+
return run.timeTravelStream({
|
|
3024
2937
|
...params,
|
|
3025
2938
|
perStep: perStep ?? debugMode,
|
|
3026
|
-
requestContext
|
|
2939
|
+
requestContext,
|
|
3027
2940
|
tracingOptions
|
|
3028
2941
|
});
|
|
3029
|
-
|
|
3030
|
-
const reader = stream.getReader();
|
|
3031
|
-
timeTravelStreamRef.current = reader;
|
|
3032
|
-
try {
|
|
3033
|
-
while (true) {
|
|
3034
|
-
if (!isMountedRef.current) break;
|
|
3035
|
-
const { done, value } = await reader.read();
|
|
3036
|
-
if (done) break;
|
|
3037
|
-
if (isMountedRef.current) {
|
|
3038
|
-
setStreamResult((prev) => {
|
|
3039
|
-
return mapWorkflowStreamChunkToWatchResult(prev, value);
|
|
3040
|
-
});
|
|
3041
|
-
if (value.type === "workflow-step-start") setIsStreaming(true);
|
|
3042
|
-
if (value.type === "workflow-step-suspended") setIsStreaming(false);
|
|
3043
|
-
if (value.type === "workflow-finish") handleWorkflowFinish(value);
|
|
3044
|
-
}
|
|
3045
|
-
}
|
|
3046
|
-
} catch (err) {
|
|
3047
|
-
handleStreamError(err, "Error time traveling workflow stream");
|
|
3048
|
-
} finally {
|
|
3049
|
-
if (isMountedRef.current) setIsStreaming(false);
|
|
3050
|
-
if (timeTravelStreamRef.current) {
|
|
3051
|
-
timeTravelStreamRef.current.releaseLock();
|
|
3052
|
-
timeTravelStreamRef.current = null;
|
|
3053
|
-
}
|
|
3054
|
-
}
|
|
3055
|
-
});
|
|
2942
|
+
}, "Error time traveling workflow stream"));
|
|
3056
2943
|
return {
|
|
3057
2944
|
streamWorkflow,
|
|
3058
2945
|
streamResult,
|
|
3059
2946
|
isStreaming,
|
|
3060
2947
|
observeWorkflowStream,
|
|
3061
2948
|
closeStreamsAndReset: (0, react.useCallback)(() => {
|
|
2949
|
+
closeActiveStream();
|
|
3062
2950
|
setIsStreaming(false);
|
|
3063
|
-
setStreamResult(
|
|
3064
|
-
|
|
3065
|
-
try {
|
|
3066
|
-
readerRef.current.releaseLock();
|
|
3067
|
-
} catch {}
|
|
3068
|
-
readerRef.current = null;
|
|
3069
|
-
}
|
|
3070
|
-
if (observerRef.current) {
|
|
3071
|
-
try {
|
|
3072
|
-
observerRef.current.releaseLock();
|
|
3073
|
-
} catch {}
|
|
3074
|
-
observerRef.current = null;
|
|
3075
|
-
}
|
|
3076
|
-
if (resumeStreamRef.current) {
|
|
3077
|
-
try {
|
|
3078
|
-
resumeStreamRef.current.releaseLock();
|
|
3079
|
-
} catch {}
|
|
3080
|
-
resumeStreamRef.current = null;
|
|
3081
|
-
}
|
|
3082
|
-
if (timeTravelStreamRef.current) {
|
|
3083
|
-
try {
|
|
3084
|
-
timeTravelStreamRef.current.releaseLock();
|
|
3085
|
-
} catch {}
|
|
3086
|
-
timeTravelStreamRef.current = null;
|
|
3087
|
-
}
|
|
3088
|
-
}, []),
|
|
2951
|
+
setStreamResult(void 0);
|
|
2952
|
+
}, [closeActiveStream]),
|
|
3089
2953
|
resumeWorkflowStream,
|
|
3090
2954
|
timeTravelWorkflowStream
|
|
3091
2955
|
};
|
|
@@ -3422,62 +3286,8 @@ const useMastraSpeechToText = ({ agent, language }) => {
|
|
|
3422
3286
|
};
|
|
3423
3287
|
};
|
|
3424
3288
|
//#endregion
|
|
3425
|
-
exports.AgentIcon = require_ui.AgentIcon;
|
|
3426
3289
|
exports.CLIENT_MESSAGE_ID_KEY = CLIENT_MESSAGE_ID_KEY;
|
|
3427
|
-
exports.CodeBlock = require_ui.CodeBlock;
|
|
3428
|
-
exports.CodeBlockClass = require_ui.CodeBlockClass;
|
|
3429
|
-
exports.CodeCopyButton = require_ui.CodeCopyButton;
|
|
3430
|
-
exports.Entity = require_ui.Entity;
|
|
3431
|
-
exports.EntityCaret = require_ui.EntityCaret;
|
|
3432
|
-
exports.EntityContent = require_ui.EntityContent;
|
|
3433
|
-
exports.EntityContentClass = require_ui.EntityContentClass;
|
|
3434
|
-
exports.EntityTrigger = require_ui.EntityTrigger;
|
|
3435
|
-
exports.EntityTriggerClass = require_ui.EntityTriggerClass;
|
|
3436
|
-
exports.EntityTriggerVariantClasses = require_ui.EntityTriggerVariantClasses;
|
|
3437
|
-
exports.Entry = require_ui.Entry;
|
|
3438
|
-
exports.EntryClass = require_ui.EntryClass;
|
|
3439
|
-
exports.EntryTitle = require_ui.EntryTitle;
|
|
3440
|
-
exports.EntryTitleClass = require_ui.EntryTitleClass;
|
|
3441
|
-
exports.Icon = require_ui.Icon;
|
|
3442
|
-
exports.IconButton = require_ui.IconButton;
|
|
3443
|
-
exports.IconButtonClass = require_ui.IconButtonClass;
|
|
3444
|
-
exports.IconSizes = require_ui.IconSizes;
|
|
3445
3290
|
exports.MastraReactProvider = MastraReactProvider;
|
|
3446
|
-
exports.Message = require_ui.Message;
|
|
3447
|
-
exports.MessageActions = require_ui.MessageActions;
|
|
3448
|
-
exports.MessageActionsClass = require_ui.MessageActionsClass;
|
|
3449
|
-
exports.MessageClass = require_ui.MessageClass;
|
|
3450
|
-
exports.MessageContent = require_ui.MessageContent;
|
|
3451
|
-
exports.MessageContentClass = require_ui.MessageContentClass;
|
|
3452
|
-
exports.MessageFactory = require_ui.MessageFactory;
|
|
3453
|
-
exports.MessageList = require_ui.MessageList;
|
|
3454
|
-
exports.MessageListClass = require_ui.MessageListClass;
|
|
3455
|
-
exports.MessageStreaming = require_ui.MessageStreaming;
|
|
3456
|
-
exports.MessageStreamingClass = require_ui.MessageStreamingClass;
|
|
3457
|
-
exports.MessageUsage = require_ui.MessageUsage;
|
|
3458
|
-
exports.MessageUsageClass = require_ui.MessageUsageClass;
|
|
3459
|
-
exports.MessageUsageEntry = require_ui.MessageUsageEntry;
|
|
3460
|
-
exports.MessageUsageEntryClass = require_ui.MessageUsageEntryClass;
|
|
3461
|
-
exports.MessageUsageValue = require_ui.MessageUsageValue;
|
|
3462
|
-
exports.MessageUsageValueClass = require_ui.MessageUsageValueClass;
|
|
3463
|
-
exports.MessageUsages = require_ui.MessageUsages;
|
|
3464
|
-
exports.MessageUsagesClass = require_ui.MessageUsagesClass;
|
|
3465
|
-
exports.ToolApproval = require_ui.ToolApproval;
|
|
3466
|
-
exports.ToolApprovalActions = require_ui.ToolApprovalActions;
|
|
3467
|
-
exports.ToolApprovalActionsClass = require_ui.ToolApprovalActionsClass;
|
|
3468
|
-
exports.ToolApprovalClass = require_ui.ToolApprovalClass;
|
|
3469
|
-
exports.ToolApprovalContent = require_ui.ToolApprovalContent;
|
|
3470
|
-
exports.ToolApprovalContentClass = require_ui.ToolApprovalContentClass;
|
|
3471
|
-
exports.ToolApprovalHeader = require_ui.ToolApprovalHeader;
|
|
3472
|
-
exports.ToolApprovalHeaderClass = require_ui.ToolApprovalHeaderClass;
|
|
3473
|
-
exports.ToolApprovalTitle = require_ui.ToolApprovalTitle;
|
|
3474
|
-
exports.ToolApprovalTitleClass = require_ui.ToolApprovalTitleClass;
|
|
3475
|
-
exports.ToolsIcon = require_ui.ToolsIcon;
|
|
3476
|
-
exports.Tooltip = require_ui.Tooltip;
|
|
3477
|
-
exports.TooltipContent = require_ui.TooltipContent;
|
|
3478
|
-
exports.TooltipContentClass = require_ui.TooltipContentClass;
|
|
3479
|
-
exports.TooltipTrigger = require_ui.TooltipTrigger;
|
|
3480
|
-
exports.WorkflowIcon = require_ui.WorkflowIcon;
|
|
3481
3291
|
exports.WorkflowStepFactory = WorkflowStepFactory;
|
|
3482
3292
|
exports.accumulateChunk = accumulateChunk;
|
|
3483
3293
|
exports.accumulateNetworkChunk = accumulateNetworkChunk;
|
|
@@ -3490,7 +3300,6 @@ exports.recordMicrophoneToFile = recordMicrophoneToFile;
|
|
|
3490
3300
|
exports.useCancelWorkflowRun = useCancelWorkflowRun;
|
|
3491
3301
|
exports.useChat = useChat;
|
|
3492
3302
|
exports.useCreateWorkflowRun = useCreateWorkflowRun;
|
|
3493
|
-
exports.useEntity = require_ui.useEntity;
|
|
3494
3303
|
exports.useMastraClient = useMastraClient;
|
|
3495
3304
|
exports.useSpeechRecognition = useSpeechRecognition;
|
|
3496
3305
|
exports.useStreamWorkflow = useStreamWorkflow;
|