/** 冒烟:确认 createWorkflow / suspend / resume / InMemoryStore 这套 API 在 1.53 上能跑 */ import { Mastra } from '@mastra/core'; import { InMemoryStore } from '@mastra/core/storage'; import { createStep, createWorkflow, createWorkflowStateReader } from '@mastra/core/workflows'; import { z } from 'zod'; const ask = createStep({ id: 'ask', inputSchema: z.object({ q: z.string() }), outputSchema: z.object({ a: z.string() }), resumeSchema: z.object({ a: z.string() }), suspendSchema: z.object({ taskId: z.string() }), execute: async ({ inputData, resumeData, suspend }) => { console.log('[ask.execute] inputData=', inputData, 'resumeData=', resumeData); if (!resumeData) return await suspend({ taskId: 'T-1' }, { resumeLabel: 'ask' }); return { a: resumeData.a }; }, }); const wf = createWorkflow({ id: 'smoke', inputSchema: z.object({ q: z.string() }), outputSchema: z.object({ a: z.string() }), }) .then(ask) .commit(); const mastra = new Mastra({ workflows: { smoke: wf }, storage: new InMemoryStore(), logger: false, }); const run = await mastra.getWorkflow('smoke').createRun(); const r1 = await run.start({ inputData: { q: 'hi' } }); console.log('r1.status =', r1.status); console.log('r1 =', JSON.stringify(r1, null, 2).slice(0, 1200)); const state = await mastra.getWorkflow('smoke').getWorkflowRunById(run.runId); console.log('state.status =', state?.status); const reader = createWorkflowStateReader(state!); console.log('suspendedStep =', JSON.stringify(reader.getSuspendedStep(), null, 2)); console.log('resumeLabels =', JSON.stringify(reader.getResumeLabels(), null, 2)); const r2 = await run.resume({ step: 'ask', resumeData: { a: '42' } }); console.log('r2.status =', r2.status, 'result =', (r2 as { result?: unknown }).result);