{"version":3,"file":"build-Dit9VFE2.cjs","names":["normalizeExternals","bundleExternals","slash","getPackageName","pkg","slash","getWorkspaceInformation","posix","analyzeBundle","noopLogger","getPackageName","getBundlerInputOptions","tsConfigPaths","aliasHono","nodeModulesExtensionResolver","checkConfigExport","extractMastraOption","path","slash","MAX_FS_SUBAGENT_DEPTH","slash","posix"],"sources":["../src/build/plugins/workspace-deps-watcher.ts","../src/build/watcher.ts","../src/build/analyzeEntryProjectType.ts","../src/build/serverOptions.ts","../src/build/fs-routing/discover.ts","../src/build/fs-routing/codegen.ts","../src/build/fs-routing/prepare.ts","../src/build/fs-routing/mirror.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { stat } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport type { Plugin } from 'rollup';\nimport { glob } from 'tinyglobby';\nimport type { WorkspacePackageInfo } from '../../bundler/workspaceDependencies';\nimport { bundleExternals } from '../analyze/bundleExternals';\nimport { normalizeExternals } from '../analyze/externals';\nimport type { BundlerOptions, DependencyMetadata } from '../types';\nimport type { BundlerPlatform } from '../utils';\nimport { getCompiledDepCachePath, getPackageName, slash } from '../utils';\n\nconst SOURCE_GLOBS = ['**/*.{ts,tsx,js,jsx,mjs,cjs,json}'];\nconst SOURCE_IGNORE = ['**/node_modules/**', '**/.cache/**'];\n\nexport type WorkspaceDepsWatcherOptions = {\n  depsToOptimize: Map<string, DependencyMetadata>;\n  /**\n   * Optimized dependency → relative cache file path (from analyzeBundle.dependencies).\n   * Used to detect missing cache files that must be regenerated.\n   */\n  optimizedDependencyFiles: Map<string, string>;\n  workspaceMap: Map<string, WorkspacePackageInfo>;\n  workspaceRoot: string;\n  outputDir: string;\n  platform: BundlerPlatform;\n  bundlerOptions?: Pick<BundlerOptions, 'externals' | 'enableSourcemap' | 'dynamicPackages'> | null;\n};\n\n/**\n * During `mastra dev`, workspace packages are pre-transpiled into\n * `<pkg>/node_modules/.cache/*.mjs` and marked external in the main Rollup\n * watch graph. This plugin:\n * 1. Watches the original workspace package sources so edits trigger rebuilds.\n * 2. Regenerates the optimized `.cache` outputs when those sources change (or\n *    when cache files are missing) before the rebuild finishes — so a later\n *    server restart loads fresh package code.\n */\nexport function workspaceDepsWatcher(options: WorkspaceDepsWatcherOptions): Plugin {\n  const { depsToOptimize, optimizedDependencyFiles, workspaceMap, workspaceRoot, outputDir, platform, bundlerOptions } =\n    options;\n\n  let isFirstBuild = true;\n\n  const usedPackageRoots = collectUsedPackageRoots(depsToOptimize, workspaceMap);\n  const cachePaths = collectAbsoluteCachePaths(optimizedDependencyFiles, workspaceRoot);\n\n  return {\n    name: 'workspace-deps-watcher',\n    async buildStart() {\n      const sourceFiles = await discoverWorkspaceSourceFiles(usedPackageRoots);\n\n      for (const file of sourceFiles) {\n        this.addWatchFile(resolve(file));\n      }\n\n      // Initial optimize already ran in getWatcherInputOptions / analyzeBundle.\n      if (isFirstBuild) {\n        isFirstBuild = false;\n        return;\n      }\n\n      const needsReoptimize = await isWorkspaceOutputStale(sourceFiles, cachePaths);\n\n      if (!needsReoptimize) {\n        return;\n      }\n\n      // bundleExternals may mutate the map when externalsPreset is true; copy first.\n      const depsCopy = cloneDepsToOptimize(depsToOptimize);\n\n      const { externalsPreset, mergedExternals } = normalizeExternals(bundlerOptions?.externals ?? true);\n\n      await bundleExternals(depsCopy, outputDir, {\n        bundlerOptions: {\n          externalsPreset,\n          mergedExternals,\n          isDev: true,\n        },\n        projectRoot: workspaceRoot,\n        workspaceRoot,\n        workspaceMap,\n        platform,\n      });\n    },\n  };\n}\n\nfunction collectUsedPackageRoots(\n  depsToOptimize: Map<string, DependencyMetadata>,\n  workspaceMap: Map<string, WorkspacePackageInfo>,\n): string[] {\n  const roots = new Set<string>();\n\n  for (const [dep, metadata] of depsToOptimize.entries()) {\n    if (!metadata.isWorkspace) {\n      continue;\n    }\n\n    if (metadata.rootPath) {\n      roots.add(slash(metadata.rootPath));\n      continue;\n    }\n\n    const pkgName = getPackageName(dep);\n    const location = pkgName ? workspaceMap.get(pkgName)?.location : undefined;\n    if (location) {\n      roots.add(slash(location));\n    }\n  }\n\n  return Array.from(roots);\n}\n\nfunction collectAbsoluteCachePaths(optimizedDependencyFiles: Map<string, string>, workspaceRoot: string): string[] {\n  return Array.from(optimizedDependencyFiles.values()).map(relativePath => resolve(workspaceRoot, relativePath));\n}\n\nasync function discoverWorkspaceSourceFiles(packageRoots: string[]): Promise<string[]> {\n  if (packageRoots.length === 0) {\n    return [];\n  }\n\n  const files = await Promise.all(\n    packageRoots.map(root =>\n      glob(SOURCE_GLOBS, {\n        cwd: root,\n        absolute: true,\n        ignore: SOURCE_IGNORE,\n        onlyFiles: true,\n      }),\n    ),\n  );\n\n  return files.flat();\n}\n\nasync function isCacheMissing(cachePaths: string[]): Promise<boolean> {\n  for (const cachePath of cachePaths) {\n    if (!existsSync(cachePath)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nasync function isWorkspaceOutputStale(sourceFiles: string[], cachePaths: string[]): Promise<boolean> {\n  if (await isCacheMissing(cachePaths)) {\n    return true;\n  }\n\n  let cacheBaselineMs = 0;\n  for (const cachePath of cachePaths) {\n    try {\n      const { mtimeMs } = await stat(cachePath);\n      cacheBaselineMs = Math.max(cacheBaselineMs, mtimeMs);\n    } catch {\n      return true;\n    }\n  }\n\n  for (const file of sourceFiles) {\n    try {\n      const { mtimeMs } = await stat(file);\n      if (mtimeMs > cacheBaselineMs) {\n        return true;\n      }\n    } catch {\n      // File may have been deleted; treat as dirty so we re-optimize.\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction cloneDepsToOptimize(deps: Map<string, DependencyMetadata>): Map<string, DependencyMetadata> {\n  const copy = new Map<string, DependencyMetadata>();\n  for (const [dep, metadata] of deps.entries()) {\n    copy.set(dep, {\n      ...metadata,\n      exports: [...metadata.exports],\n    });\n  }\n  return copy;\n}\n\n/**\n * On-disk cache entry path for a workspace dependency after optimization.\n * Naming matches createVirtualDependencies: dep.replaceAll('/', '__').\n */\nexport function getWorkspaceDepCacheEntryPath(rootPath: string, dep: string): string {\n  const fileName = dep.replaceAll('/', '__');\n  return `${getCompiledDepCachePath(rootPath, fileName)}.mjs`;\n}\n","import { dirname, posix } from 'node:path';\nimport { noopLogger } from '@mastra/core/logger';\nimport * as pkg from 'empathic/package';\nimport type { InputOptions, OutputOptions, Plugin } from 'rollup';\nimport { watch } from 'rollup';\nimport { getWorkspaceInformation } from '../bundler/workspaceDependencies';\nimport { analyzeBundle } from './analyze';\nimport { getInputOptions as getBundlerInputOptions } from './bundler';\nimport { aliasHono } from './plugins/hono-alias';\nimport { nodeModulesExtensionResolver } from './plugins/node-modules-extension-resolver';\nimport { tsConfigPaths } from './plugins/tsconfig-paths';\nimport { workspaceDepsWatcher } from './plugins/workspace-deps-watcher';\nimport type { BundlerOptions } from './types';\nimport { getPackageName, slash } from './utils';\nimport type { BundlerPlatform } from './utils';\n\nexport async function getInputOptions(\n  entryFile: string,\n  platform: BundlerPlatform,\n  env?: Record<string, string>,\n  {\n    sourcemap = false,\n    bundlerOptions = {\n      enableSourcemap: false,\n      // `mastra dev` never minifies — readable output matters more than size here.\n      enableMinify: false,\n      enableEsmShim: true,\n      externals: true,\n    },\n    analysisEntries = [entryFile],\n  }: { sourcemap?: boolean; bundlerOptions?: BundlerOptions; analysisEntries?: string[] } = {},\n) {\n  const closestPkgJson = pkg.up({ cwd: dirname(entryFile) });\n  const projectRoot = closestPkgJson ? dirname(slash(closestPkgJson)) : slash(process.cwd());\n  const { workspaceMap, workspaceRoot } = await getWorkspaceInformation({ mastraEntryFile: entryFile });\n\n  const outputDir = posix.join(process.cwd(), '.mastra', '.build');\n\n  const analyzeEntryResult = await analyzeBundle(\n    analysisEntries,\n    entryFile,\n    {\n      outputDir,\n      projectRoot: workspaceRoot || process.cwd(),\n      platform,\n      isDev: true,\n      bundlerOptions,\n    },\n    noopLogger,\n  );\n\n  const deps = /* @__PURE__ */ new Map();\n  for (const [dep, metadata] of analyzeEntryResult.dependencies.entries()) {\n    const pkgName = getPackageName(dep);\n    if (pkgName && workspaceMap.has(pkgName)) {\n      deps.set(dep, metadata);\n    }\n  }\n\n  const inputOptions = await getBundlerInputOptions(\n    entryFile,\n    {\n      dependencies: deps,\n      externalDependencies: new Map(),\n      workspaceMap,\n    },\n    platform,\n    env,\n    { sourcemap, isDev: true, workspaceRoot, projectRoot, externalsPreset: bundlerOptions?.externals === true },\n  );\n\n  if (Array.isArray(inputOptions.plugins)) {\n    // filter out node-resolve plugin so all node_modules are external\n    // and tsconfig-paths plugin as we are injection a custom one\n    const plugins = [] as Plugin[];\n    inputOptions.plugins.forEach(plugin => {\n      if ((plugin as Plugin | undefined)?.name === 'node-resolve') {\n        return;\n      }\n\n      if ((plugin as Plugin | undefined)?.name === 'tsconfig-paths') {\n        plugins.push(\n          tsConfigPaths({\n            localResolve: true,\n          }),\n        );\n        return;\n      }\n\n      plugins.push(plugin as Plugin);\n    });\n\n    inputOptions.plugins = plugins;\n    inputOptions.plugins.push(aliasHono());\n    // fixes imports like lodash/fp/get\n    inputOptions.plugins.push(nodeModulesExtensionResolver());\n\n    const depsToOptimize = analyzeEntryResult.depsToOptimize;\n    const resolvedWorkspaceRoot = analyzeEntryResult.workspaceRoot || workspaceRoot;\n    if (depsToOptimize?.size && resolvedWorkspaceRoot) {\n      inputOptions.plugins.push(\n        workspaceDepsWatcher({\n          depsToOptimize,\n          optimizedDependencyFiles: deps,\n          workspaceMap,\n          workspaceRoot: resolvedWorkspaceRoot,\n          outputDir: analyzeEntryResult.outputDir || outputDir,\n          platform,\n          bundlerOptions,\n        }),\n      );\n    }\n  }\n\n  return inputOptions;\n}\n\nexport async function createWatcher(inputOptions: InputOptions, outputOptions: OutputOptions) {\n  const watcher = await watch({\n    ...inputOptions,\n    output: {\n      ...outputOptions,\n      format: 'esm',\n      entryFileNames: '[name].mjs',\n      chunkFileNames: '[name].mjs',\n    },\n  });\n\n  return watcher;\n}\n","import { readFile } from 'node:fs/promises';\nimport { transformAsync } from '@babel/core';\nimport { checkConfigExport } from './babel/check-config-export';\n\n/**\n * Lightweight entry analysis that returns the detected project type by running\n * only the Babel check-config-export plugin on the Mastra entry file. This is\n * intentionally cheaper than `analyzeBundle` and is used by the CLI before\n * `prepare()` clears `.mastra` to decide whether Factory-specific assets\n * should be copied.\n *\n * Returns `'factory'` when the entry imports `MastraFactory` and\n * constructs it, or `undefined` for ordinary Mastra projects.\n */\nexport async function analyzeEntryProjectType(mastraEntry: string): Promise<string | undefined> {\n  const code = await readFile(mastraEntry, 'utf-8');\n  const result: { hasValidConfig: boolean; projectType?: string } = { hasValidConfig: false };\n\n  await transformAsync(code, {\n    filename: mastraEntry,\n    presets: [import.meta.resolve('@babel/preset-typescript')],\n    plugins: [() => checkConfigExport(result)],\n  });\n\n  return result.projectType;\n}\n","import type { IMastraLogger } from '@mastra/core/logger';\nimport type { Config } from '@mastra/core/mastra';\nimport { extractMastraOption, extractMastraOptionBundler } from './shared/extract-mastra-option';\n\nexport function getServerOptionsBundler(\n  entryFile: string,\n  result: {\n    hasCustomConfig: false;\n  },\n) {\n  return extractMastraOptionBundler('server', entryFile, result);\n}\n\nexport async function getServerOptions(\n  entryFile: string,\n  outputDir: string,\n  logger?: IMastraLogger,\n): Promise<Config['server'] | null> {\n  const result = await extractMastraOption('server', entryFile, outputDir, logger);\n  if (!result) {\n    return null;\n  }\n\n  return result.getConfig();\n}\n","import { lstat, readdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { MAX_FS_SUBAGENT_DEPTH } from '@mastra/core/agent';\nimport type { AgentSchedulePromptDefinition } from '@mastra/core/schedules';\nimport matter from 'gray-matter';\nimport { slash } from '../utils';\n\n/**\n * A file-system routed agent directory discovered under `<mastraDir>/agents/`.\n * All paths are absolute and slash-normalized so they can be embedded into\n * generated module source on any platform.\n */\nexport interface DiscoveredFsAgent {\n  /** Agent directory name. Used as the default `id`/`name`. */\n  name: string;\n  /** Absolute, slash-normalized path to the agent directory. */\n  dir: string;\n  /** Absolute path to `config.ts`/`config.js`, if present. */\n  configPath?: string;\n  /** Absolute path to `instructions.md`, if present. */\n  instructionsPath?: string;\n  /**\n   * Absolute path to `instructions.ts`/`instructions.js`, if present. Unlike\n   * `instructions.md` (whose contents are inlined at build time), this module is\n   * imported by the generated wrapper, so it can compute its prompt or export a\n   * runtime-resolved function.\n   */\n  instructionsModulePath?: string;\n  /** Absolute path to `workspace.ts`/`workspace.js`, if present. */\n  workspacePath?: string;\n  /** Absolute path to `memory.ts`/`memory.js`, if present. */\n  memoryPath?: string;\n  /**\n   * Absolute, slash-normalized path to an authored `workspace/` directory of\n   * seed files, if present. These are mirrored into the deployed workspace at\n   * build time (Eve parity) so the agent starts with them on disk.\n   */\n  workspaceSeedDir?: string;\n  /** Tools discovered under `tools/`, in stable (sorted) order. */\n  tools: { key: string; path: string }[];\n  /** Input processors discovered under `processors/input/`, in stable (sorted) order. */\n  inputProcessors: { key: string; path: string }[];\n  /** Output processors discovered under `processors/output/`, in stable (sorted) order. */\n  outputProcessors: { key: string; path: string }[];\n  /** Scorers discovered under `scorers/`, in stable (sorted) order. */\n  scorers: { key: string; path: string }[];\n  /** Skills discovered under `skills/`, in stable (sorted) order. */\n  skills: DiscoveredFsSkill[];\n  /**\n   * Schedules discovered under `schedules/`, in stable (path-sorted) order.\n   * Nested files keep their relative path in `key` (`billing/sweep.ts` →\n   * `billing/sweep`) so a schedule's identity is stable across builds.\n   */\n  schedules: DiscoveredFsSchedule[];\n  /**\n   * Declared subagents discovered under `subagents/`, in stable (sorted) order.\n   * Subagents may declare their own `subagents/`, up to `MAX_FS_SUBAGENT_DEPTH`\n   * levels below the top-level agent; deeper `subagents/` directories are\n   * ignored with a warning.\n   */\n  subagents: DiscoveredFsAgent[];\n}\n\n/**\n * A skill discovered under `agents/<name>/skills/`.\n *\n * - `kind: 'module'` — a `.ts`/`.js` file whose default export is a `createSkill(...)`\n *   result. Codegen imports it directly; `name`/`description`/`instructions` are\n *   unknown at discovery time and resolved at runtime from the module.\n * - `kind: 'packaged'` — a `SKILL.md` (optionally with a `references/` subdir) or a\n *   flat `<skill>.md`. Codegen inlines it via `createSkill(...)` using the parsed\n *   fields below so the deployed bundle carries no filesystem dependency.\n */\nexport type DiscoveredFsSkill =\n  | {\n      kind: 'module';\n      /** Absolute, slash-normalized path to the `.ts`/`.js` skill module. */\n      path: string;\n    }\n  | {\n      kind: 'packaged';\n      name: string;\n      description: string;\n      instructions: string;\n      /** Reference file contents keyed by relative path (from `references/`). */\n      references: Record<string, string>;\n    };\n\n/**\n * A schedule discovered under `agents/<name>/schedules/`.\n *\n * - `kind: 'module'` — a `.ts`/`.js` file whose default export is a\n *   `defineSchedule(...)` result. Codegen imports it directly, which is what\n *   makes handler mode possible: the handler is a live function, not data.\n * - `kind: 'markdown'` — a `.md` file with cron frontmatter and the document\n *   body as the prompt. Codegen inlines it so the bundle carries no filesystem\n *   dependency.\n */\nexport type DiscoveredFsSchedule =\n  | {\n      kind: 'module';\n      /** Path-derived identity relative to `schedules/`, extension stripped. */\n      key: string;\n      /** Absolute, slash-normalized path to the `.ts`/`.js` schedule module. */\n      path: string;\n    }\n  | {\n      kind: 'markdown';\n      key: string;\n      /**\n       * Absolute, slash-normalized path to the `.md` file. Its contents are\n       * inlined at build time, so the dev watcher has to watch this path\n       * explicitly — nothing imports it.\n       */\n      path: string;\n      /** Parsed frontmatter fields plus the body as `prompt`. */\n      definition: MarkdownScheduleDefinition;\n    };\n\n/**\n * A markdown schedule is always prompt mode — the document body is the prompt\n * and handler mode needs a function, so it needs a `.ts`/`.js` module. Reuses core's\n * definition type so the two can't drift; core validates the parsed result\n * during agent assembly.\n */\nexport type MarkdownScheduleDefinition = AgentSchedulePromptDefinition;\n\n/**\n * Frontmatter keys a markdown schedule may set, in the order they are copied\n * onto the definition. Anything outside this list fails the build rather than\n * being silently dropped — a schedule that quietly ignores half its config is\n * worse than one that refuses to build.\n *\n * The `satisfies` binds this list to core's definition type, so renaming or\n * removing a field there breaks the build here instead of silently rejecting\n * frontmatter that used to be valid. (`prompt` is excluded because the document\n * body supplies it, `handler` because markdown can't carry a function.)\n */\nconst MARKDOWN_SCHEDULE_KEYS = [\n  'cron',\n  'timezone',\n  'name',\n  'threadId',\n  'resourceId',\n  'signalType',\n  'tagName',\n  'attributes',\n  'providerOptions',\n  'ifActive',\n  'ifIdle',\n  'status',\n  'metadata',\n] as const satisfies readonly (keyof Omit<AgentSchedulePromptDefinition, 'prompt' | 'handler'>)[];\n\nconst CONFIG_BASENAMES = ['config.ts', 'config.js'];\nconst WORKSPACE_BASENAMES = ['workspace.ts', 'workspace.js'];\nconst MEMORY_BASENAMES = ['memory.ts', 'memory.js'];\nconst INSTRUCTIONS_BASENAME = 'instructions.md';\nconst INSTRUCTIONS_MODULE_BASENAMES = ['instructions.ts', 'instructions.js'];\nconst TOOL_EXTENSIONS = ['.ts', '.js'];\nconst SCHEDULE_MODULE_EXTENSIONS = ['.ts', '.js'];\nconst SKILL_MODULE_EXTENSIONS = ['.ts', '.js'];\nconst SKILL_MD_BASENAME = 'SKILL.md';\n\n/**\n * Presence check that does NOT follow symlinks. Returns `false` for symlinks\n * (and broken links) so a symlinked `config.ts`/`instructions.md`/\n * `instructions.ts`/`workspace.ts`/`memory.ts` is never inlined or imported\n * into the generated bundle.\n */\nasync function exists(path: string): Promise<boolean> {\n  try {\n    return !(await lstat(path)).isSymbolicLink();\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Returns the slash-normalized path when `path` is a real directory (not a\n * symlink). Symlinked directories are rejected to prevent the build from\n * following links out of the project tree during discovery.\n */\nasync function realDirectory(path: string): Promise<string | undefined> {\n  try {\n    const info = await lstat(path);\n    if (info.isDirectory() && !info.isSymbolicLink()) {\n      return slash(path);\n    }\n  } catch {\n    // not present\n  }\n  return undefined;\n}\n\nasync function directoryExists(path: string): Promise<string | undefined> {\n  return realDirectory(path);\n}\n\nasync function firstExisting(dir: string, basenames: string[]): Promise<string | undefined> {\n  for (const basename of basenames) {\n    const candidate = join(dir, basename);\n    if (await exists(candidate)) {\n      return slash(candidate);\n    }\n  }\n  return undefined;\n}\n\nfunction isTestFile(basename: string): boolean {\n  return /\\.(test|spec)\\.(ts|js)$/.test(basename);\n}\n\nfunction toolKey(basename: string): string {\n  return basename.replace(/\\.(ts|js)$/, '');\n}\n\n/**\n * Discover default-exporting `.ts`/`.js` modules directly under `dir`, returning\n * `{ key, path }` entries in stable (sorted) order. Test files, symlinks, and\n * subdirectories are skipped: a symlinked module could point anywhere on the\n * build machine and be embedded into generated import code. Shared by the\n * `tools/` and `scorers/` scanners.\n */\nasync function discoverModuleDir(dir: string): Promise<{ key: string; path: string }[]> {\n  if (!(await exists(dir))) {\n    return [];\n  }\n\n  let entries: string[];\n  try {\n    entries = await readdir(dir);\n  } catch {\n    return [];\n  }\n\n  const modules: { key: string; path: string }[] = [];\n  for (const basename of entries.sort()) {\n    if (isTestFile(basename)) {\n      continue;\n    }\n    if (!TOOL_EXTENSIONS.some(ext => basename.endsWith(ext))) {\n      continue;\n    }\n    const path = join(dir, basename);\n    // Use lstat so symlinks are detected (not followed). Skip symlinks and\n    // directories: a symlinked module file could point anywhere on the build\n    // machine and be embedded into generated import code.\n    const stats = await lstat(path);\n    if (stats.isSymbolicLink() || stats.isDirectory()) {\n      continue;\n    }\n    modules.push({ key: toolKey(basename), path: slash(path) });\n  }\n\n  return modules;\n}\n\nasync function discoverTools(toolsDir: string): Promise<DiscoveredFsAgent['tools']> {\n  return discoverModuleDir(toolsDir);\n}\n\nasync function discoverProcessors(\n  processorsDir: string,\n): Promise<{ input: { key: string; path: string }[]; output: { key: string; path: string }[] }> {\n  const result = { input: [] as { key: string; path: string }[], output: [] as { key: string; path: string }[] };\n\n  for (const type of ['input', 'output'] as const) {\n    const typeDir = join(processorsDir, type);\n    if (!(await exists(typeDir))) {\n      continue;\n    }\n\n    let entries: string[];\n    try {\n      entries = await readdir(typeDir);\n    } catch {\n      continue;\n    }\n\n    for (const basename of entries.sort()) {\n      if (isTestFile(basename)) {\n        continue;\n      }\n      if (!TOOL_EXTENSIONS.some(ext => basename.endsWith(ext))) {\n        continue;\n      }\n      const path = join(typeDir, basename);\n      const stats = await lstat(path);\n      if (stats.isSymbolicLink() || stats.isDirectory()) {\n        continue;\n      }\n      result[type].push({ key: toolKey(basename), path: slash(path) });\n    }\n  }\n\n  return result;\n}\n\nasync function readReferences(referencesDir: string): Promise<Record<string, string>> {\n  if (!(await exists(referencesDir))) {\n    return {};\n  }\n  const references: Record<string, string> = {};\n  let entries: string[];\n  try {\n    entries = await readdir(referencesDir);\n  } catch {\n    return {};\n  }\n  for (const basename of entries.sort()) {\n    const path = join(referencesDir, basename);\n    // Use lstat so symlinks are detected (not followed). Skip symlinks: a\n    // symlink under `references/` could point anywhere on the build machine and\n    // silently embed arbitrary file contents into the generated bundle.\n    const stats = await lstat(path);\n    if (stats.isSymbolicLink() || stats.isDirectory()) {\n      continue;\n    }\n    references[basename] = await readFile(path, 'utf-8');\n  }\n  return references;\n}\n\nasync function parsePackagedSkill(\n  skillMdPath: string,\n  fallbackName: string,\n  references: Record<string, string> = {},\n): Promise<Extract<DiscoveredFsSkill, { kind: 'packaged' }>> {\n  const raw = await readFile(skillMdPath, 'utf-8');\n  const parsed = matter(raw);\n  const frontmatter = parsed.data as { name?: string; description?: string };\n  const name = frontmatter.name ?? fallbackName;\n  const description = frontmatter.description;\n\n  if (!description) {\n    throw new Error(\n      `Skill \"${name}\" in ${skillMdPath} is missing a required \"description\". ` +\n        `Add a YAML frontmatter block with a \"description:\" field. ` +\n        `See https://agentskills.io/specification for the SKILL.md format.`,\n    );\n  }\n\n  const instructions = parsed.content.trim();\n  return { kind: 'packaged', name, description, instructions, references };\n}\n\nfunction skillModuleName(basename: string): string {\n  return basename.replace(/\\.(ts|js)$/, '');\n}\n\nasync function discoverSkills(skillsDir: string): Promise<DiscoveredFsSkill[]> {\n  if (!(await exists(skillsDir))) {\n    return [];\n  }\n\n  let entries: string[];\n  try {\n    entries = await readdir(skillsDir);\n  } catch {\n    return [];\n  }\n\n  const skills: DiscoveredFsSkill[] = [];\n  for (const basename of entries.sort()) {\n    if (isTestFile(basename)) {\n      continue;\n    }\n    const path = join(skillsDir, basename);\n    // Use lstat so symlinks are detected (not followed). Skip symlinks: a\n    // symlinked skill module/markdown could point anywhere on the build machine\n    // and be bundled or inlined into the generated output.\n    const stats = await lstat(path);\n    if (stats.isSymbolicLink()) {\n      continue;\n    }\n    const isDir = stats.isDirectory();\n\n    // Packaged skill directory: <skill>/SKILL.md (+ references/)\n    if (isDir) {\n      const skillMd = join(path, SKILL_MD_BASENAME);\n      if (await exists(skillMd)) {\n        const references = await readReferences(join(path, 'references'));\n        skills.push(await parsePackagedSkill(skillMd, skillModuleName(basename), references));\n      }\n      continue;\n    }\n\n    // createSkill module: <skill>.ts | <skill>.js\n    if (SKILL_MODULE_EXTENSIONS.some(ext => basename.endsWith(ext))) {\n      skills.push({ kind: 'module', path: slash(path) });\n      continue;\n    }\n\n    // Flat markdown skill: <skill>.md\n    if (basename.endsWith('.md')) {\n      const skill = await parsePackagedSkill(path, basename.replace(/\\.md$/, ''));\n      skills.push(skill);\n    }\n  }\n\n  return skills;\n}\n\n/**\n * Parse a markdown schedule: YAML frontmatter for the cron (and other JSON-safe\n * options), document body for the prompt.\n *\n * Throws a build error naming the file when `cron` is missing or the body is\n * empty — a schedule that can't fire is never what the author meant.\n */\nasync function parseMarkdownSchedule(path: string, key: string): Promise<MarkdownScheduleDefinition> {\n  const raw = await readFile(path, 'utf-8');\n\n  let parsed: ReturnType<typeof matter>;\n  try {\n    parsed = matter(raw);\n  } catch (error) {\n    // The most common cron form starts with `*`, which YAML reads as an alias\n    // indicator, so `cron: */5 * * * *` fails with an opaque parser error.\n    // Name the actual fix instead of surfacing that raw.\n    const detail = error instanceof Error ? error.message.split('\\n')[0] : String(error);\n    throw new Error(\n      `Schedule \"${key}\" in ${path} has invalid YAML frontmatter: ${detail}. ` +\n        `Cron expressions must be quoted (cron: \"*/5 * * * *\"), because a leading \"*\" is a YAML alias.`,\n    );\n  }\n\n  const frontmatter = (parsed.data ?? {}) as Record<string, unknown>;\n  const prompt = parsed.content.trim();\n\n  const unknown = Object.keys(frontmatter).filter(\n    field => !(MARKDOWN_SCHEDULE_KEYS as readonly string[]).includes(field),\n  );\n  if (unknown.length > 0) {\n    const hint = unknown.includes('prompt')\n      ? ` The document body is used as the prompt, so \"prompt\" cannot be set in frontmatter.`\n      : ` Supported fields: ${MARKDOWN_SCHEDULE_KEYS.join(', ')}. Handler mode requires a .ts or .js schedule.`;\n    throw new Error(`Schedule \"${key}\" in ${path} has unknown frontmatter field(s): ${unknown.join(', ')}.${hint}`);\n  }\n\n  if (!frontmatter.cron || typeof frontmatter.cron !== 'string') {\n    throw new Error(\n      `Schedule \"${key}\" in ${path} is missing a required \"cron\". ` +\n        `Add a YAML frontmatter block with a \"cron:\" field (e.g. cron: \"0 9 * * *\").`,\n    );\n  }\n\n  if (!prompt) {\n    throw new Error(\n      `Schedule \"${key}\" in ${path} has an empty body. ` +\n        `The document body is used as the prompt, so it cannot be blank.`,\n    );\n  }\n\n  const definition: Record<string, unknown> = { cron: frontmatter.cron, prompt };\n  for (const field of MARKDOWN_SCHEDULE_KEYS) {\n    if (field === 'cron') continue;\n    if (frontmatter[field] !== undefined) {\n      definition[field] = frontmatter[field];\n    }\n  }\n  return definition as unknown as MarkdownScheduleDefinition;\n}\n\n/**\n * Discover schedules under `agents/<name>/schedules/`, recursing into\n * subdirectories so a schedule's identity is its path relative to `schedules/`\n * with the extension stripped (`billing/sweep.ts` → `billing/sweep`).\n *\n * Test files and symlinks (files and directories alike) are skipped for the\n * same reason as the other scanners: a symlink could point anywhere on the\n * build machine and be embedded into generated import code.\n */\nasync function discoverSchedules(schedulesDir: string, prefix = ''): Promise<DiscoveredFsSchedule[]> {\n  if (!(await exists(schedulesDir))) {\n    return [];\n  }\n\n  let entries: string[];\n  try {\n    entries = await readdir(schedulesDir);\n  } catch {\n    return [];\n  }\n\n  const schedules: DiscoveredFsSchedule[] = [];\n  for (const basename of entries.sort()) {\n    const path = join(schedulesDir, basename);\n\n    let stats;\n    try {\n      stats = await lstat(path);\n    } catch {\n      continue;\n    }\n    if (stats.isSymbolicLink()) {\n      continue;\n    }\n\n    if (stats.isDirectory()) {\n      schedules.push(...(await discoverSchedules(path, `${prefix}${basename}/`)));\n      continue;\n    }\n\n    if (isTestFile(basename)) {\n      continue;\n    }\n\n    if (SCHEDULE_MODULE_EXTENSIONS.some(ext => basename.endsWith(ext))) {\n      schedules.push({\n        kind: 'module',\n        key: `${prefix}${basename.replace(/\\.(ts|js)$/, '')}`,\n        path: slash(path),\n      });\n      continue;\n    }\n\n    if (basename.endsWith('.md')) {\n      const key = `${prefix}${basename.replace(/\\.md$/, '')}`;\n      schedules.push({\n        kind: 'markdown',\n        key,\n        path: slash(path),\n        definition: await parseMarkdownSchedule(path, key),\n      });\n    }\n  }\n\n  // Sort by key, not by traversal order. Sorting basenames only orders each\n  // directory: given `a.ts` alongside a directory `a/`, `a` sorts before\n  // `a.ts`, so recursion emits `a/job` before `a`. Codegen order follows this\n  // list, so a global sort is what actually makes it path-sorted and stable.\n  return schedules.sort((left, right) => (left.key < right.key ? -1 : left.key > right.key ? 1 : 0));\n}\n\n/**\n * Discover a single agent directory: its `config`/`instructions`/`workspace`\n * files plus `tools/`, `skills/`, and declared `subagents/`. Returns\n * `undefined` when `dir` is not an agent directory (no `config.(ts|js)`, no\n * `instructions.md`, and no `instructions.(ts|js)`).\n *\n * `depth` is the subagent nesting level (`0` for top-level agents). Discovery\n * recurses into `subagents/` until `MAX_FS_SUBAGENT_DEPTH`; deeper directories\n * are ignored with a warning.\n */\nasync function discoverAgentDir(\n  dir: string,\n  name: string,\n  depth: number,\n  onWarn?: (message: string) => void,\n): Promise<DiscoveredFsAgent | undefined> {\n  const configPath = await firstExisting(dir, CONFIG_BASENAMES);\n  const instructionsPath = (await exists(join(dir, INSTRUCTIONS_BASENAME)))\n    ? slash(join(dir, INSTRUCTIONS_BASENAME))\n    : undefined;\n  const instructionsModulePath = await firstExisting(dir, INSTRUCTIONS_MODULE_BASENAMES);\n\n  // Not an agent directory unless it has a config or instructions file.\n  if (!configPath && !instructionsPath && !instructionsModulePath) {\n    return undefined;\n  }\n\n  const workspacePath = await firstExisting(dir, WORKSPACE_BASENAMES);\n  const memoryPath = await firstExisting(dir, MEMORY_BASENAMES);\n  const workspaceSeedDir = await directoryExists(join(dir, 'workspace'));\n  const tools = await discoverTools(join(dir, 'tools'));\n  const processors = await discoverProcessors(join(dir, 'processors'));\n  const scorers = await discoverModuleDir(join(dir, 'scorers'));\n  const skills = await discoverSkills(join(dir, 'skills'));\n  const schedules = await discoverSchedules(join(dir, 'schedules'));\n  const subagents = await discoverSubagents(dir, depth, onWarn);\n\n  return {\n    name,\n    dir: slash(dir),\n    configPath,\n    instructionsPath,\n    instructionsModulePath,\n    workspacePath,\n    memoryPath,\n    workspaceSeedDir,\n    tools,\n    inputProcessors: processors.input,\n    outputProcessors: processors.output,\n    scorers,\n    skills,\n    schedules,\n    subagents,\n  };\n}\n\n/**\n * Discover declared subagents under `<dir>/subagents/*`. `parentDepth` is the\n * parent agent's nesting level (`0` for top-level agents). Discovery recurses\n * until `MAX_FS_SUBAGENT_DEPTH` levels of subagents; a `subagents/` directory\n * that would exceed the cap is skipped with a warning.\n */\nasync function discoverSubagents(\n  parentDir: string,\n  parentDepth: number,\n  onWarn?: (message: string) => void,\n): Promise<DiscoveredFsAgent[]> {\n  const subagentsDir = join(parentDir, 'subagents');\n  if (!(await exists(subagentsDir))) {\n    return [];\n  }\n\n  if (parentDepth >= MAX_FS_SUBAGENT_DEPTH) {\n    onWarn?.(\n      `Ignoring subagents in \"${slash(subagentsDir)}\": subagents may only nest ${MAX_FS_SUBAGENT_DEPTH} levels below a top-level agent.`,\n    );\n    return [];\n  }\n\n  let entries: string[];\n  try {\n    entries = await readdir(subagentsDir);\n  } catch {\n    return [];\n  }\n\n  const subagents: DiscoveredFsAgent[] = [];\n  for (const name of entries.sort()) {\n    const dir = join(subagentsDir, name);\n    if (!(await realDirectory(dir))) {\n      continue;\n    }\n    const child = await discoverAgentDir(dir, name, parentDepth + 1, onWarn);\n    if (child) {\n      subagents.push(child);\n    }\n  }\n\n  return subagents;\n}\n\n/**\n * Scan `<mastraDir>/agents/*` for file-system routed agents. A directory is\n * treated as an agent only when it contains a `config.(ts|js)`, an\n * `instructions.md`, or an `instructions.(ts|js)`; other directories are\n * ignored. Each agent may declare `subagents/` up to `MAX_FS_SUBAGENT_DEPTH`\n * levels deep. Returns descriptors with absolute, slash-normalized paths ready\n * for codegen. Performs no module evaluation — only filesystem inspection.\n */\nexport async function discoverFsAgents(\n  mastraDir: string,\n  onWarn?: (message: string) => void,\n): Promise<DiscoveredFsAgent[]> {\n  const agentsDir = join(mastraDir, 'agents');\n  if (!(await exists(agentsDir))) {\n    return [];\n  }\n\n  let entries: string[];\n  try {\n    entries = await readdir(agentsDir);\n  } catch {\n    return [];\n  }\n\n  const discovered: DiscoveredFsAgent[] = [];\n  for (const name of entries.sort()) {\n    const dir = join(agentsDir, name);\n    if (!(await realDirectory(dir))) {\n      continue;\n    }\n    const agent = await discoverAgentDir(dir, name, 0, onWarn);\n    if (agent) {\n      discovered.push(agent);\n    }\n  }\n\n  return discovered;\n}\n\n/**\n * A file-system routed workflow file discovered under `<mastraDir>/workflows/`.\n * All paths are absolute and slash-normalized so they can be embedded into\n * generated module source on any platform.\n */\nexport interface DiscoveredFsWorkflow {\n  /** Workflow key derived from the filename (without extension). */\n  key: string;\n  /** Absolute, slash-normalized path to the workflow module. */\n  path: string;\n}\n\n/**\n * Scan `<mastraDir>/workflows/` for file-system routed workflow modules. Only\n * files whose source contains an `export default` are treated as fs-routed\n * workflows — this convention distinguishes them from workflow files that are\n * manually imported and registered programmatically. Returns descriptors with\n * absolute, slash-normalized paths ready for codegen. Performs no module\n * evaluation — only filesystem and source-text inspection.\n */\nexport async function discoverFsWorkflows(mastraDir: string): Promise<DiscoveredFsWorkflow[]> {\n  const workflowsDir = join(mastraDir, 'workflows');\n  if (!(await exists(workflowsDir))) {\n    return [];\n  }\n\n  let entries: string[];\n  try {\n    entries = await readdir(workflowsDir);\n  } catch {\n    return [];\n  }\n\n  const discovered: DiscoveredFsWorkflow[] = [];\n  for (const basename of entries.sort()) {\n    if (isTestFile(basename)) {\n      continue;\n    }\n    if (!TOOL_EXTENSIONS.some(ext => basename.endsWith(ext))) {\n      continue;\n    }\n    const path = join(workflowsDir, basename);\n    const stats = await lstat(path);\n    if (stats.isSymbolicLink() || stats.isDirectory()) {\n      continue;\n    }\n    // Convention: only files with `export default` are fs-routed workflows.\n    // Files using named exports are assumed to be manually imported.\n    const source = await readFile(path, 'utf-8');\n    if (!/\\bexport\\s+default\\b/.test(source)) {\n      continue;\n    }\n    discovered.push({ key: toolKey(basename), path: slash(path) });\n  }\n\n  return discovered;\n}\n\n/**\n * A discovered singleton config file under `<mastraDir>/`. All paths are\n * absolute and slash-normalized so they can be embedded into generated module\n * source on any platform.\n */\nexport interface DiscoveredFsSingleton {\n  /** Absolute, slash-normalized path to the singleton module. */\n  path: string;\n}\n\nconst SINGLETON_EXTENSIONS = ['.ts', '.js', '.mts', '.mjs'];\n\n/** Safe singleton identifier: no path separators, `..`, or other traversal. */\nconst SINGLETON_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;\n\n/**\n * Check for a singleton config file (e.g. `storage.ts`, `storage.js`) directly\n * under `<mastraDir>`. Returns the first matching file path or `undefined`.\n * Symlinks are rejected for security.\n *\n * Convention: only files with `export default` are fs-routed singletons. Files\n * using named exports are assumed to be manually imported into the user's\n * `index.ts`, so they are ignored to remain backward-compatible with existing\n * project structures.\n *\n * `name` must be a bare identifier — path separators and traversal sequences are\n * rejected so the lookup can never escape `<mastraDir>`.\n */\nexport async function discoverFsSingleton(mastraDir: string, name: string): Promise<DiscoveredFsSingleton | undefined> {\n  if (!SINGLETON_NAME_PATTERN.test(name)) {\n    throw new Error(`Invalid fs-singleton name ${JSON.stringify(name)}: expected a bare identifier.`);\n  }\n\n  for (const ext of SINGLETON_EXTENSIONS) {\n    const candidate = join(mastraDir, `${name}${ext}`);\n    try {\n      const stats = await lstat(candidate);\n      if (!stats.isFile() || stats.isSymbolicLink()) {\n        continue;\n      }\n      const source = await readFile(candidate, 'utf-8');\n      // Only files with a default export are fs-routed. A named-export file with\n      // this name is user-managed, so skip it and keep scanning other extensions.\n      if (!/\\bexport\\s+default\\b/.test(source)) {\n        continue;\n      }\n      return { path: slash(candidate) };\n    } catch {\n      // not present\n    }\n  }\n  return undefined;\n}\n","import { readFile } from 'node:fs/promises';\nimport type { DiscoveredFsAgent, DiscoveredFsSingleton, DiscoveredFsWorkflow } from './discover';\n\nfunction sanitizeIdentifier(name: string, prefix: string, index: string): string {\n  const cleaned = name.replace(/[^a-zA-Z0-9_$]/g, '_');\n  return `${prefix}_${index}_${cleaned}`;\n}\n\n/**\n * Emit the imports for a single discovered agent into `lines` and return the\n * source of its `assembleAgentFromFsEntry` entry object (the `{ name, config,\n * ... }` argument). `idPath` is a dot-free, unique path index (e.g. `0` for the\n * first top-level agent, `0_1` for its second subagent) used to keep generated\n * identifiers unique across the parent/child tree. `workspaceName` is the\n * slash-joined workspace key (`<parent>/<child>` for subagents) so seed files\n * don't collide. Discovered subagents are emitted recursively as a nested\n * `subagents: [...]` field (discovery already enforces the depth cap).\n */\nasync function emitAgentEntry(\n  agent: DiscoveredFsAgent,\n  idPath: string,\n  workspaceName: string,\n  lines: string[],\n): Promise<string> {\n  const configIdent = sanitizeIdentifier(agent.name, 'config', idPath);\n  const toolIdents: { key: string; ident: string }[] = [];\n\n  if (agent.configPath) {\n    lines.push(`import ${configIdent} from ${JSON.stringify(agent.configPath)};`);\n  }\n\n  let workspaceIdent: string | undefined;\n  if (agent.workspacePath) {\n    workspaceIdent = sanitizeIdentifier(`${agent.name}_workspace`, 'workspace', idPath);\n    lines.push(`import ${workspaceIdent} from ${JSON.stringify(agent.workspacePath)};`);\n  }\n\n  let memoryIdent: string | undefined;\n  if (agent.memoryPath) {\n    memoryIdent = sanitizeIdentifier(`${agent.name}_memory`, 'memory', idPath);\n    lines.push(`import ${memoryIdent} from ${JSON.stringify(agent.memoryPath)};`);\n  }\n\n  // `instructions.ts` is imported rather than inlined, so it can compute its\n  // prompt or export a runtime-resolved function. That also puts it in the\n  // bundler's module graph, which is what makes dev hot reload work without the\n  // watcher tracking it explicitly (unlike `instructions.md`).\n  let instructionsIdent: string | undefined;\n  if (agent.instructionsModulePath) {\n    instructionsIdent = sanitizeIdentifier(`${agent.name}_instructions`, 'instructions', idPath);\n    lines.push(`import ${instructionsIdent} from ${JSON.stringify(agent.instructionsModulePath)};`);\n  }\n\n  for (let t = 0; t < agent.tools.length; t++) {\n    const tool = agent.tools[t]!;\n    const ident = sanitizeIdentifier(`${agent.name}_${tool.key}`, 'tool', `${idPath}_${t}`);\n    lines.push(`import ${ident} from ${JSON.stringify(tool.path)};`);\n    toolIdents.push({ key: tool.key, ident });\n  }\n\n  const inputProcessorIdents: string[] = [];\n  for (let p = 0; p < agent.inputProcessors.length; p++) {\n    const proc = agent.inputProcessors[p]!;\n    const ident = sanitizeIdentifier(`${agent.name}_inputProc_${proc.key}`, 'proc', `${idPath}_ip${p}`);\n    lines.push(`import ${ident} from ${JSON.stringify(proc.path)};`);\n    inputProcessorIdents.push(ident);\n  }\n\n  const outputProcessorIdents: string[] = [];\n  for (let p = 0; p < agent.outputProcessors.length; p++) {\n    const proc = agent.outputProcessors[p]!;\n    const ident = sanitizeIdentifier(`${agent.name}_outputProc_${proc.key}`, 'proc', `${idPath}_op${p}`);\n    lines.push(`import ${ident} from ${JSON.stringify(proc.path)};`);\n    outputProcessorIdents.push(ident);\n  }\n\n  const scorerIdents: { key: string; ident: string }[] = [];\n  for (let s = 0; s < agent.scorers.length; s++) {\n    const scorer = agent.scorers[s]!;\n    const ident = sanitizeIdentifier(`${agent.name}_scorer_${scorer.key}`, 'scorer', `${idPath}_${s}`);\n    lines.push(`import ${ident} from ${JSON.stringify(scorer.path)};`);\n    scorerIdents.push({ key: scorer.key, ident });\n  }\n\n  // Skills: `createSkill(...)` modules are imported and used directly;\n  // packaged `SKILL.md` skills are inlined via `createSkill({...})`.\n  const skillExprs: string[] = [];\n  const agentSkills = agent.skills ?? [];\n  for (let s = 0; s < agentSkills.length; s++) {\n    const skill = agentSkills[s]!;\n    if (skill.kind === 'module') {\n      const ident = sanitizeIdentifier(`${agent.name}_skill`, 'skill', `${idPath}_${s}`);\n      lines.push(`import ${ident} from ${JSON.stringify(skill.path)};`);\n      skillExprs.push(ident);\n    } else {\n      const referenceFields = Object.entries(skill.references).map(\n        ([key, value]) => `${JSON.stringify(key)}: ${JSON.stringify(value)}`,\n      );\n      const skillFields = [\n        `name: ${JSON.stringify(skill.name)}`,\n        `description: ${JSON.stringify(skill.description)}`,\n        `instructions: ${JSON.stringify(skill.instructions)}`,\n      ];\n      if (referenceFields.length > 0) {\n        skillFields.push(`references: { ${referenceFields.join(', ')} }`);\n      }\n      skillExprs.push(`__createSkill({ ${skillFields.join(', ')} })`);\n    }\n  }\n\n  // Schedules: `.ts`/`.js` modules are imported so handler-mode schedules keep\n  // a live function; markdown schedules are inlined as plain data.\n  const scheduleExprs: string[] = [];\n  const agentSchedules = agent.schedules ?? [];\n  for (let s = 0; s < agentSchedules.length; s++) {\n    const schedule = agentSchedules[s]!;\n    const keyField = `key: ${JSON.stringify(schedule.key)}`;\n    if (schedule.kind === 'module') {\n      const ident = sanitizeIdentifier(`${agent.name}_schedule`, 'schedule', `${idPath}_${s}`);\n      lines.push(`import ${ident} from ${JSON.stringify(schedule.path)};`);\n      scheduleExprs.push(`{ ${keyField}, schedule: ${ident} }`);\n    } else {\n      scheduleExprs.push(`{ ${keyField}, schedule: ${JSON.stringify(schedule.definition)} }`);\n    }\n  }\n\n  let instructionsMd: string | undefined;\n  if (agent.instructionsPath) {\n    instructionsMd = await readFile(agent.instructionsPath, 'utf-8');\n  }\n\n  // Declared subagents. Each is itself an `assembleAgentFromFsEntry` entry\n  // object, recursively carrying its own `subagents`.\n  const subagentExprs: string[] = [];\n  for (let c = 0; c < agent.subagents.length; c++) {\n    const child = agent.subagents[c]!;\n    const childExpr = await emitAgentEntry(child, `${idPath}_${c}`, `${workspaceName}/${child.name}`, lines);\n    subagentExprs.push(childExpr);\n  }\n\n  const entryFields: string[] = [`name: ${JSON.stringify(agent.name)}`];\n  if (agent.configPath) {\n    entryFields.push(`config: ${configIdent}`);\n  }\n  if (instructionsIdent) {\n    entryFields.push(`instructions: ${instructionsIdent}`);\n  }\n  if (instructionsMd !== undefined) {\n    entryFields.push(`instructionsMd: ${JSON.stringify(instructionsMd)}`);\n  }\n  if (toolIdents.length > 0) {\n    const toolEntries = toolIdents.map(({ key, ident }) => `{ key: ${JSON.stringify(key)}, tool: ${ident} }`);\n    entryFields.push(`tools: [${toolEntries.join(', ')}]`);\n  }\n  if (skillExprs.length > 0) {\n    entryFields.push(`skills: [${skillExprs.join(', ')}]`);\n  }\n  if (inputProcessorIdents.length > 0) {\n    entryFields.push(`inputProcessors: [${inputProcessorIdents.join(', ')}]`);\n  }\n  if (outputProcessorIdents.length > 0) {\n    entryFields.push(`outputProcessors: [${outputProcessorIdents.join(', ')}]`);\n  }\n  if (scorerIdents.length > 0) {\n    const scorerEntries = scorerIdents.map(({ key, ident }) => `{ key: ${JSON.stringify(key)}, scorer: ${ident} }`);\n    entryFields.push(`scorers: [${scorerEntries.join(', ')}]`);\n  }\n  if (scheduleExprs.length > 0) {\n    entryFields.push(`schedules: [${scheduleExprs.join(', ')}]`);\n  }\n  if (subagentExprs.length > 0) {\n    entryFields.push(`subagents: [${subagentExprs.join(', ')}]`);\n  }\n  if (workspaceIdent) {\n    entryFields.push(`workspace: ${workspaceIdent}`);\n  }\n  if (memoryIdent) {\n    entryFields.push(`memory: ${memoryIdent}`);\n  }\n  // Default-on parity: every FS agent gets a default workspace (file + shell\n  // tools) rooted at a per-agent `workspace/` dir next to the bundle, unless\n  // config.ts or workspace.ts supplies one. Assembly applies the explicit >\n  // convention > default precedence. Subagents nest under `<parent>/<child>` so\n  // their seed directories never collide with the parent's.\n  entryFields.push(`defaultWorkspaceBasePath: __workspaceBasePath(${JSON.stringify(workspaceName)})`);\n\n  return `{ ${entryFields.join(', ')} }`;\n}\n\n/**\n * Generate the source of a wrapper module that:\n * 1. imports the user's real Mastra entry,\n * 2. imports each discovered `config.ts`, `instructions.ts`, `tools/*.ts`,\n *    `skills/*.ts` (`createSkill(...)` modules), `workspace.ts`, and\n *    `memory.ts`, inlining packaged `SKILL.md` skills,\n * 3. assembles `Agent` instances via `assembleAgentFromFsEntry`, wiring any\n *    declared `subagents/` into the parent (nested up to `MAX_FS_SUBAGENT_DEPTH`),\n * 4. registers them onto the user's `mastra` instance (code-registered agents\n *    win on name collisions), and\n * 5. re-exports everything from the user's entry so this module is a drop-in\n *    replacement for the original `#mastra` target.\n *\n * `instructions.md` is read into the generated wrapper. In dev, the CLI watcher\n * regenerates that wrapper when the markdown file changes. `instructions.ts` is\n * imported instead, so the bundler already tracks it through the module graph.\n *\n * @param userEntry slash-normalized absolute path to the user's mastra entry.\n * @param agents discovered fs-routed agents (absolute, slash-normalized paths).\n */\nexport async function generateFsAgentsModule(\n  userEntry: string | undefined,\n  agents: DiscoveredFsAgent[],\n  options?: {\n    workflows?: DiscoveredFsWorkflow[];\n    storage?: DiscoveredFsSingleton;\n    observability?: DiscoveredFsSingleton;\n    logger?: DiscoveredFsSingleton;\n    server?: DiscoveredFsSingleton;\n    studio?: DiscoveredFsSingleton;\n  },\n): Promise<string> {\n  const workflows = options?.workflows ?? [];\n  const storage = options?.storage;\n  const observability = options?.observability;\n  const logger = options?.logger;\n  const server = options?.server;\n  const studio = options?.studio;\n  const standalone = userEntry === undefined;\n  const lines: string[] = [];\n\n  const hasInlineSkills = (function check(list: DiscoveredFsAgent[]): boolean {\n    return list.some(a => (a.skills ?? []).some(s => s.kind === 'packaged') || check(a.subagents ?? []));\n  })(agents);\n\n  lines.push(`import { assembleAgentFromFsEntry } from '@mastra/core/agent';`);\n  if (hasInlineSkills) {\n    lines.push(`import { createSkill as __createSkill } from '@mastra/core/skills';`);\n  }\n  if (standalone) {\n    lines.push(`import { Mastra } from '@mastra/core';`);\n  }\n  lines.push(`import { fileURLToPath as __fileURLToPath } from 'node:url';`);\n  lines.push(`import { dirname as __dirname, join as __join } from 'node:path';`);\n  if (userEntry) {\n    lines.push(`import * as __userEntry from ${JSON.stringify(userEntry)};`);\n    lines.push(`export * from ${JSON.stringify(userEntry)};`);\n  }\n  lines.push(``);\n  // Resolve workspace base paths relative to this bundled module so they point\n  // at `<bundle>/workspace/<name>` wherever the bundle is deployed. Seed files\n  // authored under `agents/<name>/workspace/**` are mirrored there at build time.\n  // `name` may be a slash-joined path (`<parent>/<child>`) for subagents.\n  lines.push(`const __bundleDir = __dirname(__fileURLToPath(import.meta.url));`);\n  lines.push(`const __workspaceBasePath = name => __join(__bundleDir, 'workspace', ...name.split('/'));`);\n  lines.push(``);\n\n  // Singleton imports (storage.ts, observability.ts, etc.).\n  const singletonImports: string[] = [];\n  if (storage) {\n    singletonImports.push(`import __fsStorage from ${JSON.stringify(storage.path)};`);\n  }\n  if (observability) {\n    singletonImports.push(`import __fsObservability from ${JSON.stringify(observability.path)};`);\n  }\n  if (logger) {\n    singletonImports.push(`import __fsLogger from ${JSON.stringify(logger.path)};`);\n  }\n  if (server) {\n    singletonImports.push(`import __fsServer from ${JSON.stringify(server.path)};`);\n  }\n  if (studio) {\n    singletonImports.push(`import __fsStudio from ${JSON.stringify(studio.path)};`);\n  }\n  if (singletonImports.length > 0) {\n    lines.push(...singletonImports);\n    lines.push(``);\n  }\n\n  const wfCodegen = workflows.length > 0 ? generateFsWorkflowsCodegen(workflows) : undefined;\n\n  // Workflow imports (placed alongside other imports, before agent entries).\n  if (wfCodegen) {\n    for (const line of wfCodegen.importLines) {\n      lines.push(line);\n    }\n    lines.push(``);\n  }\n\n  const entryExprs: string[] = [];\n  for (let i = 0; i < agents.length; i++) {\n    const agent = agents[i]!;\n    const expr = await emitAgentEntry(agent, `${i}`, agent.name, lines);\n    entryExprs.push(expr);\n  }\n\n  // In standalone mode (no user entry), auto-construct a Mastra instance.\n  // In wrapper mode, reference the user's exported instance.\n  if (standalone) {\n    lines.push(``);\n    lines.push(`const __mastra = new Mastra({});`);\n  } else {\n    lines.push(``);\n    lines.push(`const __mastra = __userEntry.mastra;`);\n  }\n\n  lines.push(``);\n  lines.push(`const __fsAgentEntries = [`);\n  for (const expr of entryExprs) {\n    lines.push(`  ${expr},`);\n  }\n  lines.push(`];`);\n  lines.push(``);\n  // Singleton registration (storage, observability, etc.) MUST run before\n  // agents/workflows. `addMemory`/`addAgent` bind the current store to\n  // storage-dependent primitives at registration time, so the fs singletons\n  // have to be in place first — otherwise fs-discovered agents/workflows would\n  // stay bound to the default InMemoryStore.\n\n  // Logger is registered before everything else so storage/observability and\n  // agents receive the fs-provided logger when they are wired up below.\n  if (logger) {\n    lines.push(`if (__mastra && typeof __mastra.__registerFsLogger === 'function') {`);\n    lines.push(`  __mastra.__registerFsLogger(__fsLogger);`);\n    lines.push(`}`);\n    lines.push(``);\n  }\n\n  if (storage) {\n    lines.push(`if (__mastra && typeof __mastra.__registerFsStorage === 'function') {`);\n    lines.push(`  __mastra.__registerFsStorage(__fsStorage);`);\n    lines.push(`}`);\n    lines.push(``);\n  }\n\n  if (observability) {\n    lines.push(`if (__mastra && typeof __mastra.__registerFsObservability === 'function') {`);\n    lines.push(`  __mastra.__registerFsObservability(__fsObservability);`);\n    lines.push(`}`);\n    lines.push(``);\n  }\n\n  if (server) {\n    lines.push(`if (__mastra && typeof __mastra.__registerFsServer === 'function') {`);\n    lines.push(`  __mastra.__registerFsServer(__fsServer);`);\n    lines.push(`}`);\n    lines.push(``);\n  }\n\n  if (studio) {\n    lines.push(`if (__mastra && typeof __mastra.__registerFsStudio === 'function') {`);\n    lines.push(`  __mastra.__registerFsStudio(__fsStudio);`);\n    lines.push(`}`);\n    lines.push(``);\n  }\n\n  lines.push(`const __fsAgents = Object.create(null);`);\n  lines.push(`for (const __entry of __fsAgentEntries) {`);\n  lines.push(`  __fsAgents[__entry.name] = assembleAgentFromFsEntry(__entry, {`);\n  lines.push(`    onWarn: msg => __mastra?.getLogger?.()?.warn?.(msg) ?? console.warn(msg),`);\n  lines.push(`  });`);\n  lines.push(`}`);\n  lines.push(``);\n\n  lines.push(`if (__mastra && typeof __mastra.__registerFsAgents === 'function') {`);\n  lines.push(`  __mastra.__registerFsAgents(__fsAgents);`);\n  lines.push(`}`);\n\n  // Workflow registration (after agents, before final export).\n  if (wfCodegen) {\n    lines.push(``);\n\n    for (const line of wfCodegen.registrationLines) {\n      lines.push(line);\n    }\n  }\n\n  lines.push(``);\n  lines.push(`export const mastra = __mastra;`);\n\n  return lines.join('\\n');\n}\n\n/**\n * Generate the workflow-registration lines to splice into the generated wrapper\n * module. Emits import statements for each discovered workflow module and a\n * registration block that calls `__registerFsWorkflows` on the user's mastra.\n *\n * Returns `{ importLines, registrationLines }` so the caller can place them at\n * the correct positions in the wrapper source.\n */\nexport function generateFsWorkflowsCodegen(workflows: DiscoveredFsWorkflow[]): {\n  importLines: string[];\n  registrationLines: string[];\n} {\n  const importLines: string[] = [];\n  const registrationLines: string[] = [];\n\n  for (let i = 0; i < workflows.length; i++) {\n    const wf = workflows[i]!;\n    const ident = sanitizeIdentifier(wf.key, 'workflow', `${i}`);\n    importLines.push(`import ${ident} from ${JSON.stringify(wf.path)};`);\n  }\n\n  registrationLines.push(`const __fsWorkflows = Object.create(null);`);\n  for (let i = 0; i < workflows.length; i++) {\n    const wf = workflows[i]!;\n    const ident = sanitizeIdentifier(wf.key, 'workflow', `${i}`);\n    registrationLines.push(`__fsWorkflows[${JSON.stringify(wf.key)}] = ${ident};`);\n  }\n  registrationLines.push(``);\n  registrationLines.push(`if (__mastra && typeof __mastra.__registerFsWorkflows === 'function') {`);\n  registrationLines.push(`  __mastra.__registerFsWorkflows(__fsWorkflows);`);\n  registrationLines.push(`}`);\n\n  return { importLines, registrationLines };\n}\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname, join, posix } from 'node:path';\nimport { slash } from '../utils';\nimport { generateFsAgentsModule } from './codegen';\nimport { discoverFsAgents, discoverFsSingleton, discoverFsWorkflows } from './discover';\n\nexport interface PrepareFsAgentsEntryResult {\n  /**\n   * The entry file that should be fed to the bundler/analyzer. When fs-routed\n   * primitives (agents, workflows, storage, observability, logger, server,\n   * studio) are\n   * found this is a generated wrapper module that registers them onto the\n   * user's mastra instance; otherwise it is the original entry unchanged.\n   * When auto-constructing (no user entry), this is always the generated module.\n   */\n  entryFile: string;\n  /** Whether a standalone Mastra instance was auto-constructed (no index.ts). */\n  standalone: boolean;\n  /**\n   * Glob tool paths for tools defined under `agents/*\\/tools` so they are\n   * bundled alongside the top-level `tools/` directory.\n   */\n  toolPaths: string[];\n  /** Number of fs-routed agents discovered. */\n  agentCount: number;\n  /** Number of fs-routed workflows discovered. */\n  workflowCount: number;\n  /** Whether a `storage.ts` singleton was discovered. */\n  hasStorage: boolean;\n  /** Whether an `observability.ts` singleton was discovered. */\n  hasObservability: boolean;\n  /** Whether a `logger.ts` singleton was discovered. */\n  hasLogger: boolean;\n  /** Whether a `server.ts` singleton was discovered. */\n  hasServer: boolean;\n  /** Whether a `studio.ts` singleton was discovered. */\n  hasStudio: boolean;\n  /**\n   * Generated wrapper source to write to {@link entryFile}, or `undefined` when\n   * there are no fs-routed primitives. The write is deferred so callers can run\n   * it *after* `bundler.prepare()` empties the output directory — otherwise the\n   * wrapper is wiped before the bundler reads it.\n   */\n  moduleSource?: string;\n}\n\n/**\n * Discover fs-routed agents under `<mastraDir>/agents/*`, workflows under\n * `<mastraDir>/workflows/`, and singleton config files (e.g. `storage.ts`,\n * `observability.ts`, `logger.ts`, `server.ts`, `studio.ts`).\n * When any are found, generate a wrapper entry module that registers them onto\n * the user's mastra instance. Returns the entry the bundler should use plus\n * extra tool glob paths so `agents/*\\/tools` are bundled.\n *\n * This does NOT write the wrapper to disk; call {@link writeFsAgentsEntry} with\n * the result after `bundler.prepare()` so the generated file is not wiped when\n * the output directory is emptied.\n *\n * When `entryFile` is `undefined` (no `index.ts`/`index.js`) and fs-routed\n * primitives are found, a standalone Mastra instance is auto-constructed from\n * them — no user code required.\n *\n * When no fs-routed primitives are present the original entry is returned\n * unchanged, so existing code-only projects are completely unaffected.\n */\nexport async function prepareFsAgentsEntry(\n  mastraDir: string,\n  entryFile: string | undefined,\n  outputDirectory: string,\n): Promise<PrepareFsAgentsEntryResult> {\n  const [agents, workflows, storage, observability, logger, server, studio] = await Promise.all([\n    discoverFsAgents(mastraDir),\n    discoverFsWorkflows(mastraDir),\n    discoverFsSingleton(mastraDir, 'storage'),\n    discoverFsSingleton(mastraDir, 'observability'),\n    discoverFsSingleton(mastraDir, 'logger'),\n    discoverFsSingleton(mastraDir, 'server'),\n    discoverFsSingleton(mastraDir, 'studio'),\n  ]);\n\n  const standalone = entryFile === undefined;\n  const hasFsPrimitives =\n    agents.length > 0 || workflows.length > 0 || !!storage || !!observability || !!logger || !!server || !!studio;\n\n  if (!hasFsPrimitives && entryFile !== undefined) {\n    return {\n      entryFile,\n      standalone: false,\n      toolPaths: [],\n      agentCount: 0,\n      workflowCount: 0,\n      hasStorage: false,\n      hasObservability: false,\n      hasLogger: false,\n      hasServer: false,\n      hasStudio: false,\n    };\n  }\n\n  if (!hasFsPrimitives && standalone) {\n    throw new Error(\n      'No index.ts and no file-based primitives found. ' +\n        'Create src/mastra/index.ts with a Mastra instance, or add file-based agents/workflows/storage.',\n    );\n  }\n\n  const moduleSource = await generateFsAgentsModule(entryFile ? slash(entryFile) : undefined, agents, {\n    workflows,\n    storage,\n    observability,\n    logger,\n    server,\n    studio,\n  });\n  const generatedEntry = join(outputDirectory, '.mastra-fs-agents-entry.mjs');\n\n  const normalizedMastraDir = slash(mastraDir);\n  const toolPaths =\n    agents.length > 0\n      ? [\n          posix.join(normalizedMastraDir, 'agents/*/tools/**/*.{js,ts}'),\n          `!${posix.join(normalizedMastraDir, 'agents/*/tools/**/*.{test,spec}.{js,ts}')}`,\n          `!${posix.join(normalizedMastraDir, 'agents/*/tools/**/__tests__/**')}`,\n        ]\n      : [];\n\n  return {\n    entryFile: generatedEntry,\n    standalone,\n    toolPaths,\n    agentCount: agents.length,\n    workflowCount: workflows.length,\n    hasStorage: !!storage,\n    hasObservability: !!observability,\n    hasLogger: !!logger,\n    hasServer: !!server,\n    hasStudio: !!studio,\n    moduleSource,\n  };\n}\n\n/**\n * Write the generated fs-agents wrapper produced by {@link prepareFsAgentsEntry}\n * to its `entryFile`. No-op when there are no fs-routed agents. Call this AFTER\n * `bundler.prepare()` (which empties the output directory) so the wrapper\n * survives for the bundler/watcher to read.\n */\nexport async function writeFsAgentsEntry(result: PrepareFsAgentsEntryResult): Promise<void> {\n  if (!result.moduleSource) {\n    return;\n  }\n\n  await mkdir(dirname(result.entryFile), { recursive: true });\n  await writeFile(result.entryFile, result.moduleSource, 'utf-8');\n}\n","import { cp, lstat, mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { discoverFsAgents } from './discover';\nimport type { DiscoveredFsAgent } from './discover';\n\n/**\n * Skip symlinks when copying workspace seeds. A symlink under\n * `agents/<name>/workspace/` could point outside the workspace and be preserved\n * in the bundle, letting the agent read arbitrary files at runtime. We copy only\n * regular files and directories.\n */\nasync function rejectSymlinks(source: string): Promise<boolean> {\n  const stats = await lstat(source);\n  return !stats.isSymbolicLink();\n}\n\nasync function mirrorAgentSeeds(\n  agent: DiscoveredFsAgent,\n  workspaceName: string,\n  bundleDir: string,\n  mirrored: string[],\n): Promise<void> {\n  if (agent.workspaceSeedDir) {\n    const destination = join(bundleDir, 'workspace', ...workspaceName.split('/'));\n    await mkdir(destination, { recursive: true });\n    await cp(agent.workspaceSeedDir, destination, { recursive: true, filter: rejectSymlinks });\n    mirrored.push(workspaceName);\n  }\n\n  // Subagents nest under `<parent>/<child>`, matching the codegen workspace key.\n  for (const child of agent.subagents ?? []) {\n    await mirrorAgentSeeds(child, `${workspaceName}/${child.name}`, bundleDir, mirrored);\n  }\n}\n\n/**\n * Mirror authored `agents/<name>/workspace/**` seed files into the bundled\n * output so each fs-routed agent starts with them on disk (Eve parity). Files\n * are copied to `<bundleDir>/workspace/<name>`, which is exactly where the\n * generated entry roots each agent's default workspace at runtime (resolved\n * relative to the bundled module via `import.meta.url`). Declared subagents\n * mirror to the nested `<bundleDir>/workspace/<parent>/<child>` path.\n *\n * Must run AFTER the bundle step, since bundling recreates the output dir.\n *\n * @param mastraDir   The user's `src/mastra` directory (source of seeds).\n * @param bundleDir   The final bundle directory (e.g. `<outputDirectory>/output`).\n * @returns the workspace names whose seeds were mirrored (`<parent>/<child>` for subagents).\n */\nexport async function mirrorFsAgentWorkspaces(mastraDir: string, bundleDir: string): Promise<string[]> {\n  const agents = await discoverFsAgents(mastraDir);\n  const mirrored: string[] = [];\n\n  for (const agent of agents) {\n    await mirrorAgentSeeds(agent, agent.name, bundleDir, mirrored);\n  }\n\n  return mirrored;\n}\n"],"mappings":"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"}