{"record":{"id":"4d92e3df61e35571","repo":"mastra-ai/mastra","slug":"claudesdkagent-resumedata-must-include-a-message","errorCode":null,"errorMessage":"ClaudeSDKAgent resumeData must include a message.","messagePattern":"ClaudeSDKAgent resumeData must include a message\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agent-sdks/claude/src/index.ts","lineNumber":239,"sourceCode":"    resumeData: ClaudeSDKAgentResumeData,\n    options?: ClaudeSDKAgentRunOptions<OUTPUT>,\n  ): Promise<FullOutput<OUTPUT>> {\n    const data = validateClaudeResumeData(resumeData);\n    return this.generate(data.message, createClaudeResumeRunOptions(data, options));\n  }\n\n  async resumeStream<OUTPUT = undefined>(\n    resumeData: ClaudeSDKAgentResumeData,\n    options?: ClaudeSDKAgentRunOptions<OUTPUT>,\n  ): Promise<MastraModelOutput<OUTPUT>> {\n    const data = validateClaudeResumeData(resumeData);\n    return this.stream(data.message, createClaudeResumeRunOptions(data, options));\n  }\n}\n\nfunction validateClaudeResumeData(resumeData: ClaudeSDKAgentResumeData): ClaudeSDKAgentResumeData {\n  if (!isRecord(resumeData) || !('message' in resumeData)) {\n    throw new Error('ClaudeSDKAgent resumeData must include a message.');\n  }\n\n  const hasSessionId = 'sessionId' in resumeData;\n  const hasContinue = 'continue' in resumeData;\n\n  if (hasSessionId && hasContinue) {\n    throw new Error('ClaudeSDKAgent resumeData must include either sessionId or continue: true, not both.');\n  }\n\n  if (hasSessionId) {\n    if (typeof resumeData.sessionId !== 'string') {\n      throw new Error('ClaudeSDKAgent resumeData.sessionId must be a string.');\n    }\n    return resumeData;\n  }\n\n  if (hasContinue) {\n    if (resumeData.continue !== true) {","sourceCodeStart":221,"sourceCodeEnd":257,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/agent-sdks/claude/src/index.ts#L221-L257","documentation":"In the restore handler, storage exists but getStore('agents') returns undefined, so the agents domain is unavailable and the handler throws this 500 HTTPException. Restoring a version requires reading and writing through the agents store.","triggerScenarios":"Calling the agent-version restore endpoint when the active storage adapter does not implement the agents store.","commonSituations":"Custom or partial storage implementations; outdated adapter versions lacking the agents domain; adapter/core version mismatch after upgrades.","solutions":["Use an official adapter that implements the agents store (Postgres, LibSQL, Upstash, etc.)","Upgrade the storage adapter package to the latest compatible version","Implement the agents domain (getStore('agents')) in custom adapters","Verify @mastra/core and adapter versions are compatible"],"exampleFix":"// before\nstorage: new CustomPartialStorage() // missing agents domain\n// after\nstorage: new PostgresStore({ connectionString: process.env.DATABASE_URL })","handlingStrategy":"type-guard","validationCode":"const storage = mastra.getStorage();\nconst agentsStore = storage ? await storage.getStore('agents') : null;\nif (!agentsStore) throw new Error('Agents domain unavailable in current storage adapter');","typeGuard":"function hasAgentsDomain(s: any): boolean {\n  return !!s && typeof s.getStore === 'function' && !!s.getStore && typeof s.getStore === 'function';\n}\n// usage: if (!hasAgentsDomain(storage)) swapAdapter();","tryCatchPattern":"try {\n  await restoreAgentVersion(agentId, versionId);\n} catch (e) {\n  if (isHttpError(e) && e.status === 500 && /Agents storage domain is not available/.test(e.message)) {\n    // upgrade or replace the storage adapter\n  } else throw e;\n}","preventionTips":["Pin adapter versions compatible with @mastra/core's agents store","Run a bootstrap check that getStore('agents') resolves","Prefer official adapters for versioning features","Cover restore endpoints in integration tests with real adapters"],"tags":["storage","adapter","agents-store","server","http-500"],"backgroundTag":"storage-domain-unavailable","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}