{"record":{"id":"1829ef666c2645f3","repo":"mastra-ai/mastra","slug":"cursorsdkagent-resumedata-must-include-a-message","errorCode":null,"errorMessage":"CursorSDKAgent resumeData must include a message.","messagePattern":"CursorSDKAgent resumeData must include a message\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agent-sdks/cursor/src/index.ts","lineNumber":290,"sourceCode":"    });\n    return this.#createdAgent;\n  }\n\n  private async resolveResumeCursorAgent(resumeData: CursorSDKAgentResumeData): Promise<SDKAgent> {\n    if (!resumeData.agentId) {\n      return this.resolveCursorAgent();\n    }\n\n    return CursorAgent.resume(resumeData.agentId, {\n      ...toCursorCreateOptions(this.options),\n      ...resumeData.sdkOptions,\n    });\n  }\n}\n\nfunction validateCursorResumeData(resumeData: CursorSDKAgentResumeData): CursorSDKAgentResumeData {\n  if (!toRecord(resumeData) || !('message' in resumeData)) {\n    throw new Error('CursorSDKAgent resumeData must include a message.');\n  }\n\n  if (resumeData.agentId !== undefined && typeof resumeData.agentId !== 'string') {\n    throw new Error('CursorSDKAgent resumeData.agentId must be a string when provided.');\n  }\n\n  return resumeData;\n}\n\nfunction assertStructuredOutputUnsupported(options?: unknown): void {\n  const structuredOutput = toRecord(toRecord(options)?.structuredOutput);\n  if (structuredOutput && 'schema' in structuredOutput) {\n    throw new Error(\n      'CursorSDKAgent does not support structuredOutput because the Cursor TypeScript SDK does not expose a schema-constrained output API.',\n    );\n  }\n}\n","sourceCodeStart":272,"sourceCodeEnd":308,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/agent-sdks/cursor/src/index.ts#L272-L308","documentation":"validateCursorResumeData requires resumeData to be a record containing a 'message' property — the conversation payload Cursor uses to resume an agent run. It throws when resumeData is not an object or lacks the message key.","triggerScenarios":"cursorSDKAgent.resume(data) called with an empty object, a non-object (string/null/undefined), or an object holding only other fields like agentId but no message.","commonSituations":"Saving only the Cursor agentId after a run and trying to resume with just { agentId }; resuming with resume data persisted from a different SDK (e.g. Claude's sessionId-shaped data).","solutions":["Include the original conversation message in resumeData: resume({ message: savedMessage }).","Persist the full CursorSDKAgentResumeData object returned/required by the agent, not just the agentId.","Check resumeData is a non-null object with a 'message' key before calling resume."],"exampleFix":"// before\nawait agent.resume({ agentId: saved.agentId });\n// after\nawait agent.resume({ message: saved.message, agentId: saved.agentId });","handlingStrategy":"validation","validationCode":"function canResumeCursor(data: unknown): boolean {\n  return typeof data === 'object' && data !== null && 'message' in data;\n}\nif (!canResumeCursor(saved)) throw new Error('Saved Cursor resume data is missing message');\nawait agent.resume(saved);","typeGuard":"function isCursorResumeData(v: unknown): v is CursorSDKAgentResumeData {\n  return typeof v === 'object' && v !== null && 'message' in v &&\n    ((v as any).agentId === undefined || typeof (v as any).agentId === 'string');\n}","tryCatchPattern":"try {\n  await agent.resume(saved);\n} catch (e) {\n  if (e instanceof Error && e.message.includes('resumeData must include a message')) {\n    // start a fresh run instead\n    await agent.generate(prompt);\n  } else throw e;\n}","preventionTips":["Persist the full resume object (message + agentId), not just the agentId.","Validate saved resume data shape at load time, before calling resume.","Don't mix resume-data shapes between the Claude/Cursor/OpenAI SDK agents."],"tags":["resume","validation","argument-validation","cursor"],"backgroundTag":"invalid-resume-data","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}