{"record":{"id":"e1a23e09e372e8a1","repo":"mastra-ai/mastra","slug":"cursorsdkagent-resumedata-agentid-must-be-a-string","errorCode":null,"errorMessage":"CursorSDKAgent resumeData.agentId must be a string when provided.","messagePattern":"CursorSDKAgent resumeData\\.agentId must be a string when provided\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agent-sdks/cursor/src/index.ts","lineNumber":294,"sourceCode":"  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\nasync function runCursorGenerate(\n  prompt: string,\n  options: CursorAgentOptions,\n  agent: SDKAgent,","sourceCodeStart":276,"sourceCodeEnd":312,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/agent-sdks/cursor/src/index.ts#L276-L312","documentation":"validateCursorResumeData permits an optional agentId but enforces its type: if resumeData.agentId is present it must be a string. Any other type (number, object, etc.) triggers this error.","triggerScenarios":"cursorSDKAgent.resume({ message, agentId: 12345 }) — passing a numeric or otherwise non-string agentId, often from JSON parsing quirks or copying an ID from a numeric database column.","commonSituations":"Storing Cursor agent IDs as numbers in a DB and passing them through unconverted; loosely typed configs; deserialization changing the ID type.","solutions":["Convert the agentId to a string before resuming: String(saved.agentId).","Omit the agentId field entirely if you don't have a valid one.","Validate typeof resumeData.agentId === 'string' || resumeData.agentId === undefined before calling resume."],"exampleFix":"// before\nawait agent.resume({ message, agentId: 12345 });\n// after\nawait agent.resume({ message, agentId: String(12345) });","handlingStrategy":"type-guard","validationCode":"if (saved.agentId !== undefined && typeof saved.agentId !== 'string') {\n  saved.agentId = String(saved.agentId);\n}\nawait agent.resume(saved);","typeGuard":"function hasStringAgentId(v: unknown): v is { message: unknown; agentId?: string } {\n  const d = v as { agentId?: unknown };\n  return d.agentId === undefined || typeof d.agentId === 'string';\n}","tryCatchPattern":"try {\n  await agent.resume(saved);\n} catch (e) {\n  if (e instanceof Error && e.message.includes('agentId must be a string')) {\n    await agent.resume({ ...saved, agentId: String(saved.agentId) });\n  } else throw e;\n}","preventionTips":["Store Cursor agent IDs as strings end-to-end (DB columns, JSON schemas).","Coerce IDs to string immediately after parsing external data.","Omit agentId entirely when you don't have a valid string value."],"tags":["resume","validation","type-error","cursor"],"backgroundTag":"invalid-resume-data","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T08:17:16.595Z"}