@mastra/ai-sdk 1.5.1 → 1.6.0-alpha.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @mastra/ai-sdk
2
2
 
3
+ ## 1.6.0-alpha.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Added `workflowSnapshotToStream` utility to convert a `WorkflowState` (as returned by `getWorkflowRunById`) into an AI SDK-compatible stream. This lets you display historical workflow runs using the same `useChat`-powered UI components used for live workflow streams. ([#18453](https://github.com/mastra-ai/mastra/pull/18453))
8
+
9
+ **Example usage:**
10
+
11
+ ```ts
12
+ import { workflowSnapshotToStream } from '@mastra/ai-sdk';
13
+ import { createUIMessageStreamResponse } from 'ai';
14
+
15
+ const workflowRun = await mastra.getWorkflow('myWorkflow').getWorkflowRunById(runId);
16
+ const stream = workflowSnapshotToStream(workflowRun);
17
+ return createUIMessageStreamResponse({ stream });
18
+ ```
19
+
20
+ ### Patch Changes
21
+
22
+ - Updated dependencies [[`bf3fe49`](https://github.com/mastra-ai/mastra/commit/bf3fe49f9467dbbdb8f9eaf74e0f7971ffb19559), [`24ceaea`](https://github.com/mastra-ai/mastra/commit/24ceaea0bdd8609cabbab764380608ca6621a194), [`6ccf67b`](https://github.com/mastra-ai/mastra/commit/6ccf67bf075753754927a57bc2e1734ba2c820c5), [`825d8de`](https://github.com/mastra-ai/mastra/commit/825d8def9fa64c2bcc3d8dd6b49e09342c3ac5c7), [`ffa09e7`](https://github.com/mastra-ai/mastra/commit/ffa09e772a5c92270eabe2090fc42d45bd8ec4b7), [`461a7c5`](https://github.com/mastra-ai/mastra/commit/461a7c501449295287f4f0ee4b0b42344f39fcf8), [`4211472`](https://github.com/mastra-ai/mastra/commit/4211472a5a2bd319c60cd2e42d9109c3eef7ac1c), [`9e45902`](https://github.com/mastra-ai/mastra/commit/9e4590208e745055cecca202e2db0e5c65e17d3c), [`5c0df77`](https://github.com/mastra-ai/mastra/commit/5c0df776c40efa420f8c07a2f3ee66010296618e)]:
23
+ - @mastra/core@1.47.0-alpha.3
24
+
3
25
  ## 1.5.1
4
26
 
5
27
  ### Patch Changes
@@ -0,0 +1,25 @@
1
+ import type { WorkflowState } from '@mastra/core/workflows';
2
+ import type { WorkflowDataPart, WorkflowStepDataPart } from './transformers.js';
3
+ /**
4
+ * Converts a `WorkflowState` (as returned by `getWorkflowRunById` or the
5
+ * workflow runs API) into a `ReadableStream` of AI SDK UIMessage data parts —
6
+ * the same `WorkflowDataPart` and `WorkflowStepDataPart` chunks that the live
7
+ * workflow stream transformer produces. This lets you display historical
8
+ * workflow runs using the same `useChat`-powered components used for live runs.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { workflowSnapshotToStream } from '@mastra/ai-sdk';
13
+ * import { createUIMessageStreamResponse } from 'ai';
14
+ *
15
+ * const workflowRun = await mastra.getWorkflow('myWorkflow').getWorkflowRunById(runId);
16
+ * const stream = workflowSnapshotToStream(workflowRun);
17
+ * return createUIMessageStreamResponse({ stream });
18
+ * ```
19
+ */
20
+ export declare function workflowSnapshotToStream(workflowRun: WorkflowState): ReadableStream<WorkflowDataPart | WorkflowStepDataPart | {
21
+ type: 'start';
22
+ } | {
23
+ type: 'finish';
24
+ }>;
25
+ //# sourceMappingURL=convert-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-snapshot.d.ts","sourceRoot":"","sources":["../src/convert-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAA0D,MAAM,wBAAwB,CAAC;AACpH,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAc,MAAM,gBAAgB,CAAC;AAGzF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,aAAa,GACzB,cAAc,CAAC,gBAAgB,GAAG,oBAAoB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAmClG"}
package/dist/index.cjs CHANGED
@@ -14517,6 +14517,69 @@ function networkRoute({
14517
14517
  }
14518
14518
  });
14519
14519
  }
14520
+
14521
+ // src/convert-snapshot.ts
14522
+ function workflowSnapshotToStream(workflowRun) {
14523
+ const steps = workflowStateToSteps(workflowRun.steps ?? {});
14524
+ const current = { name: workflowRun.workflowName, steps };
14525
+ const runId = workflowRun.runId;
14526
+ const status = workflowRun.status;
14527
+ return new ReadableStream({
14528
+ start(controller) {
14529
+ controller.enqueue({ type: "start" });
14530
+ controller.enqueue(
14531
+ createWorkflowDataPart({
14532
+ current,
14533
+ runId,
14534
+ status,
14535
+ includeOutputs: true,
14536
+ output: null
14537
+ })
14538
+ );
14539
+ for (const stepId of Object.keys(steps)) {
14540
+ controller.enqueue(
14541
+ createWorkflowStepDataPart({
14542
+ current,
14543
+ runId,
14544
+ status,
14545
+ stepId
14546
+ })
14547
+ );
14548
+ }
14549
+ controller.enqueue({ type: "finish" });
14550
+ controller.close();
14551
+ }
14552
+ });
14553
+ }
14554
+ function workflowStateToSteps(stateSteps) {
14555
+ const steps = {};
14556
+ for (const [key, value] of Object.entries(stateSteps)) {
14557
+ const stepResult = Array.isArray(value) ? mergeForEachStepResult(value) : value;
14558
+ if (!stepResult || typeof stepResult !== "object" || !("status" in stepResult)) continue;
14559
+ steps[key] = {
14560
+ name: key,
14561
+ status: stepResult.status,
14562
+ input: stepResult.payload ?? null,
14563
+ output: stepResult.output ?? null,
14564
+ suspendPayload: stepResult.suspendPayload ?? null,
14565
+ resumePayload: stepResult.resumePayload ?? null
14566
+ };
14567
+ }
14568
+ return steps;
14569
+ }
14570
+ function mergeForEachStepResult(results) {
14571
+ const stepResults = results.filter(
14572
+ (result) => !!result && typeof result === "object" && "status" in result
14573
+ );
14574
+ if (stepResults.length === 0) return void 0;
14575
+ const representative = stepResults.find((result) => result.status === "suspended") ?? stepResults.find((result) => result.status === "failed") ?? stepResults[0];
14576
+ if (!representative) return void 0;
14577
+ return {
14578
+ ...representative,
14579
+ payload: stepResults.map((result) => result.payload),
14580
+ output: stepResults.map((result) => result.output)
14581
+ };
14582
+ }
14520
14583
  function withMastra(model, options = {}) {
14521
14584
  const { memory, inputProcessors = [], outputProcessors = [] } = options;
14522
14585
  const allInputProcessors = [...inputProcessors];
@@ -15216,5 +15279,6 @@ exports.toAISdkStream = toAISdkStream;
15216
15279
  exports.toAISdkV5Stream = toAISdkV5Stream;
15217
15280
  exports.withMastra = withMastra;
15218
15281
  exports.workflowRoute = workflowRoute;
15282
+ exports.workflowSnapshotToStream = workflowSnapshotToStream;
15219
15283
  //# sourceMappingURL=index.cjs.map
15220
15284
  //# sourceMappingURL=index.cjs.map