{"version":3,"sources":["../src/storage/domains/agents/base.ts","../src/storage/domains/agents/inmemory.ts","../src/storage/domains/inmemory-db.ts","../src/storage/domains/agents/filesystem.ts","../src/storage/domains/agents/source.ts"],"names":["VersionedStorageDomain","normalizePerPage","deepEqual","calculatePagination","version","FilesystemVersionedHelpers","OWNED_FIELDS_BY_GROUP","ownershipFromEditorConfig","SOURCE_CONTROL_AGENTS_DIR","getSourceAgentFilePath"],"mappings":"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","file":"chunk-H3YX6CF5.cjs","sourcesContent":["import type {\n  StorageAgentType,\n  StorageAgentSnapshotType,\n  StorageResolvedAgentType,\n  StorageCreateAgentInput,\n  StorageUpdateAgentInput,\n  StorageListAgentsInput,\n  StorageListAgentsOutput,\n  StorageListAgentsResolvedOutput,\n} from '../../types';\nimport { VersionedStorageDomain } from '../versioned';\nimport type { VersionBase, CreateVersionInputBase, ListVersionsInputBase, ListVersionsOutputBase } from '../versioned';\n\n// ============================================================================\n// Agent Version Types\n// ============================================================================\n\n/**\n * Represents a stored version of an agent configuration.\n * The config fields are top-level on the version row (no nested snapshot object).\n */\nexport interface AgentVersion extends StorageAgentSnapshotType, VersionBase {\n  /** ID of the agent this version belongs to */\n  agentId: string;\n}\n\n/**\n * Input for creating a new agent version.\n * Config fields are top-level (no nested snapshot object).\n */\nexport interface CreateVersionInput extends StorageAgentSnapshotType, CreateVersionInputBase {\n  /** ID of the agent this version belongs to */\n  agentId: string;\n}\n\n/**\n * Sort direction for version listings.\n */\nexport type VersionSortDirection = 'ASC' | 'DESC';\n\n/**\n * Fields that can be used for ordering version listings.\n */\nexport type VersionOrderBy = 'versionNumber' | 'createdAt';\n\n/**\n * Input for listing agent versions with pagination and sorting.\n */\nexport interface ListVersionsInput extends ListVersionsInputBase {\n  /** ID of the agent to list versions for */\n  agentId: string;\n}\n\n/**\n * Output for listing agent versions with pagination info.\n */\nexport interface ListVersionsOutput extends ListVersionsOutputBase<AgentVersion> {}\n\n// ============================================================================\n// AgentsStorage Base Class\n// ============================================================================\n\nexport abstract class AgentsStorage extends VersionedStorageDomain<\n  StorageAgentType,\n  StorageAgentSnapshotType,\n  StorageResolvedAgentType,\n  AgentVersion,\n  CreateVersionInput,\n  ListVersionsInput,\n  ListVersionsOutput,\n  { agent: StorageCreateAgentInput },\n  StorageUpdateAgentInput,\n  StorageListAgentsInput | undefined,\n  StorageListAgentsOutput,\n  StorageListAgentsResolvedOutput\n> {\n  protected readonly listKey = 'agents';\n  protected readonly versionMetadataFields = [\n    'id',\n    'agentId',\n    'versionNumber',\n    'changedFields',\n    'changeMessage',\n    'createdAt',\n  ] satisfies (keyof AgentVersion)[];\n\n  constructor() {\n    super({\n      component: 'STORAGE',\n      name: 'AGENTS',\n    });\n  }\n}\n","import { deepEqual } from '../../../utils';\nimport { normalizePerPage, calculatePagination } from '../../base';\nimport type {\n  StorageAgentType,\n  StorageCreateAgentInput,\n  StorageUpdateAgentInput,\n  StorageListAgentsInput,\n  StorageListAgentsOutput,\n  ThreadOrderBy,\n  ThreadSortDirection,\n} from '../../types';\nimport type { InMemoryDB } from '../inmemory-db';\nimport type {\n  AgentVersion,\n  CreateVersionInput,\n  ListVersionsInput,\n  ListVersionsOutput,\n  VersionOrderBy,\n  VersionSortDirection,\n} from './base';\nimport { AgentsStorage } from './base';\n\nexport class InMemoryAgentsStorage extends AgentsStorage {\n  private db: InMemoryDB;\n\n  constructor({ db }: { db: InMemoryDB }) {\n    super();\n    this.db = db;\n  }\n\n  async dangerouslyClearAll(): Promise<void> {\n    this.db.agents.clear();\n    this.db.agentVersions.clear();\n  }\n\n  // ==========================================================================\n  // Agent CRUD Methods\n  // ==========================================================================\n\n  async getById(id: string): Promise<StorageAgentType | null> {\n    const agent = this.db.agents.get(id);\n    return agent ? this.deepCopyAgent(agent) : null;\n  }\n\n  async create(input: { agent: StorageCreateAgentInput }): Promise<StorageAgentType> {\n    const { agent } = input;\n\n    if (this.db.agents.has(agent.id)) {\n      throw new Error(`Agent with id ${agent.id} already exists`);\n    }\n\n    const now = new Date();\n    // Default visibility to 'private' when an authorId is set; leave undefined for legacy unowned rows.\n    const visibility = agent.visibility ?? (agent.authorId ? 'private' : undefined);\n    const newAgent: StorageAgentType = {\n      id: agent.id,\n      status: 'draft',\n      activeVersionId: undefined,\n      authorId: agent.authorId,\n      visibility,\n      metadata: agent.metadata,\n      favoriteCount: 0,\n      createdAt: now,\n      updatedAt: now,\n    };\n\n    this.db.agents.set(agent.id, newAgent);\n\n    // Extract config fields from the flat input (everything except agent-record fields)\n    const { id: _id, authorId: _authorId, visibility: _visibility, metadata: _metadata, ...snapshotConfig } = agent;\n\n    // Create version 1 from the config\n    const versionId = crypto.randomUUID();\n    await this.createVersion({\n      id: versionId,\n      agentId: agent.id,\n      versionNumber: 1,\n      ...snapshotConfig,\n      changedFields: Object.keys(snapshotConfig),\n      changeMessage: 'Initial version',\n    });\n\n    // Return the thin agent record (activeVersionId remains null)\n    return this.deepCopyAgent(newAgent);\n  }\n\n  async update(input: StorageUpdateAgentInput): Promise<StorageAgentType> {\n    const { id, ...updates } = input;\n\n    const existingAgent = this.db.agents.get(id);\n    if (!existingAgent) {\n      throw new Error(`Agent with id ${id} not found`);\n    }\n\n    const { authorId, visibility, activeVersionId, metadata, status } = updates;\n\n    const updatedAgent: StorageAgentType = {\n      ...existingAgent,\n      ...(authorId !== undefined && { authorId }),\n      ...(visibility !== undefined && { visibility }),\n      ...(activeVersionId !== undefined && { activeVersionId }),\n      ...(metadata !== undefined && {\n        metadata: { ...existingAgent.metadata, ...metadata },\n      }),\n      ...(status !== undefined && { status }),\n      updatedAt: new Date(),\n    };\n\n    this.db.agents.set(id, updatedAgent);\n    return this.deepCopyAgent(updatedAgent);\n  }\n\n  async delete(id: string): Promise<void> {\n    // Idempotent delete - no-op if agent doesn't exist\n    this.db.agents.delete(id);\n    // Also delete all versions for this agent\n    await this.deleteVersionsByParentId(id);\n  }\n\n  async list(args?: StorageListAgentsInput): Promise<StorageListAgentsOutput> {\n    const {\n      page = 0,\n      perPage: perPageInput,\n      orderBy,\n      authorId,\n      visibility,\n      metadata,\n      status,\n      entityIds,\n      pinFavoritedFor,\n      favoritedOnly,\n    } = args || {};\n    const { field, direction } = this.parseOrderBy(orderBy);\n\n    // Normalize perPage for query (false → MAX_SAFE_INTEGER, 0 → 0, undefined → 100)\n    const perPage = normalizePerPage(perPageInput, 100);\n\n    if (page < 0) {\n      throw new Error('page must be >= 0');\n    }\n\n    // Prevent unreasonably large page values\n    const maxOffset = Number.MAX_SAFE_INTEGER / 2;\n    if (page * perPage > maxOffset) {\n      throw new Error('page value too large');\n    }\n\n    // Get all agents and apply filters\n    let agents = Array.from(this.db.agents.values());\n\n    // Restrict to a set of IDs (used by ?favoritedOnly=true).\n    // An empty array means \"no candidates\" -> empty result.\n    if (entityIds !== undefined) {\n      if (entityIds.length === 0) {\n        return {\n          agents: [],\n          total: 0,\n          page,\n          perPage: perPageInput === false ? false : perPage,\n          hasMore: false,\n        };\n      }\n      const idSet = new Set(entityIds);\n      agents = agents.filter(agent => idSet.has(agent.id));\n    }\n\n    // Filter by status\n    if (status) {\n      agents = agents.filter(agent => agent.status === status);\n    }\n\n    // Filter by authorId if provided\n    if (authorId !== undefined) {\n      agents = agents.filter(agent => agent.authorId === authorId);\n    }\n\n    // Filter by visibility if provided\n    if (visibility !== undefined) {\n      agents = agents.filter(agent => agent.visibility === visibility);\n    }\n\n    // Filter by metadata if provided (AND logic - all key-value pairs must match)\n    if (metadata && Object.keys(metadata).length > 0) {\n      agents = agents.filter(agent => {\n        if (!agent.metadata) return false;\n        return Object.entries(metadata).every(([key, value]) => deepEqual(agent.metadata![key], value));\n      });\n    }\n\n    // Optional favorited-first ordering / favorites-only filter.\n    const favoritedIds = pinFavoritedFor ? this.collectFavoritedIdsFor(pinFavoritedFor) : undefined;\n    if (favoritedOnly) {\n      if (favoritedIds) {\n        agents = agents.filter(agent => favoritedIds.has(agent.id));\n      } else {\n        // Defensive: favoritedOnly with no userId can never match a real row.\n        agents = [];\n      }\n    }\n\n    const sortedAgents = this.sortAgents(agents, field, direction, favoritedIds);\n\n    // Deep clone agents to avoid mutation\n    const clonedAgents = sortedAgents.map(agent => this.deepCopyAgent(agent));\n\n    const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n    return {\n      agents: clonedAgents.slice(offset, offset + perPage),\n      total: clonedAgents.length,\n      page,\n      perPage: perPageForResponse,\n      hasMore: offset + perPage < clonedAgents.length,\n    };\n  }\n\n  // ==========================================================================\n  // Agent Version Methods\n  // ==========================================================================\n\n  async createVersion(input: CreateVersionInput): Promise<AgentVersion> {\n    // Check if version with this ID already exists (versions are immutable)\n    if (this.db.agentVersions.has(input.id)) {\n      throw new Error(`Version with id ${input.id} already exists`);\n    }\n\n    // Check for duplicate (agentId, versionNumber) pair\n    for (const version of this.db.agentVersions.values()) {\n      if (version.agentId === input.agentId && version.versionNumber === input.versionNumber) {\n        throw new Error(`Version number ${input.versionNumber} already exists for agent ${input.agentId}`);\n      }\n    }\n\n    const version: AgentVersion = {\n      ...input,\n      createdAt: new Date(),\n    };\n\n    // Deep clone before storing to prevent external mutation\n    this.db.agentVersions.set(input.id, this.deepCopyVersion(version));\n    return this.deepCopyVersion(version);\n  }\n\n  async getVersion(id: string): Promise<AgentVersion | null> {\n    const version = this.db.agentVersions.get(id);\n    return version ? this.deepCopyVersion(version) : null;\n  }\n\n  async getVersionByNumber(agentId: string, versionNumber: number): Promise<AgentVersion | null> {\n    for (const version of this.db.agentVersions.values()) {\n      if (version.agentId === agentId && version.versionNumber === versionNumber) {\n        return this.deepCopyVersion(version);\n      }\n    }\n    return null;\n  }\n\n  async getLatestVersion(agentId: string): Promise<AgentVersion | null> {\n    let latest: AgentVersion | null = null;\n    for (const version of this.db.agentVersions.values()) {\n      if (version.agentId === agentId) {\n        if (!latest || version.versionNumber > latest.versionNumber) {\n          latest = version;\n        }\n      }\n    }\n    return latest ? this.deepCopyVersion(latest) : null;\n  }\n\n  async listVersions(input: ListVersionsInput): Promise<ListVersionsOutput> {\n    const { agentId, page = 0, perPage: perPageInput, orderBy } = input;\n    const { field, direction } = this.parseVersionOrderBy(orderBy);\n\n    // Normalize perPage for query (false -> MAX_SAFE_INTEGER, 0 -> 0, undefined -> 20)\n    const perPage = normalizePerPage(perPageInput, 20);\n\n    if (page < 0) {\n      throw new Error('page must be >= 0');\n    }\n\n    // Prevent unreasonably large page values\n    const maxOffset = Number.MAX_SAFE_INTEGER / 2;\n    if (page * perPage > maxOffset) {\n      throw new Error('page value too large');\n    }\n\n    // Filter versions by agentId\n    let versions = Array.from(this.db.agentVersions.values()).filter(v => v.agentId === agentId);\n\n    // Sort versions\n    versions = this.sortVersions(versions, field, direction);\n\n    // Deep clone versions to avoid mutation\n    const clonedVersions = versions.map(v => this.deepCopyVersion(v));\n\n    const total = clonedVersions.length;\n    const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n    const paginatedVersions = clonedVersions.slice(offset, offset + perPage);\n\n    return {\n      versions: paginatedVersions,\n      total,\n      page,\n      perPage: perPageForResponse,\n      hasMore: offset + perPage < total,\n    };\n  }\n\n  async deleteVersion(id: string): Promise<void> {\n    // Idempotent delete - no-op if version doesn't exist\n    this.db.agentVersions.delete(id);\n  }\n\n  async deleteVersionsByParentId(entityId: string): Promise<void> {\n    const idsToDelete: string[] = [];\n    for (const [id, version] of this.db.agentVersions.entries()) {\n      if (version.agentId === entityId) {\n        idsToDelete.push(id);\n      }\n    }\n\n    for (const id of idsToDelete) {\n      this.db.agentVersions.delete(id);\n    }\n  }\n\n  async countVersions(agentId: string): Promise<number> {\n    let count = 0;\n    for (const version of this.db.agentVersions.values()) {\n      if (version.agentId === agentId) {\n        count++;\n      }\n    }\n    return count;\n  }\n\n  // ==========================================================================\n  // Private Helper Methods\n  // ==========================================================================\n\n  /**\n   * Deep copy a thin agent record to prevent external mutation of stored data\n   */\n  private deepCopyAgent(agent: StorageAgentType): StorageAgentType {\n    return {\n      ...agent,\n      metadata: agent.metadata ? { ...agent.metadata } : agent.metadata,\n    };\n  }\n\n  /**\n   * Deep copy a version to prevent external mutation of stored data\n   */\n  private deepCopyVersion(version: AgentVersion): AgentVersion {\n    return structuredClone(version);\n  }\n\n  private sortAgents(\n    agents: StorageAgentType[],\n    field: ThreadOrderBy,\n    direction: ThreadSortDirection,\n    favoritedIds?: Set<string>,\n  ): StorageAgentType[] {\n    return agents.sort((a, b) => {\n      // Compound sort: favorited first, then existing orderBy, then id ASC for stable pagination.\n      if (favoritedIds) {\n        const aFav = favoritedIds.has(a.id) ? 1 : 0;\n        const bFav = favoritedIds.has(b.id) ? 1 : 0;\n        if (aFav !== bFav) return bFav - aFav;\n      }\n\n      const aValue = new Date(a[field]).getTime();\n      const bValue = new Date(b[field]).getTime();\n      if (aValue !== bValue) {\n        return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n      }\n\n      // Stable tie-break for same `createdAt`/`updatedAt`.\n      return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n    });\n  }\n\n  /**\n   * Collect the set of agent IDs favorited by the given user. Returns an empty\n   * Set when the favorites domain is not wired or the user has no favorites.\n   */\n  private collectFavoritedIdsFor(userId: string): Set<string> {\n    const favorited = new Set<string>();\n    for (const row of this.db.favorites.values()) {\n      if (row.userId === userId && row.entityType === 'agent') {\n        favorited.add(row.entityId);\n      }\n    }\n    return favorited;\n  }\n\n  private sortVersions(\n    versions: AgentVersion[],\n    field: VersionOrderBy,\n    direction: VersionSortDirection,\n  ): AgentVersion[] {\n    return versions.sort((a, b) => {\n      let aVal: number;\n      let bVal: number;\n\n      if (field === 'createdAt') {\n        aVal = a.createdAt.getTime();\n        bVal = b.createdAt.getTime();\n      } else {\n        // versionNumber\n        aVal = a.versionNumber;\n        bVal = b.versionNumber;\n      }\n\n      return direction === 'ASC' ? aVal - bVal : bVal - aVal;\n    });\n  }\n}\n","import type { BackgroundTask } from '../../background-tasks/types';\nimport type { ScoreRowData } from '../../evals/types';\nimport type { StorageThreadType } from '../../memory/types';\nimport type {\n  StorageAgentType,\n  StorageMCPClientType,\n  StorageMCPServerType,\n  StorageMessageType,\n  StoragePromptBlockType,\n  StorageResourceType,\n  StorageScorerDefinitionType,\n  StorageFavoriteType,\n  StorageWorkspaceType,\n  StorageSkillType,\n  StorageToolProviderConnection,\n  StorageWorkflowRun,\n  ObservationalMemoryRecord,\n  DatasetRecord,\n  DatasetItemRow,\n  DatasetVersion,\n  Experiment,\n  ExperimentResult,\n} from '../types';\nimport type { AgentVersion } from './agents';\nimport type { MCPClientVersion } from './mcp-clients';\nimport type { MCPServerVersion } from './mcp-servers';\nimport type { TraceEntry } from './observability';\nimport type { FeedbackRecord } from './observability/feedback';\nimport type { LogRecord } from './observability/logs';\nimport type { MetricRecord } from './observability/metrics';\nimport type { ScoreRecord } from './observability/scores';\nimport type { PromptBlockVersion } from './prompt-blocks';\nimport type { Schedule, ScheduleTrigger } from './schedules/base';\nimport type { ScorerDefinitionVersion } from './scorer-definitions';\nimport type { SkillVersion } from './skills';\nimport type { WorkspaceVersion } from './workspaces';\n\n/**\n * InMemoryDB is a thin database layer for in-memory storage.\n * It holds all the Maps that store data, similar to how a real database\n * connection (pg-promise client, libsql client) is shared across domains.\n *\n * Each domain receives a reference to this db and operates on the relevant Maps.\n */\nexport class InMemoryDB {\n  readonly threads = new Map<string, StorageThreadType>();\n  readonly messages = new Map<string, StorageMessageType>();\n  readonly resources = new Map<string, StorageResourceType>();\n  readonly workflows = new Map<string, StorageWorkflowRun>();\n  readonly scores = new Map<string, ScoreRowData>();\n  readonly traces = new Map<string, TraceEntry>();\n  readonly metricRecords: MetricRecord[] = [];\n  readonly logRecords: LogRecord[] = [];\n  readonly scoreRecords: ScoreRecord[] = [];\n  readonly feedbackRecords: FeedbackRecord[] = [];\n  observabilityNextCursorId = 1;\n  readonly traceCursorIds = new Map<string, number>();\n  readonly branchCursorIds = new Map<string, number>();\n  readonly metricCursorIds = new Map<MetricRecord, number>();\n  readonly logCursorIds = new Map<LogRecord, number>();\n  readonly scoreCursorIds = new Map<ScoreRecord, number>();\n  readonly feedbackCursorIds = new Map<FeedbackRecord, number>();\n  readonly agents = new Map<string, StorageAgentType>();\n  readonly agentVersions = new Map<string, AgentVersion>();\n  readonly promptBlocks = new Map<string, StoragePromptBlockType>();\n  readonly promptBlockVersions = new Map<string, PromptBlockVersion>();\n  readonly scorerDefinitions = new Map<string, StorageScorerDefinitionType>();\n  readonly scorerDefinitionVersions = new Map<string, ScorerDefinitionVersion>();\n  readonly mcpClients = new Map<string, StorageMCPClientType>();\n  readonly mcpClientVersions = new Map<string, MCPClientVersion>();\n  readonly mcpServers = new Map<string, StorageMCPServerType>();\n  readonly mcpServerVersions = new Map<string, MCPServerVersion>();\n  readonly workspaces = new Map<string, StorageWorkspaceType>();\n  readonly workspaceVersions = new Map<string, WorkspaceVersion>();\n  readonly skills = new Map<string, StorageSkillType>();\n  readonly skillVersions = new Map<string, SkillVersion>();\n  /**\n   * Favorites keyed by `${userId}\\u0000${entityType}\\u0000${entityId}`. The\n   * favorites domain owns reads/writes; this Map lives on InMemoryDB so the\n   * favorites domain can also mutate `agents` / `skills` `favoriteCount` atomically\n   * within the same synchronous block.\n   */\n  readonly favorites = new Map<string, StorageFavoriteType>();\n  /** Observational memory records, keyed by resourceId, each holding array of records (generations) */\n  readonly observationalMemory = new Map<string, ObservationalMemoryRecord[]>();\n\n  // Dataset domain maps\n  readonly datasets = new Map<string, DatasetRecord>();\n  readonly datasetItems = new Map<string, DatasetItemRow[]>();\n  readonly datasetVersions = new Map<string, DatasetVersion>();\n\n  // Experiment domain maps\n  readonly experiments = new Map<string, Experiment>();\n  readonly experimentResults = new Map<string, ExperimentResult>();\n\n  // Background tasks domain\n  readonly backgroundTasks = new Map<string, BackgroundTask>();\n\n  // Schedules domain\n  readonly schedules = new Map<string, Schedule>();\n  readonly scheduleTriggers: ScheduleTrigger[] = [];\n\n  /**\n   * Tool provider connections keyed by `${authorId}\\u0000${providerId}\\u0000${connectionId}`.\n   */\n  readonly toolProviderConnections = new Map<string, StorageToolProviderConnection>();\n\n  /**\n   * Clears all data from all collections.\n   * Useful for testing.\n   */\n  clear(): void {\n    this.threads.clear();\n    this.messages.clear();\n    this.resources.clear();\n    this.workflows.clear();\n    this.scores.clear();\n    this.traces.clear();\n    this.metricRecords.length = 0;\n    this.logRecords.length = 0;\n    this.scoreRecords.length = 0;\n    this.feedbackRecords.length = 0;\n    this.observabilityNextCursorId = 1;\n    this.traceCursorIds.clear();\n    this.branchCursorIds.clear();\n    this.metricCursorIds.clear();\n    this.logCursorIds.clear();\n    this.scoreCursorIds.clear();\n    this.feedbackCursorIds.clear();\n    this.agents.clear();\n    this.agentVersions.clear();\n    this.promptBlocks.clear();\n    this.promptBlockVersions.clear();\n    this.scorerDefinitions.clear();\n    this.scorerDefinitionVersions.clear();\n    this.mcpClients.clear();\n    this.mcpClientVersions.clear();\n    this.mcpServers.clear();\n    this.mcpServerVersions.clear();\n    this.workspaces.clear();\n    this.workspaceVersions.clear();\n    this.skills.clear();\n    this.skillVersions.clear();\n    this.favorites.clear();\n    this.observationalMemory.clear();\n    this.datasets.clear();\n    this.datasetItems.clear();\n    this.datasetVersions.clear();\n    this.experiments.clear();\n    this.experimentResults.clear();\n    this.backgroundTasks.clear();\n    this.schedules.clear();\n    this.scheduleTriggers.length = 0;\n    this.toolProviderConnections.clear();\n  }\n}\n","import type { StorageMastraRef } from '../../base';\nimport type { FilesystemDB } from '../../filesystem-db';\nimport { FilesystemVersionedHelpers } from '../../filesystem-versioned';\nimport type {\n  StorageAgentType,\n  StorageCreateAgentInput,\n  StorageUpdateAgentInput,\n  StorageListAgentsInput,\n  StorageListAgentsOutput,\n} from '../../types';\nimport type { AgentVersion, CreateVersionInput, ListVersionsInput, ListVersionsOutput } from './base';\nimport { AgentsStorage } from './base';\n\n/**\n * Fields persisted for filesystem-stored agents.\n * Only fields that `applyStoredOverrides` actually uses plus the\n * minimum required by the storage schema (`name`, `model`).\n */\nconst PERSISTED_SNAPSHOT_FIELDS = new Set([\n  'name',\n  'instructions',\n  'model',\n  'tools',\n  'integrationTools',\n  'toolProviders',\n  'mcpClients',\n  'requestContextSchema',\n]);\n\n/**\n * Fields always excluded from per-entity (code-mode) JSON files regardless\n * of editor config. `model`/`name` are not editable from Studio for\n * code-defined agents, so they should not appear in the committed override\n * JSON — they would otherwise look like settable fields in code review and\n * could drift from the source-of-truth declaration in code.\n */\nconst CODE_MODE_EXCLUDED_FIELDS = new Set(['model', 'name']);\n\n/**\n * Fields that depend on per-agent editor ownership.\n * When the agent's editor config does not own a given field (e.g.\n * descriptions-only mode does not own raw instructions), it should be\n * omitted from the on-disk per-entity JSON entirely.\n */\nconst OWNED_FIELDS_BY_GROUP = {\n  instructions: ['instructions'],\n  tools: ['tools', 'integrationTools', 'mcpClients'],\n} as const;\n\nfunction ownershipFromEditorConfig(editorConfig: unknown): {\n  ownsInstructions: boolean;\n  ownsTools: boolean;\n} {\n  if (editorConfig === false) {\n    return { ownsInstructions: false, ownsTools: false };\n  }\n  if (editorConfig === undefined || editorConfig === null) {\n    // Code agents without explicit editor config behave as fully editable.\n    return { ownsInstructions: true, ownsTools: true };\n  }\n  if (typeof editorConfig !== 'object') {\n    return { ownsInstructions: false, ownsTools: false };\n  }\n  const cfg = editorConfig as { instructions?: unknown; tools?: unknown };\n  const ownsInstructions = cfg.instructions === true;\n  const toolsCfg = cfg.tools;\n  const ownsTools =\n    toolsCfg === true ||\n    (typeof toolsCfg === 'object' && toolsCfg !== null && (toolsCfg as { description?: unknown }).description === true);\n  return { ownsInstructions, ownsTools };\n}\n\nfunction stripUnusedFields<T extends Record<string, unknown>>(obj: T): T {\n  const result = {} as Record<string, unknown>;\n  for (const [key, value] of Object.entries(obj)) {\n    if (PERSISTED_SNAPSHOT_FIELDS.has(key)) {\n      result[key] = value;\n    }\n  }\n  return result as T;\n}\n\nfunction isAgentNotFoundError(error: unknown, entityId: string): boolean {\n  if (!error || typeof error !== 'object') return false;\n\n  const maybeError = error as { id?: unknown; message?: unknown; details?: { status?: unknown; agentId?: unknown } };\n  return (\n    maybeError.id === 'MASTRA_GET_AGENT_BY_AGENT_ID_NOT_FOUND' ||\n    (maybeError.details?.status === 404 && maybeError.details?.agentId === entityId) ||\n    maybeError.message === `Agent with id ${entityId} not found`\n  );\n}\n\nexport class FilesystemAgentsStorage extends AgentsStorage {\n  private helpers: FilesystemVersionedHelpers<StorageAgentType, AgentVersion>;\n  private storageMastra?: StorageMastraRef;\n\n  constructor({ db }: { db: FilesystemDB }) {\n    super();\n    const getCodeAgent = (entityId: string) => {\n      try {\n        const agent = this.storageMastra?.getAgentById?.(entityId);\n        return agent?.source === 'code' ? agent : undefined;\n      } catch (error) {\n        if (isAgentNotFoundError(error, entityId)) {\n          return undefined;\n        }\n        throw error;\n      }\n    };\n    const isCodeAgent = (entityId: string): boolean => Boolean(getCodeAgent(entityId));\n    const editorConfigFor = (entityId: string): unknown => getCodeAgent(entityId)?.__getEditorConfig?.();\n    this.helpers = new FilesystemVersionedHelpers({\n      db,\n      entitiesFile: 'agents.json',\n      parentIdField: 'agentId',\n      name: 'FilesystemAgentsStorage',\n      versionMetadataFields: ['id', 'agentId', 'versionNumber', 'changedFields', 'changeMessage', 'createdAt'],\n      perEntityFilesDir: 'agents',\n      // Per-entity layout is used only for code-mode agents — i.e. agents\n      // that are declared in code (`source === 'code'`). For db-mode and\n      // user-created stored agents we keep the shared `agents.json` layout.\n      shouldPersistToPerEntityFile: entity => isCodeAgent(entity.id),\n      perEntitySnapshotFilter: (snapshot, entity) => {\n        const { ownsInstructions, ownsTools } = ownershipFromEditorConfig(editorConfigFor(entity.id));\n        const excludedByOwnership = new Set<string>();\n        if (!ownsInstructions) {\n          for (const field of OWNED_FIELDS_BY_GROUP.instructions) excludedByOwnership.add(field);\n        }\n        if (!ownsTools) {\n          for (const field of OWNED_FIELDS_BY_GROUP.tools) excludedByOwnership.add(field);\n        }\n        const result: Record<string, unknown> = {};\n        for (const [key, value] of Object.entries(snapshot)) {\n          if (CODE_MODE_EXCLUDED_FIELDS.has(key)) continue;\n          if (excludedByOwnership.has(key)) continue;\n          result[key] = value;\n        }\n        return result;\n      },\n    });\n  }\n\n  __registerMastra(mastra: StorageMastraRef): void {\n    this.storageMastra = mastra;\n  }\n\n  override async init(): Promise<void> {\n    await this.helpers.db.init();\n  }\n\n  async dangerouslyClearAll(): Promise<void> {\n    await this.helpers.dangerouslyClearAll();\n  }\n\n  async getById(id: string): Promise<StorageAgentType | null> {\n    return this.helpers.getById(id);\n  }\n\n  async create(input: { agent: StorageCreateAgentInput }): Promise<StorageAgentType> {\n    const { agent } = input;\n    const now = new Date();\n    // Default visibility to 'private' when an authorId is set; leave undefined for legacy unowned rows.\n    const visibility = agent.visibility ?? (agent.authorId ? 'private' : undefined);\n    const entity: StorageAgentType = {\n      id: agent.id,\n      status: 'draft',\n      activeVersionId: undefined,\n      authorId: agent.authorId,\n      visibility,\n      metadata: agent.metadata,\n      createdAt: now,\n      updatedAt: now,\n    };\n\n    await this.helpers.createEntity(agent.id, entity);\n\n    const { id: _id, authorId: _authorId, visibility: _visibility, metadata: _metadata, ...snapshotConfig } = agent;\n    const filtered = stripUnusedFields(snapshotConfig);\n    const versionId = crypto.randomUUID();\n    await this.createVersion({\n      id: versionId,\n      agentId: agent.id,\n      versionNumber: 1,\n      ...filtered,\n      changedFields: Object.keys(filtered),\n      changeMessage: 'Initial version',\n    } as CreateVersionInput);\n\n    return structuredClone(entity);\n  }\n\n  async update(input: StorageUpdateAgentInput): Promise<StorageAgentType> {\n    const { id, ...updates } = input;\n    // Strip snapshot config fields that don't belong on the entity record\n    const entityUpdates: Record<string, unknown> = {};\n    const entityFields = new Set(['authorId', 'visibility', 'metadata', 'activeVersionId', 'status']);\n    for (const [key, value] of Object.entries(updates)) {\n      if (entityFields.has(key)) {\n        entityUpdates[key] = value;\n      }\n    }\n    return this.helpers.updateEntity(id, entityUpdates);\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.helpers.deleteEntity(id);\n  }\n\n  async list(args?: StorageListAgentsInput): Promise<StorageListAgentsOutput> {\n    const { page, perPage, orderBy, authorId, visibility, metadata, status } = args || {};\n    const result = await this.helpers.listEntities({\n      page,\n      perPage,\n      orderBy,\n      listKey: 'agents',\n      filters: { authorId, visibility, metadata, status },\n    });\n    return result as unknown as StorageListAgentsOutput;\n  }\n\n  async createVersion(input: CreateVersionInput): Promise<AgentVersion> {\n    const { id, agentId, versionNumber, changedFields, changeMessage, ...snapshotFields } = input;\n    const filtered = stripUnusedFields(snapshotFields as Record<string, unknown>);\n    return this.helpers.createVersion({\n      id,\n      agentId,\n      versionNumber,\n      changedFields,\n      changeMessage,\n      ...filtered,\n    } as AgentVersion);\n  }\n\n  async getVersion(id: string): Promise<AgentVersion | null> {\n    return this.helpers.getVersion(id);\n  }\n\n  async getVersionByNumber(agentId: string, versionNumber: number): Promise<AgentVersion | null> {\n    return this.helpers.getVersionByNumber(agentId, versionNumber);\n  }\n\n  async getLatestVersion(agentId: string): Promise<AgentVersion | null> {\n    return this.helpers.getLatestVersion(agentId);\n  }\n\n  async listVersions(input: ListVersionsInput): Promise<ListVersionsOutput> {\n    const result = await this.helpers.listVersions(input, 'agentId');\n    return result as ListVersionsOutput;\n  }\n\n  async deleteVersion(id: string): Promise<void> {\n    await this.helpers.deleteVersion(id);\n  }\n\n  async deleteVersionsByParentId(entityId: string): Promise<void> {\n    await this.helpers.deleteVersionsByParentId(entityId);\n  }\n\n  async countVersions(agentId: string): Promise<number> {\n    return this.helpers.countVersions(agentId);\n  }\n}\n","import { calculatePagination, normalizePerPage } from '../../base';\nimport type { StorageMastraRef } from '../../base';\nimport { SOURCE_CONTROL_AGENTS_DIR, getSourceAgentFilePath } from '../../source-control';\nimport type { SourceFileHistoryEntry, SourceControlProvider, SourceWriteResult } from '../../source-control';\nimport type {\n  StorageAgentType,\n  StorageCreateAgentInput,\n  StorageListAgentsInput,\n  StorageListAgentsOutput,\n  StorageUpdateAgentInput,\n} from '../../types';\nimport { InMemoryDB } from '../inmemory-db';\nimport type {\n  AgentVersion,\n  CreateVersionInput,\n  ListVersionsInput,\n  ListVersionsOutput,\n  VersionOrderBy,\n  VersionSortDirection,\n} from './base';\nimport { AgentsStorage } from './base';\nimport { InMemoryAgentsStorage } from './inmemory';\n\nconst SOURCE_VERSION_PREFIX = 'source:';\n\nconst COMMON_EXCLUDED_FIELDS = new Set([\n  'id',\n  'model',\n  'scorers',\n  'skills',\n  'workflows',\n  'agents',\n  'integrationTools',\n  'toolProviders',\n  'inputProcessors',\n  'outputProcessors',\n  'memory',\n  'mcpClients',\n  'workspace',\n  'browser',\n  'defaultOptions',\n]);\nconst CODE_SOURCE_EXCLUDED_FIELDS = new Set(['name']);\n\nconst OWNED_FIELDS_BY_GROUP = {\n  instructions: ['instructions'],\n  tools: ['tools'],\n} as const;\n\nexport interface SourceAgentsSourceControlConfig {\n  provider: SourceControlProvider;\n  agentIds?: string[];\n}\n\nfunction ownershipFromEditorConfig(editorConfig: unknown): {\n  ownsInstructions: boolean;\n  ownsTools: boolean;\n} {\n  if (editorConfig === false) {\n    return { ownsInstructions: false, ownsTools: false };\n  }\n  if (editorConfig === undefined || editorConfig === null) {\n    return { ownsInstructions: true, ownsTools: true };\n  }\n  if (typeof editorConfig !== 'object') {\n    return { ownsInstructions: false, ownsTools: false };\n  }\n  const cfg = editorConfig as { instructions?: unknown; tools?: unknown };\n  const ownsInstructions = cfg.instructions === true;\n  const toolsCfg = cfg.tools;\n  const ownsTools =\n    toolsCfg === true ||\n    (typeof toolsCfg === 'object' && toolsCfg !== null && (toolsCfg as { description?: unknown }).description === true);\n  return { ownsInstructions, ownsTools };\n}\n\nfunction snapshotFromVersion(version: AgentVersion): Record<string, unknown> {\n  const { id, agentId, versionNumber, changedFields, changeMessage, createdAt, ...snapshot } = version;\n  void id;\n  void agentId;\n  void versionNumber;\n  void changedFields;\n  void changeMessage;\n  void createdAt;\n  return snapshot;\n}\n\nfunction filterSourceSnapshot(\n  snapshot: Record<string, unknown>,\n  editorConfig: unknown,\n  isCodeDefinedAgent: boolean,\n): Record<string, unknown> {\n  const excludedByOwnership = new Set<string>();\n  if (isCodeDefinedAgent) {\n    const { ownsInstructions, ownsTools } = ownershipFromEditorConfig(editorConfig);\n    if (!ownsInstructions) {\n      for (const field of OWNED_FIELDS_BY_GROUP.instructions) excludedByOwnership.add(field);\n    }\n    if (!ownsTools) {\n      for (const field of OWNED_FIELDS_BY_GROUP.tools) excludedByOwnership.add(field);\n    }\n  }\n\n  const result: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(snapshot)) {\n    if (COMMON_EXCLUDED_FIELDS.has(key)) continue;\n    if (isCodeDefinedAgent && CODE_SOURCE_EXCLUDED_FIELDS.has(key)) continue;\n    if (excludedByOwnership.has(key)) continue;\n    if (value === undefined) continue;\n    result[key] = value;\n  }\n  return result;\n}\n\nfunction parseJsonObject(content: string): Record<string, unknown> | null {\n  try {\n    const parsed = JSON.parse(content) as unknown;\n    return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? (parsed as Record<string, unknown>) : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction stableStringify(value: unknown): string {\n  if (Array.isArray(value)) {\n    return `[${value.map(stableStringify).join(',')}]`;\n  }\n  if (value && typeof value === 'object') {\n    const entries = Object.entries(value as Record<string, unknown>)\n      .filter(([, entryValue]) => entryValue !== undefined)\n      .sort(([a], [b]) => a.localeCompare(b));\n    return `{${entries.map(([key, entryValue]) => `${JSON.stringify(key)}:${stableStringify(entryValue)}`).join(',')}}`;\n  }\n  return JSON.stringify(value);\n}\n\nfunction agentIdFromSourcePath(path: string): string | undefined {\n  const prefix = `${SOURCE_CONTROL_AGENTS_DIR}/`;\n  if (!path.startsWith(prefix) || !path.endsWith('.json')) return undefined;\n\n  const filename = path.slice(prefix.length, -'.json'.length);\n  if (!filename || filename.includes('/')) return undefined;\n\n  try {\n    return decodeURIComponent(filename);\n  } catch {\n    return filename;\n  }\n}\n\nexport class SourceAgentsSourceControl extends AgentsStorage {\n  private readonly provider: SourceControlProvider;\n  private readonly knownAgentIds: Set<string>;\n  private readonly db = new InMemoryDB();\n  private readonly memory = new InMemoryAgentsStorage({ db: this.db });\n  private storageMastra?: StorageMastraRef;\n  private readonly providerVersions = new Map<string, AgentVersion>();\n  private readonly loadedHistory = new Set<string>();\n  private readonly hydratedAgents = new Set<string>();\n  private readonly activeRefs = new Map<string, string>();\n  private providerAgentIdsDiscovered = false;\n\n  constructor({ provider, agentIds = [] }: SourceAgentsSourceControlConfig) {\n    super();\n    this.provider = provider;\n    this.knownAgentIds = new Set(agentIds);\n  }\n\n  __registerMastra(mastra: StorageMastraRef): void {\n    this.storageMastra = mastra;\n  }\n\n  override async init(): Promise<void> {\n    const capabilities = await this.provider.getCapabilities();\n    if (!capabilities.canRead) {\n      throw new Error(capabilities.reason ?? `Source provider ${this.provider.displayName} cannot read files`);\n    }\n    this.refreshKnownAgentIds();\n    await this.discoverProviderAgentIds();\n    await Promise.all([...this.knownAgentIds].map(agentId => this.hydrateAgent(agentId)));\n  }\n\n  async dangerouslyClearAll(): Promise<void> {\n    this.hydratedAgents.clear();\n    this.loadedHistory.clear();\n    this.providerVersions.clear();\n    this.activeRefs.clear();\n    this.providerAgentIdsDiscovered = false;\n    await this.memory.dangerouslyClearAll();\n  }\n\n  async useProviderRef(agentId: string, ref: string): Promise<void> {\n    this.activeRefs.set(agentId, ref);\n    this.hydratedAgents.delete(agentId);\n    this.loadedHistory.delete(agentId);\n    for (const [versionId, version] of this.providerVersions.entries()) {\n      if (version.agentId === agentId) {\n        this.providerVersions.delete(versionId);\n      }\n    }\n    await this.memory.delete(agentId);\n    await this.hydrateAgent(agentId);\n  }\n\n  async getById(id: string): Promise<StorageAgentType | null> {\n    await this.hydrateAgent(id);\n    return this.memory.getById(id);\n  }\n\n  async create(input: { agent: StorageCreateAgentInput }): Promise<StorageAgentType> {\n    await this.hydrateAgent(input.agent.id);\n    const existing = await this.memory.getById(input.agent.id);\n    if (existing) {\n      throw new Error(`Agent with id ${input.agent.id} already exists`);\n    }\n\n    await this.persistSnapshot(input.agent.id, { ...input.agent }, 'Initial version');\n    const created = await this.memory.create(input);\n    this.knownAgentIds.add(input.agent.id);\n    return created;\n  }\n\n  async update(input: StorageUpdateAgentInput): Promise<StorageAgentType> {\n    await this.hydrateAgent(input.id);\n    return this.memory.update(input);\n  }\n\n  async delete(id: string): Promise<void> {\n    this.knownAgentIds.delete(id);\n    this.hydratedAgents.delete(id);\n    this.loadedHistory.delete(id);\n    for (const versionId of this.providerVersions.keys()) {\n      if (this.providerVersions.get(versionId)?.agentId === id) {\n        this.providerVersions.delete(versionId);\n      }\n    }\n    await this.memory.delete(id);\n  }\n\n  async list(args?: StorageListAgentsInput): Promise<StorageListAgentsOutput> {\n    this.refreshKnownAgentIds();\n    await this.discoverProviderAgentIds();\n    await Promise.all([...this.knownAgentIds].map(agentId => this.hydrateAgent(agentId)));\n    return this.memory.list(args);\n  }\n\n  async createVersion(input: CreateVersionInput): Promise<AgentVersion> {\n    await this.hydrateAgent(input.agentId);\n    const existingVersion = await this.memory.getVersion(input.id);\n    if (existingVersion) {\n      throw new Error(`Version with id ${input.id} already exists`);\n    }\n    const existingVersionNumber = await this.memory.getVersionByNumber(input.agentId, input.versionNumber);\n    if (existingVersionNumber) {\n      throw new Error(`Version number ${input.versionNumber} already exists for agent ${input.agentId}`);\n    }\n\n    const snapshot = snapshotFromVersion({ ...input, createdAt: new Date() } as AgentVersion);\n    const result = await this.persistSnapshot(input.agentId, snapshot, input.changeMessage);\n    const version = await this.memory.createVersion(input);\n    this.rememberProviderVersion(input.agentId, version, result);\n    return version;\n  }\n\n  async getVersion(id: string): Promise<AgentVersion | null> {\n    const providerVersion = this.providerVersions.get(id);\n    if (providerVersion) {\n      return structuredClone(providerVersion);\n    }\n    return this.memory.getVersion(id);\n  }\n\n  async getVersionByNumber(agentId: string, versionNumber: number): Promise<AgentVersion | null> {\n    await this.loadHistory(agentId);\n    const providerVersion = [...this.providerVersions.values()].find(\n      version => version.agentId === agentId && version.versionNumber === versionNumber,\n    );\n    if (providerVersion) {\n      return structuredClone(providerVersion);\n    }\n    return this.memory.getVersionByNumber(agentId, versionNumber);\n  }\n\n  async getLatestVersion(agentId: string): Promise<AgentVersion | null> {\n    await this.loadHistory(agentId);\n    const providerLatest = [...this.providerVersions.values()]\n      .filter(version => version.agentId === agentId)\n      .sort((a, b) => b.versionNumber - a.versionNumber)[0];\n    if (providerLatest) {\n      return structuredClone(providerLatest);\n    }\n    return this.memory.getLatestVersion(agentId);\n  }\n\n  async listVersions(input: ListVersionsInput): Promise<ListVersionsOutput> {\n    await this.loadHistory(input.agentId);\n    const providerVersions = [...this.providerVersions.values()].filter(version => version.agentId === input.agentId);\n    if (providerVersions.length === 0) {\n      return this.memory.listVersions(input);\n    }\n\n    const { page = 0, perPage: perPageInput, orderBy } = input;\n    const { field, direction } = this.parseVersionOrderBy(orderBy);\n    const perPage = normalizePerPage(perPageInput, 20);\n    const sortedVersions = this.sortVersions(providerVersions, field, direction).map(version =>\n      structuredClone(version),\n    );\n    const total = sortedVersions.length;\n    const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n    return {\n      versions: sortedVersions.slice(offset, offset + perPage),\n      total,\n      page,\n      perPage: perPageForResponse,\n      hasMore: offset + perPage < total,\n    };\n  }\n\n  async deleteVersion(id: string): Promise<void> {\n    this.providerVersions.delete(id);\n    await this.memory.deleteVersion(id);\n  }\n\n  async deleteVersionsByParentId(entityId: string): Promise<void> {\n    for (const [versionId, version] of this.providerVersions.entries()) {\n      if (version.agentId === entityId) {\n        this.providerVersions.delete(versionId);\n      }\n    }\n    await this.memory.deleteVersionsByParentId(entityId);\n  }\n\n  async countVersions(entityId: string): Promise<number> {\n    await this.loadHistory(entityId);\n    const providerCount = [...this.providerVersions.values()].filter(version => version.agentId === entityId).length;\n    return providerCount || this.memory.countVersions(entityId);\n  }\n\n  private refreshKnownAgentIds(): void {\n    const agents = this.storageMastra?.listAgents?.();\n    if (!agents) return;\n    for (const agent of Object.values(agents)) {\n      if (agent.source === 'code') {\n        this.knownAgentIds.add(agent.id);\n      }\n    }\n  }\n\n  private async discoverProviderAgentIds(): Promise<void> {\n    if (this.providerAgentIdsDiscovered || !this.provider.listFiles) return;\n\n    const files = await this.provider.listFiles({ path: SOURCE_CONTROL_AGENTS_DIR });\n    for (const file of files) {\n      const agentId = agentIdFromSourcePath(file.path);\n      if (agentId) {\n        this.knownAgentIds.add(agentId);\n      }\n    }\n    this.providerAgentIdsDiscovered = true;\n  }\n\n  private async hydrateAgent(agentId: string): Promise<void> {\n    if (this.hydratedAgents.has(agentId)) return;\n\n    const ref = this.activeRefs.get(agentId);\n    const file = await this.provider.readFile({ path: getSourceAgentFilePath(agentId), ref });\n    if (!file) {\n      this.hydratedAgents.add(agentId);\n      return;\n    }\n\n    const snapshot = parseJsonObject(file.content);\n    if (!snapshot) {\n      this.hydratedAgents.add(agentId);\n      return;\n    }\n\n    this.knownAgentIds.add(agentId);\n    this.hydratedAgents.add(agentId);\n    const now = new Date();\n    const versionId = `hydrated-${agentId}-v1`;\n    this.db.agents.set(agentId, {\n      id: agentId,\n      status: 'published',\n      activeVersionId: versionId,\n      favoriteCount: 0,\n      createdAt: now,\n      updatedAt: now,\n    });\n    this.db.agentVersions.set(versionId, {\n      id: versionId,\n      agentId,\n      versionNumber: 1,\n      ...snapshot,\n      createdAt: now,\n    } as AgentVersion);\n  }\n\n  private getCodeDefinedAgent(agentId: string): { source?: string; __getEditorConfig?: () => unknown } | undefined {\n    try {\n      const agent = this.storageMastra?.getAgentById?.(agentId) as\n        | { source?: string; __getEditorConfig?: () => unknown }\n        | undefined;\n      return agent?.source === 'code' ? agent : undefined;\n    } catch {\n      return undefined;\n    }\n  }\n\n  private async persistSnapshot(\n    agentId: string,\n    snapshot: Record<string, unknown>,\n    message?: string,\n  ): Promise<SourceWriteResult> {\n    const capabilities = await this.provider.getCapabilities();\n    if (!capabilities.canWrite) {\n      throw new Error(capabilities.reason ?? `Source provider ${this.provider.displayName} cannot write files`);\n    }\n    const agent = this.getCodeDefinedAgent(agentId);\n    const filtered = filterSourceSnapshot(snapshot, agent?.__getEditorConfig?.(), Boolean(agent));\n    return this.provider.writeFile({\n      path: getSourceAgentFilePath(agentId),\n      ref: this.activeRefs.get(agentId),\n      content: `${stableStringify(filtered)}\\n`,\n      message,\n    });\n  }\n\n  private async loadHistory(agentId: string): Promise<void> {\n    if (this.loadedHistory.has(agentId)) return;\n\n    const capabilities = await this.provider.getCapabilities();\n    if (!capabilities.canListHistory) {\n      this.loadedHistory.add(agentId);\n      return;\n    }\n\n    const activeRef = this.activeRefs.get(agentId);\n    const entries = await this.provider.listFileHistory({ path: getSourceAgentFilePath(agentId), ref: activeRef });\n    const orderedEntries = [...entries].reverse();\n    const versions = new Map<string, AgentVersion>();\n    let versionNumber = 0;\n    for (const entry of orderedEntries) {\n      const file = await this.provider.readFile({ path: getSourceAgentFilePath(agentId), ref: entry.ref ?? entry.id });\n      if (!file) continue;\n      const snapshot = parseJsonObject(file.content);\n      if (!snapshot) continue;\n      versionNumber += 1;\n      const version = this.versionFromHistoryEntry(agentId, entry, versionNumber, snapshot);\n      versions.set(version.id, version);\n    }\n    for (const [versionId, version] of versions) {\n      this.providerVersions.set(versionId, version);\n    }\n    this.loadedHistory.add(agentId);\n  }\n\n  private rememberProviderVersion(agentId: string, version: AgentVersion, result: SourceWriteResult): void {\n    const versionId = result.commitSha ? `${SOURCE_VERSION_PREFIX}${result.commitSha}:${agentId}` : version.id;\n    this.providerVersions.set(versionId, {\n      ...structuredClone(version),\n      id: versionId,\n      agentId,\n      versionNumber: this.nextProviderVersionNumber(agentId),\n    });\n  }\n\n  private versionFromHistoryEntry(\n    agentId: string,\n    entry: SourceFileHistoryEntry,\n    versionNumber: number,\n    snapshot: Record<string, unknown>,\n  ): AgentVersion {\n    return {\n      id: `${SOURCE_VERSION_PREFIX}${entry.id}:${agentId}`,\n      agentId,\n      versionNumber,\n      changeMessage: entry.message,\n      ...snapshot,\n      createdAt: new Date(entry.createdAt),\n    } as AgentVersion;\n  }\n\n  private nextProviderVersionNumber(agentId: string): number {\n    const latest = [...this.providerVersions.values()]\n      .filter(version => version.agentId === agentId)\n      .sort((a, b) => b.versionNumber - a.versionNumber)[0];\n    return (latest?.versionNumber ?? 0) + 1;\n  }\n\n  private sortVersions(\n    versions: AgentVersion[],\n    field: VersionOrderBy,\n    direction: VersionSortDirection,\n  ): AgentVersion[] {\n    return versions.sort((a, b) => {\n      const aVal = field === 'createdAt' ? a.createdAt.getTime() : a.versionNumber;\n      const bVal = field === 'createdAt' ? b.createdAt.getTime() : b.versionNumber;\n      return direction === 'ASC' ? aVal - bVal : bVal - aVal;\n    });\n  }\n}\n"]}