{"version":3,"sources":["../src/errors.ts","../src/json-validation.ts","../src/memory-validation.ts"],"names":["DOCS_BASE","formatError","code","message","hint","docsUrl","lines","AgentsKitError","options","ConfigError","ErrorCodes","cloneJsonRecord","input","invalid","maxStringLength","preflight","assertJson","root","active","stack","nodes","item","value","isArray","prototype","array","index","keys","key","descriptor","snapshot","roles","messageStatuses","toolStatuses","partTypes","invalidRecord","isRecord","optionalString","record","validatePart","validateToolCall","validateMessage","timestamp","projectPart","part","projectToolCall","call","projectMessage","validateMemoryRecord"],"mappings":"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","file":"memory-validation.cjs","sourcesContent":["// ---------------------------------------------------------------------------\n// AgentsKit didactic error system — Rust-compiler-style helpful errors\n// ---------------------------------------------------------------------------\n\nconst DOCS_BASE = 'https://www.agentskit.io/docs'\n\n/**\n * Format an error for display, Rust-compiler style.\n *\n * Example output:\n * ```\n * error[AK_ADAPTER_MISSING]: No adapter provided\n *   --> Hint: Pass an adapter when creating the chat controller, e.g.\n *             createChatController({ adapter: openai({ apiKey, model: 'gpt-4o' }) })\n *   --> Docs: https://www.agentskit.io/docs/data/providers\n * ```\n */\nfunction formatError(code: string, message: string, hint?: string, docsUrl?: string): string {\n  const lines: string[] = [`error[${code}]: ${message}`]\n  if (hint) lines.push(`  --> Hint: ${hint}`)\n  if (docsUrl) lines.push(`  --> Docs: ${docsUrl}`)\n  return lines.join('\\n')\n}\n\n// ---------------------------------------------------------------------------\n// Base class\n// ---------------------------------------------------------------------------\n\nexport class AgentsKitError extends Error {\n  readonly code: string\n  readonly hint: string | undefined\n  readonly docsUrl: string | undefined\n  readonly cause: unknown\n\n  constructor(options: {\n    code: string\n    message: string\n    hint?: string\n    docsUrl?: string\n    cause?: unknown\n  }) {\n    super(options.message)\n    this.name = 'AgentsKitError'\n    this.code = options.code\n    this.hint = options.hint\n    this.docsUrl = options.docsUrl\n    this.cause = options.cause\n  }\n\n  override toString(): string {\n    return formatError(this.code, this.message, this.hint, this.docsUrl)\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Subclasses\n// ---------------------------------------------------------------------------\n\nexport class AdapterError extends AgentsKitError {\n  constructor(options: {\n    code: string\n    message: string\n    hint?: string\n    docsUrl?: string\n    cause?: unknown\n  }) {\n    super({ docsUrl: `${DOCS_BASE}/data/providers`, ...options })\n    this.name = 'AdapterError'\n  }\n}\n\nexport class ToolError extends AgentsKitError {\n  constructor(options: {\n    code: string\n    message: string\n    hint?: string\n    docsUrl?: string\n    cause?: unknown\n  }) {\n    super({ docsUrl: `${DOCS_BASE}/agents/tools`, ...options })\n    this.name = 'ToolError'\n  }\n}\n\nexport class MemoryError extends AgentsKitError {\n  constructor(options: {\n    code: string\n    message: string\n    hint?: string\n    docsUrl?: string\n    cause?: unknown\n  }) {\n    super({ docsUrl: `${DOCS_BASE}/data/memory`, ...options })\n    this.name = 'MemoryError'\n  }\n}\n\nexport class ConfigError extends AgentsKitError {\n  constructor(options: {\n    code: string\n    message: string\n    hint?: string\n    docsUrl?: string\n    cause?: unknown\n  }) {\n    super({ docsUrl: `${DOCS_BASE}/get-started/concepts/errors`, ...options })\n    this.name = 'ConfigError'\n  }\n}\n\nexport class RuntimeError extends AgentsKitError {\n  constructor(options: {\n    code: string\n    message: string\n    hint?: string\n    docsUrl?: string\n    cause?: unknown\n  }) {\n    super({ docsUrl: `${DOCS_BASE}/agents/runtime`, ...options })\n    this.name = 'RuntimeError'\n  }\n}\n\nexport class SandboxError extends AgentsKitError {\n  constructor(options: {\n    code: string\n    message: string\n    hint?: string\n    docsUrl?: string\n    cause?: unknown\n  }) {\n    super({ docsUrl: `${DOCS_BASE}/production/security/mandatory-sandbox`, ...options })\n    this.name = 'SandboxError'\n  }\n}\n\nexport class SkillError extends AgentsKitError {\n  constructor(options: {\n    code: string\n    message: string\n    hint?: string\n    docsUrl?: string\n    cause?: unknown\n  }) {\n    super({ docsUrl: `${DOCS_BASE}/agents/skills`, ...options })\n    this.name = 'SkillError'\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Error code constants\n// ---------------------------------------------------------------------------\n\nexport const ErrorCodes = {\n  // Adapter errors\n  AK_ADAPTER_MISSING: 'AK_ADAPTER_MISSING',\n  AK_ADAPTER_STREAM_FAILED: 'AK_ADAPTER_STREAM_FAILED',\n\n  // Tool errors\n  AK_TOOL_NOT_FOUND: 'AK_TOOL_NOT_FOUND',\n  AK_TOOL_EXEC_FAILED: 'AK_TOOL_EXEC_FAILED',\n  AK_TOOL_PEER_MISSING: 'AK_TOOL_PEER_MISSING',\n  AK_TOOL_INVALID_INPUT: 'AK_TOOL_INVALID_INPUT',\n  AK_TOOL_QUOTA_EXCEEDED: 'AK_TOOL_QUOTA_EXCEEDED',\n  AK_TOOL_FORBIDDEN: 'AK_TOOL_FORBIDDEN',\n\n  // Memory errors\n  AK_MEMORY_LOAD_FAILED: 'AK_MEMORY_LOAD_FAILED',\n  AK_MEMORY_SAVE_FAILED: 'AK_MEMORY_SAVE_FAILED',\n  AK_MEMORY_DESERIALIZE_FAILED: 'AK_MEMORY_DESERIALIZE_FAILED',\n  AK_MEMORY_PEER_MISSING: 'AK_MEMORY_PEER_MISSING',\n  AK_MEMORY_REMOTE_HTTP: 'AK_MEMORY_REMOTE_HTTP',\n\n  // Config errors\n  AK_CONFIG_INVALID: 'AK_CONFIG_INVALID',\n\n  // Runtime errors\n  AK_RUNTIME_INVALID_INPUT: 'AK_RUNTIME_INVALID_INPUT',\n  AK_RUNTIME_STEP_FAILED: 'AK_RUNTIME_STEP_FAILED',\n  AK_RUNTIME_DELEGATE_FAILED: 'AK_RUNTIME_DELEGATE_FAILED',\n\n  // Sandbox errors\n  AK_SANDBOX_DENIED: 'AK_SANDBOX_DENIED',\n  AK_SANDBOX_INVALID_TOOL: 'AK_SANDBOX_INVALID_TOOL',\n  AK_SANDBOX_PEER_MISSING: 'AK_SANDBOX_PEER_MISSING',\n  AK_SANDBOX_BACKEND_FAILED: 'AK_SANDBOX_BACKEND_FAILED',\n\n  // Skill errors\n  AK_SKILL_INVALID: 'AK_SKILL_INVALID',\n  AK_SKILL_DUPLICATE: 'AK_SKILL_DUPLICATE',\n} as const\n","export function cloneJsonRecord(\n  input: unknown,\n  invalid: () => never,\n  maxStringLength = Infinity,\n  preflight = true,\n): Record<string, unknown> {\n  const assertJson = (root: unknown): void => {\n    const active = new WeakSet<object>()\n    const stack: Array<{ value: unknown; depth: number; exit?: boolean }> = [{ value: root, depth: 0 }]\n    let nodes = 0\n    while (stack.length > 0) {\n      const item = stack.pop()!\n      const value = item.value\n      if (item.exit) { active.delete(value as object); continue }\n      if (++nodes > 10_000 || item.depth > 32) invalid()\n      if (value === null || typeof value === 'boolean') continue\n      if (typeof value === 'string') { if (value.length > maxStringLength) invalid(); continue }\n      if (typeof value === 'number') { if (!Number.isFinite(value)) invalid(); continue }\n      if (typeof value !== 'object') invalid()\n      const isArray = Array.isArray(value)\n      const prototype = isArray ? Array.prototype : Object.getPrototypeOf(value) as unknown\n      if (!isArray && prototype !== Object.prototype && prototype !== null) invalid()\n      if (active.has(value)) invalid()\n      active.add(value)\n      stack.push({ value, depth: item.depth, exit: true })\n      if (isArray) {\n        const array = value as unknown[]\n        if (array.length > 10_000) invalid()\n        for (let index = array.length - 1; index >= 0; index--) {\n          stack.push({ value: array[index], depth: item.depth + 1 })\n        }\n        continue\n      }\n      const keys = Object.keys(value)\n      if (keys.length > 10_000) invalid()\n      for (let index = keys.length - 1; index >= 0; index--) {\n        const key = keys[index]!\n        if (key.length > 256) invalid()\n        const descriptor = Object.getOwnPropertyDescriptor(value, key)\n        if (!descriptor || descriptor.get || descriptor.set) invalid()\n        stack.push({ value: descriptor.value, depth: item.depth + 1 })\n      }\n    }\n  }\n  try {\n    if (preflight) assertJson(input)\n    const snapshot = structuredClone(input) as unknown\n    assertJson(snapshot)\n    if (typeof snapshot !== 'object' || snapshot === null || Array.isArray(snapshot)) invalid()\n    return snapshot as Record<string, unknown>\n  } catch {\n    return invalid()\n  }\n}\n","import { ConfigError, ErrorCodes } from './errors'\nimport { cloneJsonRecord } from './json-validation'\nimport type { ContentPart } from './types/content'\nimport type { MemoryRecord } from './types/message'\nimport type { ToolCall } from './types/tool'\n\ntype SerializedMessage = MemoryRecord['messages'][number]\n\nconst roles = new Set(['user', 'assistant', 'system', 'tool'])\nconst messageStatuses = new Set(['pending', 'streaming', 'complete', 'error'])\nconst toolStatuses = new Set(['pending', 'running', 'complete', 'error', 'requires_confirmation'])\nconst partTypes = new Set(['text', 'image', 'audio', 'video', 'file'])\n\nfunction invalidRecord(): never {\n  throw new ConfigError({\n    code: ErrorCodes.AK_CONFIG_INVALID,\n    message: 'Serialized message record is invalid.',\n    hint: 'Pass a version 1 MemoryRecord produced by serializeMessages().',\n  })\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  if (typeof value !== 'object' || value === null || Array.isArray(value)) return false\n  const prototype = Object.getPrototypeOf(value) as unknown\n  return prototype === Object.prototype || prototype === null\n}\n\nfunction optionalString(record: Record<string, unknown>, key: string): void {\n  if (record[key] !== undefined && typeof record[key] !== 'string') invalidRecord()\n}\n\nfunction validatePart(value: unknown): asserts value is ContentPart {\n  if (!isRecord(value) || typeof value.type !== 'string' || !partTypes.has(value.type)) invalidRecord()\n  if (value.type === 'text') {\n    if (typeof value.text !== 'string') invalidRecord()\n    return\n  }\n  if (typeof value.source !== 'string') invalidRecord()\n  optionalString(value, 'mimeType')\n  if (value.type === 'image' && value.detail !== undefined && !['low', 'high', 'auto'].includes(String(value.detail))) invalidRecord()\n  if ((value.type === 'audio' || value.type === 'video') && value.durationSec !== undefined) {\n    if (typeof value.durationSec !== 'number' || !Number.isFinite(value.durationSec) || value.durationSec < 0) invalidRecord()\n  }\n  if (value.type === 'file') optionalString(value, 'filename')\n}\n\nfunction validateToolCall(value: unknown): asserts value is ToolCall {\n  if (!isRecord(value)) invalidRecord()\n  if (typeof value.id !== 'string' || value.id.length === 0) invalidRecord()\n  if (typeof value.name !== 'string' || value.name.length === 0 || !isRecord(value.args)) invalidRecord()\n  if (typeof value.status !== 'string' || !toolStatuses.has(value.status)) invalidRecord()\n  optionalString(value, 'result')\n  optionalString(value, 'error')\n}\n\nfunction validateMessage(value: unknown): asserts value is SerializedMessage {\n  if (!isRecord(value)) invalidRecord()\n  if (typeof value.id !== 'string' || value.id.length === 0 || typeof value.content !== 'string') invalidRecord()\n  if (typeof value.role !== 'string' || !roles.has(value.role)) invalidRecord()\n  if (typeof value.status !== 'string' || !messageStatuses.has(value.status)) invalidRecord()\n  if (typeof value.createdAt !== 'string' || !/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(value.createdAt)) invalidRecord()\n  const timestamp = Date.parse(value.createdAt)\n  if (Number.isNaN(timestamp) || new Date(timestamp).toISOString() !== value.createdAt) invalidRecord()\n  optionalString(value, 'toolCallId')\n  if (value.parts !== undefined) {\n    if (!Array.isArray(value.parts)) invalidRecord()\n    value.parts.forEach(validatePart)\n  }\n  if (value.toolCalls !== undefined) {\n    if (!Array.isArray(value.toolCalls)) invalidRecord()\n    value.toolCalls.forEach(validateToolCall)\n  }\n  if (value.metadata !== undefined && !isRecord(value.metadata)) invalidRecord()\n}\n\nfunction projectPart(part: ContentPart): ContentPart {\n  switch (part.type) {\n    case 'text': return { type: 'text', text: part.text }\n    case 'image': return {\n      type: 'image', source: part.source,\n      ...(part.mimeType === undefined ? {} : { mimeType: part.mimeType }),\n      ...(part.detail === undefined ? {} : { detail: part.detail }),\n    }\n    case 'audio': return {\n      type: 'audio', source: part.source,\n      ...(part.mimeType === undefined ? {} : { mimeType: part.mimeType }),\n      ...(part.durationSec === undefined ? {} : { durationSec: part.durationSec }),\n    }\n    case 'video': return {\n      type: 'video', source: part.source,\n      ...(part.mimeType === undefined ? {} : { mimeType: part.mimeType }),\n      ...(part.durationSec === undefined ? {} : { durationSec: part.durationSec }),\n    }\n    case 'file': return {\n      type: 'file', source: part.source,\n      ...(part.mimeType === undefined ? {} : { mimeType: part.mimeType }),\n      ...(part.filename === undefined ? {} : { filename: part.filename }),\n    }\n  }\n}\n\nfunction projectToolCall(call: ToolCall): ToolCall {\n  return {\n    id: call.id,\n    name: call.name,\n    args: call.args,\n    status: call.status,\n    ...(call.result === undefined ? {} : { result: call.result }),\n    ...(call.error === undefined ? {} : { error: call.error }),\n  }\n}\n\nfunction projectMessage(message: SerializedMessage): SerializedMessage {\n  return {\n    id: message.id,\n    role: message.role,\n    content: message.content,\n    status: message.status,\n    createdAt: message.createdAt,\n    ...(message.parts === undefined ? {} : { parts: message.parts.map(projectPart) }),\n    ...(message.toolCalls === undefined ? {} : { toolCalls: message.toolCalls.map(projectToolCall) }),\n    ...(message.toolCallId === undefined ? {} : { toolCallId: message.toolCallId }),\n    ...(message.metadata === undefined ? {} : { metadata: message.metadata }),\n  }\n}\n\nexport function validateMemoryRecord(input: unknown): MemoryRecord {\n  const snapshot = cloneJsonRecord(input, invalidRecord, Infinity, false)\n  if (snapshot.version !== 1 || !Array.isArray(snapshot.messages)) invalidRecord()\n  const messages = snapshot.messages.map(message => {\n    validateMessage(message)\n    return projectMessage(message)\n  })\n  return { version: 1, messages }\n}\n"]}