{"version":3,"sources":["../src/build/watcher.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"],"names":["getInputOptions","pkg","dirname","slash","getWorkspaceInformation","analyzeBundle","posix","noopLogger","getPackageName","tsConfigPaths","aliasHono","nodeModulesExtensionResolver","watch","extractMastraOption","lstat","join","readdir","path","readFile","matter","mkdir","writeFile","cp"],"mappings":"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","file":"chunk-IYKMQHY2.cjs","sourcesContent":["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 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      enableEsmShim: true,\n      externals: true,\n    },\n  }: { sourcemap?: boolean; bundlerOptions?: BundlerOptions } = {},\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 analyzeEntryResult = await analyzeBundle(\n    [entryFile],\n    entryFile,\n    {\n      outputDir: posix.join(process.cwd(), '.mastra', '.build'),\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\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 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 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  /** 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  /** Skills discovered under `skills/`, in stable (sorted) order. */\n  skills: DiscoveredFsSkill[];\n  /**\n   * Declared subagents discovered under `subagents/`, in stable (sorted) order.\n   * Subagents are one level deep only: a discovered subagent never carries its\n   * own `subagents` (nested `subagents/` directories are 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\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 TOOL_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`/`workspace.ts`/\n * `memory.ts` is never inlined or imported 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\nasync function discoverTools(toolsDir: string): Promise<DiscoveredFsAgent['tools']> {\n  if (!(await exists(toolsDir))) {\n    return [];\n  }\n\n  let entries: string[];\n  try {\n    entries = await readdir(toolsDir);\n  } catch {\n    return [];\n  }\n\n  const tools: DiscoveredFsAgent['tools'] = [];\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(toolsDir, basename);\n    // Use lstat so symlinks are detected (not followed). Skip symlinks and\n    // directories: a symlinked tool 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    tools.push({ key: toolKey(basename), path: slash(path) });\n  }\n\n  return tools;\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  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 * Discover a single agent directory: its `config`/`instructions`/`workspace`\n * files plus `tools/`, `skills/`, and (when `allowSubagents`) one level of\n * declared `subagents/`. Returns `undefined` when `dir` is not an agent\n * directory (no `config.(ts|js)` and no `instructions.md`).\n *\n * `allowSubagents` is `true` for top-level agents and `false` when discovering a\n * subagent, so nested `subagents/` directories are never recursed into.\n */\nasync function discoverAgentDir(\n  dir: string,\n  name: string,\n  allowSubagents: boolean,\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\n  // Not an agent directory unless it has a config or instructions file.\n  if (!configPath && !instructionsPath) {\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 skills = await discoverSkills(join(dir, 'skills'));\n  const subagents = await discoverSubagents(dir, allowSubagents, onWarn);\n\n  return {\n    name,\n    dir: slash(dir),\n    configPath,\n    instructionsPath,\n    workspacePath,\n    memoryPath,\n    workspaceSeedDir,\n    tools,\n    skills,\n    subagents,\n  };\n}\n\n/**\n * Discover declared subagents under `<dir>/subagents/*`. Subagents are one level\n * deep only: each discovered subagent is scanned with `allowSubagents: false`,\n * so a nested `subagents/` directory inside a subagent is ignored with a warning.\n * When `allowSubagents` is `false` (we are already inside a subagent) the whole\n * `subagents/` directory is skipped and a warning is emitted if present.\n */\nasync function discoverSubagents(\n  parentDir: string,\n  allowSubagents: boolean,\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 (!allowSubagents) {\n    onWarn?.(\n      `Ignoring nested subagents in \"${slash(subagentsDir)}\": subagents are one level deep only, so a subagent cannot declare its own subagents.`,\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, false, 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)` or an\n * `instructions.md`; other directories are ignored. Each top-level agent may\n * declare one level of `subagents/`. Returns descriptors with absolute,\n * slash-normalized paths ready for codegen. Performs no module evaluation —\n * 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, true, onWarn);\n    if (agent) {\n      discovered.push(agent);\n    }\n  }\n\n  return discovered;\n}\n","import { readFile } from 'node:fs/promises';\nimport type { DiscoveredFsAgent } 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. When `allowSubagents` is true the agent's discovered subagents\n * are emitted as a nested `subagents: [...]` field.\n */\nasync function emitAgentEntry(\n  agent: DiscoveredFsAgent,\n  idPath: string,\n  workspaceName: string,\n  allowSubagents: boolean,\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  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  // 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  let instructionsMd: string | undefined;\n  if (agent.instructionsPath) {\n    instructionsMd = await readFile(agent.instructionsPath, 'utf-8');\n  }\n\n  // Declared subagents (one level deep). Each is itself an\n  // `assembleAgentFromFsEntry` entry object with no further `subagents`.\n  const subagentExprs: string[] = [];\n  if (allowSubagents) {\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}`, false, lines);\n      subagentExprs.push(childExpr);\n    }\n  }\n\n  const entryFields: string[] = [`name: ${JSON.stringify(agent.name)}`];\n  if (agent.configPath) {\n    entryFields.push(`config: ${configIdent}`);\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 (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`, `tools/*.ts`, `skills/*.ts`\n *    (`createSkill(...)` modules), `workspace.ts`, and `memory.ts`, inlining\n *    packaged `SKILL.md` skills,\n * 3. assembles `Agent` instances via `assembleAgentFromFsEntry`, wiring any\n *    declared `subagents/` into the parent (one level deep),\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` contents are inlined at codegen time so no markdown loader\n * plugin is required in the bundler 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(userEntry: string, agents: DiscoveredFsAgent[]): Promise<string> {\n  const lines: string[] = [];\n\n  const hasInlineSkills = agents.some(a =>\n    [a, ...(a.subagents ?? [])].some(x => (x.skills ?? []).some(s => s.kind === 'packaged')),\n  );\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  lines.push(`import { fileURLToPath as __fileURLToPath } from 'node:url';`);\n  lines.push(`import { dirname as __dirname, join as __join } from 'node:path';`);\n  lines.push(`import * as __userEntry from ${JSON.stringify(userEntry)};`);\n  lines.push(`export * from ${JSON.stringify(userEntry)};`);\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  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, true, lines);\n    entryExprs.push(expr);\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  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 => __userEntry.mastra?.getLogger?.()?.warn?.(msg) ?? console.warn(msg),`);\n  lines.push(`  });`);\n  lines.push(`}`);\n  lines.push(``);\n  lines.push(`if (__userEntry.mastra && typeof __userEntry.mastra.__registerFsAgents === 'function') {`);\n  lines.push(`  __userEntry.mastra.__registerFsAgents(__fsAgents);`);\n  lines.push(`}`);\n  lines.push(``);\n  lines.push(`export const mastra = __userEntry.mastra;`);\n\n  return lines.join('\\n');\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 } from './discover';\n\nexport interface PrepareFsAgentsEntryResult {\n  /**\n   * The entry file that should be fed to the bundler/analyzer. When fs-routed\n   * agents are found this is a generated wrapper module that registers them onto\n   * the user's mastra instance; otherwise it is the original entry unchanged.\n   */\n  entryFile: string;\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  /**\n   * Generated wrapper source to write to {@link entryFile}, or `undefined` when\n   * there are no fs-routed agents. The write is deferred so callers can run it\n   * *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/*` and, if any exist,\n * generate a wrapper entry module that registers them onto the user's mastra\n * instance. Returns the entry the bundler should use plus extra tool glob paths\n * 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 no fs-routed agents are present the original entry is returned unchanged,\n * so existing code-only projects are completely unaffected.\n */\nexport async function prepareFsAgentsEntry(\n  mastraDir: string,\n  entryFile: string,\n  outputDirectory: string,\n): Promise<PrepareFsAgentsEntryResult> {\n  const agents = await discoverFsAgents(mastraDir);\n\n  if (agents.length === 0) {\n    return { entryFile, toolPaths: [], agentCount: 0 };\n  }\n\n  const moduleSource = await generateFsAgentsModule(slash(entryFile), agents);\n  const generatedEntry = join(outputDirectory, '.mastra-fs-agents-entry.mjs');\n\n  const normalizedMastraDir = slash(mastraDir);\n  const toolPaths = [\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  return { entryFile: generatedEntry, toolPaths, agentCount: agents.length, moduleSource };\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"]}