@mastra/agent-builder 1.0.0-beta.1 β 1.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/defaults.d.ts +15 -15
- package/dist/index.js +53 -31
- package/dist/index.js.map +1 -1
- package/dist/processors/tool-summary.d.ts +10 -5
- package/dist/processors/tool-summary.d.ts.map +1 -1
- package/dist/utils.d.ts +2 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/workflows/task-planning/task-planning.d.ts.map +1 -1
- package/dist/workflows/workflow-builder/tools.d.ts +1 -1
- package/dist/workflows/workflow-builder/workflow-builder.d.ts.map +1 -1
- package/package.json +6 -6
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/utils.ts","../src/defaults.ts","../src/processors/tool-summary.ts","../src/agent/index.ts","../src/workflows/template-builder/template-builder.ts","../src/workflows/shared/schema.ts","../src/workflows/task-planning/prompts.ts","../src/workflows/workflow-builder/schema.ts","../src/workflows/task-planning/schema.ts","../src/workflows/task-planning/task-planning.ts","../src/workflows/workflow-builder/prompts.ts","../src/workflows/workflow-builder/tools.ts","../src/workflows/workflow-builder/workflow-builder.ts","../src/workflows/workflow-map.ts"],"names":["execNodejs","execFileNodejs","resolve","nodeSpawn","openai","z","readFile","join","dirname","message","Agent","writeFile","existsSync","readdir","basename","extname","mkdir","copyFile","createTool","createStep","createWorkflow"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA,uBAAA,EAuJkB,WAAW;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","file":"index.js","sourcesContent":["import type { MastraLanguageModel, ToolsInput } from '@mastra/core/agent';\nimport type { MastraStorage } from '@mastra/core/storage';\nimport type { MastraVector } from '@mastra/core/vector';\nimport { z } from 'zod';\n\n/**\n * Configuration options for the AgentBuilder\n */\nexport interface AgentBuilderConfig {\n /** The language model to use for agent generation */\n model: MastraLanguageModel;\n /** Storage provider for memory (optional) */\n storage?: MastraStorage;\n /** Vector provider for memory (optional) */\n vectorProvider?: MastraVector;\n /** Additional tools to include beyond the default set */\n tools?: ToolsInput;\n /** Custom instructions to append to the default system prompt */\n instructions?: string;\n /** Memory configuration options */\n memoryConfig?: {\n maxMessages?: number;\n tokenLimit?: number;\n };\n /** Project path */\n projectPath: string;\n /** Summary model */\n summaryModel?: MastraLanguageModel;\n /** Mode */\n mode?: 'template' | 'code-editor';\n}\n\n/**\n * Options for generating agents with AgentBuilder\n */\nexport interface GenerateAgentOptions {\n /** Request Context for the generation */\n requestContext?: any;\n /** Output format preference */\n outputFormat?: 'code' | 'explanation' | 'both';\n}\n\n/**\n * Project management action types\n */\nexport type ProjectAction = 'create' | 'install' | 'upgrade' | 'check';\n\n/**\n * Project types that can be created\n */\nexport type ProjectType = 'standalone' | 'api' | 'nextjs';\n\n/**\n * Package manager options\n */\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn';\n\n/**\n * Validation types for code validation\n */\nexport type ValidationType = 'types' | 'schemas' | 'tests' | 'integration';\n\n// Processing order for units (lower index = higher priority)\nexport const UNIT_KINDS = ['mcp-server', 'tool', 'workflow', 'agent', 'integration', 'network', 'other'] as const;\n\n// Types for the merge template workflow\nexport type UnitKind = (typeof UNIT_KINDS)[number];\n\nexport interface TemplateUnit {\n kind: UnitKind;\n id: string;\n file: string;\n}\n\nexport interface TemplateManifest {\n slug: string;\n ref?: string;\n description?: string;\n units: TemplateUnit[];\n}\n\nexport interface MergePlan {\n slug: string;\n commitSha: string;\n templateDir: string;\n units: TemplateUnit[];\n}\n\n// Schema definitions\nexport const TemplateUnitSchema = z.object({\n kind: z.enum(UNIT_KINDS),\n id: z.string(),\n file: z.string(),\n});\n\nexport const TemplateManifestSchema = z.object({\n slug: z.string(),\n ref: z.string().optional(),\n description: z.string().optional(),\n units: z.array(TemplateUnitSchema),\n});\n\nexport const AgentBuilderInputSchema = z.object({\n repo: z.string().describe('Git URL or local path of the template repo'),\n ref: z.string().optional().describe('Tag/branch/commit to checkout (defaults to main/master)'),\n slug: z.string().optional().describe('Slug for branch/scripts; defaults to inferred from repo'),\n targetPath: z.string().optional().describe('Project path to merge into; defaults to current directory'),\n variables: z.record(z.string()).optional().describe('Environment variables to set in .env file'),\n});\n\nexport const MergePlanSchema = z.object({\n slug: z.string(),\n commitSha: z.string(),\n templateDir: z.string(),\n units: z.array(TemplateUnitSchema),\n});\n\n// File copy schemas and types\nexport const CopiedFileSchema = z.object({\n source: z.string(),\n destination: z.string(),\n unit: z.object({\n kind: z.enum(UNIT_KINDS),\n id: z.string(),\n }),\n});\n\nexport const ConflictSchema = z.object({\n unit: z.object({\n kind: z.enum(UNIT_KINDS),\n id: z.string(),\n }),\n issue: z.string(),\n sourceFile: z.string(),\n targetFile: z.string(),\n});\n\nexport const FileCopyInputSchema = z.object({\n orderedUnits: z.array(TemplateUnitSchema),\n templateDir: z.string(),\n commitSha: z.string(),\n slug: z.string(),\n targetPath: z.string().optional(),\n variables: z.record(z.string()).optional(),\n});\n\nexport const FileCopyResultSchema = z.object({\n success: z.boolean(),\n copiedFiles: z.array(CopiedFileSchema),\n conflicts: z.array(ConflictSchema),\n message: z.string(),\n error: z.string().optional(),\n});\n\n// Intelligent merge schemas and types\nexport const ConflictResolutionSchema = z.object({\n unit: z.object({\n kind: z.enum(UNIT_KINDS),\n id: z.string(),\n }),\n issue: z.string(),\n resolution: z.string(),\n});\n\nexport const IntelligentMergeInputSchema = z.object({\n conflicts: z.array(ConflictSchema),\n copiedFiles: z.array(CopiedFileSchema),\n templateDir: z.string(),\n commitSha: z.string(),\n slug: z.string(),\n targetPath: z.string().optional(),\n branchName: z.string().optional(),\n});\n\nexport const IntelligentMergeResultSchema = z.object({\n success: z.boolean(),\n applied: z.boolean(),\n message: z.string(),\n conflictsResolved: z.array(ConflictResolutionSchema),\n error: z.string().optional(),\n});\n\n// Validation schemas and types\nexport const ValidationResultsSchema = z.object({\n valid: z.boolean(),\n errorsFixed: z.number(),\n remainingErrors: z.number(),\n errors: z.array(z.any()).optional(), // Include specific validation errors\n});\n\nexport const ValidationFixInputSchema = z.object({\n commitSha: z.string(),\n slug: z.string(),\n targetPath: z.string().optional(),\n templateDir: z.string(),\n orderedUnits: z.array(TemplateUnitSchema),\n copiedFiles: z.array(CopiedFileSchema),\n conflictsResolved: z.array(ConflictResolutionSchema).optional(),\n maxIterations: z.number().optional().default(5),\n});\n\nexport const ValidationFixResultSchema = z.object({\n success: z.boolean(),\n applied: z.boolean(),\n message: z.string(),\n validationResults: ValidationResultsSchema,\n error: z.string().optional(),\n});\n\n// Final workflow result schema\nexport const ApplyResultSchema = z.object({\n success: z.boolean(),\n applied: z.boolean(),\n branchName: z.string().optional(),\n message: z.string(),\n validationResults: ValidationResultsSchema.optional(),\n error: z.string().optional(),\n errors: z.array(z.string()).optional(),\n stepResults: z\n .object({\n cloneSuccess: z.boolean().optional(),\n analyzeSuccess: z.boolean().optional(),\n discoverSuccess: z.boolean().optional(),\n orderSuccess: z.boolean().optional(),\n prepareBranchSuccess: z.boolean().optional(),\n packageMergeSuccess: z.boolean().optional(),\n installSuccess: z.boolean().optional(),\n copySuccess: z.boolean().optional(),\n mergeSuccess: z.boolean().optional(),\n validationSuccess: z.boolean().optional(),\n filesCopied: z.number(),\n conflictsSkipped: z.number(),\n conflictsResolved: z.number(),\n })\n .optional(),\n});\n\nexport const CloneTemplateResultSchema = z.object({\n templateDir: z.string(),\n commitSha: z.string(),\n slug: z.string(),\n success: z.boolean().optional(),\n error: z.string().optional(),\n targetPath: z.string().optional(),\n});\n\n// Package analysis schemas and types\nexport const PackageAnalysisSchema = z.object({\n name: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n dependencies: z.record(z.string()).optional(),\n devDependencies: z.record(z.string()).optional(),\n peerDependencies: z.record(z.string()).optional(),\n scripts: z.record(z.string()).optional(),\n success: z.boolean().optional(),\n error: z.string().optional(),\n});\n\n// Discovery step schemas and types\nexport const DiscoveryResultSchema = z.object({\n units: z.array(TemplateUnitSchema),\n success: z.boolean().optional(),\n error: z.string().optional(),\n});\n\n// Unit ordering schemas and types\nexport const OrderedUnitsSchema = z.object({\n orderedUnits: z.array(TemplateUnitSchema),\n success: z.boolean().optional(),\n error: z.string().optional(),\n});\n\n// Package merge schemas and types\nexport const PackageMergeInputSchema = z.object({\n commitSha: z.string(),\n slug: z.string(),\n targetPath: z.string().optional(),\n packageInfo: PackageAnalysisSchema,\n});\n\nexport const PackageMergeResultSchema = z.object({\n success: z.boolean(),\n applied: z.boolean(),\n message: z.string(),\n error: z.string().optional(),\n});\n\n// Install schemas and types\nexport const InstallInputSchema = z.object({\n targetPath: z.string().describe('Path to the project to install packages in'),\n});\n\nexport const InstallResultSchema = z.object({\n success: z.boolean(),\n error: z.string().optional(),\n});\n\nexport const PrepareBranchInputSchema = z.object({\n slug: z.string(),\n commitSha: z.string().optional(), // from clone-template if relevant\n targetPath: z.string().optional(),\n});\n\nexport const PrepareBranchResultSchema = z.object({\n branchName: z.string(),\n success: z.boolean().optional(),\n error: z.string().optional(),\n});\n","import { exec as execNodejs, execFile as execFileNodejs, spawn as nodeSpawn } from 'child_process';\nimport type { SpawnOptions } from 'child_process';\nimport { existsSync, readFileSync } from 'fs';\nimport { copyFile, readFile } from 'fs/promises';\nimport { createRequire } from 'module';\nimport { dirname, basename, extname, resolve, join } from 'path';\nimport { promisify } from 'util';\nimport type { MastraLanguageModel } from '@mastra/core/agent';\nimport { ModelRouterLanguageModel } from '@mastra/core/llm';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport { UNIT_KINDS } from './types';\nimport type { UnitKind } from './types';\n\nexport const exec = promisify(execNodejs);\nexport const execFile = promisify(execFileNodejs);\n\n// Helper function to detect if we're in a workspace subfolder\nfunction isInWorkspaceSubfolder(cwd: string): boolean {\n try {\n // First, check if current directory has package.json (it's a package)\n const currentPackageJson = resolve(cwd, 'package.json');\n if (!existsSync(currentPackageJson)) {\n return false; // Not a package, so not a workspace subfolder\n }\n\n // Walk up the directory tree looking for workspace indicators\n let currentDir = cwd;\n let previousDir = '';\n\n // Keep going up until we reach the filesystem root or stop making progress\n while (currentDir !== previousDir && currentDir !== '/') {\n previousDir = currentDir;\n currentDir = dirname(currentDir);\n\n // Skip if we're back at the original directory\n if (currentDir === cwd) {\n continue;\n }\n\n console.info(`Checking for workspace indicators in: ${currentDir}`);\n\n // Check for pnpm workspace\n if (existsSync(resolve(currentDir, 'pnpm-workspace.yaml'))) {\n return true;\n }\n\n // Check for npm/yarn workspaces in package.json\n const parentPackageJson = resolve(currentDir, 'package.json');\n if (existsSync(parentPackageJson)) {\n try {\n const parentPkg = JSON.parse(readFileSync(parentPackageJson, 'utf-8'));\n if (parentPkg.workspaces) {\n return true; // Found workspace config\n }\n } catch {\n // Ignore JSON parse errors\n }\n }\n\n // Check for lerna\n if (existsSync(resolve(currentDir, 'lerna.json'))) {\n return true;\n }\n }\n\n return false;\n } catch (error) {\n console.warn(`Error in workspace detection: ${error}`);\n return false; // Default to false on any error\n }\n}\n\nexport function spawn(command: string, args: string[], options: any) {\n return new Promise((resolve, reject) => {\n const childProcess = nodeSpawn(command, args, {\n stdio: 'inherit', // Enable proper stdio handling\n ...options,\n });\n childProcess.on('error', error => {\n reject(error);\n });\n childProcess.on('close', code => {\n if (code === 0) {\n resolve(void 0);\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n });\n}\n\n// --- Git environment probes ---\nexport async function isGitInstalled(): Promise<boolean> {\n try {\n await spawnWithOutput('git', ['--version'], {});\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function isInsideGitRepo(cwd: string): Promise<boolean> {\n try {\n if (!(await isGitInstalled())) return false;\n const { stdout } = await spawnWithOutput('git', ['rev-parse', '--is-inside-work-tree'], { cwd });\n return stdout.trim() === 'true';\n } catch {\n return false;\n }\n}\n\n// Variant of spawn that captures stdout and stderr\nexport function spawnWithOutput(\n command: string,\n args: string[],\n options: SpawnOptions,\n): Promise<{ stdout: string; stderr: string; code: number }> {\n return new Promise((resolvePromise, rejectPromise) => {\n const childProcess = nodeSpawn(command, args, {\n ...options,\n });\n let stdout = '';\n let stderr = '';\n childProcess.on('error', error => {\n rejectPromise(error);\n });\n childProcess.stdout?.on('data', chunk => {\n process.stdout.write(chunk);\n stdout += chunk?.toString?.() ?? String(chunk);\n });\n childProcess.stderr?.on('data', chunk => {\n stderr += chunk?.toString?.() ?? String(chunk);\n process.stderr.write(chunk);\n });\n childProcess.on('close', code => {\n if (code === 0) {\n resolvePromise({ stdout, stderr, code: code ?? 0 });\n } else {\n const err = new Error(stderr || `Command failed: ${command} ${args.join(' ')}`);\n // @ts-expect-error augment\n err.code = code;\n rejectPromise(err);\n }\n });\n });\n}\n\nexport async function spawnSWPM(cwd: string, command: string, packageNames: string[]) {\n // 1) Try local swpm module resolution/execution\n try {\n console.info('Running install command with swpm');\n const swpmPath = createRequire(import.meta.filename).resolve('swpm');\n await spawn(swpmPath, [command, ...packageNames], { cwd });\n return;\n } catch (e) {\n console.warn('Failed to run install command with swpm', e);\n // ignore and try fallbacks\n }\n\n // 2) Fallback to native package manager based on lock files\n try {\n // Detect package manager from lock files\n let packageManager: string;\n\n if (existsSync(resolve(cwd, 'pnpm-lock.yaml'))) {\n packageManager = 'pnpm';\n } else if (existsSync(resolve(cwd, 'yarn.lock'))) {\n packageManager = 'yarn';\n } else {\n packageManager = 'npm';\n }\n\n // Normalize command\n let nativeCommand = command === 'add' ? 'add' : command === 'install' ? 'install' : command;\n\n // Build args with non-interactive flags for install commands\n const args = [nativeCommand];\n if (nativeCommand === 'install') {\n const inWorkspace = isInWorkspaceSubfolder(cwd);\n if (packageManager === 'pnpm') {\n args.push('--force'); // pnpm install --force\n\n // Check if we're in a workspace subfolder\n if (inWorkspace) {\n args.push('--ignore-workspace');\n }\n } else if (packageManager === 'npm') {\n args.push('--yes'); // npm install --yes\n\n // Check if we're in a workspace subfolder\n if (inWorkspace) {\n args.push('--ignore-workspaces');\n }\n }\n }\n args.push(...packageNames);\n\n console.info(`Falling back to ${packageManager} ${args.join(' ')}`);\n await spawn(packageManager, args, { cwd });\n return;\n } catch (e) {\n console.warn(`Failed to run install command with native package manager: ${e}`);\n }\n\n throw new Error(`Failed to run install command with swpm and native package managers`);\n}\n\n// Utility functions\nexport function kindWeight(kind: UnitKind): number {\n const idx = UNIT_KINDS.indexOf(kind as any);\n return idx === -1 ? UNIT_KINDS.length : idx;\n}\n\n// Utility functions to work with Mastra templates\nexport async function fetchMastraTemplates(): Promise<\n Array<{\n slug: string;\n title: string;\n description: string;\n githubUrl: string;\n tags: string[];\n agents: string[];\n workflows: string[];\n tools: string[];\n }>\n> {\n try {\n const response = await fetch('https://mastra.ai/api/templates.json');\n const data = (await response.json()) as Array<{\n slug: string;\n title: string;\n description: string;\n githubUrl: string;\n tags: string[];\n agents: string[];\n workflows: string[];\n tools: string[];\n }>;\n return data;\n } catch (error) {\n throw new Error(`Failed to fetch Mastra templates: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n// Helper to get a specific template by slug\nexport async function getMastraTemplate(slug: string) {\n const templates = await fetchMastraTemplates();\n const template = templates.find(t => t.slug === slug);\n if (!template) {\n throw new Error(`Template \"${slug}\" not found. Available templates: ${templates.map(t => t.slug).join(', ')}`);\n }\n return template;\n}\n\n// Git commit tracking utility\nexport async function logGitState(targetPath: string, label: string): Promise<void> {\n try {\n // Skip if not a git repo\n if (!(await isInsideGitRepo(targetPath))) return;\n const gitStatusResult = await git(targetPath, 'status', '--porcelain');\n const gitLogResult = await git(targetPath, 'log', '--oneline', '-3');\n const gitCountResult = await git(targetPath, 'rev-list', '--count', 'HEAD');\n\n console.info(`π Git state ${label}:`);\n console.info('Status:', gitStatusResult.stdout.trim() || 'Clean working directory');\n console.info('Recent commits:', gitLogResult.stdout.trim());\n console.info('Total commits:', gitCountResult.stdout.trim());\n } catch (gitError) {\n console.warn(`Could not get git state ${label}:`, gitError);\n }\n}\n\n// Generic git runner that captures stdout/stderr\nexport async function git(cwd: string, ...args: string[]): Promise<{ stdout: string; stderr: string }> {\n const { stdout, stderr } = await spawnWithOutput('git', args, { cwd });\n return { stdout: stdout ?? '', stderr: stderr ?? '' };\n}\n\n// Common git helpers\nexport async function gitClone(repo: string, destDir: string, cwd?: string) {\n await git(cwd ?? process.cwd(), 'clone', repo, destDir);\n}\n\nexport async function gitCheckoutRef(cwd: string, ref: string) {\n if (!(await isInsideGitRepo(cwd))) return;\n await git(cwd, 'checkout', ref);\n}\n\nexport async function gitRevParse(cwd: string, rev: string): Promise<string> {\n if (!(await isInsideGitRepo(cwd))) return '';\n const { stdout } = await git(cwd, 'rev-parse', rev);\n return stdout.trim();\n}\n\nexport async function gitAddFiles(cwd: string, files: string[]) {\n if (!files || files.length === 0) return;\n if (!(await isInsideGitRepo(cwd))) return;\n await git(cwd, 'add', ...files);\n}\n\nexport async function gitAddAll(cwd: string) {\n if (!(await isInsideGitRepo(cwd))) return;\n await git(cwd, 'add', '.');\n}\n\nexport async function gitHasStagedChanges(cwd: string): Promise<boolean> {\n if (!(await isInsideGitRepo(cwd))) return false;\n const { stdout } = await git(cwd, 'diff', '--cached', '--name-only');\n return stdout.trim().length > 0;\n}\n\nexport async function gitCommit(\n cwd: string,\n message: string,\n opts?: { allowEmpty?: boolean; skipIfNoStaged?: boolean },\n): Promise<boolean> {\n try {\n if (!(await isInsideGitRepo(cwd))) return false;\n if (opts?.skipIfNoStaged) {\n const has = await gitHasStagedChanges(cwd);\n if (!has) return false;\n }\n const args = ['commit', '-m', message];\n if (opts?.allowEmpty) args.push('--allow-empty');\n await git(cwd, ...args);\n return true;\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n if (/nothing to commit/i.test(msg) || /no changes added to commit/i.test(msg)) {\n return false;\n }\n throw e;\n }\n}\n\nexport async function gitAddAndCommit(\n cwd: string,\n message: string,\n files?: string[],\n opts?: { allowEmpty?: boolean; skipIfNoStaged?: boolean },\n): Promise<boolean> {\n try {\n if (!(await isInsideGitRepo(cwd))) return false;\n if (files && files.length > 0) {\n await gitAddFiles(cwd, files);\n } else {\n await gitAddAll(cwd);\n }\n return gitCommit(cwd, message, opts);\n } catch (e) {\n console.error(`Failed to add and commit files: ${e instanceof Error ? e.message : String(e)}`);\n return false;\n }\n}\n\nexport async function gitCheckoutBranch(branchName: string, targetPath: string) {\n try {\n if (!(await isInsideGitRepo(targetPath))) return;\n // Try to create new branch using centralized git runner\n await git(targetPath, 'checkout', '-b', branchName);\n console.info(`Created new branch: ${branchName}`);\n } catch (error) {\n // If branch exists, check if we can switch to it or create a unique name\n const errorStr = error instanceof Error ? error.message : String(error);\n if (errorStr.includes('already exists')) {\n try {\n // Try to switch to existing branch\n await git(targetPath, 'checkout', branchName);\n console.info(`Switched to existing branch: ${branchName}`);\n } catch {\n // If can't switch, create a unique branch name\n const timestamp = Date.now().toString().slice(-6);\n const uniqueBranchName = `${branchName}-${timestamp}`;\n await git(targetPath, 'checkout', '-b', uniqueBranchName);\n console.info(`Created unique branch: ${uniqueBranchName}`);\n }\n } else {\n throw error; // Re-throw if it's a different error\n }\n }\n}\n\n// File conflict resolution utilities (for future use)\nexport async function backupAndReplaceFile(sourceFile: string, targetFile: string): Promise<void> {\n // Create backup of existing file\n const backupFile = `${targetFile}.backup-${Date.now()}`;\n await copyFile(targetFile, backupFile);\n console.info(`π¦ Created backup: ${basename(backupFile)}`);\n\n // Replace with template file\n await copyFile(sourceFile, targetFile);\n console.info(`π Replaced file with template version (backup created)`);\n}\n\nexport async function renameAndCopyFile(sourceFile: string, targetFile: string): Promise<string> {\n // Find unique filename\n let counter = 1;\n let uniqueTargetFile = targetFile;\n const baseName = basename(targetFile, extname(targetFile));\n const extension = extname(targetFile);\n const directory = dirname(targetFile);\n\n while (existsSync(uniqueTargetFile)) {\n const uniqueName = `${baseName}.template-${counter}${extension}`;\n uniqueTargetFile = resolve(directory, uniqueName);\n counter++;\n }\n\n await copyFile(sourceFile, uniqueTargetFile);\n console.info(`π Copied with unique name: ${basename(uniqueTargetFile)}`);\n return uniqueTargetFile;\n}\n\n// Type guard to check if object is a valid MastraLanguageModel\nexport const isValidMastraLanguageModel = (model: any): model is MastraLanguageModel => {\n return model && typeof model === 'object' && typeof model.modelId === 'string';\n};\n\n// Helper function to resolve target path with smart defaults\nexport const resolveTargetPath = (inputData: any, requestContext: any): string => {\n // If explicitly provided, use it\n if (inputData.targetPath) {\n return inputData.targetPath;\n }\n\n // Check request context\n const contextPath = requestContext.get('targetPath');\n if (contextPath) {\n return contextPath;\n }\n\n // Smart resolution logic from prepareAgentBuilderWorkflowInstallation\n const envRoot = process.env.MASTRA_PROJECT_ROOT?.trim();\n if (envRoot) {\n return envRoot;\n }\n\n const cwd = process.cwd();\n const parent = dirname(cwd);\n const grand = dirname(parent);\n\n // Detect when running under `<project>/.mastra/output` and resolve back to project root\n if (basename(cwd) === 'output' && basename(parent) === '.mastra') {\n return grand;\n }\n\n return cwd;\n};\n\n// Helper function to merge .gitignore files intelligently\nexport const mergeGitignoreFiles = (targetContent: string, templateContent: string, templateSlug: string): string => {\n // Normalize line endings and split into lines\n const targetLines = targetContent.replace(/\\r\\n/g, '\\n').split('\\n');\n const templateLines = templateContent.replace(/\\r\\n/g, '\\n').split('\\n');\n\n // Parse existing target entries (normalize for comparison)\n const existingEntries = new Set<string>();\n\n for (const line of targetLines) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n // Normalize path for comparison (remove leading ./, handle different separators)\n const normalized = trimmed.replace(/^\\.\\//, '').replace(/\\\\/g, '/');\n existingEntries.add(normalized);\n }\n }\n\n // Extract new entries from template that don't already exist\n const newEntries: string[] = [];\n for (const line of templateLines) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const normalized = trimmed.replace(/^\\.\\//, '').replace(/\\\\/g, '/');\n if (!existingEntries.has(normalized)) {\n // Check for conflicts (e.g., !file vs file)\n const isNegation = normalized.startsWith('!');\n const basePath = isNegation ? normalized.slice(1) : normalized;\n const hasConflict = isNegation ? existingEntries.has(basePath) : existingEntries.has('!' + basePath);\n\n if (!hasConflict) {\n newEntries.push(trimmed);\n } else {\n console.info(`β Skipping conflicting .gitignore rule: ${trimmed} (conflicts with existing rule)`);\n }\n }\n }\n }\n\n // If no new entries, return original content\n if (newEntries.length === 0) {\n return targetContent;\n }\n\n // Build merged content\n const result: string[] = [...targetLines];\n\n // Add a blank line if the file doesn't end with one\n const lastLine = result[result.length - 1];\n if (result.length > 0 && lastLine && lastLine.trim() !== '') {\n result.push('');\n }\n\n // Add template section header\n result.push(`# Added by template: ${templateSlug}`);\n result.push(...newEntries);\n\n return result.join('\\n');\n};\n\n// Helper function to merge .env files intelligently\nexport const mergeEnvFiles = (\n targetContent: string,\n templateVariables: Record<string, string>,\n templateSlug: string,\n): string => {\n // Parse existing target .env file\n const targetLines = targetContent.replace(/\\r\\n/g, '\\n').split('\\n');\n const existingVars = new Set<string>();\n\n // Extract existing variable names (handle comments and empty lines)\n for (const line of targetLines) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const equalIndex = trimmed.indexOf('=');\n if (equalIndex > 0) {\n const varName = trimmed.substring(0, equalIndex).trim();\n existingVars.add(varName);\n }\n }\n }\n\n // Filter out variables that already exist\n const newVars: Array<{ key: string; value: string }> = [];\n for (const [key, value] of Object.entries(templateVariables)) {\n if (!existingVars.has(key)) {\n newVars.push({ key, value });\n } else {\n console.info(`β Skipping existing environment variable: ${key} (already exists in .env)`);\n }\n }\n\n // If no new variables, return original content\n if (newVars.length === 0) {\n return targetContent;\n }\n\n // Build merged content\n const result: string[] = [...targetLines];\n\n // Add a blank line if the file doesn't end with one\n const lastLine = result[result.length - 1];\n if (result.length > 0 && lastLine && lastLine.trim() !== '') {\n result.push('');\n }\n\n // Add template section header\n result.push(`# Added by template: ${templateSlug}`);\n\n // Add new environment variables\n for (const { key, value } of newVars) {\n result.push(`${key}=${value}`);\n }\n\n return result.join('\\n');\n};\n\n// Helper function to detect AI SDK version from package.json\nexport const detectAISDKVersion = async (projectPath: string): Promise<'v1' | 'v2'> => {\n try {\n const packageJsonPath = join(projectPath, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n console.info('No package.json found, defaulting to v2');\n return 'v2';\n }\n\n const packageContent = await readFile(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(packageContent);\n\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies,\n };\n\n // Check individual provider packages for version hints\n const providerPackages = ['@ai-sdk/openai', '@ai-sdk/anthropic', '@ai-sdk/google', '@ai-sdk/groq', '@ai-sdk/xai'];\n for (const pkg of providerPackages) {\n const version = allDeps[pkg];\n if (version) {\n const versionMatch = version.match(/(\\d+)/);\n if (versionMatch) {\n const majorVersion = parseInt(versionMatch[1]);\n if (majorVersion >= 2) {\n console.info(`Detected ${pkg} v${majorVersion} -> using v2 specification`);\n return 'v2';\n } else {\n console.info(`Detected ${pkg} v${majorVersion} -> using v1 specification`);\n return 'v1';\n }\n }\n }\n }\n\n console.info('No AI SDK version detected, defaulting to v2');\n return 'v2';\n } catch (error) {\n console.warn(`Failed to detect AI SDK version: ${error instanceof Error ? error.message : String(error)}`);\n return 'v2';\n }\n};\n\n// Helper function to create model instance based on provider and version\nexport const createModelInstance = async (\n provider: string,\n modelId: string,\n version: 'v1' | 'v2' = 'v2',\n): Promise<MastraLanguageModel | null> => {\n try {\n // Dynamic imports to avoid issues if packages aren't available\n const providerMap = {\n v1: {\n openai: async () => {\n const { openai } = await import('@ai-sdk/openai');\n return openai(modelId);\n },\n anthropic: async () => {\n const { anthropic } = await import('@ai-sdk/anthropic');\n return anthropic(modelId);\n },\n groq: async () => {\n const { groq } = await import('@ai-sdk/groq');\n return groq(modelId);\n },\n xai: async () => {\n const { xai } = await import('@ai-sdk/xai');\n return xai(modelId);\n },\n google: async () => {\n const { google } = await import('@ai-sdk/google');\n return google(modelId);\n },\n },\n };\n\n const providerFn =\n version === `v1`\n ? providerMap[version][provider as keyof (typeof providerMap)[typeof version]]\n : () => new ModelRouterLanguageModel(`${provider}/${modelId}`);\n\n if (!providerFn) {\n console.error(`Unsupported provider: ${provider}`);\n return null;\n }\n\n const modelInstance = await providerFn();\n console.info(`Created ${provider} model instance (${version}): ${modelId}`);\n return modelInstance;\n } catch (error) {\n console.error(`Failed to create model instance: ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n};\n\n// Helper function to resolve model from request context with AI SDK version detection\nexport const resolveModel = async ({\n requestContext,\n defaultModel = 'openai/gpt-4.1',\n projectPath,\n}: {\n requestContext: RequestContext;\n defaultModel?: MastraLanguageModel | string;\n projectPath?: string;\n}): Promise<MastraLanguageModel> => {\n // First try to get model from request context\n const modelFromContext = requestContext.get('model');\n if (modelFromContext) {\n console.info('Using model from request context');\n // Type check to ensure it's a MastraLanguageModel\n if (isValidMastraLanguageModel(modelFromContext)) {\n return modelFromContext;\n }\n throw new Error(\n 'Invalid model provided. Model must be a MastraLanguageModel instance (e.g., openai(\"gpt-4\"), anthropic(\"claude-3-5-sonnet\"), etc.)',\n );\n }\n\n // Check for selected model info in request context\n const selectedModel = requestContext.get('selectedModel') as { provider: string; modelId: string } | undefined;\n if (selectedModel?.provider && selectedModel?.modelId && projectPath) {\n console.info(`Resolving selected model: ${selectedModel.provider}/${selectedModel.modelId}`);\n\n // Detect AI SDK version from project\n const version = await detectAISDKVersion(projectPath);\n\n // Create model instance with detected version\n const modelInstance = await createModelInstance(selectedModel.provider, selectedModel.modelId, version);\n if (modelInstance) {\n // Store resolved model back in context for other steps to use\n requestContext.set('model', modelInstance);\n return modelInstance;\n }\n }\n\n console.info('Using default model');\n return typeof defaultModel === `string` ? new ModelRouterLanguageModel(defaultModel) : defaultModel;\n};\n","import { spawn as nodeSpawn } from 'child_process';\nimport { readFile, writeFile, mkdir, stat, readdir } from 'fs/promises';\nimport { join, dirname, relative, isAbsolute, resolve } from 'path';\nimport { createTool } from '@mastra/core/tools';\nimport ignore from 'ignore';\nimport { z } from 'zod';\nimport { exec, execFile, spawnSWPM, spawnWithOutput } from './utils';\n\nexport class AgentBuilderDefaults {\n static DEFAULT_INSTRUCTIONS = (\n projectPath?: string,\n ) => `You are a Mastra Expert Agent, specialized in building production-ready AI applications using the Mastra framework. You excel at creating agents, tools, workflows, and complete applications with real, working implementations.\n\n## Core Identity & Capabilities\n\n**Primary Role:** Transform natural language requirements into working Mastra applications\n**Key Strength:** Deep knowledge of Mastra patterns, conventions, and best practices\n**Output Quality:** Production-ready code that follows Mastra ecosystem standards\n\n## Workflow: The MASTRA Method\n\nFollow this sequence for every coding task:\n\nIF NO PROJECT EXISTS, USE THE MANAGEPROJECT TOOL TO CREATE A NEW PROJECT\n\nDO NOT INCLUDE TODOS IN THE CODE, UNLESS SPECIFICALLY ASKED TO DO SO, CREATE REAL WORLD CODE\n\n### 1. π **UNDERSTAND** (Information Gathering)\n- **Explore Mastra Docs**: Use docs tools to understand relevant Mastra patterns and APIs\n- **Analyze Project**: Use file exploration to understand existing codebase structure\n- **Web Research**: Search for packages, examples, or solutions when docs are insufficient\n- **Clarify Requirements**: Ask targeted questions only when critical information is missing\n\n### 2. π **PLAN** (Strategy & Design)\n- **Architecture**: Design using Mastra conventions (agents, tools, workflows, memory)\n- **Dependencies**: Identify required packages and Mastra components\n- **Integration**: Plan how to integrate with existing project structure\n- **Validation**: Define how to test and verify the implementation\n\n### 3. π οΈ **BUILD** (Implementation)\n- **Install First**: Use \\`manageProject\\` tool to install required packages\n- **Follow Patterns**: Implement using established Mastra conventions\n- **Real Code Only**: Build actual working functionality, never mock implementations\n- **Environment Setup**: Create proper .env configuration and documentation\n\n### 4. β
**VALIDATE** (Quality Assurance)\n- **Code Validation**: Run \\`validateCode\\` with types and lint checks\n- **Testing**: Execute tests if available\n- **Server Testing**: Use \\`manageServer\\` and \\`httpRequest\\` for API validation\n- **Fix Issues**: Address all errors before completion\n\n## Mastra-Specific Guidelines\n\n### Framework Knowledge\n- **Agents**: Use \\`@mastra/core/agent\\` with proper configuration\n- **Tools**: Create tools with \\`@mastra/core/tools\\` and proper schemas\n- **Memory**: Implement memory with \\`@mastra/memory\\` and appropriate processors\n- **Workflows**: Build workflows with \\`@mastra/core/workflows\\`\n- **Integrations**: Leverage Mastra's extensive integration ecosystem\n\n### Code Standards\n- **TypeScript First**: All code must be properly typed\n- **Zod Schemas**: Use Zod for all data validation\n- **Environment Variables**: Proper .env configuration with examples\n- **Error Handling**: Comprehensive error handling with meaningful messages\n- **Security**: Never expose credentials or sensitive data\n\n### Project Structure\n- Follow Mastra project conventions (\\`src/mastra/\\`, config files)\n- Use proper file organization (agents, tools, workflows in separate directories)\n- Maintain consistent naming conventions\n- Include proper exports and imports\n\n## Communication Style\n\n**Conciseness**: Keep responses focused and actionable\n**Clarity**: Explain complex concepts in simple terms\n**Directness**: State what you're doing and why\n**No Fluff**: Avoid unnecessary explanations or apologies\n\n### Response Format\n1. **Brief Status**: One line stating what you're doing\n2. **Tool Usage**: Execute necessary tools\n3. **Results Summary**: Concise summary of what was accomplished\n4. **Next Steps**: Clear indication of completion or next actions\n\n## Tool Usage Strategy\n\n### File Operations\n- **Project-Relative Paths**: All file paths are resolved relative to the project directory (unless absolute paths are used)\n- **Read First**: Always read files before editing to understand context\n- **Precise Edits**: Use exact text matching for search/replace operations\n- **Batch Operations**: Group related file operations when possible\n\n### Project Management\n- **manageProject**: Use for package installation, project creation, dependency management\n- **validateCode**: Always run after code changes to ensure quality\n- **manageServer**: Use for testing Mastra server functionality\n- **httpRequest**: Test API endpoints and integrations\n\n### Information Gathering\n- **Mastra Docs**: Primary source for Mastra-specific information\n- **Web Search**: Secondary source for packages and external solutions\n- **File Exploration**: Understand existing project structure and patterns\n\n## Error Handling & Recovery\n\n### Validation Failures\n- Fix TypeScript errors immediately\n- Address linting issues systematically\n- Re-validate until clean\n\n### Build Issues\n- Check dependencies and versions\n- Verify Mastra configuration\n- Test in isolation when needed\n\n### Integration Problems\n- Verify API keys and environment setup\n- Test connections independently\n- Debug with logging and error messages\n\n## Security & Best Practices\n\n**Never:**\n- Hard-code API keys or secrets\n- Generate mock or placeholder implementations\n- Skip error handling\n- Ignore TypeScript errors\n- Create insecure code patterns\n- ask for file paths, you should be able to use the provided tools to explore the file system\n\n**Always:**\n- Use environment variables for configuration\n- Implement proper input validation\n- Follow security best practices\n- Create complete, working implementations\n- Test thoroughly before completion\n\n## Output Requirements\n\n### Code Quality\n- β
TypeScript compilation passes\n- β
ESLint validation passes\n- β
Proper error handling implemented\n- β
Environment variables configured\n- β
Tests included when appropriate\n\n### Documentation\n- β
Clear setup instructions\n- β
Environment variable documentation\n- β
Usage examples provided\n- β
API documentation for custom tools\n\n### Integration\n- β
Follows Mastra conventions\n- β
Integrates with existing project\n- β
Proper imports and exports\n- β
Compatible with Mastra ecosystem\n\n## Project Context\n\n**Working Directory**: ${projectPath}\n**Focus**: Mastra framework applications\n**Goal**: Production-ready implementations\n\nRemember: You are building real applications, not prototypes. Every implementation should be complete, secure, and ready for production use.\n\n## Enhanced Tool Set\n\nYou have access to an enhanced set of tools based on production coding agent patterns:\n\n### Task Management\n- **taskManager**: Create and track multi-step coding tasks with states (pending, in_progress, completed, blocked). Use this for complex projects that require systematic progress tracking.\n\n### Code Discovery & Analysis\n- **codeAnalyzer**: Analyze codebase structure, discover definitions (functions, classes, interfaces), map dependencies, and understand architectural patterns.\n- **smartSearch**: Intelligent search with context awareness, pattern matching, and relevance scoring.\n\n### Advanced File Operations\n- **readFile**: Read files with optional line ranges, encoding support, metadata\n- **writeFile**: Write files with directory creation\n- **listDirectory**: Directory listing with filtering, recursion, metadata\n- **multiEdit**: Perform multiple search-replace operations across files atomically with backup creation\n- **executeCommand**: Execute shell commands with proper error handling and working directory support\n\n**Important**: All file paths are resolved relative to the project directory unless absolute paths are provided.\n\n### Communication & Workflow\n- **attemptCompletion**: Signal task completion with validation status and confidence metrics.\n\n### Guidelines for Enhanced Tools:\n\n1. **Use taskManager proactively** for any task requiring 3+ steps or complex coordination\n2. **Start with codeAnalyzer** when working with unfamiliar codebases to understand structure\n3. **Use smartSearch** for intelligent pattern discovery across the codebase\n4. **Apply multiEdit** for systematic refactoring across multiple files\n5. **Ask for clarification** when requirements are ambiguous rather than making assumptions\n6. **Signal completion** with comprehensive summaries and validation status\n\nUse the following basic examples to guide your implementation.\n\n<examples>\n### Weather Agent\n\\`\\`\\`\n// ./src/agents/weather-agent.ts\nimport { openai } from '@ai-sdk/openai';\nimport { Agent } from '@mastra/core/agent';\nimport { Memory } from '@mastra/memory';\nimport { LibSQLStore } from '@mastra/libsql';\nimport { weatherTool } from '../tools/weather-tool';\n\nexport const weatherAgent = new Agent({\n id: 'weather-agent',\n name: 'Weather Agent',\n instructions: \\${instructions},\n model: openai('gpt-4o-mini'),\n tools: { weatherTool },\n memory: new Memory({\n storage: new LibSQLStore({\n id: 'mastra-memory-storage',\n url: 'file:../mastra.db', // ask user what database to use, use this as the default\n }),\n }),\n});\n\\`\\`\\`\n\n### Weather Tool\n\\`\\`\\`\n// ./src/tools/weather-tool.ts\nimport { createTool } from '@mastra/core/tools';\nimport { z } from 'zod';\nimport { getWeather } from '../tools/weather-tool';\n\nexport const weatherTool = createTool({\n id: 'get-weather',\n description: 'Get current weather for a location',\n inputSchema: z.object({\n location: z.string().describe('City name'),\n }),\n outputSchema: z.object({\n temperature: z.number(),\n feelsLike: z.number(),\n humidity: z.number(),\n windSpeed: z.number(),\n windGust: z.number(),\n conditions: z.string(),\n location: z.string(),\n }),\n execute: async (inputData) => {\n return await getWeather(inputData.location);\n },\n});\n\\`\\`\\`\n\n### Weather Workflow\n\\`\\`\\`\n// ./src/workflows/weather-workflow.ts\nimport { createStep, createWorkflow } from '@mastra/core/workflows';\nimport { z } from 'zod';\n\nconst fetchWeather = createStep({\n id: 'fetch-weather',\n description: 'Fetches weather forecast for a given city',\n inputSchema: z.object({\n city: z.string().describe('The city to get the weather for'),\n }),\n outputSchema: forecastSchema,\n execute: async (inputData) => {\n if (!inputData) {\n throw new Error('Input data not found');\n }\n\n const geocodingUrl = \\`https://geocoding-api.open-meteo.com/v1/search?name=\\${encodeURIComponent(inputData.city)}&count=1\\`;\n const geocodingResponse = await fetch(geocodingUrl);\n const geocodingData = (await geocodingResponse.json()) as {\n results: { latitude: number; longitude: number; name: string }[];\n };\n\n if (!geocodingData.results?.[0]) {\n throw new Error(\\`Location '\\${inputData.city}' not found\\`);\n }\n\n const { latitude, longitude, name } = geocodingData.results[0];\n\n const weatherUrl = \\`https://api.open-meteo.com/v1/forecast?latitude=\\${latitude}&longitude=\\${longitude}¤t=precipitation,weathercode&timezone=auto,&hourly=precipitation_probability,temperature_2m\\`\n const response = await fetch(weatherUrl);\n const data = (await response.json()) as {\n current: {\n time: string;\n precipitation: number;\n weathercode: number;\n };\n hourly: {\n precipitation_probability: number[];\n temperature_2m: number[];\n };\n };\n\n const forecast = {\n date: new Date().toISOString(),\n maxTemp: Math.max(...data.hourly.temperature_2m),\n minTemp: Math.min(...data.hourly.temperature_2m),\n condition: getWeatherCondition(data.current.weathercode),\n precipitationChance: data.hourly.precipitation_probability.reduce(\n (acc, curr) => Math.max(acc, curr),\n 0,\n ),\n location: name,\n };\n\n return forecast;\n },\n});\n\nconst planActivities = createStep({\n id: 'plan-activities',\n description: 'Suggests activities based on weather conditions',\n inputSchema: forecastSchema,\n outputSchema: z.object({\n activities: z.string(),\n }),\n execute: async (inputData, context) => {\n const mastra = context?.mastra;\n const forecast = inputData;\n\n if (!forecast) {\n throw new Error('Forecast data not found');\n }\n\n const agent = mastra?.getAgent('weatherAgent');\n if (!agent) {\n throw new Error('Weather agent not found');\n }\n\n const prompt = \\${weatherWorkflowPrompt}\n\n const response = await agent.stream([\n {\n role: 'user',\n content: prompt,\n },\n ]);\n\n let activitiesText = '';\n\n for await (const chunk of response.textStream) {\n process.stdout.write(chunk);\n activitiesText += chunk;\n }\n\n return {\n activities: activitiesText,\n };\n },\n});\n\nconst weatherWorkflow = createWorkflow({\n id: 'weather-workflow',\n inputSchema: z.object({\n city: z.string().describe('The city to get the weather for'),\n }),\n outputSchema: z.object({\n activities: z.string(),\n }),\n})\n .then(fetchWeather)\n .then(planActivities);\n\nweatherWorkflow.commit();\n\\`\\`\\`\nexport { weatherWorkflow };\n\\`\\`\\`\n\n### Mastra instance\n\\`\\`\\`\n// ./src/mastra.ts\n\nimport { Mastra } from '@mastra/core/mastra';\nimport { PinoLogger } from '@mastra/loggers';\nimport { LibSQLStore } from '@mastra/libsql';\nimport { weatherWorkflow } from './workflows/weather-workflow';\nimport { weatherAgent } from './agents/weather-agent';\n\nexport const mastra = new Mastra({\n workflows: { weatherWorkflow },\n agents: { weatherAgent },\n storage: new LibSQLStore({\n id: 'mastra-storage',\n // stores observability, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db\n url: \":memory:\",\n }),\n logger: new PinoLogger({\n name: 'Mastra',\n level: 'info',\n }),\n});\n\\`\\`\\`\n\n</examples>`;\n\n static DEFAULT_MEMORY_CONFIG = {\n lastMessages: 20,\n };\n\n static DEFAULT_FOLDER_STRUCTURE = {\n agent: 'src/mastra/agents',\n workflow: 'src/mastra/workflows',\n tool: 'src/mastra/tools',\n 'mcp-server': 'src/mastra/mcp',\n network: 'src/mastra/networks',\n };\n\n static DEFAULT_TOOLS = async (projectPath: string) => {\n return {\n readFile: createTool({\n id: 'read-file',\n description: 'Read contents of a file with optional line range selection.',\n inputSchema: z.object({\n filePath: z.string().describe('Path to the file to read'),\n startLine: z.number().optional().describe('Starting line number (1-indexed)'),\n endLine: z.number().optional().describe('Ending line number (1-indexed, inclusive)'),\n encoding: z.string().default('utf-8').describe('File encoding'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n content: z.string().optional(),\n lines: z.array(z.string()).optional(),\n metadata: z\n .object({\n size: z.number(),\n totalLines: z.number(),\n encoding: z.string(),\n lastModified: z.string(),\n })\n .optional(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.readFile({ ...inputData, projectPath });\n },\n }),\n\n writeFile: createTool({\n id: 'write-file',\n description: 'Write content to a file, with options for creating directories.',\n inputSchema: z.object({\n filePath: z.string().describe('Path to the file to write'),\n content: z.string().describe('Content to write to the file'),\n createDirs: z.boolean().default(true).describe(\"Create parent directories if they don't exist\"),\n encoding: z.string().default('utf-8').describe('File encoding'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n filePath: z.string(),\n bytesWritten: z.number().optional(),\n message: z.string(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.writeFile({ ...inputData, projectPath });\n },\n }),\n\n listDirectory: createTool({\n id: 'list-directory',\n description: 'List contents of a directory with filtering and metadata options.',\n inputSchema: z.object({\n path: z.string().describe('Directory path to list'),\n recursive: z.boolean().default(false).describe('List subdirectories recursively'),\n includeHidden: z.boolean().default(false).describe('Include hidden files and directories'),\n pattern: z.string().default('*').describe('Glob pattern to filter files'),\n maxDepth: z.number().default(10).describe('Maximum recursion depth'),\n includeMetadata: z.boolean().default(true).describe('Include file metadata'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n items: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n type: z.enum(['file', 'directory', 'symlink']),\n size: z.number().optional(),\n lastModified: z.string().optional(),\n permissions: z.string().optional(),\n }),\n ),\n totalItems: z.number(),\n path: z.string(),\n message: z.string(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.listDirectory({ ...inputData, projectPath });\n },\n }),\n\n executeCommand: createTool({\n id: 'execute-command',\n description: 'Execute shell commands with proper error handling and output capture.',\n inputSchema: z.object({\n command: z.string().describe('Shell command to execute'),\n workingDirectory: z.string().optional().describe('Working directory for command execution'),\n timeout: z.number().default(30000).describe('Timeout in milliseconds'),\n captureOutput: z.boolean().default(true).describe('Capture command output'),\n shell: z.string().optional().describe('Shell to use (defaults to system shell)'),\n env: z.record(z.string()).optional().describe('Environment variables'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n exitCode: z.number().optional(),\n stdout: z.string().optional(),\n stderr: z.string().optional(),\n command: z.string(),\n workingDirectory: z.string().optional(),\n executionTime: z.number().optional(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.executeCommand({\n ...inputData,\n workingDirectory: inputData.workingDirectory || projectPath,\n });\n },\n }),\n // Enhanced Task Management (Critical for complex coding tasks)\n taskManager: createTool({\n id: 'task-manager',\n description:\n 'Create and manage structured task lists for coding sessions. Use this for complex multi-step tasks to track progress and ensure thoroughness.',\n inputSchema: z.object({\n action: z.enum(['create', 'update', 'list', 'complete', 'remove']).describe('Task management action'),\n tasks: z\n .array(\n z.object({\n id: z.string().describe('Unique task identifier'),\n content: z.string().describe('Task description, optional if just updating the status').optional(),\n status: z.enum(['pending', 'in_progress', 'completed', 'blocked']).describe('Task status'),\n priority: z.enum(['high', 'medium', 'low']).default('medium').describe('Task priority'),\n dependencies: z.array(z.string()).optional().describe('IDs of tasks this depends on'),\n notes: z.string().optional().describe('Additional notes or context'),\n }),\n )\n .optional()\n .describe('Tasks to create or update'),\n taskId: z.string().optional().describe('Specific task ID for single task operations'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n tasks: z.array(\n z.object({\n id: z.string(),\n content: z.string(),\n status: z.string(),\n priority: z.string(),\n dependencies: z.array(z.string()).optional(),\n notes: z.string().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n }),\n ),\n message: z.string(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.manageTaskList(inputData);\n },\n }),\n\n // Advanced File Operations\n multiEdit: createTool({\n id: 'multi-edit',\n description: 'Perform multiple search-replace operations on one or more files in a single atomic operation.',\n inputSchema: z.object({\n operations: z\n .array(\n z.object({\n filePath: z.string().describe('Path to the file to edit'),\n edits: z\n .array(\n z.object({\n oldString: z.string().describe('Exact text to replace'),\n newString: z.string().describe('Replacement text'),\n replaceAll: z.boolean().default(false).describe('Replace all occurrences'),\n }),\n )\n .describe('List of edit operations for this file'),\n }),\n )\n .describe('File edit operations to perform'),\n createBackup: z.boolean().default(false).describe('Create backup files before editing'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n results: z.array(\n z.object({\n filePath: z.string(),\n editsApplied: z.number(),\n errors: z.array(z.string()),\n backup: z.string().optional(),\n }),\n ),\n message: z.string(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.performMultiEdit({ ...inputData, projectPath });\n },\n }),\n\n replaceLines: createTool({\n id: 'replace-lines',\n description:\n 'Replace specific line ranges in files with new content. IMPORTANT: This tool replaces ENTIRE lines, not partial content within lines. Lines are 1-indexed.',\n inputSchema: z.object({\n filePath: z.string().describe('Path to the file to edit'),\n startLine: z\n .number()\n .describe('Starting line number to replace (1-indexed, inclusive). Count from the first line = 1'),\n endLine: z\n .number()\n .describe(\n 'Ending line number to replace (1-indexed, inclusive). To replace single line, use same number as startLine',\n ),\n newContent: z\n .string()\n .describe(\n 'New content to replace the lines with. Use empty string \"\" to delete lines completely. For multiline content, include \\\\n characters',\n ),\n createBackup: z.boolean().default(false).describe('Create backup file before editing'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n message: z.string(),\n linesReplaced: z.number().optional(),\n backup: z.string().optional(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.replaceLines({ ...inputData, projectPath });\n },\n }),\n\n // File diagnostics tool to help debug line replacement issues\n showFileLines: createTool({\n id: 'show-file-lines',\n description:\n 'Show specific lines from a file with line numbers. Useful for debugging before using replaceLines.',\n inputSchema: z.object({\n filePath: z.string().describe('Path to the file to examine'),\n startLine: z\n .number()\n .optional()\n .describe('Starting line number to show (1-indexed). If not provided, shows all lines'),\n endLine: z\n .number()\n .optional()\n .describe(\n 'Ending line number to show (1-indexed, inclusive). If not provided but startLine is, shows only that line',\n ),\n context: z.number().default(2).describe('Number of context lines to show before and after the range'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n lines: z.array(\n z.object({\n lineNumber: z.number(),\n content: z.string(),\n isTarget: z.boolean().describe('Whether this line is in the target range'),\n }),\n ),\n totalLines: z.number(),\n message: z.string(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.showFileLines({ ...inputData, projectPath });\n },\n }),\n\n // Enhanced Pattern Search\n smartSearch: createTool({\n id: 'smart-search',\n description: 'Intelligent search across codebase with context awareness and pattern matching.',\n inputSchema: z.object({\n query: z.string().describe('Search query or pattern'),\n type: z.enum(['text', 'regex', 'fuzzy', 'semantic']).default('text').describe('Type of search to perform'),\n scope: z\n .object({\n paths: z.array(z.string()).optional().describe('Specific paths to search'),\n fileTypes: z.array(z.string()).optional().describe('File extensions to include'),\n excludePaths: z.array(z.string()).optional().describe('Paths to exclude'),\n maxResults: z.number().default(50).describe('Maximum number of results'),\n })\n .optional(),\n context: z\n .object({\n beforeLines: z.number().default(2).describe('Lines of context before match'),\n afterLines: z.number().default(2).describe('Lines of context after match'),\n includeDefinitions: z.boolean().default(false).describe('Include function/class definitions'),\n })\n .optional(),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n matches: z.array(\n z.object({\n file: z.string(),\n line: z.number(),\n column: z.number().optional(),\n match: z.string(),\n context: z.object({\n before: z.array(z.string()),\n after: z.array(z.string()),\n }),\n relevance: z.number().optional(),\n }),\n ),\n summary: z.object({\n totalMatches: z.number(),\n filesSearched: z.number(),\n patterns: z.array(z.string()),\n }),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.performSmartSearch(inputData, projectPath);\n },\n }),\n\n validateCode: createTool({\n id: 'validate-code',\n description:\n 'Validates code using a fast hybrid approach: syntax β semantic β lint. RECOMMENDED: Always provide specific files for optimal performance and accuracy.',\n inputSchema: z.object({\n projectPath: z.string().optional().describe('Path to the project to validate (defaults to current project)'),\n validationType: z\n .array(z.enum(['types', 'lint', 'schemas', 'tests', 'build']))\n .describe('Types of validation to perform. Recommended: [\"types\", \"lint\"] for code quality'),\n files: z\n .array(z.string())\n .optional()\n .describe(\n 'RECOMMENDED: Specific files to validate (e.g., files you created/modified). Uses hybrid validation: fast syntax check β semantic types β ESLint. Without files, falls back to slower CLI validation.',\n ),\n }),\n outputSchema: z.object({\n valid: z.boolean(),\n errors: z.array(\n z.object({\n type: z.enum(['typescript', 'eslint', 'schema', 'test', 'build']),\n severity: z.enum(['error', 'warning', 'info']),\n message: z.string(),\n file: z.string().optional(),\n line: z.number().optional(),\n column: z.number().optional(),\n code: z.string().optional(),\n }),\n ),\n summary: z.object({\n totalErrors: z.number(),\n totalWarnings: z.number(),\n validationsPassed: z.array(z.string()),\n validationsFailed: z.array(z.string()),\n }),\n }),\n execute: async inputData => {\n const { projectPath: validationProjectPath, validationType, files } = inputData;\n const targetPath = validationProjectPath || projectPath;\n\n // BEST PRACTICE: Always provide files array for optimal performance\n // Hybrid approach: syntax (1ms) β semantic (100ms) β ESLint (50ms)\n // Without files: falls back to CLI validation (2000ms+)\n\n return await AgentBuilderDefaults.validateCode({\n projectPath: targetPath,\n validationType,\n files,\n });\n },\n }),\n\n // Web Search (replaces MCP web search)\n webSearch: createTool({\n id: 'web-search',\n description: 'Search the web for current information and return structured results.',\n inputSchema: z.object({\n query: z.string().describe('Search query'),\n maxResults: z.number().default(10).describe('Maximum number of results to return'),\n region: z.string().default('us').describe('Search region/country code'),\n language: z.string().default('en').describe('Search language'),\n includeImages: z.boolean().default(false).describe('Include image results'),\n dateRange: z.enum(['day', 'week', 'month', 'year', 'all']).default('all').describe('Date range filter'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n query: z.string(),\n results: z.array(\n z.object({\n title: z.string(),\n url: z.string(),\n snippet: z.string(),\n domain: z.string(),\n publishDate: z.string().optional(),\n relevanceScore: z.number().optional(),\n }),\n ),\n totalResults: z.number(),\n searchTime: z.number(),\n suggestions: z.array(z.string()).optional(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.webSearch(inputData);\n },\n }),\n\n // Task Completion Signaling\n attemptCompletion: createTool({\n id: 'attempt-completion',\n description: 'Signal that you believe the requested task has been completed and provide a summary.',\n inputSchema: z.object({\n summary: z.string().describe('Summary of what was accomplished'),\n changes: z\n .array(\n z.object({\n type: z.enum(['file_created', 'file_modified', 'file_deleted', 'command_executed', 'dependency_added']),\n description: z.string(),\n path: z.string().optional(),\n }),\n )\n .describe('List of changes made'),\n validation: z\n .object({\n testsRun: z.boolean().default(false),\n buildsSuccessfully: z.boolean().default(false),\n manualTestingRequired: z.boolean().default(false),\n })\n .describe('Validation status'),\n nextSteps: z.array(z.string()).optional().describe('Suggested next steps or follow-up actions'),\n }),\n outputSchema: z.object({\n completionId: z.string(),\n status: z.enum(['completed', 'needs_review', 'needs_testing']),\n summary: z.string(),\n confidence: z.number().min(0).max(100),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.signalCompletion(inputData);\n },\n }),\n\n manageProject: createTool({\n id: 'manage-project',\n description:\n 'Handles project management including creating project structures, managing dependencies, and package operations.',\n inputSchema: z.object({\n action: z.enum(['create', 'install', 'upgrade']).describe('The action to perform'),\n features: z\n .array(z.string())\n .optional()\n .describe('Mastra features to include (e.g., [\"agents\", \"memory\", \"workflows\"])'),\n packages: z\n .array(\n z.object({\n name: z.string(),\n version: z.string().optional(),\n }),\n )\n .optional()\n .describe('Packages to install/upgrade'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n installed: z.array(z.string()).optional(),\n upgraded: z.array(z.string()).optional(),\n warnings: z.array(z.string()).optional(),\n message: z.string().optional(),\n details: z.string().optional(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n const { action, features, packages } = inputData;\n try {\n switch (action) {\n case 'create':\n return await AgentBuilderDefaults.createMastraProject({\n projectName: projectPath,\n features,\n });\n case 'install':\n if (!packages?.length) {\n return {\n success: false,\n message: 'Packages array is required for install action',\n };\n }\n return await AgentBuilderDefaults.installPackages({\n packages,\n projectPath,\n });\n case 'upgrade':\n if (!packages?.length) {\n return {\n success: false,\n message: 'Packages array is required for upgrade action',\n };\n }\n return await AgentBuilderDefaults.upgradePackages({\n packages,\n projectPath,\n });\n default:\n return {\n success: false,\n message: `Unknown action: ${action}`,\n };\n }\n } catch (error) {\n return {\n success: false,\n message: `Error executing ${action}: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n },\n }),\n manageServer: createTool({\n id: 'manage-server',\n description:\n 'Manages the Mastra server - start, stop, restart, and check status, use the terminal tool to make curl requests to the server. There is an openapi spec for the server at http://localhost:{port}/openapi.json',\n inputSchema: z.object({\n action: z.enum(['start', 'stop', 'restart', 'status']).describe('Server management action'),\n port: z.number().optional().default(4200).describe('Port to run the server on'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n status: z.enum(['running', 'stopped', 'starting', 'stopping', 'unknown']),\n pid: z.number().optional(),\n port: z.number().optional(),\n url: z.string().optional(),\n message: z.string().optional(),\n stdout: z.array(z.string()).optional().describe('Server output lines captured during startup'),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n const { action, port } = inputData;\n try {\n switch (action) {\n case 'start':\n return await AgentBuilderDefaults.startMastraServer({\n port,\n projectPath,\n });\n case 'stop':\n return await AgentBuilderDefaults.stopMastraServer({\n port,\n projectPath,\n });\n case 'restart':\n const stopResult = await AgentBuilderDefaults.stopMastraServer({\n port,\n projectPath,\n });\n if (!stopResult.success) {\n return {\n success: false,\n status: 'unknown' as const,\n message: `Failed to restart: could not stop server on port ${port}`,\n error: stopResult.error || 'Unknown stop error',\n };\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n const startResult = await AgentBuilderDefaults.startMastraServer({\n port,\n projectPath,\n });\n if (!startResult.success) {\n return {\n success: false,\n status: 'stopped' as const,\n message: `Failed to restart: server stopped successfully but failed to start on port ${port}`,\n error: startResult.error || 'Unknown start error',\n };\n }\n return {\n ...startResult,\n message: `Mastra server restarted successfully on port ${port}`,\n };\n case 'status':\n return await AgentBuilderDefaults.checkMastraServerStatus({\n port,\n projectPath,\n });\n default:\n return {\n success: false,\n status: 'unknown' as const,\n message: `Unknown action: ${action}`,\n };\n }\n } catch (error) {\n return {\n success: false,\n status: 'unknown' as const,\n message: `Error managing server: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n },\n }),\n httpRequest: createTool({\n id: 'http-request',\n description: 'Makes HTTP requests to the Mastra server or external APIs for testing and integration',\n inputSchema: z.object({\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']).describe('HTTP method'),\n url: z.string().describe('Full URL or path (if baseUrl provided)'),\n baseUrl: z.string().optional().describe('Base URL for the server (e.g., http://localhost:4200)'),\n headers: z.record(z.string()).optional().describe('HTTP headers'),\n body: z.any().optional().describe('Request body (will be JSON stringified if object)'),\n timeout: z.number().optional().default(30000).describe('Request timeout in milliseconds'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n status: z.number().optional(),\n statusText: z.string().optional(),\n headers: z.record(z.string()).optional(),\n data: z.any().optional(),\n error: z.string().optional(),\n url: z.string(),\n method: z.string(),\n }),\n execute: async inputData => {\n const { method, url, baseUrl, headers, body, timeout } = inputData;\n try {\n return await AgentBuilderDefaults.makeHttpRequest({\n method,\n url,\n baseUrl,\n headers,\n body,\n timeout,\n });\n } catch (error) {\n return {\n success: false,\n url: baseUrl ? `${baseUrl}${url}` : url,\n method,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n }),\n };\n };\n\n /**\n * Filter tools for template builder mode (excludes web search and other advanced tools)\n */\n static filterToolsForTemplateBuilder(tools: Record<string, any>): Record<string, any> {\n const templateBuilderTools = [\n 'readFile',\n 'writeFile',\n 'listDirectory',\n 'executeCommand',\n 'taskManager',\n 'multiEdit',\n 'replaceLines',\n 'showFileLines',\n 'smartSearch',\n 'validateCode',\n ];\n\n const filtered: Record<string, ReturnType<typeof createTool>> = {};\n for (const toolName of templateBuilderTools) {\n if (tools[toolName]) {\n filtered[toolName] = tools[toolName];\n }\n }\n return filtered;\n }\n\n /**\n * Filter tools for code editor mode (includes all tools)\n */\n static filterToolsForCodeEditor(tools: Record<string, any>): Record<string, any> {\n return tools; // Return all tools for code editor mode\n }\n\n /**\n * Get tools for a specific mode\n */\n static async listToolsForMode(\n projectPath: string,\n mode: 'template' | 'code-editor' = 'code-editor',\n ): Promise<Record<string, any>> {\n const allTools = await AgentBuilderDefaults.DEFAULT_TOOLS(projectPath);\n\n if (mode === 'template') {\n return AgentBuilderDefaults.filterToolsForTemplateBuilder(allTools);\n } else {\n return AgentBuilderDefaults.filterToolsForCodeEditor(allTools);\n }\n }\n\n /**\n * Create a new Mastra project using create-mastra CLI\n */\n static async createMastraProject({ features, projectName }: { features?: string[]; projectName?: string }) {\n try {\n const args = ['pnpx', 'create-mastra@latest', projectName?.replace(/[;&|`$(){}\\[\\]]/g, '') ?? '', '-l', 'openai'];\n if (features && features.length > 0) {\n args.push('--components', features.join(','));\n }\n args.push('--example');\n\n const { stdout, stderr } = await spawnWithOutput(args[0]!, args.slice(1), {});\n\n return {\n success: true,\n projectPath: `./${projectName}`,\n message: `Successfully created Mastra project: ${projectName}.`,\n details: stdout,\n error: stderr,\n };\n } catch (error) {\n console.error(error);\n return {\n success: false,\n message: `Failed to create project: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n /**\n * Install packages using the detected package manager\n */\n static async installPackages({\n packages,\n projectPath,\n }: {\n packages: Array<{ name: string; version?: string }>;\n projectPath?: string;\n }) {\n try {\n console.info('Installing packages:', JSON.stringify(packages, null, 2));\n\n const packageStrings = packages.map(p => `${p.name}`);\n\n await spawnSWPM(projectPath || '', 'add', packageStrings);\n\n return {\n success: true,\n installed: packageStrings,\n message: `Successfully installed ${packages.length} package(s).`,\n details: '',\n };\n } catch (error) {\n return {\n success: false,\n message: `Failed to install packages: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n /**\n * Upgrade packages using the detected package manager\n */\n static async upgradePackages({\n packages,\n projectPath,\n }: {\n packages?: Array<{ name: string; version?: string }>;\n projectPath?: string;\n }) {\n try {\n console.info('Upgrading specific packages:', JSON.stringify(packages, null, 2));\n\n let packageNames: string[] = [];\n\n if (packages && packages.length > 0) {\n packageNames = packages.map(p => `${p.name}`);\n }\n await spawnSWPM(projectPath || '', 'upgrade', packageNames);\n\n return {\n success: true,\n upgraded: packages?.map(p => p.name) || ['all packages'],\n message: `Packages upgraded successfully.`,\n details: '',\n };\n } catch (error) {\n return {\n success: false,\n message: `Failed to upgrade packages: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n /**\n * Start the Mastra server\n */\n static async startMastraServer({\n port = 4200,\n projectPath,\n env = {},\n }: {\n port?: number;\n projectPath?: string;\n env?: Record<string, string>;\n }) {\n try {\n const serverEnv = { ...process.env, ...env, PORT: port.toString() };\n const execOptions = {\n cwd: projectPath || process.cwd(),\n env: serverEnv,\n };\n\n const serverProcess = nodeSpawn('pnpm', ['run', 'dev'], {\n ...execOptions,\n detached: true,\n stdio: 'pipe',\n });\n\n const stdoutLines: string[] = [];\n\n const serverStarted = new Promise<any>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error(`Server startup timeout after 30 seconds. Output: ${stdoutLines.join('\\n')}`));\n }, 30000);\n\n serverProcess.stdout?.on('data', data => {\n const output = data.toString();\n const lines = output.split('\\n').filter((line: string) => line.trim());\n stdoutLines.push(...lines);\n\n if (output.includes('Mastra API running on port')) {\n clearTimeout(timeout);\n resolve({\n success: true,\n status: 'running' as const,\n pid: serverProcess.pid,\n port,\n url: `http://localhost:${port}`,\n message: `Mastra server started successfully on port ${port}`,\n stdout: stdoutLines,\n });\n }\n });\n\n serverProcess.stderr?.on('data', data => {\n const errorOutput = data.toString();\n stdoutLines.push(`[STDERR] ${errorOutput}`);\n clearTimeout(timeout);\n reject(new Error(`Server startup failed with error: ${errorOutput}`));\n });\n\n serverProcess.on('error', error => {\n clearTimeout(timeout);\n reject(error);\n });\n\n serverProcess.on('exit', (code, signal) => {\n clearTimeout(timeout);\n if (code !== 0 && code !== null) {\n reject(\n new Error(\n `Server process exited with code ${code}${signal ? ` (signal: ${signal})` : ''}. Output: ${stdoutLines.join('\\n')}`,\n ),\n );\n }\n });\n });\n\n return await serverStarted;\n } catch (error) {\n return {\n success: false,\n status: 'stopped' as const,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Stop the Mastra server\n */\n static async stopMastraServer({ port = 4200, projectPath: _projectPath }: { port?: number; projectPath?: string }) {\n // Validate port to ensure it is a safe integer\n if (typeof port !== 'number' || !Number.isInteger(port) || port < 1 || port > 65535) {\n return {\n success: false,\n status: 'error' as const,\n error: `Invalid port value: ${String(port)}`,\n };\n }\n try {\n // Run lsof safely without shell interpretation\n const { stdout } = await execFile('lsof', ['-ti', String(port)]);\n // If no output, treat as \"No process found\"\n const effectiveStdout = stdout.trim() ? stdout : 'No process found';\n\n if (!effectiveStdout || effectiveStdout === 'No process found') {\n return {\n success: true,\n status: 'stopped' as const,\n message: `No Mastra server found running on port ${port}`,\n };\n }\n\n const pids = stdout\n .trim()\n .split('\\n')\n .filter((pid: string) => pid.trim());\n const killedPids: number[] = [];\n const failedPids: number[] = [];\n\n for (const pidStr of pids) {\n const pid = parseInt(pidStr.trim());\n if (isNaN(pid)) continue;\n\n try {\n process.kill(pid, 'SIGTERM');\n killedPids.push(pid);\n } catch (e) {\n failedPids.push(pid);\n console.warn(`Failed to kill process ${pid}:`, e);\n }\n }\n\n // If some processes failed to be killed, still report partial success\n // but include warning about failed processes\n\n if (killedPids.length === 0) {\n return {\n success: false,\n status: 'unknown' as const,\n message: `Failed to stop any processes on port ${port}`,\n error: `Could not kill PIDs: ${failedPids.join(', ')}`,\n };\n }\n\n // Report partial success if some processes were killed but others failed\n if (failedPids.length > 0) {\n console.warn(\n `Killed ${killedPids.length} processes but failed to kill ${failedPids.length} processes: ${failedPids.join(', ')}`,\n );\n }\n\n // Wait a bit and check if processes are still running\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n try {\n const { stdout: checkStdoutRaw } = await execFile('lsof', ['-ti', String(port)]);\n const checkStdout = checkStdoutRaw.trim() ? checkStdoutRaw : 'No process found';\n if (checkStdout && checkStdout !== 'No process found') {\n // Force kill remaining processes\n const remainingPids = checkStdout\n .trim()\n .split('\\n')\n .filter((pid: string) => pid.trim());\n for (const pidStr of remainingPids) {\n const pid = parseInt(pidStr.trim());\n if (!isNaN(pid)) {\n try {\n process.kill(pid, 'SIGKILL');\n } catch {\n // ignore\n }\n }\n }\n\n // Final check\n await new Promise(resolve => setTimeout(resolve, 1000));\n const { stdout: finalCheckRaw } = await execFile('lsof', ['-ti', String(port)]);\n const finalCheck = finalCheckRaw.trim() ? finalCheckRaw : 'No process found';\n if (finalCheck && finalCheck !== 'No process found') {\n return {\n success: false,\n status: 'unknown' as const,\n message: `Server processes still running on port ${port} after stop attempts`,\n error: `Remaining PIDs: ${finalCheck.trim()}`,\n };\n }\n }\n } catch (error) {\n console.warn('Failed to verify server stop:', error);\n }\n\n return {\n success: true,\n status: 'stopped' as const,\n message: `Mastra server stopped successfully (port ${port}). Killed PIDs: ${killedPids.join(', ')}`,\n };\n } catch (error) {\n return {\n success: false,\n status: 'unknown' as const,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Check Mastra server status\n */\n static async checkMastraServerStatus({\n port = 4200,\n projectPath: _projectPath,\n }: {\n port?: number;\n projectPath?: string;\n }) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(`http://localhost:${port}/health`, {\n method: 'GET',\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (response.ok) {\n return {\n success: true,\n status: 'running' as const,\n port,\n url: `http://localhost:${port}`,\n message: 'Mastra server is running and healthy',\n };\n } else {\n return {\n success: false,\n status: 'unknown' as const,\n port,\n message: `Server responding but not healthy (status: ${response.status})`,\n };\n }\n } catch {\n // Check if process exists on port\n try {\n const { stdout } = await execFile('lsof', ['-ti', String(port)]);\n const effectiveStdout = stdout.trim() ? stdout : 'No process found';\n const hasProcess = effectiveStdout && effectiveStdout !== 'No process found';\n\n return {\n success: Boolean(hasProcess),\n status: hasProcess ? ('starting' as const) : ('stopped' as const),\n port,\n message: hasProcess\n ? 'Server process exists but not responding to health checks'\n : 'No server process found on specified port',\n };\n } catch {\n return {\n success: false,\n status: 'stopped' as const,\n port,\n message: 'Server is not running',\n };\n }\n }\n }\n\n // Cache for TypeScript program (lazily loaded)\n private static tsProgram: any | null = null;\n private static programProjectPath: string | null = null;\n\n /**\n * Validate code using hybrid approach: syntax -> types -> lint\n *\n * BEST PRACTICES FOR CODING AGENTS:\n *\n * β
RECOMMENDED (Fast & Accurate):\n * validateCode({\n * validationType: ['types', 'lint'],\n * files: ['src/workflows/my-workflow.ts', 'src/components/Button.tsx']\n * })\n *\n * Performance: ~150ms\n * - Syntax check (1ms) - catches 80% of issues instantly\n * - Semantic validation (100ms) - full type checking with dependencies\n * - ESLint (50ms) - style and best practices\n * - Only shows errors from YOUR files\n *\n * β AVOID (Slow & Noisy):\n * validateCode({ validationType: ['types', 'lint'] }) // no files specified\n *\n * Performance: ~2000ms+\n * - Full project CLI validation\n * - Shows errors from all project files (confusing)\n * - Much slower for coding agents\n *\n * @param projectPath - Project root directory (defaults to cwd)\n * @param validationType - ['types', 'lint'] recommended for most use cases\n * @param files - ALWAYS provide this for best performance\n */\n static async validateCode({\n projectPath,\n validationType,\n files,\n }: {\n projectPath?: string;\n validationType: Array<'types' | 'lint' | 'schemas' | 'tests' | 'build'>;\n files?: string[];\n }) {\n const errors: Array<{\n type: 'typescript' | 'eslint' | 'schema' | 'test' | 'build';\n severity: 'error' | 'warning' | 'info';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> = [];\n const validationsPassed: string[] = [];\n const validationsFailed: string[] = [];\n\n const targetProjectPath = projectPath || process.cwd();\n\n // If no files specified, use legacy CLI-based validation for backward compatibility\n if (!files || files.length === 0) {\n return this.validateCodeCLI({ projectPath, validationType });\n }\n\n // Hybrid validation approach for specific files (default behavior)\n for (const filePath of files) {\n const absolutePath = isAbsolute(filePath) ? filePath : resolve(targetProjectPath, filePath);\n\n try {\n const fileContent = await readFile(absolutePath, 'utf-8');\n const fileResults = await this.validateSingleFileHybrid(\n absolutePath,\n fileContent,\n targetProjectPath,\n validationType,\n );\n\n errors.push(...fileResults.errors);\n\n // Track validation results\n for (const type of validationType) {\n const hasErrors = fileResults.errors.some(e => e.type === type && e.severity === 'error');\n if (hasErrors) {\n if (!validationsFailed.includes(type)) validationsFailed.push(type);\n } else {\n if (!validationsPassed.includes(type)) validationsPassed.push(type);\n }\n }\n } catch (error) {\n errors.push({\n type: 'typescript',\n severity: 'error',\n message: `Failed to read file ${filePath}: ${error instanceof Error ? error.message : String(error)}`,\n file: filePath,\n });\n validationsFailed.push('types');\n }\n }\n\n const totalErrors = errors.filter(e => e.severity === 'error').length;\n const totalWarnings = errors.filter(e => e.severity === 'warning').length;\n const isValid = totalErrors === 0;\n\n return {\n valid: isValid,\n errors,\n summary: {\n totalErrors,\n totalWarnings,\n validationsPassed,\n validationsFailed,\n },\n };\n }\n\n /**\n * CLI-based validation for when no specific files are provided\n */\n static async validateCodeCLI({\n projectPath,\n validationType,\n }: {\n projectPath?: string;\n validationType: Array<'types' | 'lint' | 'schemas' | 'tests' | 'build'>;\n }) {\n const errors: Array<{\n type: 'typescript' | 'eslint' | 'schema' | 'test' | 'build';\n severity: 'error' | 'warning' | 'info';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> = [];\n const validationsPassed: string[] = [];\n const validationsFailed: string[] = [];\n\n const execOptions = { cwd: projectPath };\n\n // TypeScript validation (legacy approach)\n if (validationType.includes('types')) {\n try {\n // Use execFile for safe argument passing to avoid shell interpretation\n const args = ['tsc', '--noEmit'];\n await execFile('npx', args, execOptions);\n validationsPassed.push('types');\n } catch (error: any) {\n let tsOutput = '';\n if (error.stdout) {\n tsOutput = error.stdout;\n } else if (error.stderr) {\n tsOutput = error.stderr;\n } else if (error.message) {\n tsOutput = error.message;\n }\n\n errors.push({\n type: 'typescript',\n severity: 'error',\n message: tsOutput.trim() || `TypeScript validation failed: ${error.message || String(error)}`,\n });\n validationsFailed.push('types');\n }\n }\n\n // ESLint validation\n if (validationType.includes('lint')) {\n try {\n const eslintArgs = ['eslint', '--format', 'json'];\n const { stdout } = await execFile('npx', eslintArgs, execOptions);\n\n if (stdout) {\n const eslintResults = JSON.parse(stdout);\n const eslintErrors = AgentBuilderDefaults.parseESLintErrors(eslintResults);\n errors.push(...eslintErrors);\n\n if (eslintErrors.some(e => e.severity === 'error')) {\n validationsFailed.push('lint');\n } else {\n validationsPassed.push('lint');\n }\n } else {\n validationsPassed.push('lint');\n }\n } catch (error: any) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n if (errorMessage.includes('\"filePath\"') || errorMessage.includes('messages')) {\n try {\n const eslintResults = JSON.parse(errorMessage);\n const eslintErrors = AgentBuilderDefaults.parseESLintErrors(eslintResults);\n errors.push(...eslintErrors);\n validationsFailed.push('lint');\n } catch {\n errors.push({\n type: 'eslint',\n severity: 'error',\n message: `ESLint validation failed: ${errorMessage}`,\n });\n validationsFailed.push('lint');\n }\n } else {\n validationsPassed.push('lint');\n }\n }\n }\n\n const totalErrors = errors.filter(e => e.severity === 'error').length;\n const totalWarnings = errors.filter(e => e.severity === 'warning').length;\n const isValid = totalErrors === 0;\n\n return {\n valid: isValid,\n errors,\n summary: {\n totalErrors,\n totalWarnings,\n validationsPassed,\n validationsFailed,\n },\n };\n }\n\n /**\n * Hybrid validation for a single file\n */\n static async validateSingleFileHybrid(\n filePath: string,\n fileContent: string,\n projectPath: string,\n validationType: Array<'types' | 'lint' | 'schemas' | 'tests' | 'build'>,\n ) {\n const errors: Array<{\n type: 'typescript' | 'eslint' | 'schema' | 'test' | 'build';\n severity: 'error' | 'warning' | 'info';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> = [];\n\n // Step 1: Fast syntax validation\n if (validationType.includes('types')) {\n const syntaxErrors = await this.validateSyntaxOnly(fileContent, filePath);\n errors.push(...syntaxErrors);\n\n // Fail fast on syntax errors\n if (syntaxErrors.length > 0) {\n return { errors };\n }\n\n // Step 2: TypeScript semantic validation (if syntax is clean)\n const typeErrors = await this.validateTypesSemantic(filePath, projectPath);\n errors.push(...typeErrors);\n }\n\n // Step 3: ESLint validation (only if no critical errors)\n if (validationType.includes('lint') && !errors.some(e => e.severity === 'error')) {\n const lintErrors = await this.validateESLintSingle(filePath, projectPath);\n errors.push(...lintErrors);\n }\n\n return { errors };\n }\n\n /**\n * Fast syntax-only validation using TypeScript parser\n */\n static async validateSyntaxOnly(fileContent: string, fileName: string) {\n const errors: Array<{\n type: 'typescript';\n severity: 'error';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n }> = [];\n\n try {\n // Dynamically import TypeScript to avoid bundling issues\n const ts = await import('typescript');\n\n const sourceFile = ts.createSourceFile(fileName, fileContent, ts.ScriptTarget.Latest, true);\n\n // Create a minimal program to get syntax diagnostics\n const options: any = {\n allowJs: true,\n checkJs: false,\n noEmit: true,\n };\n\n const host: any = {\n getSourceFile: (name: string) => (name === fileName ? sourceFile : undefined),\n writeFile: () => {},\n getCurrentDirectory: () => '',\n getDirectories: () => [],\n fileExists: (name: string) => name === fileName,\n readFile: (name: string) => (name === fileName ? fileContent : undefined),\n getCanonicalFileName: (name: string) => name,\n useCaseSensitiveFileNames: () => true,\n getNewLine: () => '\\n',\n getDefaultLibFileName: () => 'lib.d.ts',\n };\n\n const program = ts.createProgram([fileName], options, host);\n const diagnostics = program.getSyntacticDiagnostics(sourceFile);\n\n for (const diagnostic of diagnostics) {\n if (diagnostic.start !== undefined) {\n const position = sourceFile.getLineAndCharacterOfPosition(diagnostic.start);\n errors.push({\n type: 'typescript',\n severity: 'error',\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, '\\n'),\n file: fileName,\n line: position.line + 1,\n column: position.character + 1,\n });\n }\n }\n } catch (error) {\n // If TypeScript is not available, fall back to basic validation\n console.warn('TypeScript not available for syntax validation:', error);\n\n // Basic syntax check - look for common syntax errors\n const lines = fileContent.split('\\n');\n const commonErrors = [\n { pattern: /\\bimport\\s+.*\\s+from\\s+['\"\"][^'\"]*$/, message: 'Unterminated import statement' },\n { pattern: /\\{[^}]*$/, message: 'Unclosed brace' },\n { pattern: /\\([^)]*$/, message: 'Unclosed parenthesis' },\n { pattern: /\\[[^\\]]*$/, message: 'Unclosed bracket' },\n ];\n\n lines.forEach((line, index) => {\n commonErrors.forEach(({ pattern, message }) => {\n if (pattern.test(line)) {\n errors.push({\n type: 'typescript',\n severity: 'error',\n message,\n file: fileName,\n line: index + 1,\n });\n }\n });\n });\n }\n\n return errors;\n }\n\n /**\n * TypeScript semantic validation using incremental program\n */\n static async validateTypesSemantic(filePath: string, projectPath: string) {\n const errors: Array<{\n type: 'typescript';\n severity: 'error' | 'warning';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n }> = [];\n\n try {\n // Initialize or reuse TypeScript program\n const program = await this.getOrCreateTSProgram(projectPath);\n if (!program) {\n return errors; // Fallback to no validation if program creation fails\n }\n\n const sourceFile = program.getSourceFile(filePath);\n if (!sourceFile) {\n return errors; // File not in program\n }\n\n const diagnostics = [\n ...program.getSemanticDiagnostics(sourceFile),\n ...program.getSyntacticDiagnostics(sourceFile),\n ];\n\n // Dynamically import TypeScript for diagnostic processing\n const ts = await import('typescript');\n\n for (const diagnostic of diagnostics) {\n if (diagnostic.start !== undefined) {\n const position = sourceFile.getLineAndCharacterOfPosition(diagnostic.start);\n errors.push({\n type: 'typescript',\n severity: diagnostic.category === ts.DiagnosticCategory.Warning ? 'warning' : 'error',\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, '\\n'),\n file: filePath,\n line: position.line + 1,\n column: position.character + 1,\n });\n }\n }\n } catch (error) {\n // Fallback to no semantic validation on error\n console.warn(`TypeScript semantic validation failed for ${filePath}:`, error);\n }\n\n return errors;\n }\n\n /**\n * ESLint validation for a single file\n */\n static async validateESLintSingle(filePath: string, projectPath: string) {\n const errors: Array<{\n type: 'eslint';\n severity: 'error' | 'warning';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> = [];\n\n try {\n const { stdout } = await execFile('npx', ['eslint', filePath, '--format', 'json'], { cwd: projectPath });\n\n if (stdout) {\n const eslintResults = JSON.parse(stdout);\n const eslintErrors = this.parseESLintErrors(eslintResults);\n errors.push(...eslintErrors);\n }\n } catch (error: any) {\n // Try to parse error output\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (errorMessage.includes('\"filePath\"') || errorMessage.includes('messages')) {\n try {\n const eslintResults = JSON.parse(errorMessage);\n const eslintErrors = this.parseESLintErrors(eslintResults);\n errors.push(...eslintErrors);\n } catch {\n // Ignore ESLint errors in hybrid mode for now\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Get or create TypeScript program\n */\n static async getOrCreateTSProgram(projectPath: string): Promise<any | null> {\n // Return cached program if same project\n if (this.tsProgram && this.programProjectPath === projectPath) {\n return this.tsProgram;\n }\n\n try {\n // Dynamically import TypeScript\n const ts = await import('typescript');\n\n const configPath = ts.findConfigFile(projectPath, ts.sys.fileExists, 'tsconfig.json');\n if (!configPath) {\n return null; // No tsconfig found\n }\n\n const configFile = ts.readConfigFile(configPath, ts.sys.readFile);\n if (configFile.error) {\n return null;\n }\n\n const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, projectPath);\n\n if (parsedConfig.errors.length > 0) {\n return null;\n }\n\n // Create regular program\n this.tsProgram = ts.createProgram({\n rootNames: parsedConfig.fileNames,\n options: parsedConfig.options,\n });\n\n this.programProjectPath = projectPath;\n return this.tsProgram;\n } catch (error) {\n console.warn('Failed to create TypeScript program:', error);\n return null;\n }\n }\n\n // Note: Old filterTypeScriptErrors method removed in favor of hybrid validation approach\n\n /**\n * Parse ESLint errors from JSON output\n */\n static parseESLintErrors(eslintResults: any[]): Array<{\n type: 'eslint';\n severity: 'error' | 'warning';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> {\n const errors: Array<{\n type: 'eslint';\n severity: 'error' | 'warning';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> = [];\n\n for (const result of eslintResults) {\n for (const message of result.messages || []) {\n if (message.message) {\n errors.push({\n type: 'eslint',\n severity: message.severity === 1 ? 'warning' : 'error',\n message: message.message,\n file: result.filePath || undefined,\n line: message.line || undefined,\n column: message.column || undefined,\n code: message.ruleId || undefined,\n });\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Make HTTP request to server or external API\n */\n static async makeHttpRequest({\n method,\n url,\n baseUrl,\n headers = {},\n body,\n timeout = 30000,\n }: {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n url: string;\n baseUrl?: string;\n headers?: Record<string, string>;\n body?: any;\n timeout?: number;\n }) {\n try {\n const fullUrl = baseUrl ? `${baseUrl}${url}` : url;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const requestOptions: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: controller.signal,\n };\n\n if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n requestOptions.body = typeof body === 'string' ? body : JSON.stringify(body);\n }\n\n const response = await fetch(fullUrl, requestOptions);\n clearTimeout(timeoutId);\n\n let data: any;\n const contentType = response.headers.get('content-type');\n if (contentType?.includes('application/json')) {\n data = await response.json();\n } else {\n data = await response.text();\n }\n\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n return {\n success: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n data,\n url: fullUrl,\n method,\n };\n } catch (error) {\n return {\n success: false,\n url: baseUrl ? `${baseUrl}${url}` : url,\n method,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Enhanced task management system for complex coding tasks\n */\n static async manageTaskList(context: {\n action: 'create' | 'update' | 'list' | 'complete' | 'remove';\n tasks?: Array<{\n id: string;\n content?: string;\n status: 'pending' | 'in_progress' | 'completed' | 'blocked';\n priority: 'high' | 'medium' | 'low';\n dependencies?: string[];\n notes?: string;\n }>;\n taskId?: string;\n }) {\n // In-memory task storage (could be enhanced with persistent storage)\n if (!AgentBuilderDefaults.taskStorage) {\n AgentBuilderDefaults.taskStorage = new Map();\n }\n\n // Cleanup old sessions to prevent memory leaks\n // Keep only the last 10 sessions\n const sessions = Array.from(AgentBuilderDefaults.taskStorage.keys());\n if (sessions.length > 10) {\n const sessionsToRemove = sessions.slice(0, sessions.length - 10);\n sessionsToRemove.forEach(session => AgentBuilderDefaults.taskStorage.delete(session));\n }\n\n const sessionId = 'current'; // Could be enhanced with proper session management\n const existingTasks = AgentBuilderDefaults.taskStorage.get(sessionId) || [];\n\n try {\n switch (context.action) {\n case 'create':\n if (!context.tasks?.length) {\n return {\n success: false,\n tasks: existingTasks,\n message: 'No tasks provided for creation',\n };\n }\n\n const newTasks = context.tasks.map(task => ({\n ...task,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }));\n\n const allTasks = [...existingTasks, ...newTasks];\n AgentBuilderDefaults.taskStorage.set(sessionId, allTasks);\n\n return {\n success: true,\n tasks: allTasks,\n message: `Created ${newTasks.length} new task(s)`,\n };\n\n case 'update':\n if (!context.tasks?.length) {\n return {\n success: false,\n tasks: existingTasks,\n message: 'No tasks provided for update',\n };\n }\n\n const updatedTasks = existingTasks.map(existing => {\n const update = context.tasks!.find(t => t.id === existing.id);\n return update ? { ...existing, ...update, updatedAt: new Date().toISOString() } : existing;\n });\n\n AgentBuilderDefaults.taskStorage.set(sessionId, updatedTasks);\n\n return {\n success: true,\n tasks: updatedTasks,\n message: 'Tasks updated successfully',\n };\n\n case 'complete':\n if (!context.taskId) {\n return {\n success: false,\n tasks: existingTasks,\n message: 'Task ID required for completion',\n };\n }\n\n const completedTasks = existingTasks.map(task =>\n task.id === context.taskId\n ? { ...task, status: 'completed' as const, updatedAt: new Date().toISOString() }\n : task,\n );\n\n AgentBuilderDefaults.taskStorage.set(sessionId, completedTasks);\n\n return {\n success: true,\n tasks: completedTasks,\n message: `Task ${context.taskId} marked as completed`,\n };\n\n case 'remove':\n if (!context.taskId) {\n return {\n success: false,\n tasks: existingTasks,\n message: 'Task ID required for removal',\n };\n }\n\n const filteredTasks = existingTasks.filter(task => task.id !== context.taskId);\n AgentBuilderDefaults.taskStorage.set(sessionId, filteredTasks);\n\n return {\n success: true,\n tasks: filteredTasks,\n message: `Task ${context.taskId} removed`,\n };\n\n case 'list':\n default:\n return {\n success: true,\n tasks: existingTasks,\n message: `Found ${existingTasks.length} task(s)`,\n };\n }\n } catch (error) {\n return {\n success: false,\n tasks: existingTasks,\n message: `Task management error: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n /**\n * Perform multiple edits across files atomically\n */\n static async performMultiEdit(context: {\n operations: Array<{\n filePath: string;\n edits: Array<{\n oldString: string;\n newString: string;\n replaceAll?: boolean;\n }>;\n }>;\n createBackup?: boolean;\n projectPath?: string;\n }) {\n const { operations, createBackup = false, projectPath = process.cwd() } = context;\n const results: Array<{\n filePath: string;\n editsApplied: number;\n errors: string[];\n backup?: string;\n }> = [];\n\n try {\n for (const operation of operations) {\n const filePath = isAbsolute(operation.filePath) ? operation.filePath : join(projectPath, operation.filePath);\n let editsApplied = 0;\n const errors: string[] = [];\n let backup: string | undefined;\n\n try {\n // Create backup if requested\n if (createBackup) {\n const backupPath = `${filePath}.backup.${Date.now()}`;\n const originalContent = await readFile(filePath, 'utf-8');\n await writeFile(backupPath, originalContent, 'utf-8');\n backup = backupPath;\n }\n\n // Read current file content\n let content = await readFile(filePath, 'utf-8');\n\n // Apply each edit\n for (const edit of operation.edits) {\n const { oldString, newString, replaceAll = false } = edit;\n\n if (replaceAll) {\n const regex = new RegExp(oldString.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g');\n const matches = content.match(regex);\n if (matches) {\n content = content.replace(regex, newString);\n editsApplied += matches.length;\n }\n } else {\n if (content.includes(oldString)) {\n content = content.replace(oldString, newString);\n editsApplied++;\n } else {\n errors.push(`String not found: \"${oldString.substring(0, 50)}${oldString.length > 50 ? '...' : ''}\"`);\n }\n }\n }\n\n // Write updated content back\n await writeFile(filePath, content, 'utf-8');\n } catch (error) {\n errors.push(`File operation error: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n results.push({\n filePath: operation.filePath,\n editsApplied,\n errors,\n backup,\n });\n }\n\n const totalEdits = results.reduce((sum, r) => sum + r.editsApplied, 0);\n const totalErrors = results.reduce((sum, r) => sum + r.errors.length, 0);\n\n return {\n success: totalErrors === 0,\n results,\n message: `Applied ${totalEdits} edits across ${operations.length} files${totalErrors > 0 ? ` with ${totalErrors} errors` : ''}`,\n };\n } catch (error) {\n return {\n success: false,\n results,\n message: `Multi-edit operation failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n /**\n * Replace specific line ranges in a file with new content\n */\n static async replaceLines(context: {\n filePath: string;\n startLine: number;\n endLine: number;\n newContent: string;\n createBackup?: boolean;\n projectPath?: string;\n }) {\n const { filePath, startLine, endLine, newContent, createBackup = false, projectPath = process.cwd() } = context;\n\n try {\n const fullPath = isAbsolute(filePath) ? filePath : join(projectPath, filePath);\n\n // Read current file content\n const content = await readFile(fullPath, 'utf-8');\n const lines = content.split('\\n');\n\n // Validate line numbers\n if (startLine < 1 || endLine < 1) {\n return {\n success: false,\n message: `Line numbers must be 1 or greater. Got startLine: ${startLine}, endLine: ${endLine}`,\n error: 'Invalid line range',\n };\n }\n\n if (startLine > lines.length || endLine > lines.length) {\n return {\n success: false,\n message: `Line range ${startLine}-${endLine} is out of bounds. File has ${lines.length} lines. Remember: lines are 1-indexed, so valid range is 1-${lines.length}.`,\n error: 'Invalid line range',\n };\n }\n\n if (startLine > endLine) {\n return {\n success: false,\n message: `Start line (${startLine}) cannot be greater than end line (${endLine}).`,\n error: 'Invalid line range',\n };\n }\n\n // Create backup if requested\n let backup: string | undefined;\n if (createBackup) {\n const backupPath = `${fullPath}.backup.${Date.now()}`;\n await writeFile(backupPath, content, 'utf-8');\n backup = backupPath;\n }\n\n // Replace the specified line range\n const beforeLines = lines.slice(0, startLine - 1);\n const afterLines = lines.slice(endLine);\n const newLines = newContent ? newContent.split('\\n') : [];\n\n const updatedLines = [...beforeLines, ...newLines, ...afterLines];\n const updatedContent = updatedLines.join('\\n');\n\n // Write updated content back\n await writeFile(fullPath, updatedContent, 'utf-8');\n\n const linesReplaced = endLine - startLine + 1;\n const newLineCount = newLines.length;\n\n return {\n success: true,\n message: `Successfully replaced ${linesReplaced} lines (${startLine}-${endLine}) with ${newLineCount} new lines in ${filePath}`,\n linesReplaced,\n backup,\n };\n } catch (error) {\n return {\n success: false,\n message: `Failed to replace lines: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Show file lines with line numbers for debugging\n */\n static async showFileLines(context: {\n filePath: string;\n startLine?: number;\n endLine?: number;\n context?: number;\n projectPath?: string;\n }) {\n const { filePath, startLine, endLine, context: contextLines = 2, projectPath = process.cwd() } = context;\n\n try {\n const fullPath = isAbsolute(filePath) ? filePath : join(projectPath, filePath);\n\n // Read current file content\n const content = await readFile(fullPath, 'utf-8');\n const lines = content.split('\\n');\n\n let targetStart = startLine;\n let targetEnd = endLine;\n\n // If no range specified, show all lines\n if (!targetStart) {\n targetStart = 1;\n targetEnd = lines.length;\n } else if (!targetEnd) {\n targetEnd = targetStart;\n }\n\n // Calculate actual display range with context\n const displayStart = Math.max(1, targetStart - contextLines);\n const displayEnd = Math.min(lines.length, targetEnd + contextLines);\n\n const result = [];\n for (let i = displayStart; i <= displayEnd; i++) {\n const lineIndex = i - 1; // Convert to 0-based for array access\n const isTarget = i >= targetStart && i <= targetEnd;\n\n result.push({\n lineNumber: i,\n content: lineIndex < lines.length ? (lines[lineIndex] ?? '') : '',\n isTarget,\n });\n }\n\n return {\n success: true,\n lines: result,\n totalLines: lines.length,\n message: `Showing lines ${displayStart}-${displayEnd} of ${lines.length} total lines in ${filePath}`,\n };\n } catch (error) {\n return {\n success: false,\n lines: [],\n totalLines: 0,\n message: `Failed to read file: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Signal task completion\n */\n static async signalCompletion(context: {\n summary: string;\n changes: Array<{\n type: 'file_created' | 'file_modified' | 'file_deleted' | 'command_executed' | 'dependency_added';\n description: string;\n path?: string;\n }>;\n validation: {\n testsRun?: boolean;\n buildsSuccessfully?: boolean;\n manualTestingRequired?: boolean;\n };\n nextSteps?: string[];\n }) {\n const completionId = `completion_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\n // Calculate confidence based on validation status\n let confidence = 70; // Base confidence\n if (context.validation.testsRun) confidence += 15;\n if (context.validation.buildsSuccessfully) confidence += 15;\n if (context.validation.manualTestingRequired) confidence -= 10;\n\n // Determine status\n let status: 'completed' | 'needs_review' | 'needs_testing';\n if (context.validation.testsRun && context.validation.buildsSuccessfully) {\n status = 'completed';\n } else if (context.validation.manualTestingRequired) {\n status = 'needs_testing';\n } else {\n status = 'needs_review';\n }\n\n return {\n completionId,\n status,\n summary: context.summary,\n confidence: Math.min(100, Math.max(0, confidence)),\n };\n }\n\n /**\n * Perform intelligent search with context\n */\n static async performSmartSearch(\n context: {\n query: string;\n type?: 'text' | 'regex' | 'fuzzy' | 'semantic';\n scope?: {\n paths?: string[];\n fileTypes?: string[];\n excludePaths?: string[];\n maxResults?: number;\n };\n context?: {\n beforeLines?: number;\n afterLines?: number;\n includeDefinitions?: boolean;\n };\n },\n projectPath: string,\n ) {\n try {\n const { query, type = 'text', scope = {}, context: searchContext = {} } = context;\n\n const { paths = ['.'], fileTypes = [], excludePaths = [], maxResults = 50 } = scope;\n\n const { beforeLines = 2, afterLines = 2 } = searchContext;\n\n // Build command and arguments array safely\n const rgArgs: string[] = [];\n\n // Add context lines\n if (beforeLines > 0) {\n rgArgs.push('-B', beforeLines.toString());\n }\n if (afterLines > 0) {\n rgArgs.push('-A', afterLines.toString());\n }\n\n // Add line numbers\n rgArgs.push('-n');\n\n // Handle search type\n if (type === 'regex') {\n rgArgs.push('-e');\n } else if (type === 'fuzzy') {\n rgArgs.push('--fixed-strings');\n }\n\n // Add file type filters\n if (fileTypes.length > 0) {\n fileTypes.forEach(ft => {\n rgArgs.push('--type-add', `custom:*.${ft}`, '-t', 'custom');\n });\n }\n\n // Add exclude patterns\n excludePaths.forEach(path => {\n rgArgs.push('--glob', `!${path}`);\n });\n\n // Add max count\n rgArgs.push('-m', maxResults.toString());\n\n // Add the search query and paths\n rgArgs.push(query);\n rgArgs.push(...paths);\n\n // Execute safely using execFile\n const { stdout } = await execFile('rg', rgArgs, {\n cwd: projectPath,\n });\n const lines = stdout.split('\\n').filter((line: string) => line.trim());\n\n const matches: Array<{\n file: string;\n line: number;\n column?: number;\n match: string;\n context: { before: string[]; after: string[] };\n relevance?: number;\n }> = [];\n\n let currentMatch: any = null;\n\n lines.forEach((line: string) => {\n if (line.includes(':') && !line.startsWith('-')) {\n // This is a match line\n const parts = line.split(':');\n if (parts.length >= 3) {\n // Save previous match if exists\n if (currentMatch) {\n matches.push(currentMatch);\n }\n\n currentMatch = {\n file: parts[0] || '',\n line: parseInt(parts[1] || '0'),\n match: parts.slice(2).join(':'),\n context: { before: [], after: [] },\n relevance: type === 'fuzzy' ? Math.random() * 100 : undefined,\n };\n }\n } else if (line.startsWith('-') && currentMatch) {\n // This is a context line\n const contextLine = line.substring(1);\n if (currentMatch.context.before.length < beforeLines) {\n currentMatch.context.before.push(contextLine);\n } else {\n currentMatch.context.after.push(contextLine);\n }\n }\n });\n\n // Add the last match\n if (currentMatch) {\n matches.push(currentMatch);\n }\n\n // Count files searched (approximate)\n const filesSearched = new Set(matches.map(m => m.file)).size;\n\n return {\n success: true,\n matches: matches.slice(0, maxResults),\n summary: {\n totalMatches: matches.length,\n filesSearched,\n patterns: [query],\n },\n };\n } catch {\n return {\n success: false,\n matches: [],\n summary: {\n totalMatches: 0,\n filesSearched: 0,\n patterns: [context.query],\n },\n };\n }\n }\n\n // Static storage properties\n private static taskStorage: Map<string, any[]>;\n private static pendingQuestions: Map<string, any>;\n\n /**\n * Read file contents with optional line range\n */\n static async readFile(context: {\n filePath: string;\n startLine?: number;\n endLine?: number;\n encoding?: string;\n projectPath?: string;\n }) {\n try {\n const { filePath, startLine, endLine, encoding = 'utf-8', projectPath } = context;\n\n // Resolve path relative to project directory if it's not absolute\n const resolvedPath = isAbsolute(filePath) ? filePath : resolve(projectPath || process.cwd(), filePath);\n\n const stats = await stat(resolvedPath);\n const content = await readFile(resolvedPath, { encoding: encoding as BufferEncoding });\n const lines = content.split('\\n');\n\n let resultContent = content;\n let resultLines = lines;\n\n if (startLine !== undefined || endLine !== undefined) {\n const start = Math.max(0, (startLine || 1) - 1);\n const end = endLine !== undefined ? Math.min(lines.length, endLine) : lines.length;\n resultLines = lines.slice(start, end);\n resultContent = resultLines.join('\\n');\n }\n\n return {\n success: true,\n content: resultContent,\n lines: resultLines,\n metadata: {\n size: stats.size,\n totalLines: lines.length,\n encoding,\n lastModified: stats.mtime.toISOString(),\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Write content to file with directory creation and backup options\n */\n static async writeFile(context: {\n filePath: string;\n content: string;\n createDirs?: boolean;\n encoding?: string;\n projectPath?: string;\n }) {\n try {\n const { filePath, content, createDirs = true, encoding = 'utf-8', projectPath } = context;\n\n // Resolve path relative to project directory if it's not absolute\n const resolvedPath = isAbsolute(filePath) ? filePath : resolve(projectPath || process.cwd(), filePath);\n const dir = dirname(resolvedPath);\n\n // Create directories if needed\n if (createDirs) {\n await mkdir(dir, { recursive: true });\n }\n\n // Write the file\n await writeFile(resolvedPath, content, { encoding: encoding as BufferEncoding });\n\n return {\n success: true,\n filePath: resolvedPath,\n bytesWritten: Buffer.byteLength(content, encoding as BufferEncoding),\n message: `Successfully wrote ${Buffer.byteLength(content, encoding as BufferEncoding)} bytes to ${filePath}`,\n };\n } catch (error) {\n return {\n success: false,\n filePath: context.filePath,\n message: `Failed to write file: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * List directory contents with filtering and metadata\n */\n static async listDirectory(context: {\n path: string;\n recursive?: boolean;\n includeHidden?: boolean;\n pattern?: string;\n maxDepth?: number;\n includeMetadata?: boolean;\n projectPath?: string;\n }) {\n try {\n const {\n path,\n recursive = false,\n includeHidden = false,\n pattern,\n maxDepth = 10,\n includeMetadata = true,\n projectPath,\n } = context;\n\n const gitignorePath = join(projectPath || process.cwd(), '.gitignore');\n let gitignoreFilter: ignore.Ignore | undefined;\n\n try {\n const gitignoreContent = await readFile(gitignorePath, 'utf-8');\n gitignoreFilter = ignore().add(gitignoreContent);\n } catch (err: any) {\n if (err.code !== 'ENOENT') {\n console.error(`Error reading .gitignore file:`, err);\n }\n // If .gitignore doesn't exist, gitignoreFilter remains undefined, meaning no files are ignored by gitignore.\n }\n\n // Resolve path relative to project directory if it's not absolute\n const resolvedPath = isAbsolute(path) ? path : resolve(projectPath || process.cwd(), path);\n\n const items: Array<{\n name: string;\n path: string;\n type: 'file' | 'directory' | 'symlink';\n size?: number;\n lastModified?: string;\n permissions?: string;\n }> = [];\n\n async function processDirectory(dirPath: string, currentDepth: number = 0) {\n const relativeToProject = relative(projectPath || process.cwd(), dirPath);\n if (gitignoreFilter?.ignores(relativeToProject)) return;\n if (currentDepth > maxDepth) return;\n\n const entries = await readdir(dirPath);\n\n for (const entry of entries) {\n const entryPath = join(dirPath, entry);\n const relativeEntryPath = relative(projectPath || process.cwd(), entryPath);\n if (gitignoreFilter?.ignores(relativeEntryPath)) continue;\n if (!includeHidden && entry.startsWith('.')) continue;\n\n const fullPath = entryPath;\n const relativePath = relative(resolvedPath, fullPath);\n\n if (pattern) {\n // Simple pattern matching\n const regexPattern = pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.');\n if (!new RegExp(regexPattern).test(entry)) continue;\n }\n\n let stats;\n let type: 'file' | 'directory' | 'symlink';\n\n try {\n stats = await stat(fullPath);\n if (stats.isDirectory()) {\n type = 'directory';\n } else if (stats.isSymbolicLink()) {\n type = 'symlink';\n } else {\n type = 'file';\n }\n } catch {\n continue; // Skip entries we can't stat\n }\n\n const item: any = {\n name: entry,\n path: relativePath || entry,\n type,\n };\n\n if (includeMetadata) {\n item.size = stats.size;\n item.lastModified = stats.mtime.toISOString();\n item.permissions = `0${(stats.mode & parseInt('777', 8)).toString(8)}`;\n }\n\n items.push(item);\n\n // Recurse into directories if requested\n if (recursive && type === 'directory') {\n await processDirectory(fullPath, currentDepth + 1);\n }\n }\n }\n\n await processDirectory(resolvedPath);\n\n return {\n success: true,\n items,\n totalItems: items.length,\n path: resolvedPath,\n message: `Listed ${items.length} items in ${resolvedPath}`,\n };\n } catch (error) {\n return {\n success: false,\n items: [],\n totalItems: 0,\n path: context.path,\n message: `Failed to list directory: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Execute shell commands with proper error handling\n */\n static async executeCommand(context: {\n command: string;\n workingDirectory?: string;\n timeout?: number;\n captureOutput?: boolean;\n shell?: string;\n env?: Record<string, string>;\n }) {\n const startTime = Date.now();\n try {\n const { command, workingDirectory, timeout = 30000, captureOutput = true, shell, env } = context;\n\n const execOptions: any = {\n timeout,\n env: { ...process.env, ...env },\n };\n\n if (workingDirectory) {\n execOptions.cwd = workingDirectory;\n }\n\n if (shell) {\n execOptions.shell = shell;\n }\n\n const { stdout, stderr } = await exec(command, execOptions);\n const executionTime = Date.now() - startTime;\n\n return {\n success: true,\n exitCode: 0,\n stdout: captureOutput ? String(stdout) : undefined,\n stderr: captureOutput ? String(stderr) : undefined,\n command,\n workingDirectory,\n executionTime,\n };\n } catch (error: any) {\n const executionTime = Date.now() - startTime;\n\n return {\n success: false,\n exitCode: error.code || 1,\n stdout: String(error.stdout || ''),\n stderr: String(error.stderr || ''),\n command: context.command,\n workingDirectory: context.workingDirectory,\n executionTime,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Web search using a simple search approach\n */\n static async webSearch(context: {\n query: string;\n maxResults?: number;\n region?: string;\n language?: string;\n includeImages?: boolean;\n dateRange?: 'day' | 'week' | 'month' | 'year' | 'all';\n }) {\n try {\n const {\n query,\n maxResults = 10,\n // region = 'us',\n // language = 'en',\n // includeImages = false,\n // dateRange = 'all',\n } = context;\n\n const startTime = Date.now();\n\n // For now, implement a basic search using DuckDuckGo's instant answer API\n // In a real implementation, you'd want to use a proper search API\n const searchUrl = `https://api.duckduckgo.com/?q=${encodeURIComponent(query)}&format=json&no_redirect=1&skip_disambig=1`;\n\n const response = await fetch(searchUrl);\n const data: any = await response.json();\n\n const results: Array<{\n title: string;\n url: string;\n snippet: string;\n domain: string;\n publishDate?: string;\n relevanceScore?: number;\n }> = [];\n\n // Parse DuckDuckGo results\n if (data.RelatedTopics && Array.isArray(data.RelatedTopics)) {\n for (const topic of data.RelatedTopics.slice(0, maxResults)) {\n if (topic.FirstURL && topic.Text) {\n const url = new URL(topic.FirstURL);\n results.push({\n title: topic.Text.split(' - ')[0] || topic.Text.substring(0, 60),\n url: topic.FirstURL,\n snippet: topic.Text,\n domain: url.hostname,\n relevanceScore: Math.random() * 100, // Placeholder scoring\n });\n }\n }\n }\n\n // Add abstract as first result if available\n if (data.Abstract && data.AbstractURL) {\n const url = new URL(data.AbstractURL);\n results.unshift({\n title: data.Heading || 'Main Result',\n url: data.AbstractURL,\n snippet: data.Abstract,\n domain: url.hostname,\n relevanceScore: 100,\n });\n }\n\n const searchTime = Date.now() - startTime;\n\n return {\n success: true,\n query,\n results: results.slice(0, maxResults),\n totalResults: results.length,\n searchTime,\n suggestions:\n data.RelatedTopics?.slice(maxResults, maxResults + 3)\n ?.map((t: any) => t.Text?.split(' - ')[0] || t.Text?.substring(0, 30))\n .filter(Boolean) || [],\n };\n } catch (error) {\n return {\n success: false,\n query: context.query,\n results: [],\n totalResults: 0,\n searchTime: 0,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n}\n","import { Agent } from '@mastra/core/agent';\nimport type { MastraLanguageModel } from '@mastra/core/agent';\nimport type { CoreMessage } from '@mastra/core/llm';\nimport { MemoryProcessor } from '@mastra/core/memory';\n\n/**\n * Summarizes tool calls and caches results to avoid re-summarizing identical calls\n */\nexport class ToolSummaryProcessor extends MemoryProcessor {\n private summaryAgent: Agent;\n private summaryCache: Map<string, string> = new Map();\n\n constructor({ summaryModel }: { summaryModel: MastraLanguageModel }) {\n super({ name: 'ToolSummaryProcessor' });\n this.summaryAgent = new Agent({\n id: 'tool-summary-agent',\n name: 'Tool Summary Agent',\n description: 'A summary agent that summarizes tool calls and results',\n instructions: 'You are a summary agent that summarizes tool calls and results',\n model: summaryModel,\n });\n }\n\n /**\n * Creates a cache key from tool call arguments\n */\n public createCacheKey(toolCall: any): string {\n if (!toolCall) return 'unknown';\n\n // Create a deterministic key from tool name and arguments\n const toolName = toolCall.toolName || 'unknown';\n const args = toolCall.args || {};\n\n // Sort keys for consistent hashing\n const sortedArgs = Object.keys(args)\n .sort()\n .reduce((result: Record<string, any>, key) => {\n result[key] = args[key];\n return result;\n }, {});\n\n return `${toolName}:${JSON.stringify(sortedArgs)}`;\n }\n\n /**\n * Clears the summary cache\n */\n public clearCache(): void {\n this.summaryCache.clear();\n }\n\n /**\n * Gets cache statistics\n */\n public getCacheStats(): { size: number; keys: string[] } {\n return {\n size: this.summaryCache.size,\n keys: Array.from(this.summaryCache.keys()),\n };\n }\n\n async process(messages: CoreMessage[]): Promise<CoreMessage[]> {\n // Collect all tool calls that need summarization\n const summaryTasks: Array<{\n content: any;\n promise: Promise<any>;\n cacheKey: string;\n }> = [];\n\n // First pass: collect all tool results that need summarization\n for (const message of messages) {\n if (\n message.role === 'tool' &&\n Array.isArray(message.content) &&\n message.content.length > 0 &&\n message.content?.some(content => content.type === 'tool-result')\n ) {\n for (const content of message.content) {\n if (content.type === 'tool-result') {\n const assistantMessageWithToolCall = messages.find(\n message =>\n message.role === 'assistant' &&\n Array.isArray(message.content) &&\n message.content.length > 0 &&\n message.content?.some(\n assistantContent =>\n assistantContent.type === 'tool-call' && assistantContent.toolCallId === content.toolCallId,\n ),\n );\n const toolCall = Array.isArray(assistantMessageWithToolCall?.content)\n ? assistantMessageWithToolCall?.content.find(\n assistantContent =>\n assistantContent.type === 'tool-call' && assistantContent.toolCallId === content.toolCallId,\n )\n : null;\n\n const cacheKey = this.createCacheKey(toolCall);\n const cachedSummary = this.summaryCache.get(cacheKey);\n\n if (cachedSummary) {\n // Use cached summary immediately\n content.result = `Tool call summary: ${cachedSummary}`;\n } else {\n // Create a promise for this summary (but don't await yet)\n const summaryPromise = this.summaryAgent.generate(\n `Summarize the following tool call: ${JSON.stringify(toolCall)} and result: ${JSON.stringify(content)}`,\n );\n\n summaryTasks.push({\n content,\n promise: summaryPromise,\n cacheKey,\n });\n }\n }\n }\n }\n }\n\n // Execute all non-cached summaries in parallel\n if (summaryTasks.length > 0) {\n const summaryResults = await Promise.allSettled(summaryTasks.map(task => task.promise));\n\n // Apply the results back to the content and cache them\n summaryTasks.forEach((task, index) => {\n const result = summaryResults[index];\n if (!result) return;\n\n if (result.status === 'fulfilled') {\n const summaryResult = result.value;\n const summaryText = summaryResult.text;\n\n // Cache the summary for future use\n this.summaryCache.set(task.cacheKey, summaryText);\n\n // Apply to content\n task.content.result = `Tool call summary: ${summaryText}`;\n } else if (result.status === 'rejected') {\n // Handle failed summary - use fallback or log error\n console.warn(`Failed to generate summary for tool call:`, result.reason);\n task.content.result = `Tool call summary: [Summary generation failed]`;\n }\n });\n }\n\n return messages;\n }\n}\n","import { Agent } from '@mastra/core/agent';\nimport type {\n AiMessageType,\n AgentGenerateOptions,\n AgentStreamOptions,\n AgentExecutionOptions,\n} from '@mastra/core/agent';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { CoreMessage } from '@mastra/core/llm';\nimport type { MastraModelOutput, OutputSchema } from '@mastra/core/stream';\nimport { Memory } from '@mastra/memory';\nimport { TokenLimiter } from '@mastra/memory/processors';\nimport { AgentBuilderDefaults } from '../defaults';\nimport { ToolSummaryProcessor } from '../processors/tool-summary';\nimport type { AgentBuilderConfig, GenerateAgentOptions } from '../types';\n\n// =============================================================================\n// Template Merge Workflow Implementation\n// =============================================================================\n//\n// This workflow implements a comprehensive template merging system that:\n// 1. Clones template repositories at specific refs (tags/commits)\n// 2. Discovers units (agents, workflows, MCP servers/tools) in templates\n// 3. Topologically orders units based on dependencies\n// 4. Analyzes conflicts and creates safety classifications\n// 5. Applies changes with git branching and checkpoints per unit\n//\n// The workflow follows the \"auto-decide vs ask\" principles:\n// - Auto: adding new files, missing deps, appending arrays, new scripts with template:slug:* namespace\n// - Prompt: overwriting files, major upgrades, renaming conflicts, new ports, postInstall commands\n// - Block: removing files, downgrading deps, changing TS target/module, modifying CI/CD secrets\n//\n// Usage with Mastra templates (see https://mastra.ai/api/templates.json):\n// const run = await agentBuilderTemplateWorkflow.createRun();\n// const result = await run.start({\n// inputData: {\n// repo: 'https://github.com/mastra-ai/template-pdf-questions',\n// ref: 'main', // optional\n// targetPath: './my-project', // optional, defaults to cwd\n// }\n// });\n// // The workflow will automatically analyze and merge the template structure\n//\n// =============================================================================\n\nexport class AgentBuilder extends Agent {\n private builderConfig: AgentBuilderConfig;\n\n /**\n * Constructor for AgentBuilder\n */\n constructor(config: AgentBuilderConfig) {\n const additionalInstructions = config.instructions ? `## Priority Instructions \\n\\n${config.instructions}` : '';\n const combinedInstructions = additionalInstructions + AgentBuilderDefaults.DEFAULT_INSTRUCTIONS(config.projectPath);\n\n const agentConfig = {\n name: 'agent-builder',\n description:\n 'An AI agent specialized in generating Mastra agents, tools, and workflows from natural language requirements.',\n instructions: combinedInstructions,\n model: config.model,\n tools: async () => {\n return {\n ...(await AgentBuilderDefaults.listToolsForMode(config.projectPath, config.mode)),\n ...(config.tools || {}),\n };\n },\n memory: new Memory({\n options: AgentBuilderDefaults.DEFAULT_MEMORY_CONFIG,\n processors: [\n // use the write to disk processor to debug the agent's context\n // new WriteToDiskProcessor({ prefix: 'before-filter' }),\n new ToolSummaryProcessor({ summaryModel: config.summaryModel || config.model }),\n new TokenLimiter(100000),\n // new WriteToDiskProcessor({ prefix: 'after-filter' }),\n ],\n }),\n };\n\n super(agentConfig);\n this.builderConfig = config;\n }\n\n /**\n * Enhanced generate method with AgentBuilder-specific configuration\n * Overrides the base Agent generate method to provide additional project context\n */\n generateLegacy: Agent['generateLegacy'] = async (\n messages: string | string[] | CoreMessage[] | AiMessageType[],\n generateOptions: (GenerateAgentOptions & AgentGenerateOptions<any, any>) | undefined = {},\n ): Promise<any> => {\n const { maxSteps, ...baseOptions } = generateOptions;\n\n const originalInstructions = await this.getInstructions({ requestContext: generateOptions?.requestContext });\n const additionalInstructions = baseOptions.instructions;\n\n let enhancedInstructions = originalInstructions as string;\n if (additionalInstructions) {\n enhancedInstructions = `${originalInstructions}\\n\\n${additionalInstructions}`;\n }\n\n const enhancedContext = [...(baseOptions.context || [])];\n\n const enhancedOptions = {\n ...baseOptions,\n maxSteps: maxSteps || 100, // Higher default for code generation\n temperature: 0.3, // Lower temperature for more consistent code generation\n instructions: enhancedInstructions,\n context: enhancedContext,\n } satisfies AgentGenerateOptions<any, any>;\n\n this.logger.debug(`[AgentBuilder:${this.name}] Starting generation with enhanced context`, {\n projectPath: this.builderConfig.projectPath,\n });\n\n return super.generateLegacy(messages, enhancedOptions);\n };\n\n /**\n * Enhanced stream method with AgentBuilder-specific configuration\n * Overrides the base Agent stream method to provide additional project context\n */\n streamLegacy: Agent['streamLegacy'] = async (\n messages: string | string[] | CoreMessage[] | AiMessageType[],\n streamOptions: (GenerateAgentOptions & AgentStreamOptions<any, any>) | undefined = {},\n ): Promise<any> => {\n const { maxSteps, ...baseOptions } = streamOptions;\n\n const originalInstructions = await this.getInstructions({ requestContext: streamOptions?.requestContext });\n const additionalInstructions = baseOptions.instructions;\n\n let enhancedInstructions = originalInstructions as string;\n if (additionalInstructions) {\n enhancedInstructions = `${originalInstructions}\\n\\n${additionalInstructions}`;\n }\n const enhancedContext = [...(baseOptions.context || [])];\n\n const enhancedOptions = {\n ...baseOptions,\n maxSteps: maxSteps || 100, // Higher default for code generation\n temperature: 0.3, // Lower temperature for more consistent code generation\n instructions: enhancedInstructions,\n context: enhancedContext,\n };\n\n this.logger.debug(`[AgentBuilder:${this.name}] Starting streaming with enhanced context`, {\n projectPath: this.builderConfig.projectPath,\n });\n\n return super.streamLegacy(messages, enhancedOptions);\n };\n\n /**\n * Enhanced stream method with AgentBuilder-specific configuration\n * Overrides the base Agent stream method to provide additional project context\n */\n async stream<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n streamOptions?: AgentExecutionOptions<OUTPUT>,\n ): Promise<MastraModelOutput<OUTPUT>> {\n const { ...baseOptions } = streamOptions || {};\n\n const originalInstructions = await this.getInstructions({ requestContext: streamOptions?.requestContext });\n const additionalInstructions = baseOptions.instructions;\n\n let enhancedInstructions = originalInstructions as string;\n if (additionalInstructions) {\n enhancedInstructions = `${originalInstructions}\\n\\n${additionalInstructions}`;\n }\n const enhancedContext = [...(baseOptions.context || [])];\n\n const enhancedOptions = {\n ...baseOptions,\n temperature: 0.3, // Lower temperature for more consistent code generation\n maxSteps: baseOptions?.maxSteps || 100,\n instructions: enhancedInstructions,\n context: enhancedContext,\n };\n\n this.logger.debug(`[AgentBuilder:${this.name}] Starting streaming with enhanced context`, {\n projectPath: this.builderConfig.projectPath,\n });\n\n return super.stream(messages, enhancedOptions);\n }\n\n async generate<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n options?: AgentExecutionOptions<OUTPUT>,\n ): Promise<Awaited<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>>> {\n const { ...baseOptions } = options || {};\n\n const originalInstructions = await this.getInstructions({ requestContext: options?.requestContext });\n const additionalInstructions = baseOptions.instructions;\n\n let enhancedInstructions = originalInstructions as string;\n if (additionalInstructions) {\n enhancedInstructions = `${originalInstructions}\\n\\n${additionalInstructions}`;\n }\n const enhancedContext = [...(baseOptions.context || [])];\n\n const enhancedOptions = {\n ...baseOptions,\n temperature: 0.3, // Lower temperature for more consistent code generation\n maxSteps: baseOptions?.maxSteps || 100,\n instructions: enhancedInstructions,\n context: enhancedContext,\n };\n\n this.logger.debug(`[AgentBuilder:${this.name}] Starting streaming with enhanced context`, {\n projectPath: this.builderConfig.projectPath,\n });\n\n return super.generate(messages, enhancedOptions);\n }\n}\n","import { existsSync } from 'fs';\nimport { mkdtemp, copyFile, readFile, mkdir, readdir, rm, writeFile } from 'fs/promises';\nimport { tmpdir } from 'os';\nimport { join, dirname, resolve, extname, basename } from 'path';\nimport { openai } from '@ai-sdk/openai';\nimport { Agent, tryGenerateWithJsonFallback, tryStreamWithJsonFallback } from '@mastra/core/agent';\nimport { createTool } from '@mastra/core/tools';\nimport { createWorkflow, createStep } from '@mastra/core/workflows';\nimport { z } from 'zod';\nimport { AgentBuilder } from '../..';\nimport { AgentBuilderDefaults } from '../../defaults';\nimport type { TemplateUnit, UnitKind } from '../../types';\nimport {\n ApplyResultSchema,\n AgentBuilderInputSchema,\n CloneTemplateResultSchema,\n PackageAnalysisSchema,\n DiscoveryResultSchema,\n OrderedUnitsSchema,\n PackageMergeInputSchema,\n PackageMergeResultSchema,\n InstallInputSchema,\n InstallResultSchema,\n FileCopyInputSchema,\n FileCopyResultSchema,\n IntelligentMergeInputSchema,\n IntelligentMergeResultSchema,\n ValidationFixInputSchema,\n ValidationFixResultSchema,\n PrepareBranchInputSchema,\n PrepareBranchResultSchema,\n} from '../../types';\nimport {\n getMastraTemplate,\n kindWeight,\n spawnSWPM,\n logGitState,\n backupAndReplaceFile,\n renameAndCopyFile,\n gitCheckoutBranch,\n gitClone,\n gitCheckoutRef,\n gitRevParse,\n gitAddAndCommit,\n resolveTargetPath,\n mergeGitignoreFiles,\n mergeEnvFiles,\n resolveModel,\n} from '../../utils';\n\n// Step 1: Clone template to temp directory\nconst cloneTemplateStep = createStep({\n id: 'clone-template',\n description: 'Clone the template repository to a temporary directory at the specified ref',\n inputSchema: AgentBuilderInputSchema,\n outputSchema: CloneTemplateResultSchema,\n execute: async ({ inputData }) => {\n const { repo, ref = 'main', slug, targetPath } = inputData;\n\n if (!repo) {\n throw new Error('Repository URL or path is required');\n }\n\n // Extract slug from repo URL if not provided\n const inferredSlug =\n slug ||\n repo\n .split('/')\n .pop()\n ?.replace(/\\.git$/, '') ||\n 'template';\n\n // Create temporary directory\n const tempDir = await mkdtemp(join(tmpdir(), 'mastra-template-'));\n\n try {\n // Clone repository\n await gitClone(repo, tempDir);\n\n // Checkout specific ref if provided\n if (ref !== 'main' && ref !== 'master') {\n await gitCheckoutRef(tempDir, ref);\n }\n\n // Get commit SHA\n const commitSha = await gitRevParse(tempDir, 'HEAD');\n\n return {\n templateDir: tempDir,\n commitSha: commitSha.trim(),\n slug: inferredSlug,\n success: true,\n targetPath,\n };\n } catch (error) {\n // Cleanup on error\n try {\n await rm(tempDir, { recursive: true, force: true });\n } catch {}\n\n return {\n templateDir: '',\n commitSha: '',\n slug: slug || 'unknown',\n success: false,\n error: `Failed to clone template: ${error instanceof Error ? error.message : String(error)}`,\n targetPath,\n };\n }\n },\n});\n\n// Step 2: Analyze template package.json for dependencies\nconst analyzePackageStep = createStep({\n id: 'analyze-package',\n description: 'Analyze the template package.json to extract dependency information',\n inputSchema: CloneTemplateResultSchema,\n outputSchema: PackageAnalysisSchema,\n execute: async ({ inputData }) => {\n console.info('Analyzing template package.json...');\n const { templateDir } = inputData;\n const packageJsonPath = join(templateDir, 'package.json');\n\n try {\n const packageJsonContent = await readFile(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(packageJsonContent);\n\n console.info('Template package.json:', JSON.stringify(packageJson, null, 2));\n\n return {\n dependencies: packageJson.dependencies || {},\n devDependencies: packageJson.devDependencies || {},\n peerDependencies: packageJson.peerDependencies || {},\n scripts: packageJson.scripts || {},\n name: packageJson.name || '',\n version: packageJson.version || '',\n description: packageJson.description || '',\n success: true,\n };\n } catch (error) {\n console.warn(`Failed to read template package.json: ${error instanceof Error ? error.message : String(error)}`);\n return {\n dependencies: {},\n devDependencies: {},\n peerDependencies: {},\n scripts: {},\n name: '',\n version: '',\n description: '',\n success: true, // This is a graceful fallback, not a failure\n };\n }\n },\n});\n\n// Step 3: Discover template units by scanning the templates directory\nconst discoverUnitsStep = createStep({\n id: 'discover-units',\n description: 'Discover template units by analyzing the templates directory structure',\n inputSchema: CloneTemplateResultSchema,\n outputSchema: DiscoveryResultSchema,\n execute: async ({ inputData, requestContext }) => {\n const { templateDir } = inputData;\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n const tools = await AgentBuilderDefaults.DEFAULT_TOOLS(templateDir);\n\n console.info('targetPath', targetPath);\n\n const model = await resolveModel({ requestContext, projectPath: targetPath, defaultModel: openai('gpt-4.1') });\n\n try {\n const agent = new Agent({\n id: 'mastra-project-discoverer',\n model,\n instructions: `You are an expert at analyzing Mastra projects.\n\nYour task is to scan the provided directory and identify all available units (agents, workflows, tools, MCP servers, networks).\n\nMastra Project Structure Analysis:\n- Each Mastra project has a structure like: ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.agent}, ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.workflow}, ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.tool}, ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE['mcp-server']}, ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.network}\n- Analyze TypeScript files in each category directory to identify exported units\n\nCRITICAL: YOU MUST USE YOUR TOOLS (readFile, listDirectory) TO DISCOVER THE UNITS IN THE TEMPLATE DIRECTORY.\n\nIMPORTANT - Agent Discovery Rules:\n1. **Multiple Agent Files**: Some templates have separate files for each agent (e.g., evaluationAgent.ts, researchAgent.ts)\n2. **Single File Multiple Agents**: Some files may export multiple agents (look for multiple 'export const' or 'export default' statements)\n3. **Agent Identification**: Look for exported variables that are instances of 'new Agent()' or similar patterns\n4. **Naming Convention**: Agent names should be extracted from the export name (e.g., 'weatherAgent', 'evaluationAgent')\n\nFor each Mastra project directory you analyze:\n1. Scan all TypeScript files in ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.agent} and identify ALL exported agents\n2. Scan all TypeScript files in ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.workflow} and identify ALL exported workflows\n3. Scan all TypeScript files in ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.tool} and identify ALL exported tools\n4. Scan all TypeScript files in ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE['mcp-server']} and identify ALL exported MCP servers\n5. Scan all TypeScript files in ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.network} and identify ALL exported networks\n6. Scan for any OTHER files in src/mastra that are NOT in the above default folders (e.g., lib/, utils/, types/, etc.) and identify them as 'other' files\n\nIMPORTANT - Naming Consistency Rules:\n- For ALL unit types (including 'other'), the 'name' field should be the filename WITHOUT extension\n- For structured units (agents, workflows, tools, etc.), prefer the actual export name if clearly identifiable\n- use the base filename without extension for the id (e.g., 'util.ts' β name: 'util')\n- use the relative path from the template root for the file (e.g., 'src/mastra/lib/util.ts' β file: 'src/mastra/lib/util.ts')\n\nReturn the actual exported names of the units, as well as the file names.`,\n name: 'Mastra Project Discoverer',\n tools: {\n readFile: tools.readFile,\n listDirectory: tools.listDirectory,\n },\n });\n\n const isV2 = model.specificationVersion === 'v2';\n\n const prompt = `Analyze the Mastra project directory structure at \"${templateDir}\".\n\n List directory contents using listDirectory tool, and then analyze each file with readFile tool.\n IMPORTANT:\n - Look inside the actual file content to find export statements like 'export const agentName = new Agent(...)'\n - A single file may contain multiple exports\n - Return the actual exported variable names, as well as the file names\n - If a directory doesn't exist or has no files, return an empty array\n\n Return the analysis in the exact format specified in the output schema.`;\n\n const output = z.object({\n agents: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n workflows: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n tools: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n mcp: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n networks: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n other: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n });\n\n const result = isV2\n ? await tryGenerateWithJsonFallback(agent, prompt, {\n structuredOutput: {\n schema: output,\n },\n maxSteps: 100,\n })\n : await agent.generateLegacy(prompt, {\n experimental_output: output,\n maxSteps: 100,\n });\n\n const template = result.object ?? {};\n\n const units: TemplateUnit[] = [];\n\n // Add agents\n template.agents?.forEach((agentId: { name: string; file: string }) => {\n units.push({ kind: 'agent', id: agentId.name, file: agentId.file });\n });\n\n // Add workflows\n template.workflows?.forEach((workflowId: { name: string; file: string }) => {\n units.push({ kind: 'workflow', id: workflowId.name, file: workflowId.file });\n });\n\n // Add tools\n template.tools?.forEach((toolId: { name: string; file: string }) => {\n units.push({ kind: 'tool', id: toolId.name, file: toolId.file });\n });\n\n // Add MCP servers\n template.mcp?.forEach((mcpId: { name: string; file: string }) => {\n units.push({ kind: 'mcp-server', id: mcpId.name, file: mcpId.file });\n });\n\n // Add networks\n template.networks?.forEach((networkId: { name: string; file: string }) => {\n units.push({ kind: 'network', id: networkId.name, file: networkId.file });\n });\n\n // Add other files\n template.other?.forEach((otherId: { name: string; file: string }) => {\n units.push({ kind: 'other', id: otherId.name, file: otherId.file });\n });\n\n console.info('Discovered units:', JSON.stringify(units, null, 2));\n\n if (units.length === 0) {\n throw new Error(`No Mastra units (agents, workflows, tools) found in template.\n Possible causes:\n - Template may not follow standard Mastra structure\n - AI agent couldn't analyze template files (model/token limits)\n - Template is empty or in wrong branch\n\n Debug steps:\n - Check template has files in src/mastra/ directories\n - Try a different branch\n - Check template repository structure manually`);\n }\n\n return {\n units,\n success: true,\n };\n } catch (error) {\n console.error('Failed to discover units:', error);\n return {\n units: [],\n success: false,\n error: `Failed to discover units: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n },\n});\n\n// Step 4: Topological ordering (simplified)\nconst orderUnitsStep = createStep({\n id: 'order-units',\n description: 'Sort units in topological order based on kind weights',\n inputSchema: DiscoveryResultSchema,\n outputSchema: OrderedUnitsSchema,\n execute: async ({ inputData }) => {\n const { units } = inputData;\n\n // Simple sort by kind weight (mcp-servers first, then tools, agents, workflows, integration last)\n const orderedUnits = [...units].sort((a, b) => {\n const aWeight = kindWeight(a.kind);\n const bWeight = kindWeight(b.kind);\n return aWeight - bWeight;\n });\n\n return {\n orderedUnits,\n success: true,\n };\n },\n});\n\n// Step 5: Prepare branch\nconst prepareBranchStep = createStep({\n id: 'prepare-branch',\n description: 'Create or switch to integration branch before modifications',\n inputSchema: PrepareBranchInputSchema,\n outputSchema: PrepareBranchResultSchema,\n execute: async ({ inputData, requestContext }) => {\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n try {\n const branchName = `feat/install-template-${inputData.slug}`;\n await gitCheckoutBranch(branchName, targetPath);\n\n return {\n branchName,\n success: true,\n };\n } catch (error) {\n console.error('Failed to prepare branch:', error);\n return {\n branchName: `feat/install-template-${inputData.slug}`, // Return the intended name anyway\n success: false,\n error: `Failed to prepare branch: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n },\n});\n\n// Step 6: Package merge\nconst packageMergeStep = createStep({\n id: 'package-merge',\n description: 'Merge template package.json dependencies into target project',\n inputSchema: PackageMergeInputSchema,\n outputSchema: PackageMergeResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Package merge step starting...');\n const { slug, packageInfo } = inputData;\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n try {\n const targetPkgPath = join(targetPath, 'package.json');\n\n let targetPkgRaw = '{}';\n try {\n targetPkgRaw = await readFile(targetPkgPath, 'utf-8');\n } catch {\n console.warn(`No existing package.json at ${targetPkgPath}, creating a new one`);\n }\n\n let targetPkg: any;\n try {\n targetPkg = JSON.parse(targetPkgRaw || '{}');\n } catch (e) {\n throw new Error(\n `Failed to parse existing package.json at ${targetPkgPath}: ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n\n const ensureObj = (o: any) => (o && typeof o === 'object' ? o : {});\n\n targetPkg.dependencies = ensureObj(targetPkg.dependencies);\n targetPkg.devDependencies = ensureObj(targetPkg.devDependencies);\n targetPkg.peerDependencies = ensureObj(targetPkg.peerDependencies);\n targetPkg.scripts = ensureObj(targetPkg.scripts);\n\n const tplDeps = ensureObj(packageInfo.dependencies);\n const tplDevDeps = ensureObj(packageInfo.devDependencies);\n const tplPeerDeps = ensureObj(packageInfo.peerDependencies);\n const tplScripts = ensureObj(packageInfo.scripts);\n\n const existsAnywhere = (name: string) =>\n name in targetPkg.dependencies || name in targetPkg.devDependencies || name in targetPkg.peerDependencies;\n\n // Merge dependencies: add only if missing everywhere\n for (const [name, ver] of Object.entries(tplDeps)) {\n if (!existsAnywhere(name)) {\n (targetPkg.dependencies as Record<string, string>)[name] = String(ver);\n }\n }\n\n // Merge devDependencies\n for (const [name, ver] of Object.entries(tplDevDeps)) {\n if (!existsAnywhere(name)) {\n (targetPkg.devDependencies as Record<string, string>)[name] = String(ver);\n }\n }\n\n // Merge peerDependencies\n for (const [name, ver] of Object.entries(tplPeerDeps)) {\n if (!(name in targetPkg.peerDependencies)) {\n (targetPkg.peerDependencies as Record<string, string>)[name] = String(ver);\n }\n }\n\n // Merge scripts with prefixed keys to avoid collisions\n const prefix = `template:${slug}:`;\n for (const [name, cmd] of Object.entries(tplScripts)) {\n const newKey = `${prefix}${name}`;\n if (!(newKey in targetPkg.scripts)) {\n (targetPkg.scripts as Record<string, string>)[newKey] = String(cmd);\n }\n }\n\n await writeFile(targetPkgPath, JSON.stringify(targetPkg, null, 2), 'utf-8');\n\n await gitAddAndCommit(targetPath, `feat(template): merge deps for ${slug}`, [targetPkgPath], {\n skipIfNoStaged: true,\n });\n\n return {\n success: true,\n applied: true,\n message: `Successfully merged template dependencies for ${slug}`,\n };\n } catch (error) {\n console.error('Package merge failed:', error);\n return {\n success: false,\n applied: false,\n message: `Package merge failed: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 7: Install\nconst installStep = createStep({\n id: 'install',\n description: 'Install packages based on merged package.json',\n inputSchema: InstallInputSchema,\n outputSchema: InstallResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Running install step...');\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n try {\n // Run install using swpm (no specific packages)\n await spawnSWPM(targetPath, 'install', []);\n\n const lock = ['pnpm-lock.yaml', 'package-lock.json', 'yarn.lock']\n .map(f => join(targetPath, f))\n .find(f => existsSync(f));\n\n if (lock) {\n await gitAddAndCommit(targetPath, `chore(template): commit lockfile after install`, [lock], {\n skipIfNoStaged: true,\n });\n }\n\n return {\n success: true,\n };\n } catch (error) {\n console.error('Install failed:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 7: Programmatic File Copy Step - copies template files to target project\nconst programmaticFileCopyStep = createStep({\n id: 'programmatic-file-copy',\n description: 'Programmatically copy template files to target project based on ordered units',\n inputSchema: FileCopyInputSchema,\n outputSchema: FileCopyResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Programmatic file copy step starting...');\n const { orderedUnits, templateDir, commitSha, slug } = inputData;\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n try {\n const copiedFiles: Array<{\n source: string;\n destination: string;\n unit: { kind: UnitKind; id: string };\n }> = [];\n\n const conflicts: Array<{\n unit: { kind: UnitKind; id: string };\n issue: string;\n sourceFile: string;\n targetFile: string;\n }> = [];\n\n // Analyze target project naming convention first\n const analyzeNamingConvention = async (\n directory: string,\n ): Promise<'camelCase' | 'snake_case' | 'kebab-case' | 'PascalCase' | 'unknown'> => {\n try {\n const files = await readdir(resolve(targetPath, directory), { withFileTypes: true });\n const tsFiles = files.filter(f => f.isFile() && f.name.endsWith('.ts')).map(f => f.name);\n\n if (tsFiles.length === 0) return 'unknown';\n\n // Check for patterns\n const camelCaseCount = tsFiles.filter(f => /^[a-z][a-zA-Z0-9]*\\.ts$/.test(f)).length;\n const snakeCaseCount = tsFiles.filter(f => /^[a-z][a-z0-9_]*\\.ts$/.test(f) && f.includes('_')).length;\n const kebabCaseCount = tsFiles.filter(f => /^[a-z][a-z0-9-]*\\.ts$/.test(f) && f.includes('-')).length;\n const pascalCaseCount = tsFiles.filter(f => /^[A-Z][a-zA-Z0-9]*\\.ts$/.test(f)).length;\n\n const max = Math.max(camelCaseCount, snakeCaseCount, kebabCaseCount, pascalCaseCount);\n if (max === 0) return 'unknown';\n\n if (camelCaseCount === max) return 'camelCase';\n if (snakeCaseCount === max) return 'snake_case';\n if (kebabCaseCount === max) return 'kebab-case';\n if (pascalCaseCount === max) return 'PascalCase';\n\n return 'unknown';\n } catch {\n return 'unknown';\n }\n };\n\n // Convert naming based on convention\n const convertNaming = (name: string, convention: string): string => {\n const baseName = basename(name, extname(name));\n const ext = extname(name);\n\n switch (convention) {\n case 'camelCase':\n return (\n baseName\n .replace(/[-_]/g, '')\n .replace(/([A-Z])/g, (match, p1, offset) => (offset === 0 ? p1.toLowerCase() : p1)) + ext\n );\n case 'snake_case':\n return (\n baseName\n .replace(/[-]/g, '_')\n .replace(/([A-Z])/g, (match, p1, offset) => (offset === 0 ? '' : '_') + p1.toLowerCase()) + ext\n );\n case 'kebab-case':\n return (\n baseName\n .replace(/[_]/g, '-')\n .replace(/([A-Z])/g, (match, p1, offset) => (offset === 0 ? '' : '-') + p1.toLowerCase()) + ext\n );\n case 'PascalCase':\n return baseName.replace(/[-_]/g, '').replace(/^[a-z]/, match => match.toUpperCase()) + ext;\n default:\n return name;\n }\n };\n\n // Process each unit\n for (const unit of orderedUnits) {\n console.info(`Processing ${unit.kind} unit \"${unit.id}\" from file \"${unit.file}\"`);\n\n // Resolve source file path with fallback logic\n let sourceFile: string;\n let resolvedUnitFile: string;\n\n // Check if unit.file already contains directory structure\n if (unit.file.includes('/')) {\n // unit.file has path structure (e.g., \"src/mastra/agents/weatherAgent.ts\")\n sourceFile = resolve(templateDir, unit.file);\n resolvedUnitFile = unit.file;\n } else {\n // unit.file is just filename (e.g., \"weatherAgent.ts\") - use fallback\n const folderPath =\n AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE[\n unit.kind as keyof typeof AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE\n ];\n if (!folderPath) {\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Unknown unit kind: ${unit.kind}`,\n sourceFile: unit.file,\n targetFile: 'N/A',\n });\n continue;\n }\n resolvedUnitFile = `${folderPath}/${unit.file}`;\n sourceFile = resolve(templateDir, resolvedUnitFile);\n }\n\n // Check if source file exists\n if (!existsSync(sourceFile)) {\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Source file not found: ${sourceFile}`,\n sourceFile: resolvedUnitFile,\n targetFile: 'N/A',\n });\n continue;\n }\n\n // Extract target directory from resolved unit file path\n const targetDir = dirname(resolvedUnitFile);\n\n // Analyze target naming convention\n const namingConvention = await analyzeNamingConvention(targetDir);\n console.info(`Detected naming convention in ${targetDir}: ${namingConvention}`);\n\n // Convert unit.id to target filename with proper extension\n // Note: Check if unit.id already includes extension to avoid double extensions\n const hasExtension = extname(unit.id) !== '';\n const baseId = hasExtension ? basename(unit.id, extname(unit.id)) : unit.id;\n const fileExtension = extname(unit.file);\n const convertedFileName =\n namingConvention !== 'unknown'\n ? convertNaming(baseId + fileExtension, namingConvention)\n : baseId + fileExtension;\n\n const targetFile = resolve(targetPath, targetDir, convertedFileName);\n\n // Handle file conflicts with strategy-based resolution\n if (existsSync(targetFile)) {\n const strategy = determineConflictStrategy(unit, targetFile);\n console.info(`File exists: ${convertedFileName}, using strategy: ${strategy}`);\n\n switch (strategy) {\n case 'skip':\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `File exists - skipped: ${convertedFileName}`,\n sourceFile: unit.file,\n targetFile: `${targetDir}/${convertedFileName}`,\n });\n console.info(`βοΈ Skipped ${unit.kind} \"${unit.id}\": file already exists`);\n continue;\n\n case 'backup-and-replace':\n try {\n await backupAndReplaceFile(sourceFile, targetFile);\n copiedFiles.push({\n source: sourceFile,\n destination: targetFile,\n unit: { kind: unit.kind, id: unit.id },\n });\n console.info(\n `π Replaced ${unit.kind} \"${unit.id}\": ${unit.file} β ${convertedFileName} (backup created)`,\n );\n continue;\n } catch (backupError) {\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Failed to backup and replace: ${backupError instanceof Error ? backupError.message : String(backupError)}`,\n sourceFile: unit.file,\n targetFile: `${targetDir}/${convertedFileName}`,\n });\n continue;\n }\n\n case 'rename':\n try {\n const uniqueTargetFile = await renameAndCopyFile(sourceFile, targetFile);\n copiedFiles.push({\n source: sourceFile,\n destination: uniqueTargetFile,\n unit: { kind: unit.kind, id: unit.id },\n });\n console.info(`π Renamed ${unit.kind} \"${unit.id}\": ${unit.file} β ${basename(uniqueTargetFile)}`);\n continue;\n } catch (renameError) {\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Failed to rename and copy: ${renameError instanceof Error ? renameError.message : String(renameError)}`,\n sourceFile: unit.file,\n targetFile: `${targetDir}/${convertedFileName}`,\n });\n continue;\n }\n\n default:\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Unknown conflict strategy: ${strategy}`,\n sourceFile: unit.file,\n targetFile: `${targetDir}/${convertedFileName}`,\n });\n continue;\n }\n }\n\n // Ensure target directory exists\n await mkdir(dirname(targetFile), { recursive: true });\n\n // Copy the file\n try {\n await copyFile(sourceFile, targetFile);\n copiedFiles.push({\n source: sourceFile,\n destination: targetFile,\n unit: { kind: unit.kind, id: unit.id },\n });\n console.info(`β Copied ${unit.kind} \"${unit.id}\": ${unit.file} β ${convertedFileName}`);\n } catch (copyError) {\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Failed to copy file: ${copyError instanceof Error ? copyError.message : String(copyError)}`,\n sourceFile: unit.file,\n targetFile: `${targetDir}/${convertedFileName}`,\n });\n }\n }\n\n // Ensure tsconfig.json exists in target by copying from template if available, else generate a minimal one\n try {\n const targetTsconfig = resolve(targetPath, 'tsconfig.json');\n if (!existsSync(targetTsconfig)) {\n const templateTsconfig = resolve(templateDir, 'tsconfig.json');\n if (existsSync(templateTsconfig)) {\n await copyFile(templateTsconfig, targetTsconfig);\n copiedFiles.push({\n source: templateTsconfig,\n destination: targetTsconfig,\n unit: { kind: 'other', id: 'tsconfig.json' },\n });\n console.info('β Copied tsconfig.json from template to target');\n } else {\n // Generate a minimal tsconfig.json as a fallback\n const minimalTsconfig = {\n compilerOptions: {\n target: 'ES2020',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n strict: false,\n esModuleInterop: true,\n skipLibCheck: true,\n resolveJsonModule: true,\n outDir: 'dist',\n },\n include: ['**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts'],\n exclude: ['node_modules', 'dist', 'build', '.next', '.output', '.turbo'],\n } as const;\n\n await writeFile(targetTsconfig, JSON.stringify(minimalTsconfig, null, 2), 'utf-8');\n copiedFiles.push({\n source: '[generated tsconfig.json]',\n destination: targetTsconfig,\n unit: { kind: 'other', id: 'tsconfig.json' },\n });\n console.info('β Generated minimal tsconfig.json in target');\n }\n }\n } catch (e) {\n conflicts.push({\n unit: { kind: 'other', id: 'tsconfig.json' },\n issue: `Failed to ensure tsconfig.json: ${e instanceof Error ? e.message : String(e)}`,\n sourceFile: 'tsconfig.json',\n targetFile: 'tsconfig.json',\n });\n }\n\n // If the target project has no Mastra index file, copy from template\n try {\n const targetMastraIndex = resolve(targetPath, 'src/mastra/index.ts');\n if (!existsSync(targetMastraIndex)) {\n const templateMastraIndex = resolve(templateDir, 'src/mastra/index.ts');\n if (existsSync(templateMastraIndex)) {\n if (!existsSync(dirname(targetMastraIndex))) {\n await mkdir(dirname(targetMastraIndex), { recursive: true });\n }\n await copyFile(templateMastraIndex, targetMastraIndex);\n copiedFiles.push({\n source: templateMastraIndex,\n destination: targetMastraIndex,\n unit: { kind: 'other', id: 'mastra-index' },\n });\n console.info('β Copied Mastra index file from template');\n }\n }\n } catch (e) {\n conflicts.push({\n unit: { kind: 'other', id: 'mastra-index' },\n issue: `Failed to ensure Mastra index file: ${e instanceof Error ? e.message : String(e)}`,\n sourceFile: 'src/mastra/index.ts',\n targetFile: 'src/mastra/index.ts',\n });\n }\n\n // Handle .gitignore file merging\n try {\n const targetGitignore = resolve(targetPath, '.gitignore');\n const templateGitignore = resolve(templateDir, '.gitignore');\n\n const targetExists = existsSync(targetGitignore);\n const templateExists = existsSync(templateGitignore);\n\n if (templateExists) {\n if (!targetExists) {\n // Target has no .gitignore - copy template's completely\n await copyFile(templateGitignore, targetGitignore);\n copiedFiles.push({\n source: templateGitignore,\n destination: targetGitignore,\n unit: { kind: 'other', id: 'gitignore' },\n });\n console.info('β Copied .gitignore from template to target');\n } else {\n // Both exist - merge them intelligently\n const targetContent = await readFile(targetGitignore, 'utf-8');\n const templateContent = await readFile(templateGitignore, 'utf-8');\n\n const mergedContent = mergeGitignoreFiles(targetContent, templateContent, slug);\n\n if (mergedContent !== targetContent) {\n const addedLines = mergedContent.split('\\n').length - targetContent.split('\\n').length;\n await writeFile(targetGitignore, mergedContent, 'utf-8');\n copiedFiles.push({\n source: templateGitignore,\n destination: targetGitignore,\n unit: { kind: 'other', id: 'gitignore-merge' },\n });\n console.info(`β Merged template .gitignore entries into existing .gitignore (${addedLines} new entries)`);\n } else {\n console.info('βΉ No new .gitignore entries to add from template');\n }\n }\n }\n } catch (e) {\n conflicts.push({\n unit: { kind: 'other', id: 'gitignore' },\n issue: `Failed to handle .gitignore file: ${e instanceof Error ? e.message : String(e)}`,\n sourceFile: '.gitignore',\n targetFile: '.gitignore',\n });\n }\n\n // Handle .env file merging with template variables\n try {\n const { variables } = inputData;\n if (variables && Object.keys(variables).length > 0) {\n const targetEnv = resolve(targetPath, '.env');\n const targetExists = existsSync(targetEnv);\n\n if (!targetExists) {\n // Target has no .env - create new one with template variables\n const envContent = [\n `# Environment variables for ${slug}`,\n ...Object.entries(variables).map(([key, value]) => `${key}=${value}`),\n ].join('\\n');\n\n await writeFile(targetEnv, envContent, 'utf-8');\n copiedFiles.push({\n source: '[template variables]',\n destination: targetEnv,\n unit: { kind: 'other', id: 'env' },\n });\n console.info(`β Created .env file with ${Object.keys(variables).length} template variables`);\n } else {\n // Both exist - merge them intelligently\n const targetContent = await readFile(targetEnv, 'utf-8');\n const mergedContent = mergeEnvFiles(targetContent, variables, slug);\n\n if (mergedContent !== targetContent) {\n const addedLines = mergedContent.split('\\n').length - targetContent.split('\\n').length;\n await writeFile(targetEnv, mergedContent, 'utf-8');\n copiedFiles.push({\n source: '[template variables]',\n destination: targetEnv,\n unit: { kind: 'other', id: 'env-merge' },\n });\n console.info(`β Merged new environment variables into existing .env file (${addedLines} new entries)`);\n } else {\n console.info('βΉ No new environment variables to add (all already exist in .env)');\n }\n }\n }\n } catch (e) {\n conflicts.push({\n unit: { kind: 'other', id: 'env' },\n issue: `Failed to handle .env file: ${e instanceof Error ? e.message : String(e)}`,\n sourceFile: '.env',\n targetFile: '.env',\n });\n }\n\n // Commit the copied files\n if (copiedFiles.length > 0) {\n try {\n const fileList = copiedFiles.map(f => f.destination);\n await gitAddAndCommit(\n targetPath,\n `feat(template): copy ${copiedFiles.length} files from ${slug}@${commitSha.substring(0, 7)}`,\n fileList,\n { skipIfNoStaged: true },\n );\n console.info(`β Committed ${copiedFiles.length} copied files`);\n } catch (commitError) {\n console.warn('Failed to commit copied files:', commitError);\n }\n }\n\n const message = `Programmatic file copy completed. Copied ${copiedFiles.length} files, ${conflicts.length} conflicts detected.`;\n console.info(message);\n\n return {\n success: true,\n copiedFiles,\n conflicts,\n message,\n };\n } catch (error) {\n console.error('Programmatic file copy failed:', error);\n\n return {\n success: false,\n copiedFiles: [],\n conflicts: [],\n message: `Programmatic file copy failed: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 9: Intelligent merging with AgentBuilder\nconst intelligentMergeStep = createStep({\n id: 'intelligent-merge',\n description: 'Use AgentBuilder to intelligently merge template files',\n inputSchema: IntelligentMergeInputSchema,\n outputSchema: IntelligentMergeResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Intelligent merge step starting...');\n const { conflicts, copiedFiles, commitSha, slug, templateDir, branchName } = inputData;\n const targetPath = resolveTargetPath(inputData, requestContext);\n try {\n const model = await resolveModel({ requestContext, projectPath: targetPath, defaultModel: openai('gpt-4.1') });\n\n // Create copyFile tool for edge cases\n const copyFileTool = createTool({\n id: 'copy-file',\n description:\n 'Copy a file from template to target project (use only for edge cases - most files are already copied programmatically).',\n inputSchema: z.object({\n sourcePath: z.string().describe('Path to the source file relative to template directory'),\n destinationPath: z.string().describe('Path to the destination file relative to target project'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n message: z.string(),\n error: z.string().optional(),\n }),\n execute: async input => {\n try {\n const { sourcePath, destinationPath } = input;\n\n // Use templateDir directly from input\n const resolvedSourcePath = resolve(templateDir, sourcePath);\n const resolvedDestinationPath = resolve(targetPath, destinationPath);\n\n if (existsSync(resolvedSourcePath) && !existsSync(dirname(resolvedDestinationPath))) {\n await mkdir(dirname(resolvedDestinationPath), { recursive: true });\n }\n\n await copyFile(resolvedSourcePath, resolvedDestinationPath);\n return {\n success: true,\n message: `Successfully copied file from ${sourcePath} to ${destinationPath}`,\n };\n } catch (error) {\n return {\n success: false,\n message: `Failed to copy file: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n });\n\n // Initialize AgentBuilder for merge and registration\n const agentBuilder = new AgentBuilder({\n projectPath: targetPath,\n mode: 'template',\n model,\n instructions: `\nYou are an expert at integrating Mastra template components into existing projects.\n\nCRITICAL CONTEXT:\n- Files have been programmatically copied from template to target project\n- Your job is to handle integration issues, registration, and validation\n\nFILES SUCCESSFULLY COPIED:\n${JSON.stringify(copiedFiles, null, 2)}\n\nCONFLICTS TO RESOLVE:\n${JSON.stringify(conflicts, null, 2)}\n\nCRITICAL INSTRUCTIONS:\n1. **Package management**: NO need to install packages (already handled by package merge step)\n2. **File copying**: Most files are already copied programmatically. Only use copyFile tool for edge cases where additional files are needed for conflict resolution\n\nKEY RESPONSIBILITIES:\n1. Resolve any conflicts from the programmatic copy step\n2. Register components in existing Mastra index file (agents, workflows, networks, mcp-servers)\n3. DO NOT register tools in existing Mastra index file - tools should remain standalone\n4. Copy additional files ONLY if needed for conflict resolution\n\nMASTRA INDEX FILE HANDLING (src/mastra/index.ts):\n1. **Verify the file exists**\n - Call readFile\n - If it fails with ENOENT (or listDirectory shows it missing) -> copyFile the template version to src/mastra/index.ts, then confirm it now exists\n - Always verify after copying that the file exists and is accessible\n\n2. **Edit the file**\n - Always work with the full file content\n - Generate the complete, correct source (imports, anchors, registrations, formatting)\n - Keep existing registrations intact and maintain file structure\n - Ensure proper spacing and organization of new additions\n\n3. **Handle anchors and structure**\n - When generating new content, ensure you do not duplicate existing imports or object entries\n - If required anchors (e.g., agents: {}) are missing, add them while generating the new content\n - Add missing anchors just before the closing brace of the Mastra config\n - Do not restructure or reorder existing anchors and registrations\n\nCRITICAL: ALWAYS use writeFile to update the mastra/index.ts file when needed to register new components.\n\nMASTRA-SPECIFIC REGISTRATION:\n- Agents: Register in existing Mastra index file\n- Workflows: Register in existing Mastra index file\n- Networks: Register in existing Mastra index file\n- MCP servers: Register in existing Mastra index file\n- Tools: Copy to ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.tool} but DO NOT register in existing Mastra index file\n- If an anchor (e.g., \"agents: {\") is not found, avoid complex restructuring; instead, insert the missing anchor on a new line (e.g., add \"agents: {\" just before the closing brace of the Mastra config) and then proceed with the other registrations.\n\nCONFLICT RESOLUTION AND FILE COPYING:\n- Only copy files if needed to resolve specific conflicts\n- When copying files from template:\n - Ensure you get the right file name and path\n - Verify the destination directory exists\n - Maintain the same relative path structure\n - Only copy files that are actually needed\n- Preserve existing functionality when resolving conflicts\n- Focus on registration and conflict resolution, validation will happen in a later step\n\nTemplate information:\n- Slug: ${slug}\n- Commit: ${commitSha.substring(0, 7)}\n- Branch: ${branchName}\n`,\n tools: {\n copyFile: copyFileTool,\n },\n });\n\n // Create task list for systematic processing\n const tasks = [];\n\n // Add conflict resolution tasks\n conflicts.forEach(conflict => {\n tasks.push({\n id: `conflict-${conflict.unit.kind}-${conflict.unit.id}`,\n content: `Resolve conflict: ${conflict.issue}`,\n status: 'pending' as const,\n priority: 'high' as const,\n notes: `Unit: ${conflict.unit.kind}:${conflict.unit.id}, Issue: ${conflict.issue}, Source: ${conflict.sourceFile}, Target: ${conflict.targetFile}`,\n });\n });\n\n // Add registration tasks for successfully copied files\n const registrableKinds = new Set(['agent', 'workflow', 'network', 'mcp-server']);\n const registrableFiles = copiedFiles.filter(f => registrableKinds.has(f.unit.kind as any));\n const targetMastraIndex = resolve(targetPath, 'src/mastra/index.ts');\n const mastraIndexExists = existsSync(targetMastraIndex);\n console.info(`Mastra index exists: ${mastraIndexExists} at ${targetMastraIndex}`);\n console.info(\n 'Registrable components:',\n registrableFiles.map(f => `${f.unit.kind}:${f.unit.id}`),\n );\n if (registrableFiles.length > 0) {\n tasks.push({\n id: 'register-components',\n content: `Register ${registrableFiles.length} components in existing Mastra index file (src/mastra/index.ts)`,\n status: 'pending' as const,\n priority: 'medium' as const,\n dependencies: conflicts.length > 0 ? conflicts.map(c => `conflict-${c.unit.kind}-${c.unit.id}`) : undefined,\n notes: `Components to register: ${registrableFiles.map(f => `${f.unit.kind}:${f.unit.id}`).join(', ')}`,\n });\n }\n\n // Note: Validation is handled by the dedicated validation step, not here\n\n console.info(`Creating task list with ${tasks.length} tasks...`);\n await AgentBuilderDefaults.manageTaskList({ action: 'create', tasks });\n\n // Log git state before merge operations\n await logGitState(targetPath, 'before intelligent merge');\n\n const prompt = `\nYou need to work through a task list to complete the template integration.\n\nCRITICAL INSTRUCTIONS:\n\n**STEP 1: GET YOUR TASK LIST**\n1. Use manageTaskList tool with action \"list\" to see all pending tasks\n2. Work through tasks in dependency order (complete dependencies first)\n\n**STEP 2: PROCESS EACH TASK SYSTEMATICALLY**\nFor each task:\n1. Use manageTaskList to mark the current task as 'in_progress'\n2. Complete the task according to its requirements\n3. Use manageTaskList to mark the task as 'completed' when done\n4. Continue until all tasks are completed\n\n**TASK TYPES AND REQUIREMENTS:**\n\n**Conflict Resolution Tasks:**\n- Analyze the specific conflict and determine best resolution strategy\n- For file name conflicts: merge content or rename appropriately\n- For missing files: investigate and copy if needed\n- For other issues: apply appropriate fixes\n\n**Component Registration Task:**\n- Update main Mastra instance file to register new components\n- Only register: agents, workflows, networks, mcp-servers\n- DO NOT register tools in main config\n- Ensure proper import paths and naming conventions\n\n**COMMIT STRATEGY:**\n- After resolving conflicts: \"feat(template): resolve conflicts for ${slug}@${commitSha.substring(0, 7)}\"\n- After registration: \"feat(template): register components from ${slug}@${commitSha.substring(0, 7)}\"\n\n**CRITICAL NOTES:**\n- Template source: ${templateDir}\n- Target project: ${targetPath}\n- Focus ONLY on conflict resolution and component registration\n- Use executeCommand for git commits after each task\n- DO NOT perform validation - that's handled by the dedicated validation step\n\nStart by listing your tasks and work through them systematically!\n`;\n\n // Process tasks systematically\n const isV2 = model.specificationVersion === 'v2';\n const result = isV2 ? await agentBuilder.stream(prompt) : await agentBuilder.streamLegacy(prompt);\n\n // Extract actual conflict resolution details from agent execution\n const actualResolutions: Array<{\n taskId: string;\n action: string;\n status: string;\n content: string;\n notes?: string;\n }> = [];\n\n for await (const chunk of result.fullStream) {\n if (chunk.type === 'step-finish' || chunk.type === 'step-start') {\n const chunkData = 'payload' in chunk ? chunk.payload : chunk;\n console.info({\n type: chunk.type,\n msgId: chunkData.messageId,\n });\n } else {\n console.info(JSON.stringify(chunk, null, 2));\n\n // Extract task management tool results\n if (chunk.type === 'tool-result') {\n const chunkData = 'payload' in chunk ? chunk.payload : chunk;\n if (chunkData.toolName === 'manageTaskList') {\n try {\n const toolResult = chunkData.result;\n if (toolResult.action === 'update' && toolResult.status === 'completed') {\n actualResolutions.push({\n taskId: toolResult.taskId || '',\n action: toolResult.action,\n status: toolResult.status,\n content: toolResult.content || '',\n notes: toolResult.notes,\n });\n console.info(`π Task completed: ${toolResult.taskId} - ${toolResult.content}`);\n }\n } catch (parseError) {\n console.warn('Failed to parse task management result:', parseError);\n }\n }\n }\n }\n }\n\n // Log git state after merge operations\n await logGitState(targetPath, 'after intelligent merge');\n\n // Map actual resolutions back to conflicts\n const conflictResolutions = conflicts.map(conflict => {\n const taskId = `conflict-${conflict.unit.kind}-${conflict.unit.id}`;\n const actualResolution = actualResolutions.find(r => r.taskId === taskId);\n\n if (actualResolution) {\n return {\n unit: conflict.unit,\n issue: conflict.issue,\n resolution:\n actualResolution.notes ||\n actualResolution.content ||\n `Completed: ${conflict.unit.kind} ${conflict.unit.id}`,\n actualWork: true,\n };\n } else {\n return {\n unit: conflict.unit,\n issue: conflict.issue,\n resolution: `No specific resolution found for ${conflict.unit.kind} ${conflict.unit.id}`,\n actualWork: false,\n };\n }\n });\n\n await gitAddAndCommit(targetPath, `feat(template): apply intelligent merge for ${slug}`, undefined, {\n skipIfNoStaged: true,\n });\n\n return {\n success: true,\n applied: true,\n message: `Successfully resolved ${conflicts.length} conflicts from template ${slug}`,\n conflictsResolved: conflictResolutions,\n };\n } catch (error) {\n return {\n success: false,\n applied: false,\n message: `Failed to resolve conflicts: ${error instanceof Error ? error.message : String(error)}`,\n conflictsResolved: [],\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 10: Validation and Fix Step - validates merged code and fixes any issues\nconst validationAndFixStep = createStep({\n id: 'validation-and-fix',\n description: 'Validate the merged template code and fix any issues using a specialized agent',\n inputSchema: ValidationFixInputSchema,\n outputSchema: ValidationFixResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Validation and fix step starting...');\n const { commitSha, slug, orderedUnits, templateDir, copiedFiles, conflictsResolved, maxIterations = 5 } = inputData;\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n // Skip validation if no changes were made\n const hasChanges = copiedFiles.length > 0 || (conflictsResolved && conflictsResolved.length > 0);\n if (!hasChanges) {\n console.info('βοΈ Skipping validation - no files copied or conflicts resolved');\n return {\n success: true,\n applied: false,\n message: 'No changes to validate - template already integrated or no conflicts resolved',\n validationResults: {\n valid: true,\n errorsFixed: 0,\n remainingErrors: 0,\n },\n };\n }\n\n console.info(\n `π Changes detected: ${copiedFiles.length} files copied, ${conflictsResolved?.length || 0} conflicts resolved`,\n );\n\n let currentIteration = 1; // Declare at function scope for error handling\n\n try {\n const model = await resolveModel({ requestContext, projectPath: targetPath, defaultModel: openai('gpt-4.1') });\n\n const allTools = await AgentBuilderDefaults.listToolsForMode(targetPath, 'template');\n\n const validationAgent = new Agent({\n id: 'code-validator-fixer',\n name: 'Code Validator Fixer',\n description: 'Specialized agent for validating and fixing template integration issues',\n instructions: `You are a code validation and fixing specialist. Your job is to:\n\n1. **Run comprehensive validation** using the validateCode tool to check for:\n - TypeScript compilation errors\n - ESLint issues\n - Import/export problems\n - Missing dependencies\n - Index file structure and exports\n - Component registration correctness\n - Naming convention compliance\n\n2. **Fix validation errors systematically**:\n - Use readFile to examine files with errors\n - Use multiEdit for simple search-replace fixes (single line changes)\n - Use replaceLines for complex multiline fixes (imports, function signatures, etc.)\n - Use listDirectory to understand project structure when fixing import paths\n - Update file contents to resolve TypeScript and linting issues\n\n3. **Choose the right tool for the job**:\n - multiEdit: Simple replacements, single line changes, small fixes\n - replaceLines: Multiline imports, function signatures, complex code blocks\n - writeFile: ONLY for creating new files (never overwrite existing)\n\n4. **Create missing files ONLY when necessary**:\n - Use writeFile ONLY for creating NEW files that don't exist\n - NEVER overwrite existing files - use multiEdit or replaceLines instead\n - Common cases: missing barrel files (index.ts), missing config files, missing type definitions\n - Always check with readFile first to ensure file doesn't exist\n\n5. **Fix ALL template integration issues**:\n - Fix import path issues in copied files\n - Ensure TypeScript imports and exports are correct\n - Validate integration works properly\n - Fix files copied with new names based on unit IDs\n - Update original template imports that reference old filenames\n - Fix missing imports in index files\n - Fix incorrect file paths in imports\n - Fix type mismatches after integration\n - Fix missing exports in barrel files\n - Use the COPIED FILES mapping below to fix import paths\n - Fix any missing dependencies or module resolution issues\n\n6. **Validate index file structure**:\n - Correct imports for all components\n - Proper anchor structure (agents: {}, etc.)\n - No duplicate registrations\n - Correct export names and paths\n - Proper formatting and organization\n\n7. **Follow naming conventions**:\n Import paths:\n - camelCase: import { myAgent } from './myAgent'\n - snake_case: import { myAgent } from './my_agent'\n - kebab-case: import { myAgent } from './my-agent'\n - PascalCase: import { MyAgent } from './MyAgent'\n\n File names:\n - camelCase: weatherAgent.ts, chatAgent.ts\n - snake_case: weather_agent.ts, chat_agent.ts\n - kebab-case: weather-agent.ts, chat-agent.ts\n - PascalCase: WeatherAgent.ts, ChatAgent.ts\n\n Key Rule: Keep variable/export names unchanged, only adapt file names and import paths\n\n8. **Re-validate after fixes** to ensure all issues are resolved\n\nCRITICAL: Always validate the entire project first to get a complete picture of issues, then fix them systematically, and re-validate to confirm fixes worked.\n\nCRITICAL TOOL SELECTION GUIDE:\n- **multiEdit**: Use for simple string replacements, single-line changes\n Example: changing './oldPath' to './newPath'\n \n- **replaceLines**: Use for multiline fixes, complex code structures\n Example: fixing multiline imports, function signatures, or code blocks\n Usage: replaceLines({ filePath: 'file.ts', startLine: 5, endLine: 8, newContent: 'new multiline content' })\n \n- **writeFile**: ONLY for creating new files that don't exist\n Example: creating missing index.ts barrel files\n\nCRITICAL WRITEFILΠ SAFETY RULES:\n- ONLY use writeFile for creating NEW files that don't exist\n- ALWAYS check with readFile first to verify file doesn't exist\n- NEVER use writeFile to overwrite existing files - use multiEdit or replaceLines instead\n- Common valid uses: missing index.ts barrel files, missing type definitions, missing config files\n\nCRITICAL IMPORT PATH RESOLUTION:\nThe following files were copied from template with new names:\n${JSON.stringify(copiedFiles, null, 2)}\n\nWhen fixing import errors:\n1. Check if the missing module corresponds to a copied file\n2. Use listDirectory to verify actual filenames in target directories\n3. Update import paths to match the actual copied filenames\n4. Ensure exported variable names match what's being imported\n\nEXAMPLE: If error shows \"Cannot find module './tools/download-csv-tool'\" but a file was copied as \"csv-fetcher-tool.ts\", update the import to \"./tools/csv-fetcher-tool\"\n\n${conflictsResolved ? `CONFLICTS RESOLVED BY INTELLIGENT MERGE:\\n${JSON.stringify(conflictsResolved, null, 2)}\\n` : ''}\n\nINTEGRATED UNITS:\n${JSON.stringify(orderedUnits, null, 2)}\n\nBe thorough and methodical. Always use listDirectory to verify actual file existence before fixing imports.`,\n model,\n tools: {\n validateCode: allTools.validateCode,\n readFile: allTools.readFile,\n writeFile: allTools.writeFile,\n multiEdit: allTools.multiEdit,\n replaceLines: allTools.replaceLines,\n listDirectory: allTools.listDirectory,\n executeCommand: allTools.executeCommand,\n },\n });\n\n console.info('Starting validation and fix agent with internal loop...');\n\n let validationResults = {\n valid: false,\n errorsFixed: 0,\n remainingErrors: 1, // Start with 1 to enter the loop\n iteration: currentIteration,\n lastValidationErrors: [] as any[], // Store the actual error details\n };\n\n // Loop up to maxIterations times or until all errors are fixed\n while (validationResults.remainingErrors > 0 && currentIteration <= maxIterations) {\n console.info(`\\n=== Validation Iteration ${currentIteration} ===`);\n\n const iterationPrompt =\n currentIteration === 1\n ? `Please validate the template integration and fix any errors found in the project at ${targetPath}. The template \"${slug}\" (${commitSha.substring(0, 7)}) was just integrated and may have validation issues that need fixing.\n\nStart by running validateCode with all validation types to get a complete picture of any issues, then systematically fix them.`\n : `Continue validation and fixing for the template integration at ${targetPath}. This is iteration ${currentIteration} of validation.\n\nPrevious iterations may have fixed some issues, so start by re-running validateCode to see the current state, then fix any remaining issues.`;\n\n const isV2 = model.specificationVersion === 'v2';\n const output = z.object({ success: z.boolean() });\n const result = isV2\n ? await tryStreamWithJsonFallback(validationAgent, iterationPrompt, {\n structuredOutput: {\n schema: output,\n },\n })\n : await validationAgent.streamLegacy(iterationPrompt, {\n experimental_output: output,\n });\n\n let iterationErrors = 0;\n let previousErrors = validationResults.remainingErrors;\n let lastValidationResult: any = null;\n\n for await (const chunk of result.fullStream) {\n if (chunk.type === 'step-finish' || chunk.type === 'step-start') {\n const chunkData = 'payload' in chunk ? chunk.payload : chunk;\n console.info({\n type: chunk.type,\n msgId: chunkData.messageId,\n iteration: currentIteration,\n });\n } else {\n console.info(JSON.stringify(chunk, null, 2));\n }\n if (chunk.type === 'tool-result') {\n // Track validation results\n const chunkData = 'payload' in chunk ? chunk.payload : chunk;\n if (chunkData.toolName === 'validateCode') {\n const toolResult = chunkData.result;\n lastValidationResult = toolResult; // Store the full result\n if (toolResult?.summary) {\n iterationErrors = toolResult.summary.totalErrors || 0;\n console.info(`Iteration ${currentIteration}: Found ${iterationErrors} errors`);\n }\n }\n }\n }\n\n // Update results for this iteration\n validationResults.remainingErrors = iterationErrors;\n validationResults.errorsFixed += Math.max(0, previousErrors - iterationErrors);\n validationResults.valid = iterationErrors === 0;\n validationResults.iteration = currentIteration;\n\n // Store the last validation errors if any remain\n if (iterationErrors > 0 && lastValidationResult?.errors) {\n validationResults.lastValidationErrors = lastValidationResult.errors;\n }\n\n console.info(`Iteration ${currentIteration} complete: ${iterationErrors} errors remaining`);\n\n // Break if no errors or max iterations reached\n if (iterationErrors === 0) {\n console.info(`β
All validation issues resolved in ${currentIteration} iterations!`);\n break;\n } else if (currentIteration >= maxIterations) {\n console.info(`β οΈ Max iterations (${maxIterations}) reached. ${iterationErrors} errors still remaining.`);\n break;\n }\n\n currentIteration++;\n }\n\n // Commit the validation fixes\n try {\n await gitAddAndCommit(\n targetPath,\n `fix(template): resolve validation errors for ${slug}@${commitSha.substring(0, 7)}`,\n undefined,\n {\n skipIfNoStaged: true,\n },\n );\n } catch (commitError) {\n console.warn('Failed to commit validation fixes:', commitError);\n }\n\n const success = validationResults.valid;\n\n return {\n success,\n applied: true,\n message: `Validation completed in ${currentIteration} iteration${currentIteration > 1 ? 's' : ''}. ${validationResults.valid ? 'All issues resolved!' : `${validationResults.remainingErrors} issue${validationResults.remainingErrors > 1 ? 's' : ''} remaining`}`,\n validationResults: {\n valid: validationResults.valid,\n errorsFixed: validationResults.errorsFixed,\n remainingErrors: validationResults.remainingErrors,\n errors: validationResults.lastValidationErrors,\n },\n };\n } catch (error) {\n console.error('Validation and fix failed:', error);\n return {\n success: false,\n applied: false,\n message: `Validation and fix failed: ${error instanceof Error ? error.message : String(error)}`,\n validationResults: {\n valid: false,\n errorsFixed: 0,\n remainingErrors: -1,\n },\n error: error instanceof Error ? error.message : String(error),\n };\n } finally {\n // Cleanup template directory\n try {\n await rm(templateDir, { recursive: true, force: true });\n console.info(`β Cleaned up template directory: ${templateDir}`);\n } catch (cleanupError) {\n console.warn('Failed to cleanup template directory:', cleanupError);\n }\n }\n },\n});\n\n// Create the complete workflow\nexport const agentBuilderTemplateWorkflow = createWorkflow({\n id: 'agent-builder-template',\n description:\n 'Merges a Mastra template repository into the current project using intelligent AgentBuilder-powered merging',\n inputSchema: AgentBuilderInputSchema,\n outputSchema: ApplyResultSchema,\n steps: [\n cloneTemplateStep,\n analyzePackageStep,\n discoverUnitsStep,\n orderUnitsStep,\n packageMergeStep,\n installStep,\n programmaticFileCopyStep,\n intelligentMergeStep,\n validationAndFixStep,\n ],\n})\n .then(cloneTemplateStep)\n .map(async ({ getStepResult }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n\n // Check for failure in clone step\n if (shouldAbortWorkflow(cloneResult)) {\n throw new Error(`Critical failure in clone step: ${cloneResult.error}`);\n }\n\n return cloneResult;\n })\n .parallel([analyzePackageStep, discoverUnitsStep])\n .map(async ({ getStepResult }) => {\n const analyzeResult = getStepResult(analyzePackageStep);\n const discoverResult = getStepResult(discoverUnitsStep);\n\n // Check for failures in parallel steps\n if (shouldAbortWorkflow(analyzeResult)) {\n throw new Error(`Failure in analyze package step: ${analyzeResult.error || 'Package analysis failed'}`);\n }\n\n if (shouldAbortWorkflow(discoverResult)) {\n throw new Error(`Failure in discover units step: ${discoverResult.error || 'Unit discovery failed'}`);\n }\n\n return discoverResult;\n })\n .then(orderUnitsStep)\n .map(async ({ getStepResult, getInitData }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n const initData = getInitData();\n return {\n commitSha: cloneResult.commitSha,\n slug: cloneResult.slug,\n targetPath: initData.targetPath,\n };\n })\n .then(prepareBranchStep)\n .map(async ({ getStepResult, getInitData }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n const packageResult = getStepResult(analyzePackageStep);\n const initData = getInitData();\n return {\n commitSha: cloneResult.commitSha,\n slug: cloneResult.slug,\n targetPath: initData.targetPath,\n packageInfo: packageResult,\n };\n })\n .then(packageMergeStep)\n .map(async ({ getInitData }) => {\n const initData = getInitData();\n return {\n targetPath: initData.targetPath,\n };\n })\n .then(installStep)\n .map(async ({ getStepResult, getInitData }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n const orderResult = getStepResult(orderUnitsStep);\n const installResult = getStepResult(installStep);\n const initData = getInitData();\n\n if (shouldAbortWorkflow(installResult)) {\n throw new Error(`Failure in install step: ${installResult.error || 'Install failed'}`);\n }\n return {\n orderedUnits: orderResult.orderedUnits,\n templateDir: cloneResult.templateDir,\n commitSha: cloneResult.commitSha,\n slug: cloneResult.slug,\n targetPath: initData.targetPath,\n variables: initData.variables,\n };\n })\n .then(programmaticFileCopyStep)\n .map(async ({ getStepResult, getInitData }) => {\n const copyResult = getStepResult(programmaticFileCopyStep);\n const cloneResult = getStepResult(cloneTemplateStep);\n const initData = getInitData();\n\n return {\n conflicts: copyResult.conflicts,\n copiedFiles: copyResult.copiedFiles,\n commitSha: cloneResult.commitSha,\n slug: cloneResult.slug,\n targetPath: initData.targetPath,\n templateDir: cloneResult.templateDir,\n };\n })\n .then(intelligentMergeStep)\n .map(async ({ getStepResult, getInitData }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n const orderResult = getStepResult(orderUnitsStep);\n const copyResult = getStepResult(programmaticFileCopyStep);\n const mergeResult = getStepResult(intelligentMergeStep);\n const initData = getInitData();\n\n return {\n commitSha: cloneResult.commitSha,\n slug: cloneResult.slug,\n targetPath: initData.targetPath,\n templateDir: cloneResult.templateDir,\n orderedUnits: orderResult.orderedUnits,\n copiedFiles: copyResult.copiedFiles,\n conflictsResolved: mergeResult.conflictsResolved,\n };\n })\n .then(validationAndFixStep)\n .map(async ({ getStepResult }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n const analyzeResult = getStepResult(analyzePackageStep);\n const discoverResult = getStepResult(discoverUnitsStep);\n const orderResult = getStepResult(orderUnitsStep);\n const prepareBranchResult = getStepResult(prepareBranchStep);\n const packageMergeResult = getStepResult(packageMergeStep);\n const installResult = getStepResult(installStep);\n const copyResult = getStepResult(programmaticFileCopyStep);\n const intelligentMergeResult = getStepResult(intelligentMergeStep);\n const validationResult = getStepResult(validationAndFixStep);\n\n const branchName = prepareBranchResult.branchName;\n\n // Aggregate errors from all steps\n const allErrors = [\n cloneResult.error,\n analyzeResult.error,\n discoverResult.error,\n orderResult.error,\n prepareBranchResult.error,\n packageMergeResult.error,\n installResult.error,\n copyResult.error,\n intelligentMergeResult.error,\n validationResult.error,\n ].filter(Boolean);\n\n // Determine overall success based on all step results\n const overallSuccess =\n cloneResult.success !== false &&\n analyzeResult.success !== false &&\n discoverResult.success !== false &&\n orderResult.success !== false &&\n prepareBranchResult.success !== false &&\n packageMergeResult.success !== false &&\n installResult.success !== false &&\n copyResult.success !== false &&\n intelligentMergeResult.success !== false &&\n validationResult.success !== false;\n\n // Create comprehensive message\n const messages = [];\n if (copyResult.copiedFiles?.length > 0) {\n messages.push(`${copyResult.copiedFiles.length} files copied`);\n }\n if (copyResult.conflicts?.length > 0) {\n messages.push(`${copyResult.conflicts.length} conflicts skipped`);\n }\n if (intelligentMergeResult.conflictsResolved?.length > 0) {\n messages.push(`${intelligentMergeResult.conflictsResolved.length} conflicts resolved`);\n }\n if (validationResult.validationResults?.errorsFixed > 0) {\n messages.push(`${validationResult.validationResults.errorsFixed} validation errors fixed`);\n }\n\n if (validationResult.validationResults?.remainingErrors > 0) {\n messages.push(`${validationResult.validationResults.remainingErrors} validation issues remain`);\n }\n\n const comprehensiveMessage =\n messages.length > 0\n ? `Template merge completed: ${messages.join(', ')}`\n : validationResult.message || 'Template merge completed';\n\n return {\n success: overallSuccess,\n applied: validationResult.applied || copyResult.copiedFiles?.length > 0 || false,\n message: comprehensiveMessage,\n validationResults: validationResult.validationResults,\n error: allErrors.length > 0 ? allErrors.join('; ') : undefined,\n errors: allErrors.length > 0 ? allErrors : undefined,\n branchName,\n // Additional debugging info\n stepResults: {\n cloneSuccess: cloneResult.success,\n analyzeSuccess: analyzeResult.success,\n discoverSuccess: discoverResult.success,\n orderSuccess: orderResult.success,\n prepareBranchSuccess: prepareBranchResult.success,\n packageMergeSuccess: packageMergeResult.success,\n installSuccess: installResult.success,\n copySuccess: copyResult.success,\n mergeSuccess: intelligentMergeResult.success,\n validationSuccess: validationResult.success,\n filesCopied: copyResult.copiedFiles?.length || 0,\n conflictsSkipped: copyResult.conflicts?.length || 0,\n conflictsResolved: intelligentMergeResult.conflictsResolved?.length || 0,\n },\n };\n })\n .commit();\n\n// Helper to merge a template by slug\nexport async function mergeTemplateBySlug(slug: string, targetPath?: string) {\n const template = await getMastraTemplate(slug);\n const run = await agentBuilderTemplateWorkflow.createRun();\n return await run.start({\n inputData: {\n repo: template.githubUrl,\n slug: template.slug,\n targetPath,\n },\n });\n}\n\n// Helper function to determine conflict resolution strategy\nconst determineConflictStrategy = (\n _unit: { kind: string; id: string },\n _targetFile: string,\n): 'skip' | 'backup-and-replace' | 'rename' => {\n // For now, always skip conflicts to avoid disrupting existing files\n // TODO: Enable advanced strategies based on user feedback\n return 'skip';\n\n // Future logic (currently disabled):\n // if (['agent', 'workflow', 'network'].includes(unit.kind)) {\n // return 'backup-and-replace';\n // }\n // if (unit.kind === 'tool') {\n // return 'rename';\n // }\n // return 'backup-and-replace';\n};\n\n// Helper function to check if a step result indicates a failure\nconst shouldAbortWorkflow = (stepResult: any): boolean => {\n return stepResult?.success === false || stepResult?.error;\n};\n","import { z } from 'zod';\n\nexport const TaskSchema = z.array(\n z.object({\n id: z.string().describe('Unique task ID using kebab-case'),\n content: z.string().describe('Specific, actionable task description'),\n status: z.enum(['pending', 'in_progress', 'completed', 'blocked']).default('pending'),\n priority: z.enum(['high', 'medium', 'low']).describe('Task priority'),\n dependencies: z.array(z.string()).optional().describe('IDs of tasks this depends on'),\n notes: z.string().describe('Detailed implementation notes and specifics'),\n }),\n);\n\nexport const QuestionSchema = z.array(\n z.object({\n id: z.string().describe('Unique question ID'),\n question: z.string().describe('Clear, specific question for the user'),\n type: z.enum(['choice', 'text', 'boolean']).describe('Type of answer expected'),\n options: z.array(z.string()).optional().describe('Options for choice questions'),\n context: z.string().optional().describe('Additional context or explanation'),\n }),\n);\nexport const PlanningIterationResultSchema = z.object({\n success: z.boolean(),\n tasks: TaskSchema,\n questions: QuestionSchema,\n reasoning: z.string(),\n planComplete: z.boolean(),\n message: z.string(),\n error: z.string().optional(),\n allPreviousQuestions: z.array(z.any()).optional(),\n allPreviousAnswers: z.record(z.string()).optional(),\n});\n","/**\n * Prompts and instructions for task planning workflow\n */\n\nexport interface TaskPlanningPrompts {\n planningAgent: {\n instructions: (context: { storedQAPairs: any[] }) => string;\n refinementPrompt: (context: {\n action: string;\n workflowName?: string;\n description?: string;\n requirements?: string;\n discoveredWorkflows: any[];\n projectStructure: any;\n research: any;\n storedQAPairs: any[];\n hasTaskFeedback: boolean;\n userAnswers?: any;\n }) => string;\n initialPrompt: (context: {\n action: string;\n workflowName?: string;\n description?: string;\n requirements?: string;\n discoveredWorkflows: any[];\n projectStructure: any;\n research: any;\n }) => string;\n };\n taskApproval: {\n message: (questionsCount: number) => string;\n approvalMessage: (tasksCount: number) => string;\n };\n}\n\nexport const taskPlanningPrompts: TaskPlanningPrompts = {\n planningAgent: {\n instructions:\n context => `You are a Mastra workflow planning expert. Your task is to create a detailed, executable task plan.\n\nPLANNING RESPONSIBILITIES:\n1. **Analyze Requirements**: Review the user's description and requirements thoroughly\n2. **Identify Decision Points**: Find any choices that require user input (email providers, databases, APIs, etc.)\n3. **Create Specific Tasks**: Generate concrete, actionable tasks with clear implementation notes\n4. **Ask Clarifying Questions**: If any decisions are unclear, formulate specific questions for the user \n- do not ask about package managers\n- Assume the user is going to use zod for validation\n- You do not need to ask questions if you have none\n- NEVER ask questions that have already been answered before\n5. **Incorporate Feedback**: Use any previous answers or feedback to refine the plan\n\n${\n context.storedQAPairs.length > 0\n ? `PREVIOUS QUESTION-ANSWER PAIRS (${context.storedQAPairs.length} total):\\n${context.storedQAPairs\n .map(\n (pair, index) =>\n `${index + 1}. Q: ${pair.question.question}\\n A: ${pair.answer || 'NOT ANSWERED YET'}\\n Type: ${pair.question.type}\\n Asked: ${pair.askedAt}\\n ${pair.answer ? `Answered: ${pair.answeredAt}` : ''}`,\n )\n .join('\\n\\n')}\\n\\nIMPORTANT: DO NOT ASK ANY QUESTIONS THAT HAVE ALREADY BEEN ASKED!`\n : ''\n}\n\nBased on the context and any user answers, create or refine the task plan.`,\n\n refinementPrompt: context => `Refine the existing task plan based on all user answers collected so far. \n\nANSWERED QUESTIONS AND RESPONSES:\n${context.storedQAPairs\n .filter(pair => pair.answer)\n .map(\n (pair, index) =>\n `${index + 1}. Q: ${pair.question.question}\\n A: ${pair.answer}\\n Context: ${pair.question.context || 'None'}`,\n )\n .join('\\n\\n')}\n\nREQUIREMENTS:\n- Action: ${context.action}\n- Workflow Name: ${context.workflowName || 'To be determined'}\n- Description: ${context.description || 'Not specified'}\n- Requirements: ${context.requirements || 'Not specified'}\n\nPROJECT CONTEXT:\n- Discovered Workflows: ${JSON.stringify(context.discoveredWorkflows, null, 2)}\n- Project Structure: ${JSON.stringify(context.projectStructure, null, 2)}\n- Research: ${JSON.stringify(context.research, null, 2)}\n\n${context.hasTaskFeedback ? `\\nUSER FEEDBACK ON PREVIOUS TASK LIST:\\n${context.userAnswers?.taskFeedback}\\n\\nPLEASE INCORPORATE THIS FEEDBACK INTO THE REFINED TASK LIST.` : ''}\n\nRefine the task list and determine if any additional questions are needed.`,\n\n initialPrompt: context => `Create an initial task plan for ${context.action}ing a Mastra workflow.\n\nREQUIREMENTS:\n- Action: ${context.action}\n- Workflow Name: ${context.workflowName || 'To be determined'}\n- Description: ${context.description || 'Not specified'} \n- Requirements: ${context.requirements || 'Not specified'}\n\nPROJECT CONTEXT:\n- Discovered Workflows: ${JSON.stringify(context.discoveredWorkflows, null, 2)}\n- Project Structure: ${JSON.stringify(context.projectStructure, null, 2)}\n- Research: ${JSON.stringify(context.research, null, 2)}\n\nCreate specific tasks and identify any questions that need user clarification.`,\n },\n\n taskApproval: {\n message: questionsCount => `Please answer ${questionsCount} question(s) to finalize the workflow plan:`,\n approvalMessage: tasksCount => `Please review and approve the ${tasksCount} task(s) for execution:`,\n },\n};\n","import { z } from 'zod';\nimport { PlanningIterationResultSchema, QuestionSchema, TaskSchema } from '../shared/schema';\n\n// Workflow Builder schemas and types\nexport const WorkflowBuilderInputSchema = z.object({\n workflowName: z.string().optional().describe('Name of the workflow to create or edit'),\n action: z.enum(['create', 'edit']).describe('Action to perform: create new or edit existing workflow'),\n description: z.string().optional().describe('Description of what the workflow should do'),\n requirements: z.string().optional().describe('Detailed requirements for the workflow'),\n projectPath: z.string().optional().describe('Path to the Mastra project (defaults to current directory)'),\n});\n\nexport const DiscoveredWorkflowSchema = z.object({\n name: z.string(),\n file: z.string(),\n description: z.string().optional(),\n inputSchema: z.any().optional(),\n outputSchema: z.any().optional(),\n steps: z.array(z.string()).optional(),\n});\n\nexport const WorkflowDiscoveryResultSchema = z.object({\n success: z.boolean(),\n workflows: z.array(DiscoveredWorkflowSchema),\n mastraIndexExists: z.boolean(),\n message: z.string(),\n error: z.string().optional(),\n});\n\nexport const ProjectDiscoveryResultSchema = z.object({\n success: z.boolean(),\n structure: z.object({\n hasWorkflowsDir: z.boolean(),\n hasAgentsDir: z.boolean(),\n hasToolsDir: z.boolean(),\n hasMastraIndex: z.boolean(),\n existingWorkflows: z.array(z.string()),\n existingAgents: z.array(z.string()),\n existingTools: z.array(z.string()),\n }),\n dependencies: z.record(z.string()),\n message: z.string(),\n error: z.string().optional(),\n});\n\nexport const WorkflowResearchResultSchema = z.object({\n success: z.boolean(),\n documentation: z.object({\n workflowPatterns: z.array(z.string()),\n stepExamples: z.array(z.string()),\n bestPractices: z.array(z.string()),\n }),\n webResources: z.array(\n z.object({\n title: z.string(),\n url: z.string(),\n snippet: z.string(),\n relevance: z.number(),\n }),\n ),\n message: z.string(),\n error: z.string().optional(),\n});\n\nexport const TaskManagementResultSchema = z.object({\n success: z.boolean(),\n tasks: TaskSchema,\n message: z.string(),\n error: z.string().optional(),\n});\n\nexport const TaskExecutionInputSchema = z.object({\n action: z.enum(['create', 'edit']),\n workflowName: z.string().optional(),\n description: z.string().optional(),\n requirements: z.string().optional(),\n tasks: TaskSchema,\n discoveredWorkflows: z.array(z.any()),\n projectStructure: z.any(),\n research: z.any(),\n projectPath: z.string().optional(),\n});\n\nexport const TaskExecutionSuspendSchema = z.object({\n questions: QuestionSchema,\n currentProgress: z.string(),\n completedTasks: z.array(z.string()),\n message: z.string(),\n});\n\nexport const TaskExecutionResumeSchema = z.object({\n answers: z.array(\n z.object({\n questionId: z.string(),\n answer: z.string(),\n }),\n ),\n});\n\nexport const TaskExecutionResultSchema = z.object({\n success: z.boolean(),\n filesModified: z.array(z.string()),\n validationResults: z.object({\n passed: z.boolean(),\n errors: z.array(z.string()),\n warnings: z.array(z.string()),\n }),\n completedTasks: z.array(z.string()),\n message: z.string(),\n error: z.string().optional(),\n});\n\nexport const UserClarificationInputSchema = z.object({\n questions: QuestionSchema,\n});\n\nexport const UserClarificationResultSchema = z.object({\n answers: z.record(z.string()),\n hasAnswers: z.boolean(),\n});\n\nexport const WorkflowBuilderResultSchema = z.object({\n success: z.boolean(),\n action: z.enum(['create', 'edit']),\n workflowName: z.string().optional(),\n workflowFile: z.string().optional(),\n discovery: WorkflowDiscoveryResultSchema.optional(),\n projectStructure: ProjectDiscoveryResultSchema.optional(),\n research: WorkflowResearchResultSchema.optional(),\n planning: PlanningIterationResultSchema.optional(),\n taskManagement: TaskManagementResultSchema.optional(),\n execution: TaskExecutionResultSchema.optional(),\n needsUserInput: z.boolean().optional(),\n questions: QuestionSchema.optional(),\n message: z.string(),\n nextSteps: z.array(z.string()).optional(),\n error: z.string().optional(),\n});\n\nexport const TaskExecutionIterationInputSchema = (taskLength: number) =>\n z.object({\n status: z\n .enum(['in_progress', 'completed', 'needs_clarification'])\n .describe('Status - only use \"completed\" when ALL remaining tasks are finished'),\n progress: z.string().describe('Current progress description'),\n completedTasks: z\n .array(z.string())\n .describe('List of ALL completed task IDs (including previously completed ones)'),\n totalTasksRequired: z.number().describe(`Total number of tasks that must be completed (should be ${taskLength})`),\n tasksRemaining: z.array(z.string()).describe('List of task IDs that still need to be completed'),\n filesModified: z\n .array(z.string())\n .describe('List of files that were created or modified - use these exact paths for validateCode tool'),\n questions: QuestionSchema.optional().describe('Questions for user if clarification is needed'),\n message: z.string().describe('Summary of work completed or current status'),\n error: z.string().optional().describe('Any errors encountered'),\n });\n","import { z } from 'zod';\nimport { QuestionSchema, TaskSchema } from '../shared/schema';\nimport {\n ProjectDiscoveryResultSchema,\n WorkflowResearchResultSchema,\n DiscoveredWorkflowSchema,\n} from '../workflow-builder/schema';\n\nexport const PlanningIterationInputSchema = z.object({\n action: z.enum(['create', 'edit']),\n workflowName: z.string().optional(),\n description: z.string().optional(),\n requirements: z.string().optional(),\n discoveredWorkflows: z.array(DiscoveredWorkflowSchema),\n projectStructure: ProjectDiscoveryResultSchema,\n research: WorkflowResearchResultSchema,\n\n userAnswers: z.record(z.string()).optional(),\n});\n\nexport const PlanningIterationSuspendSchema = z.object({\n questions: QuestionSchema,\n message: z.string(),\n currentPlan: z.object({\n tasks: TaskSchema,\n reasoning: z.string(),\n }),\n});\n\nexport const PlanningIterationResumeSchema = z.object({\n answers: z.record(z.string()),\n});\n\nexport const PlanningAgentOutputSchema = z.object({\n tasks: TaskSchema,\n questions: QuestionSchema.optional(),\n reasoning: z.string().describe('Explanation of the plan and any questions'),\n planComplete: z.boolean().describe('Whether the plan is ready for execution (no more questions)'),\n});\n\nexport const TaskApprovalOutputSchema = z.object({\n approved: z.boolean(),\n tasks: TaskSchema,\n message: z.string(),\n userFeedback: z.string().optional(),\n});\n\nexport const TaskApprovalSuspendSchema = z.object({\n taskList: TaskSchema,\n summary: z.string(),\n message: z.string(),\n});\n\nexport const TaskApprovalResumeSchema = z.object({\n approved: z.boolean(),\n modifications: z.string().optional(),\n});\n","import { Agent } from '@mastra/core/agent';\nimport { createWorkflow, createStep } from '@mastra/core/workflows';\nimport { resolveModel } from '../../utils';\nimport { PlanningIterationResultSchema } from '../shared/schema';\nimport { taskPlanningPrompts } from './prompts';\nimport {\n PlanningAgentOutputSchema,\n PlanningIterationInputSchema,\n PlanningIterationResumeSchema,\n PlanningIterationSuspendSchema,\n TaskApprovalOutputSchema,\n TaskApprovalResumeSchema,\n TaskApprovalSuspendSchema,\n} from './schema';\n\n// Planning iteration step (with questions and user answers)\nconst planningIterationStep = createStep({\n id: 'planning-iteration',\n description: 'Create or refine task plan with user input',\n inputSchema: PlanningIterationInputSchema,\n outputSchema: PlanningIterationResultSchema,\n suspendSchema: PlanningIterationSuspendSchema,\n resumeSchema: PlanningIterationResumeSchema,\n execute: async ({ inputData, resumeData, suspend, requestContext }) => {\n const {\n action,\n workflowName,\n description,\n requirements,\n discoveredWorkflows,\n projectStructure,\n research,\n userAnswers,\n } = inputData;\n\n console.info('Starting planning iteration...');\n\n // Get or initialize Q&A tracking in request context\n const qaKey = 'workflow-builder-qa';\n let storedQAPairs: Array<{\n question: any;\n answer: string | null;\n askedAt: string;\n answeredAt: string | null;\n }> = requestContext.get(qaKey) || [];\n\n // Process new answers from user input or resume data\n const newAnswers = { ...(userAnswers || {}), ...(resumeData?.answers || {}) };\n\n // console.info('before', storedQAPairs);\n // console.info('newAnswers', newAnswers);\n // Update existing Q&A pairs with new answers\n if (Object.keys(newAnswers).length > 0) {\n storedQAPairs = storedQAPairs.map(pair => {\n if (newAnswers[pair.question.id]) {\n return {\n ...pair,\n answer: newAnswers[pair.question.id] || null,\n answeredAt: new Date().toISOString(),\n };\n }\n return pair;\n });\n\n // Store updated pairs back to request context\n requestContext.set(qaKey, storedQAPairs);\n }\n\n // console.info('after', storedQAPairs);\n\n // console.info(\n // `Current Q&A state: ${storedQAPairs.length} question-answer pairs, ${storedQAPairs.filter(p => p.answer).length} answered`,\n // );\n\n try {\n // const filteredMcpTools = await initializeMcpTools();\n\n const model = await resolveModel({ requestContext });\n\n const planningAgent = new Agent({\n model,\n instructions: taskPlanningPrompts.planningAgent.instructions({\n storedQAPairs,\n }),\n name: 'Workflow Planning Agent',\n // tools: filteredMcpTools,\n });\n\n // Check if we have user feedback from rejected task list in input data\n const hasTaskFeedback = Boolean(userAnswers && userAnswers.taskFeedback);\n\n const planningPrompt = storedQAPairs.some(pair => pair.answer)\n ? taskPlanningPrompts.planningAgent.refinementPrompt({\n action,\n workflowName,\n description,\n requirements,\n discoveredWorkflows,\n projectStructure,\n research,\n storedQAPairs,\n hasTaskFeedback,\n userAnswers,\n })\n : taskPlanningPrompts.planningAgent.initialPrompt({\n action,\n workflowName,\n description,\n requirements,\n discoveredWorkflows,\n projectStructure,\n research,\n });\n\n const result = await planningAgent.generate(planningPrompt, {\n structuredOutput: {\n schema: PlanningAgentOutputSchema,\n },\n // maxSteps: 15,\n });\n\n const planResult = await result.object;\n if (!planResult) {\n return {\n tasks: [],\n success: false,\n questions: [],\n reasoning: 'Planning agent failed to generate a valid response',\n planComplete: false,\n message: 'Planning failed',\n };\n }\n\n // If we have questions and plan is not complete, suspend for user input\n if (planResult.questions && planResult.questions.length > 0 && !planResult.planComplete) {\n console.info(`Planning needs user clarification: ${planResult.questions.length} questions`);\n\n console.info(planResult.questions);\n\n // Store new questions as Q&A pairs in request context\n const newQAPairs = planResult.questions.map((question: any) => ({\n question,\n answer: null,\n askedAt: new Date().toISOString(),\n answeredAt: null,\n }));\n\n storedQAPairs = [...storedQAPairs, ...newQAPairs];\n requestContext.set(qaKey, storedQAPairs);\n\n console.info(\n `Updated Q&A state: ${storedQAPairs.length} total question-answer pairs, ${storedQAPairs.filter(p => p.answer).length} answered`,\n );\n\n return suspend({\n questions: planResult.questions,\n message: taskPlanningPrompts.taskApproval.message(planResult.questions.length),\n currentPlan: {\n tasks: planResult.tasks,\n reasoning: planResult.reasoning,\n },\n });\n }\n\n // Plan is complete\n console.info(`Planning complete with ${planResult.tasks.length} tasks`);\n\n // Update request context with final state\n requestContext.set(qaKey, storedQAPairs);\n console.info(\n `Final Q&A state: ${storedQAPairs.length} total question-answer pairs, ${storedQAPairs.filter(p => p.answer).length} answered`,\n );\n\n return {\n tasks: planResult.tasks,\n success: true,\n questions: [],\n reasoning: planResult.reasoning,\n planComplete: true,\n message: `Successfully created ${planResult.tasks.length} tasks`,\n allPreviousQuestions: storedQAPairs.map(pair => pair.question),\n allPreviousAnswers: Object.fromEntries(\n storedQAPairs.filter(pair => pair.answer).map(pair => [pair.question.id, pair.answer]),\n ),\n };\n } catch (error) {\n console.error('Planning iteration failed:', error);\n return {\n tasks: [],\n success: false,\n questions: [],\n reasoning: `Planning failed: ${error instanceof Error ? error.message : String(error)}`,\n planComplete: false,\n message: 'Planning iteration failed',\n error: error instanceof Error ? error.message : String(error),\n allPreviousQuestions: storedQAPairs.map(pair => pair.question),\n allPreviousAnswers: Object.fromEntries(\n storedQAPairs.filter(pair => pair.answer).map(pair => [pair.question.id, pair.answer]),\n ),\n };\n }\n },\n});\n\n// Task approval step\nconst taskApprovalStep = createStep({\n id: 'task-approval',\n description: 'Get user approval for the final task list',\n inputSchema: PlanningIterationResultSchema,\n outputSchema: TaskApprovalOutputSchema,\n suspendSchema: TaskApprovalSuspendSchema,\n resumeSchema: TaskApprovalResumeSchema,\n execute: async ({ inputData, resumeData, suspend }) => {\n const { tasks } = inputData;\n\n // If no resume data, suspend for user approval\n if (!resumeData?.approved && resumeData?.approved !== false) {\n console.info(`Requesting user approval for ${tasks.length} tasks`);\n\n const summary = `Task List for Approval:\n\n${tasks.length} tasks planned:\n${tasks.map((task, i) => `${i + 1}. [${task.priority.toUpperCase()}] ${task.content}${task.dependencies?.length ? ` (depends on: ${task.dependencies.join(', ')})` : ''}\\n Notes: ${task.notes || 'None'}`).join('\\n')}`;\n\n return suspend({\n taskList: tasks,\n summary,\n message: taskPlanningPrompts.taskApproval.approvalMessage(tasks.length),\n });\n }\n\n // User responded\n if (resumeData.approved) {\n console.info('Task list approved by user');\n return {\n approved: true,\n tasks,\n message: 'Task list approved, ready for execution',\n };\n } else {\n console.info('Task list rejected by user');\n return {\n approved: false,\n tasks,\n message: 'Task list rejected',\n userFeedback: resumeData.modifications,\n };\n }\n },\n});\n\n// Sub-workflow: Planning and Approval Cycle\nexport const planningAndApprovalWorkflow = createWorkflow({\n id: 'planning-and-approval',\n description: 'Handle iterative planning with questions and task list approval',\n inputSchema: PlanningIterationInputSchema,\n outputSchema: TaskApprovalOutputSchema,\n steps: [planningIterationStep, taskApprovalStep],\n})\n // Step 1: Planning iteration (with questions suspension)\n .dountil(planningIterationStep, async ({ inputData }) => {\n console.info(`Sub-workflow planning check: planComplete=${inputData.planComplete}`);\n return inputData.planComplete === true;\n })\n // Map to approval step input format\n .map(async ({ inputData }) => {\n // After doUntil completes, inputData contains the final result\n return {\n tasks: inputData.tasks || [],\n success: inputData.success || false,\n questions: inputData.questions || [],\n reasoning: inputData.reasoning || '',\n planComplete: inputData.planComplete || false,\n message: inputData.message || '',\n };\n })\n // Step 2: Task list approval\n .then(taskApprovalStep)\n .commit();\n","export const workflowResearch = `\n## π **COMPREHENSIVE MASTRA WORKFLOW RESEARCH SUMMARY**\n\nBased on extensive research of Mastra documentation and examples, here's essential information for building effective Mastra workflows:\n\n### **π WORKFLOW FUNDAMENTALS**\n\n**Core Components:**\n- **\\`createWorkflow()\\`**: Main factory function that creates workflow instances\n- **\\`createStep()\\`**: Creates individual workflow steps with typed inputs/outputs \n- **\\`.commit()\\`**: Finalizes workflow definition (REQUIRED to make workflows executable)\n- **Zod schemas**: Used for strict input/output typing and validation\n\n**Basic Structure:**\n\\`\\`\\`typescript\nimport { createWorkflow, createStep } from \"@mastra/core/workflows\";\nimport { z } from \"zod\";\n\nconst workflow = createWorkflow({\n id: \"unique-workflow-id\", // Required: kebab-case recommended\n description: \"What this workflow does\", // Optional but recommended\n inputSchema: z.object({...}), // Required: Defines workflow inputs\n outputSchema: z.object({...}) // Required: Defines final outputs\n})\n .then(step1) // Chain steps sequentially\n .then(step2)\n .commit(); // CRITICAL: Makes workflow executable\n\\`\\`\\`\n\n### **π§ STEP CREATION PATTERNS**\n\n**Standard Step Definition:**\n\\`\\`\\`typescript\nconst myStep = createStep({\n id: \"step-id\", // Required: unique identifier\n description: \"Step description\", // Recommended for clarity\n inputSchema: z.object({...}), // Required: input validation\n outputSchema: z.object({...}), // Required: output validation\n execute: async ({ inputData, mastra, getStepResult, getInitData }) => {\n // Step logic here\n return { /* matches outputSchema */ };\n }\n});\n\\`\\`\\`\n\n**Execute Function Parameters:**\n- \\`inputData\\`: Validated input matching inputSchema\n- \\`mastra\\`: Access to Mastra instance (agents, tools, other workflows)\n- \\`getStepResult(stepInstance)\\`: Get results from previous steps\n- \\`getInitData()\\`: Access original workflow input data\n- \\`requestContext\\`: Runtime dependency injection context\n- \\`runCount\\`: Number of times this step has run (useful for retries)\n\n### **π CONTROL FLOW METHODS**\n\n**Sequential Execution:**\n- \\`.then(step)\\`: Execute steps one after another\n- Data flows automatically if schemas match\n\n**Parallel Execution:**\n- \\`.parallel([step1, step2])\\`: Run steps simultaneously\n- All parallel steps complete before continuing\n\n**Conditional Logic:**\n- \\`.branch([[condition, step], [condition, step]])\\`: Execute different steps based on conditions\n- Conditions evaluated sequentially, matching steps run in parallel\n\n**Loops:**\n- \\`.dountil(step, condition)\\`: Repeat until condition becomes true\n- \\`.dowhile(step, condition)\\`: Repeat while condition is true \n- \\`.foreach(step, {concurrency: N})\\`: Execute step for each array item\n\n**Data Transformation:**\n- \\`.map(({ inputData, getStepResult, getInitData }) => transformedData)\\`: Transform data between steps\n\n### **βΈοΈ SUSPEND & RESUME CAPABILITIES**\n\n**For Human-in-the-Loop Workflows:**\n\\`\\`\\`typescript\nconst userInputStep = createStep({\n id: \"user-input\",\n suspendSchema: z.object({}), // Schema for suspension payload\n resumeSchema: z.object({ // Schema for resume data\n userResponse: z.string()\n }),\n execute: async ({ resumeData, suspend }) => {\n if (!resumeData?.userResponse) {\n await suspend({}); // Pause workflow\n return { response: \"\" };\n }\n return { response: resumeData.userResponse };\n }\n});\n\\`\\`\\`\n\n**Resume Workflow:**\n\\`\\`\\`typescript\nconst result = await run.start({ inputData: {...} });\nif (result.status === \"suspended\") {\n await run.resume({\n step: result.suspended[0], // Or specific step ID\n resumeData: { userResponse: \"answer\" }\n });\n}\n\\`\\`\\`\n\n### **π οΈ INTEGRATING AGENTS & TOOLS**\n\n**Using Agents in Steps:**\n\\`\\`\\`typescript\n// Method 1: Agent as step\nconst agentStep = createStep(myAgent);\n\n// Method 2: Call agent in execute function\nconst step = createStep({\n execute: async ({ inputData }) => {\n const result = await myAgent.generate(prompt);\n return { output: result.text };\n }\n});\n\\`\\`\\`\n\n**Using Tools in Steps:**\n\\`\\`\\`typescript\n// Method 1: Tool as step \nconst toolStep = createStep(myTool);\n\n// Method 2: Call tool in execute function\nconst step = createStep({\n execute: async ({ inputData, requestContext }) => {\n const result = await myTool.execute({\n context: inputData,\n requestContext\n });\n return result;\n }\n});\n\\`\\`\\`\n\n### **ποΈ PROJECT ORGANIZATION PATTERNS**\n\n**MANDATORY Workflow Organization:**\nEach workflow MUST be organized in its own dedicated folder with separated concerns:\n\n\\`\\`\\`\nsrc/mastra/workflows/\nβββ my-workflow-name/ # Kebab-case folder name\nβ βββ types.ts # All Zod schemas and TypeScript types\nβ βββ steps.ts # All individual step definitions\nβ βββ workflow.ts # Main workflow composition and export\nβ βββ utils.ts # Helper functions (if needed)\nβββ another-workflow/\nβ βββ types.ts\nβ βββ steps.ts\nβ βββ workflow.ts\nβ βββ utils.ts\nβββ index.ts # Export all workflows\n\\`\\`\\`\n\n**CRITICAL File Organization Rules:**\n- **ALWAYS create a dedicated folder** for each workflow\n- **Folder names MUST be kebab-case** version of workflow name\n- **types.ts**: Define all input/output schemas, validation types, and interfaces\n- **steps.ts**: Create all individual step definitions using createStep()\n- **workflow.ts**: Compose steps into workflow using createWorkflow() and export the final workflow\n- **utils.ts**: Any helper functions, constants, or utilities (create only if needed)\n- **NEVER put everything in one file** - always separate concerns properly\n\n**Workflow Registration:**\n\\`\\`\\`typescript\n// src/mastra/index.ts\nexport const mastra = new Mastra({\n workflows: {\n sendEmailWorkflow, // Use camelCase for keys\n dataProcessingWorkflow\n },\n storage: new LibSQLStore({ id: 'mastra-storage', url: 'file:./mastra.db' }), // Required for suspend/resume\n});\n\\`\\`\\`\n\n### **π¦ ESSENTIAL DEPENDENCIES**\n\n**Required Packages:**\n\\`\\`\\`json\n{\n \"dependencies\": {\n \"@mastra/core\": \"latest\",\n \"zod\": \"^3.25.67\"\n }\n}\n\\`\\`\\`\n\n**Additional Packages (as needed):**\n- \\`@mastra/libsql\\`: For workflow state persistence\n- \\`@ai-sdk/openai\\`: For AI model integration\n- \\`ai\\`: For AI SDK functionality\n\n### **β
WORKFLOW BEST PRACTICES**\n\n**Schema Design:**\n- Use descriptive property names in schemas\n- Make schemas as specific as possible (avoid \\`z.any()\\`)\n- Include validation for required business logic\n\n**Error Handling:**\n- Use \\`try/catch\\` blocks in step execute functions\n- Return meaningful error messages\n- Consider using \\`bail()\\` for early successful exits\n\n**Step Organization:**\n- Keep steps focused on single responsibilities\n- Use descriptive step IDs (kebab-case recommended)\n- Create reusable steps for common operations\n\n**Data Flow:**\n- Use \\`.map()\\` when schemas don't align between steps\n- Access previous step results with \\`getStepResult(stepInstance)\\`\n- Use \\`getInitData()\\` to access original workflow input\n\n### **π EXECUTION PATTERNS**\n\n**Running Workflows:**\n\\`\\`\\`typescript\n// Create and start run\nconst run = await workflow.createRun();\nconst result = await run.start({ inputData: {...} });\n\n// Stream execution for real-time monitoring\nconst stream = await run.streamVNext({ inputData: {...} });\nfor await (const chunk of stream) {\n console.log(chunk);\n}\n\n// Watch for events\nrun.watch((event) => console.log(event));\n\\`\\`\\`\n\n**Workflow Status Types:**\n- \\`\"success\"\\`: Completed successfully\n- \\`\"suspended\"\\`: Paused awaiting input\n- \\`\"failed\"\\`: Encountered error\n\n### **π ADVANCED FEATURES**\n\n**Nested Workflows:**\n- Use workflows as steps: \\`.then(otherWorkflow)\\`\n- Enable complex workflow composition\n\n**Request Context:**\n- Pass shared data across all steps\n- Enable dependency injection patterns\n\n**Streaming & Events:**\n- Real-time workflow monitoring\n- Integration with external event systems\n\n**Cloning:**\n- \\`cloneWorkflow(original, {id: \"new-id\"})\\`: Reuse workflow structure\n- \\`cloneStep(original, {id: \"new-id\"})\\`: Reuse step logic\n\nThis comprehensive research provides the foundation for creating robust, maintainable Mastra workflows with proper typing, error handling, and architectural patterns.\n`;\n/**\n * Prompts and instructions for workflow builder agents\n */\n\nexport interface WorkflowBuilderPrompts {\n researchAgent: {\n instructions: string;\n prompt: (context: { projectStructure: any; dependencies: any; hasWorkflowsDir: boolean }) => string;\n };\n executionAgent: {\n instructions: (context: {\n action: string;\n workflowName?: string;\n tasksLength: number;\n currentProjectPath: string;\n discoveredWorkflows: any;\n projectStructure: any;\n research: any;\n tasks: any[];\n resumeData?: any;\n }) => string;\n prompt: (context: { action: string; workflowName?: string; tasks: any[]; resumeData?: any }) => string;\n iterationPrompt: (context: {\n completedTasks: any[];\n pendingTasks: any[];\n workflowName?: string;\n resumeData?: any;\n }) => string;\n };\n validation: {\n instructions: string;\n };\n}\n\nexport const workflowBuilderPrompts: WorkflowBuilderPrompts = {\n researchAgent: {\n instructions: `You are a Mastra workflow research expert. Your task is to gather relevant information about creating Mastra workflows.\n\nRESEARCH OBJECTIVES:\n1. **Core Concepts**: Understand how Mastra workflows work\n2. **Best Practices**: Learn workflow patterns and conventions \n3. **Code Examples**: Find relevant implementation examples\n4. **Technical Details**: Understand schemas, steps, and configuration\n\nUse the available documentation and examples tools to gather comprehensive information about Mastra workflows.`,\n\n prompt: context => `Research everything about Mastra workflows to help create or edit them effectively.\n\nPROJECT CONTEXT:\n- Project Structure: ${JSON.stringify(context.projectStructure, null, 2)}\n- Dependencies: ${JSON.stringify(context.dependencies, null, 2)}\n- Has Workflows Directory: ${context.hasWorkflowsDir}\n\nFocus on:\n1. How to create workflows using createWorkflow()\n2. How to create and chain workflow steps\n3. Best practices for workflow organization\n4. Common workflow patterns and examples\n5. Schema definitions and types\n6. Error handling and debugging\n\nUse the docs and examples tools to gather comprehensive information.`,\n },\n\n executionAgent: {\n instructions: context => `You are executing a workflow ${context.action} task for: \"${context.workflowName}\"\n\nCRITICAL WORKFLOW EXECUTION REQUIREMENTS:\n1. **EXPLORE PROJECT STRUCTURE FIRST**: Use listDirectory and readFile tools to understand the existing project layout, folder structure, and conventions before creating any files\n2. **FOLLOW PROJECT CONVENTIONS**: Look at existing workflows, agents, and file structures to understand where new files should be placed (typically src/mastra/workflows/, src/mastra/agents/, etc.)\n3. **USE PRE-LOADED TASK LIST**: Your task list has been pre-populated in the taskManager tool. Use taskManager with action 'list' to see all tasks, and action 'update' to mark progress\n4. **COMPLETE EVERY SINGLE TASK**: You MUST complete ALL ${context.tasksLength} tasks that are already in the taskManager. Do not stop until every task is marked as 'completed'\n5. **Follow Task Dependencies**: Execute tasks in the correct order, respecting dependencies\n6. **Request User Input When Needed**: If you encounter choices (like email providers, databases, etc.) that require user decision, return questions for clarification\n7. **STRICT WORKFLOW ORGANIZATION**: When creating or editing workflows, you MUST follow this exact structure\n\nMANDATORY WORKFLOW FOLDER STRUCTURE:\nWhen ${context.action === 'create' ? 'creating a new workflow' : 'editing a workflow'}, you MUST organize files as follows:\n\nπ src/mastra/workflows/${context.workflowName?.toLowerCase().replace(/[^a-z0-9]/g, '-') || 'new-workflow'}/\nβββ π types.ts # All Zod schemas and TypeScript types\nβββ π steps.ts # All individual step definitions \nβββ π workflow.ts # Main workflow composition and export\nβββ π utils.ts # Helper functions (if needed)\n\nCRITICAL FILE ORGANIZATION RULES:\n- **ALWAYS create a dedicated folder** for the workflow in src/mastra/workflows/\n- **Folder name MUST be kebab-case** version of workflow name\n- **types.ts**: Define all input/output schemas, validation types, and interfaces\n- **steps.ts**: Create all individual step definitions using createStep()\n- **workflow.ts**: Compose steps into workflow using createWorkflow() and export the final workflow\n- **utils.ts**: Any helper functions, constants, or utilities (create only if needed)\n- **NEVER put everything in one file** - always separate concerns properly\n\nCRITICAL COMPLETION REQUIREMENTS: \n- ALWAYS explore the directory structure before creating files to understand where they should go\n- You MUST complete ALL ${context.tasksLength} tasks before returning status='completed'\n- Use taskManager tool with action 'list' to see your current task list and action 'update' to mark tasks as 'in_progress' or 'completed'\n- If you need to make any decisions during implementation (choosing providers, configurations, etc.), return questions for user clarification\n- DO NOT make assumptions about file locations - explore first!\n- You cannot finish until ALL tasks in the taskManager are marked as 'completed'\n\nPROJECT CONTEXT:\n- Action: ${context.action}\n- Workflow Name: ${context.workflowName}\n- Project Path: ${context.currentProjectPath}\n- Discovered Workflows: ${JSON.stringify(context.discoveredWorkflows, null, 2)}\n- Project Structure: ${JSON.stringify(context.projectStructure, null, 2)}\n\nAVAILABLE RESEARCH:\n${JSON.stringify(context.research, null, 2)}\n\nPRE-LOADED TASK LIST (${context.tasksLength} tasks already in taskManager):\n${context.tasks.map(task => `- ${task.id}: ${task.content} (Priority: ${task.priority})`).join('\\n')}\n\n${context.resumeData ? `USER PROVIDED ANSWERS: ${JSON.stringify(context.resumeData.answers, null, 2)}` : ''}\n\nStart by exploring the project structure, then use 'taskManager' with action 'list' to see your pre-loaded tasks, and work through each task systematically.`,\n\n prompt: context =>\n context.resumeData\n ? `Continue working on the task list. The user has provided answers to your questions: ${JSON.stringify(context.resumeData.answers, null, 2)}. \n\nCRITICAL: You must complete ALL ${context.tasks.length} tasks that are pre-loaded in the taskManager. Use the taskManager tool with action 'list' to check your progress and continue with the next tasks. Do not stop until every single task is marked as 'completed'.`\n : `Begin executing the pre-loaded task list to ${context.action} the workflow \"${context.workflowName}\". \n\nCRITICAL REQUIREMENTS:\n- Your ${context.tasks.length} tasks have been PRE-LOADED into the taskManager tool\n- Start by exploring the project directory structure using listDirectory and readFile tools to understand:\n - Where workflows are typically stored (look for src/mastra/workflows/ or similar)\n - What the existing file structure looks like\n - How other workflows are organized and named\n - Where agent files are stored if needed\n- Then use taskManager with action 'list' to see your pre-loaded tasks\n- Use taskManager with action 'update' to mark tasks as 'in_progress' or 'completed'\n\nCRITICAL FILE ORGANIZATION RULES:\n- **ALWAYS create a dedicated folder** for the workflow in src/mastra/workflows/\n- **Folder name MUST be kebab-case** version of workflow name \n- **NEVER put everything in one file** - separate types, steps, and workflow composition\n- Follow the 4-file structure above for maximum maintainability and clarity\n\n- DO NOT return status='completed' until ALL ${context.tasks.length} tasks are marked as 'completed' in the taskManager\n\nPRE-LOADED TASKS (${context.tasks.length} total tasks in taskManager):\n${context.tasks.map((task, index) => `${index + 1}. [${task.id}] ${task.content}`).join('\\n')}\n\nUse taskManager with action 'list' to see the current status of all tasks. You must complete every single one before finishing.`,\n\n iterationPrompt:\n context => `Continue working on the remaining tasks. You have already completed these tasks: [${context.completedTasks.map(t => t.id).join(', ')}]\n\nREMAINING TASKS TO COMPLETE (${context.pendingTasks.length} tasks):\n${context.pendingTasks.map((task, index) => `${index + 1}. [${task.id}] ${task.content}`).join('\\n')}\n\nCRITICAL: You must complete ALL of these remaining ${context.pendingTasks.length} tasks. Use taskManager with action 'list' to check current status and action 'update' to mark tasks as completed.\n\n${context.resumeData ? `USER PROVIDED ANSWERS: ${JSON.stringify(context.resumeData.answers, null, 2)}` : ''}`,\n },\n\n validation: {\n instructions: `CRITICAL VALIDATION INSTRUCTIONS:\n- When using the validateCode tool, ALWAYS pass the specific files you created or modified using the 'files' parameter\n- The tool uses a hybrid validation approach: fast syntax checking β semantic type checking β ESLint\n- This is much faster than full project compilation and only shows errors from your specific files\n- Example: validateCode({ validationType: ['types', 'lint'], files: ['src/workflows/my-workflow.ts', 'src/agents/my-agent.ts'] })\n- ALWAYS validate after creating or modifying files to ensure they compile correctly`,\n },\n};\n","import { createTool } from '@mastra/core/tools';\nimport { z } from 'zod';\nimport { AgentBuilderDefaults } from '../../defaults';\n\n// taskManager tool that only allows updates, not creation\nexport const restrictedTaskManager = createTool({\n id: 'task-manager',\n description:\n 'View and update your pre-loaded task list. You can only mark tasks as in_progress or completed, not create new tasks.',\n inputSchema: z.object({\n action: z\n .enum(['list', 'update', 'complete'])\n .describe('List tasks, update status, or mark complete - tasks are pre-loaded'),\n tasks: z\n .array(\n z.object({\n id: z.string().describe('Task ID - must match existing task'),\n content: z.string().optional().describe('Task content (read-only)'),\n status: z.enum(['pending', 'in_progress', 'completed', 'blocked']).describe('Task status'),\n priority: z.enum(['high', 'medium', 'low']).optional().describe('Task priority (read-only)'),\n dependencies: z.array(z.string()).optional().describe('Task dependencies (read-only)'),\n notes: z.string().optional().describe('Additional notes or progress updates'),\n }),\n )\n .optional()\n .describe('Tasks to update (status and notes only)'),\n taskId: z.string().optional().describe('Specific task ID for single task operations'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n tasks: z.array(\n z.object({\n id: z.string(),\n content: z.string(),\n status: z.string(),\n priority: z.string(),\n dependencies: z.array(z.string()).optional(),\n notes: z.string().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n }),\n ),\n message: z.string(),\n }),\n execute: async input => {\n // Convert to the expected format for manageTaskList\n const adaptedContext = {\n ...input,\n action: input.action,\n tasks: input.tasks?.map(task => ({\n ...task,\n priority: task.priority || ('medium' as const),\n })),\n };\n return await AgentBuilderDefaults.manageTaskList(adaptedContext);\n },\n});\n","import { existsSync } from 'fs';\nimport { readFile, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport { Agent } from '@mastra/core/agent';\nimport { createWorkflow, createStep } from '@mastra/core/workflows';\nimport { stepCountIs } from 'ai';\nimport type { z } from 'zod';\nimport { AgentBuilder } from '../../agent';\nimport { AgentBuilderDefaults } from '../../defaults';\nimport { resolveModel } from '../../utils';\nimport { planningAndApprovalWorkflow } from '../task-planning/task-planning';\nimport { workflowBuilderPrompts, workflowResearch as research } from './prompts';\nimport {\n WorkflowBuilderInputSchema,\n WorkflowBuilderResultSchema,\n WorkflowDiscoveryResultSchema,\n ProjectDiscoveryResultSchema,\n WorkflowResearchResultSchema,\n TaskExecutionResultSchema,\n TaskExecutionInputSchema,\n TaskExecutionResumeSchema,\n TaskExecutionSuspendSchema,\n TaskExecutionIterationInputSchema,\n} from './schema';\nimport type { DiscoveredWorkflowSchema } from './schema';\nimport { restrictedTaskManager } from './tools';\n\n// Step 1: Always discover existing workflows\nconst workflowDiscoveryStep = createStep({\n id: 'workflow-discovery',\n description: 'Discover existing workflows in the project',\n inputSchema: WorkflowBuilderInputSchema,\n outputSchema: WorkflowDiscoveryResultSchema,\n execute: async ({ inputData, requestContext: _requestContext }) => {\n console.info('Starting workflow discovery...');\n const { projectPath = process.cwd() } = inputData;\n\n try {\n // Check if workflows directory exists\n const workflowsPath = join(projectPath, 'src/mastra/workflows');\n if (!existsSync(workflowsPath)) {\n console.info('No workflows directory found');\n return {\n success: true,\n workflows: [],\n mastraIndexExists: existsSync(join(projectPath, 'src/mastra/index.ts')),\n message: 'No existing workflows found in the project',\n };\n }\n\n // Read workflow files directly\n const workflowFiles = await readdir(workflowsPath);\n const workflows: z.infer<typeof DiscoveredWorkflowSchema>[] = [];\n\n for (const fileName of workflowFiles) {\n if (fileName.endsWith('.ts') && !fileName.endsWith('.test.ts')) {\n const filePath = join(workflowsPath, fileName);\n try {\n const content = await readFile(filePath, 'utf-8');\n\n // Extract basic workflow info\n const nameMatch = content.match(/createWorkflow\\s*\\(\\s*{\\s*id:\\s*['\"]([^'\"]+)['\"]/);\n const descMatch = content.match(/description:\\s*['\"]([^'\"]*)['\"]/);\n\n if (nameMatch && nameMatch[1]) {\n workflows.push({\n name: nameMatch[1],\n file: filePath,\n description: descMatch?.[1] ?? 'No description available',\n });\n }\n } catch (error) {\n console.warn(`Failed to read workflow file ${filePath}:`, error);\n }\n }\n }\n\n console.info(`Discovered ${workflows.length} existing workflows`);\n return {\n success: true,\n workflows,\n mastraIndexExists: existsSync(join(projectPath, 'src/mastra/index.ts')),\n message:\n workflows.length > 0\n ? `Found ${workflows.length} existing workflow(s): ${workflows.map(w => w.name).join(', ')}`\n : 'No existing workflows found in the project',\n };\n } catch (error) {\n console.error('Workflow discovery failed:', error);\n return {\n success: false,\n workflows: [],\n mastraIndexExists: false,\n message: `Workflow discovery failed: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 2: Always discover project structure\nconst projectDiscoveryStep = createStep({\n id: 'project-discovery',\n description: 'Analyze the project structure and setup',\n inputSchema: WorkflowDiscoveryResultSchema,\n outputSchema: ProjectDiscoveryResultSchema,\n execute: async ({ inputData: _inputData, requestContext: _requestContext }) => {\n console.info('Starting project discovery...');\n\n try {\n // Get project structure - no need for AgentBuilder since we're just checking files\n const projectPath = process.cwd(); // Use current working directory as default\n const projectStructure = {\n hasPackageJson: existsSync(join(projectPath, 'package.json')),\n hasMastraConfig:\n existsSync(join(projectPath, 'mastra.config.js')) || existsSync(join(projectPath, 'mastra.config.ts')),\n hasSrcDirectory: existsSync(join(projectPath, 'src')),\n hasMastraDirectory: existsSync(join(projectPath, 'src/mastra')),\n hasWorkflowsDirectory: existsSync(join(projectPath, 'src/mastra/workflows')),\n hasToolsDirectory: existsSync(join(projectPath, 'src/mastra/tools')),\n hasAgentsDirectory: existsSync(join(projectPath, 'src/mastra/agents')),\n };\n\n // Read package.json if it exists\n let packageInfo = null;\n if (projectStructure.hasPackageJson) {\n try {\n const packageContent = await readFile(join(projectPath, 'package.json'), 'utf-8');\n packageInfo = JSON.parse(packageContent);\n } catch (error) {\n console.warn('Failed to read package.json:', error);\n }\n }\n\n console.info('Project discovery completed');\n return {\n success: true,\n structure: {\n hasWorkflowsDir: projectStructure.hasWorkflowsDirectory,\n hasAgentsDir: projectStructure.hasAgentsDirectory,\n hasToolsDir: projectStructure.hasToolsDirectory,\n hasMastraIndex: existsSync(join(projectPath, 'src/mastra/index.ts')),\n existingWorkflows: [],\n existingAgents: [],\n existingTools: [],\n },\n dependencies: packageInfo?.dependencies || {},\n message: 'Project discovery completed successfully',\n };\n } catch (error) {\n console.error('Project discovery failed:', error);\n return {\n success: false,\n structure: {\n hasWorkflowsDir: false,\n hasAgentsDir: false,\n hasToolsDir: false,\n hasMastraIndex: false,\n existingWorkflows: [],\n existingAgents: [],\n existingTools: [],\n },\n dependencies: {},\n message: 'Project discovery failed',\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 3: Research what is needed to be done\nconst workflowResearchStep = createStep({\n id: 'workflow-research',\n description: 'Research Mastra workflows and gather relevant documentation',\n inputSchema: ProjectDiscoveryResultSchema,\n outputSchema: WorkflowResearchResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Starting workflow research...');\n\n try {\n // const filteredMcpTools = await initializeMcpTools();\n\n const model = await resolveModel({ requestContext });\n\n const researchAgent = new Agent({\n model,\n instructions: workflowBuilderPrompts.researchAgent.instructions,\n name: 'Workflow Research Agent',\n // tools: filteredMcpTools,\n });\n\n const researchPrompt = workflowBuilderPrompts.researchAgent.prompt({\n projectStructure: inputData.structure,\n dependencies: inputData.dependencies,\n hasWorkflowsDir: inputData.structure.hasWorkflowsDir,\n });\n\n const result = await researchAgent.generate(researchPrompt, {\n structuredOutput: {\n schema: WorkflowResearchResultSchema,\n },\n // stopWhen: stepCountIs(10),\n });\n\n const researchResult = await result.object;\n if (!researchResult) {\n return {\n success: false,\n documentation: {\n workflowPatterns: [],\n stepExamples: [],\n bestPractices: [],\n },\n webResources: [],\n message: 'Research agent failed to generate valid response',\n error: 'Research agent failed to generate valid response',\n };\n }\n\n console.info('Research completed successfully');\n return {\n success: true,\n documentation: {\n workflowPatterns: researchResult.documentation.workflowPatterns,\n stepExamples: researchResult.documentation.stepExamples,\n bestPractices: researchResult.documentation.bestPractices,\n },\n webResources: researchResult.webResources,\n message: 'Research completed successfully',\n };\n } catch (error) {\n console.error('Workflow research failed:', error);\n return {\n success: false,\n documentation: {\n workflowPatterns: [],\n stepExamples: [],\n bestPractices: [],\n },\n webResources: [],\n message: 'Research failed',\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Task execution step remains the same\nconst taskExecutionStep = createStep({\n id: 'task-execution',\n description: 'Execute the approved task list to create or edit the workflow',\n inputSchema: TaskExecutionInputSchema,\n outputSchema: TaskExecutionResultSchema,\n suspendSchema: TaskExecutionSuspendSchema,\n resumeSchema: TaskExecutionResumeSchema,\n execute: async ({ inputData, resumeData, suspend, requestContext }) => {\n const {\n action,\n workflowName,\n description: _description,\n requirements: _requirements,\n tasks,\n discoveredWorkflows,\n projectStructure,\n research,\n projectPath,\n } = inputData;\n\n console.info(`Starting task execution for ${action}ing workflow: ${workflowName}`);\n console.info(`Executing ${tasks.length} tasks using AgentBuilder stream...`);\n\n try {\n const model = await resolveModel({ requestContext });\n const currentProjectPath = projectPath || process.cwd();\n\n // Pre-populate taskManager with the planned tasks\n console.info('Pre-populating taskManager with planned tasks...');\n const taskManagerContext = {\n action: 'create' as const,\n tasks: tasks.map(task => ({\n id: task.id,\n content: task.content,\n status: 'pending' as const,\n priority: task.priority,\n dependencies: task.dependencies,\n notes: task.notes,\n })),\n };\n\n const taskManagerResult = await AgentBuilderDefaults.manageTaskList(taskManagerContext);\n console.info(`Task manager initialized with ${taskManagerResult.tasks.length} tasks`);\n\n if (!taskManagerResult.success) {\n throw new Error(`Failed to initialize task manager: ${taskManagerResult.message}`);\n }\n\n const executionAgent = new AgentBuilder({\n projectPath: currentProjectPath,\n model,\n tools: {\n 'task-manager': restrictedTaskManager,\n },\n instructions: `${workflowBuilderPrompts.executionAgent.instructions({\n action,\n workflowName,\n tasksLength: tasks.length,\n currentProjectPath,\n discoveredWorkflows,\n projectStructure,\n research,\n tasks,\n resumeData,\n })}\n\n${workflowBuilderPrompts.validation.instructions}`,\n });\n\n const executionPrompt = workflowBuilderPrompts.executionAgent.prompt({\n action,\n workflowName,\n tasks,\n resumeData,\n });\n\n const originalInstructions = await executionAgent.getInstructions({ requestContext: requestContext });\n\n const enhancedOptions = {\n stopWhen: stepCountIs(100),\n temperature: 0.3,\n instructions: originalInstructions,\n };\n\n // Loop until all tasks are completed\n let finalResult: any = null;\n let allTasksCompleted = false;\n let iterationCount = 0;\n const maxIterations = 5;\n\n const expectedTaskIds = tasks.map(task => task.id);\n\n while (!allTasksCompleted && iterationCount < maxIterations) {\n iterationCount++;\n\n const currentTaskStatus = await AgentBuilderDefaults.manageTaskList({ action: 'list' });\n const completedTasks = currentTaskStatus.tasks.filter(task => task.status === 'completed');\n const pendingTasks = currentTaskStatus.tasks.filter(task => task.status !== 'completed');\n\n console.info(`\\n=== EXECUTION ITERATION ${iterationCount} ===`);\n console.info(`Completed tasks: ${completedTasks.length}/${expectedTaskIds.length}`);\n console.info(`Remaining tasks: ${pendingTasks.map(t => t.id).join(', ')}`);\n\n // Check if all tasks are completed\n allTasksCompleted = pendingTasks.length === 0;\n\n if (allTasksCompleted) {\n console.info('All tasks completed! Breaking execution loop.');\n break;\n }\n\n // Create prompt for this iteration\n const iterationPrompt =\n iterationCount === 1\n ? executionPrompt\n : `${workflowBuilderPrompts.executionAgent.iterationPrompt({\n completedTasks,\n pendingTasks,\n workflowName,\n resumeData,\n })}\n\n${workflowBuilderPrompts.validation.instructions}`;\n\n const stream = await executionAgent.stream(iterationPrompt, {\n structuredOutput: {\n schema: TaskExecutionIterationInputSchema(tasks.length),\n model,\n },\n ...enhancedOptions,\n });\n\n let finalMessage = '';\n for await (const chunk of stream.fullStream) {\n if (chunk.type === 'text-delta') {\n finalMessage += chunk.payload.text;\n }\n\n if (chunk.type === 'step-finish') {\n console.info(finalMessage);\n finalMessage = '';\n }\n\n if (chunk.type === 'tool-result') {\n console.info(JSON.stringify(chunk, null, 2));\n }\n\n if (chunk.type === 'finish') {\n console.info(chunk);\n }\n }\n\n await stream.consumeStream();\n finalResult = await stream.object;\n\n console.info(`Iteration ${iterationCount} result:`, { finalResult });\n\n if (!finalResult) {\n throw new Error(`No result received from agent execution on iteration ${iterationCount}`);\n }\n\n const postIterationTaskStatus = await AgentBuilderDefaults.manageTaskList({ action: 'list' });\n const postCompletedTasks = postIterationTaskStatus.tasks.filter(task => task.status === 'completed');\n const postPendingTasks = postIterationTaskStatus.tasks.filter(task => task.status !== 'completed');\n\n allTasksCompleted = postPendingTasks.length === 0;\n\n console.info(\n `After iteration ${iterationCount}: ${postCompletedTasks.length}/${expectedTaskIds.length} tasks completed in taskManager`,\n );\n\n // If agent needs clarification, break out and suspend\n if (finalResult.status === 'needs_clarification' && finalResult.questions && finalResult.questions.length > 0) {\n console.info(\n `Agent needs clarification on iteration ${iterationCount}: ${finalResult.questions.length} questions`,\n );\n break;\n }\n\n // If agent claims completed but taskManager shows pending tasks, continue loop\n if (finalResult.status === 'completed' && !allTasksCompleted) {\n console.info(\n `Agent claimed completion but taskManager shows pending tasks: ${postPendingTasks.map(t => t.id).join(', ')}`,\n );\n // Continue to next iteration\n }\n }\n\n if (iterationCount >= maxIterations && !allTasksCompleted) {\n finalResult.error = `Maximum iterations (${maxIterations}) reached but not all tasks completed`;\n finalResult.status = 'in_progress';\n }\n\n if (!finalResult) {\n throw new Error('No result received from agent execution');\n }\n\n // If the agent needs clarification, suspend the workflow\n if (finalResult.status === 'needs_clarification' && finalResult.questions && finalResult.questions.length > 0) {\n console.info(`Agent needs clarification: ${finalResult.questions.length} questions`);\n\n console.info('finalResult', JSON.stringify(finalResult, null, 2));\n return suspend({\n questions: finalResult.questions,\n currentProgress: finalResult.progress,\n completedTasks: finalResult.completedTasks || [],\n message: finalResult.message,\n });\n }\n\n const finalTaskStatus = await AgentBuilderDefaults.manageTaskList({ action: 'list' });\n const finalCompletedTasks = finalTaskStatus.tasks.filter(task => task.status === 'completed');\n const finalPendingTasks = finalTaskStatus.tasks.filter(task => task.status !== 'completed');\n\n const tasksCompleted = finalCompletedTasks.length;\n const tasksExpected = expectedTaskIds.length;\n const finalAllTasksCompleted = finalPendingTasks.length === 0;\n\n const success = finalAllTasksCompleted && !finalResult.error;\n const message = success\n ? `Successfully completed workflow ${action} - all ${tasksExpected} tasks completed after ${iterationCount} iteration(s): ${finalResult.message}`\n : `Workflow execution finished with issues after ${iterationCount} iteration(s): ${finalResult.message}. Completed: ${tasksCompleted}/${tasksExpected} tasks`;\n\n console.info(message);\n\n const missingTasks = finalPendingTasks.map(task => task.id);\n const validationErrors = [];\n\n if (finalResult.error) {\n validationErrors.push(finalResult.error);\n }\n\n if (!finalAllTasksCompleted) {\n validationErrors.push(\n `Incomplete tasks: ${missingTasks.join(', ')} (${tasksCompleted}/${tasksExpected} completed)`,\n );\n }\n\n return {\n success,\n completedTasks: finalCompletedTasks.map(task => task.id),\n filesModified: finalResult.filesModified || [],\n validationResults: {\n passed: success,\n errors: validationErrors,\n warnings: finalAllTasksCompleted ? [] : [`Missing ${missingTasks.length} tasks: ${missingTasks.join(', ')}`],\n },\n message,\n error: finalResult.error,\n };\n } catch (error) {\n console.error('Task execution failed:', error);\n return {\n success: false,\n completedTasks: [],\n filesModified: [],\n validationResults: {\n passed: false,\n errors: [`Task execution failed: ${error instanceof Error ? error.message : String(error)}`],\n warnings: [],\n },\n message: `Task execution failed: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Main Workflow Builder Workflow\nexport const workflowBuilderWorkflow = createWorkflow({\n id: 'workflow-builder',\n description: 'Create or edit Mastra workflows using AI-powered assistance with iterative planning',\n inputSchema: WorkflowBuilderInputSchema,\n outputSchema: WorkflowBuilderResultSchema,\n steps: [\n workflowDiscoveryStep,\n projectDiscoveryStep,\n workflowResearchStep,\n planningAndApprovalWorkflow,\n taskExecutionStep,\n ],\n})\n // Step 1: Always discover existing workflows\n .then(workflowDiscoveryStep)\n // Step 2: Always discover project structure\n .then(projectDiscoveryStep)\n // Step 3: Research workflows and documentation\n .then(workflowResearchStep)\n // Map research result to planning input format\n .map(async ({ getStepResult, getInitData }) => {\n const initData = getInitData();\n const discoveryResult = getStepResult(workflowDiscoveryStep);\n const projectResult = getStepResult(projectDiscoveryStep);\n // const researchResult = getStepResult(workflowResearchStep);\n\n return {\n action: initData.action,\n workflowName: initData.workflowName,\n description: initData.description,\n requirements: initData.requirements,\n discoveredWorkflows: discoveryResult.workflows,\n projectStructure: projectResult,\n // research: researchResult,\n research,\n\n userAnswers: undefined,\n };\n })\n // Step 4: Planning and Approval Sub-workflow (loops until approved)\n .dountil(planningAndApprovalWorkflow, async ({ inputData }) => {\n // Continue looping until user approves the task list\n console.info(`Sub-workflow check: approved=${inputData.approved}`);\n return inputData.approved === true;\n })\n // Map sub-workflow result to task execution input\n .map(async ({ getStepResult, getInitData }) => {\n const initData = getInitData();\n const discoveryResult = getStepResult(workflowDiscoveryStep);\n const projectResult = getStepResult(projectDiscoveryStep);\n // const researchResult = getStepResult(workflowResearchStep);\n const subWorkflowResult = getStepResult(planningAndApprovalWorkflow);\n\n return {\n action: initData.action,\n workflowName: initData.workflowName,\n description: initData.description,\n requirements: initData.requirements,\n tasks: subWorkflowResult.tasks,\n discoveredWorkflows: discoveryResult.workflows,\n projectStructure: projectResult,\n // research: researchResult,\n research,\n projectPath: initData.projectPath || process.cwd(),\n };\n })\n // Step 5: Execute the approved tasks\n .then(taskExecutionStep)\n .commit();\n","import type { Workflow } from '@mastra/core/workflows';\nimport { agentBuilderTemplateWorkflow } from './template-builder/template-builder';\nimport { workflowBuilderWorkflow } from './workflow-builder/workflow-builder';\n\nexport const agentBuilderWorkflows: Record<string, Workflow<any, any, any, any, any, any>> = {\n 'merge-template': agentBuilderTemplateWorkflow,\n 'workflow-builder': workflowBuilderWorkflow,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/utils.ts","../src/defaults.ts","../src/processors/tool-summary.ts","../src/agent/index.ts","../src/workflows/template-builder/template-builder.ts","../src/workflows/shared/schema.ts","../src/workflows/task-planning/prompts.ts","../src/workflows/workflow-builder/schema.ts","../src/workflows/task-planning/schema.ts","../src/workflows/task-planning/task-planning.ts","../src/workflows/workflow-builder/prompts.ts","../src/workflows/workflow-builder/tools.ts","../src/workflows/workflow-builder/workflow-builder.ts","../src/workflows/workflow-map.ts"],"names":["execNodejs","execFileNodejs","resolve","nodeSpawn","openai","z","readFile","join","dirname","Agent","writeFile","existsSync","readdir","basename","extname","mkdir","copyFile","createTool","createStep","createWorkflow"],"mappings":"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AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA,uBAAA,EAuJkB,WAAW;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","file":"index.js","sourcesContent":["import type { MastraLanguageModel, ToolsInput } from '@mastra/core/agent';\nimport type { MastraStorage } from '@mastra/core/storage';\nimport type { MastraVector } from '@mastra/core/vector';\nimport { z } from 'zod';\n\n/**\n * Configuration options for the AgentBuilder\n */\nexport interface AgentBuilderConfig {\n /** The language model to use for agent generation */\n model: MastraLanguageModel;\n /** Storage provider for memory (optional) */\n storage?: MastraStorage;\n /** Vector provider for memory (optional) */\n vectorProvider?: MastraVector;\n /** Additional tools to include beyond the default set */\n tools?: ToolsInput;\n /** Custom instructions to append to the default system prompt */\n instructions?: string;\n /** Memory configuration options */\n memoryConfig?: {\n maxMessages?: number;\n tokenLimit?: number;\n };\n /** Project path */\n projectPath: string;\n /** Summary model */\n summaryModel?: MastraLanguageModel;\n /** Mode */\n mode?: 'template' | 'code-editor';\n}\n\n/**\n * Options for generating agents with AgentBuilder\n */\nexport interface GenerateAgentOptions {\n /** Request Context for the generation */\n requestContext?: any;\n /** Output format preference */\n outputFormat?: 'code' | 'explanation' | 'both';\n}\n\n/**\n * Project management action types\n */\nexport type ProjectAction = 'create' | 'install' | 'upgrade' | 'check';\n\n/**\n * Project types that can be created\n */\nexport type ProjectType = 'standalone' | 'api' | 'nextjs';\n\n/**\n * Package manager options\n */\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn';\n\n/**\n * Validation types for code validation\n */\nexport type ValidationType = 'types' | 'schemas' | 'tests' | 'integration';\n\n// Processing order for units (lower index = higher priority)\nexport const UNIT_KINDS = ['mcp-server', 'tool', 'workflow', 'agent', 'integration', 'network', 'other'] as const;\n\n// Types for the merge template workflow\nexport type UnitKind = (typeof UNIT_KINDS)[number];\n\nexport interface TemplateUnit {\n kind: UnitKind;\n id: string;\n file: string;\n}\n\nexport interface TemplateManifest {\n slug: string;\n ref?: string;\n description?: string;\n units: TemplateUnit[];\n}\n\nexport interface MergePlan {\n slug: string;\n commitSha: string;\n templateDir: string;\n units: TemplateUnit[];\n}\n\n// Schema definitions\nexport const TemplateUnitSchema = z.object({\n kind: z.enum(UNIT_KINDS),\n id: z.string(),\n file: z.string(),\n});\n\nexport const TemplateManifestSchema = z.object({\n slug: z.string(),\n ref: z.string().optional(),\n description: z.string().optional(),\n units: z.array(TemplateUnitSchema),\n});\n\nexport const AgentBuilderInputSchema = z.object({\n repo: z.string().describe('Git URL or local path of the template repo'),\n ref: z.string().optional().describe('Tag/branch/commit to checkout (defaults to main/master)'),\n slug: z.string().optional().describe('Slug for branch/scripts; defaults to inferred from repo'),\n targetPath: z.string().optional().describe('Project path to merge into; defaults to current directory'),\n variables: z.record(z.string()).optional().describe('Environment variables to set in .env file'),\n});\n\nexport const MergePlanSchema = z.object({\n slug: z.string(),\n commitSha: z.string(),\n templateDir: z.string(),\n units: z.array(TemplateUnitSchema),\n});\n\n// File copy schemas and types\nexport const CopiedFileSchema = z.object({\n source: z.string(),\n destination: z.string(),\n unit: z.object({\n kind: z.enum(UNIT_KINDS),\n id: z.string(),\n }),\n});\n\nexport const ConflictSchema = z.object({\n unit: z.object({\n kind: z.enum(UNIT_KINDS),\n id: z.string(),\n }),\n issue: z.string(),\n sourceFile: z.string(),\n targetFile: z.string(),\n});\n\nexport const FileCopyInputSchema = z.object({\n orderedUnits: z.array(TemplateUnitSchema),\n templateDir: z.string(),\n commitSha: z.string(),\n slug: z.string(),\n targetPath: z.string().optional(),\n variables: z.record(z.string()).optional(),\n});\n\nexport const FileCopyResultSchema = z.object({\n success: z.boolean(),\n copiedFiles: z.array(CopiedFileSchema),\n conflicts: z.array(ConflictSchema),\n message: z.string(),\n error: z.string().optional(),\n});\n\n// Intelligent merge schemas and types\nexport const ConflictResolutionSchema = z.object({\n unit: z.object({\n kind: z.enum(UNIT_KINDS),\n id: z.string(),\n }),\n issue: z.string(),\n resolution: z.string(),\n});\n\nexport const IntelligentMergeInputSchema = z.object({\n conflicts: z.array(ConflictSchema),\n copiedFiles: z.array(CopiedFileSchema),\n templateDir: z.string(),\n commitSha: z.string(),\n slug: z.string(),\n targetPath: z.string().optional(),\n branchName: z.string().optional(),\n});\n\nexport const IntelligentMergeResultSchema = z.object({\n success: z.boolean(),\n applied: z.boolean(),\n message: z.string(),\n conflictsResolved: z.array(ConflictResolutionSchema),\n error: z.string().optional(),\n});\n\n// Validation schemas and types\nexport const ValidationResultsSchema = z.object({\n valid: z.boolean(),\n errorsFixed: z.number(),\n remainingErrors: z.number(),\n errors: z.array(z.any()).optional(), // Include specific validation errors\n});\n\nexport const ValidationFixInputSchema = z.object({\n commitSha: z.string(),\n slug: z.string(),\n targetPath: z.string().optional(),\n templateDir: z.string(),\n orderedUnits: z.array(TemplateUnitSchema),\n copiedFiles: z.array(CopiedFileSchema),\n conflictsResolved: z.array(ConflictResolutionSchema).optional(),\n maxIterations: z.number().optional().default(5),\n});\n\nexport const ValidationFixResultSchema = z.object({\n success: z.boolean(),\n applied: z.boolean(),\n message: z.string(),\n validationResults: ValidationResultsSchema,\n error: z.string().optional(),\n});\n\n// Final workflow result schema\nexport const ApplyResultSchema = z.object({\n success: z.boolean(),\n applied: z.boolean(),\n branchName: z.string().optional(),\n message: z.string(),\n validationResults: ValidationResultsSchema.optional(),\n error: z.string().optional(),\n errors: z.array(z.string()).optional(),\n stepResults: z\n .object({\n cloneSuccess: z.boolean().optional(),\n analyzeSuccess: z.boolean().optional(),\n discoverSuccess: z.boolean().optional(),\n orderSuccess: z.boolean().optional(),\n prepareBranchSuccess: z.boolean().optional(),\n packageMergeSuccess: z.boolean().optional(),\n installSuccess: z.boolean().optional(),\n copySuccess: z.boolean().optional(),\n mergeSuccess: z.boolean().optional(),\n validationSuccess: z.boolean().optional(),\n filesCopied: z.number(),\n conflictsSkipped: z.number(),\n conflictsResolved: z.number(),\n })\n .optional(),\n});\n\nexport const CloneTemplateResultSchema = z.object({\n templateDir: z.string(),\n commitSha: z.string(),\n slug: z.string(),\n success: z.boolean().optional(),\n error: z.string().optional(),\n targetPath: z.string().optional(),\n});\n\n// Package analysis schemas and types\nexport const PackageAnalysisSchema = z.object({\n name: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n dependencies: z.record(z.string()).optional(),\n devDependencies: z.record(z.string()).optional(),\n peerDependencies: z.record(z.string()).optional(),\n scripts: z.record(z.string()).optional(),\n success: z.boolean().optional(),\n error: z.string().optional(),\n});\n\n// Discovery step schemas and types\nexport const DiscoveryResultSchema = z.object({\n units: z.array(TemplateUnitSchema),\n success: z.boolean().optional(),\n error: z.string().optional(),\n});\n\n// Unit ordering schemas and types\nexport const OrderedUnitsSchema = z.object({\n orderedUnits: z.array(TemplateUnitSchema),\n success: z.boolean().optional(),\n error: z.string().optional(),\n});\n\n// Package merge schemas and types\nexport const PackageMergeInputSchema = z.object({\n commitSha: z.string(),\n slug: z.string(),\n targetPath: z.string().optional(),\n packageInfo: PackageAnalysisSchema,\n});\n\nexport const PackageMergeResultSchema = z.object({\n success: z.boolean(),\n applied: z.boolean(),\n message: z.string(),\n error: z.string().optional(),\n});\n\n// Install schemas and types\nexport const InstallInputSchema = z.object({\n targetPath: z.string().describe('Path to the project to install packages in'),\n});\n\nexport const InstallResultSchema = z.object({\n success: z.boolean(),\n error: z.string().optional(),\n});\n\nexport const PrepareBranchInputSchema = z.object({\n slug: z.string(),\n commitSha: z.string().optional(), // from clone-template if relevant\n targetPath: z.string().optional(),\n});\n\nexport const PrepareBranchResultSchema = z.object({\n branchName: z.string(),\n success: z.boolean().optional(),\n error: z.string().optional(),\n});\n","import { exec as execNodejs, execFile as execFileNodejs, spawn as nodeSpawn } from 'node:child_process';\nimport type { SpawnOptions } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { copyFile, readFile } from 'node:fs/promises';\nimport { createRequire } from 'node:module';\nimport { dirname, basename, extname, resolve, join } from 'node:path';\nimport { promisify } from 'node:util';\nimport type { MastraLanguageModel } from '@mastra/core/agent';\nimport { ModelRouterLanguageModel } from '@mastra/core/llm';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport { UNIT_KINDS } from './types';\nimport type { UnitKind } from './types';\n\nexport const exec = promisify(execNodejs);\nexport const execFile = promisify(execFileNodejs);\n\n// Helper function to detect if we're in a workspace subfolder\nfunction isInWorkspaceSubfolder(cwd: string): boolean {\n try {\n // First, check if current directory has package.json (it's a package)\n const currentPackageJson = resolve(cwd, 'package.json');\n if (!existsSync(currentPackageJson)) {\n return false; // Not a package, so not a workspace subfolder\n }\n\n // Walk up the directory tree looking for workspace indicators\n let currentDir = cwd;\n let previousDir = '';\n\n // Keep going up until we reach the filesystem root or stop making progress\n while (currentDir !== previousDir && currentDir !== '/') {\n previousDir = currentDir;\n currentDir = dirname(currentDir);\n\n // Skip if we're back at the original directory\n if (currentDir === cwd) {\n continue;\n }\n\n console.info(`Checking for workspace indicators in: ${currentDir}`);\n\n // Check for pnpm workspace\n if (existsSync(resolve(currentDir, 'pnpm-workspace.yaml'))) {\n return true;\n }\n\n // Check for npm/yarn workspaces in package.json\n const parentPackageJson = resolve(currentDir, 'package.json');\n if (existsSync(parentPackageJson)) {\n try {\n const parentPkg = JSON.parse(readFileSync(parentPackageJson, 'utf-8'));\n if (parentPkg.workspaces) {\n return true; // Found workspace config\n }\n } catch {\n // Ignore JSON parse errors\n }\n }\n\n // Check for lerna\n if (existsSync(resolve(currentDir, 'lerna.json'))) {\n return true;\n }\n }\n\n return false;\n } catch (error) {\n console.warn(`Error in workspace detection: ${error}`);\n return false; // Default to false on any error\n }\n}\n\nexport function spawn(command: string, args: string[], options: any) {\n return new Promise((resolve, reject) => {\n const childProcess = nodeSpawn(command, args, {\n stdio: 'inherit', // Enable proper stdio handling\n ...options,\n });\n childProcess.on('error', error => {\n reject(error);\n });\n childProcess.on('close', code => {\n if (code === 0) {\n resolve(void 0);\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n });\n}\n\n// --- Git environment probes ---\nexport async function isGitInstalled(): Promise<boolean> {\n try {\n await spawnWithOutput('git', ['--version'], {});\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function isInsideGitRepo(cwd: string): Promise<boolean> {\n try {\n if (!(await isGitInstalled())) return false;\n const { stdout } = await spawnWithOutput('git', ['rev-parse', '--is-inside-work-tree'], { cwd });\n return stdout.trim() === 'true';\n } catch {\n return false;\n }\n}\n\n// Variant of spawn that captures stdout and stderr\nexport function spawnWithOutput(\n command: string,\n args: string[],\n options: SpawnOptions,\n): Promise<{ stdout: string; stderr: string; code: number }> {\n return new Promise((resolvePromise, rejectPromise) => {\n const childProcess = nodeSpawn(command, args, {\n ...options,\n });\n let stdout = '';\n let stderr = '';\n childProcess.on('error', error => {\n rejectPromise(error);\n });\n childProcess.stdout?.on('data', chunk => {\n process.stdout.write(chunk);\n stdout += chunk?.toString?.() ?? String(chunk);\n });\n childProcess.stderr?.on('data', chunk => {\n stderr += chunk?.toString?.() ?? String(chunk);\n process.stderr.write(chunk);\n });\n childProcess.on('close', code => {\n if (code === 0) {\n resolvePromise({ stdout, stderr, code: code ?? 0 });\n } else {\n const err = new Error(stderr || `Command failed: ${command} ${args.join(' ')}`);\n // @ts-expect-error augment\n err.code = code;\n rejectPromise(err);\n }\n });\n });\n}\n\nexport async function spawnSWPM(cwd: string, command: string, packageNames: string[]) {\n // 1) Try local swpm module resolution/execution\n try {\n console.info('Running install command with swpm');\n const swpmPath = createRequire(import.meta.filename).resolve('swpm');\n await spawn(swpmPath, [command, ...packageNames], { cwd });\n return;\n } catch (e) {\n console.warn('Failed to run install command with swpm', e);\n // ignore and try fallbacks\n }\n\n // 2) Fallback to native package manager based on lock files\n try {\n // Detect package manager from lock files\n let packageManager: string;\n\n if (existsSync(resolve(cwd, 'pnpm-lock.yaml'))) {\n packageManager = 'pnpm';\n } else if (existsSync(resolve(cwd, 'yarn.lock'))) {\n packageManager = 'yarn';\n } else {\n packageManager = 'npm';\n }\n\n // Normalize command\n let nativeCommand = command === 'add' ? 'add' : command === 'install' ? 'install' : command;\n\n // Build args with non-interactive flags for install commands\n const args = [nativeCommand];\n if (nativeCommand === 'install') {\n const inWorkspace = isInWorkspaceSubfolder(cwd);\n if (packageManager === 'pnpm') {\n args.push('--force'); // pnpm install --force\n\n // Check if we're in a workspace subfolder\n if (inWorkspace) {\n args.push('--ignore-workspace');\n }\n } else if (packageManager === 'npm') {\n args.push('--yes'); // npm install --yes\n\n // Check if we're in a workspace subfolder\n if (inWorkspace) {\n args.push('--ignore-workspaces');\n }\n }\n }\n args.push(...packageNames);\n\n console.info(`Falling back to ${packageManager} ${args.join(' ')}`);\n await spawn(packageManager, args, { cwd });\n return;\n } catch (e) {\n console.warn(`Failed to run install command with native package manager: ${e}`);\n }\n\n throw new Error(`Failed to run install command with swpm and native package managers`);\n}\n\n// Utility functions\nexport function kindWeight(kind: UnitKind): number {\n const idx = UNIT_KINDS.indexOf(kind as any);\n return idx === -1 ? UNIT_KINDS.length : idx;\n}\n\n// Utility functions to work with Mastra templates\nexport async function fetchMastraTemplates(): Promise<\n Array<{\n slug: string;\n title: string;\n description: string;\n githubUrl: string;\n tags: string[];\n agents: string[];\n workflows: string[];\n tools: string[];\n }>\n> {\n try {\n const response = await fetch('https://mastra.ai/api/templates.json');\n const data = (await response.json()) as Array<{\n slug: string;\n title: string;\n description: string;\n githubUrl: string;\n tags: string[];\n agents: string[];\n workflows: string[];\n tools: string[];\n }>;\n return data;\n } catch (error) {\n throw new Error(`Failed to fetch Mastra templates: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n// Helper to get a specific template by slug\nexport async function getMastraTemplate(slug: string) {\n const templates = await fetchMastraTemplates();\n const template = templates.find(t => t.slug === slug);\n if (!template) {\n throw new Error(`Template \"${slug}\" not found. Available templates: ${templates.map(t => t.slug).join(', ')}`);\n }\n return template;\n}\n\n// Git commit tracking utility\nexport async function logGitState(targetPath: string, label: string): Promise<void> {\n try {\n // Skip if not a git repo\n if (!(await isInsideGitRepo(targetPath))) return;\n const gitStatusResult = await git(targetPath, 'status', '--porcelain');\n const gitLogResult = await git(targetPath, 'log', '--oneline', '-3');\n const gitCountResult = await git(targetPath, 'rev-list', '--count', 'HEAD');\n\n console.info(`π Git state ${label}:`);\n console.info('Status:', gitStatusResult.stdout.trim() || 'Clean working directory');\n console.info('Recent commits:', gitLogResult.stdout.trim());\n console.info('Total commits:', gitCountResult.stdout.trim());\n } catch (gitError) {\n console.warn(`Could not get git state ${label}:`, gitError);\n }\n}\n\n// Generic git runner that captures stdout/stderr\nexport async function git(cwd: string, ...args: string[]): Promise<{ stdout: string; stderr: string }> {\n const { stdout, stderr } = await spawnWithOutput('git', args, { cwd });\n return { stdout: stdout ?? '', stderr: stderr ?? '' };\n}\n\n// Common git helpers\nexport async function gitClone(repo: string, destDir: string, cwd?: string) {\n await git(cwd ?? process.cwd(), 'clone', repo, destDir);\n}\n\nexport async function gitCheckoutRef(cwd: string, ref: string) {\n if (!(await isInsideGitRepo(cwd))) return;\n await git(cwd, 'checkout', ref);\n}\n\nexport async function gitRevParse(cwd: string, rev: string): Promise<string> {\n if (!(await isInsideGitRepo(cwd))) return '';\n const { stdout } = await git(cwd, 'rev-parse', rev);\n return stdout.trim();\n}\n\nexport async function gitAddFiles(cwd: string, files: string[]) {\n if (!files || files.length === 0) return;\n if (!(await isInsideGitRepo(cwd))) return;\n await git(cwd, 'add', ...files);\n}\n\nexport async function gitAddAll(cwd: string) {\n if (!(await isInsideGitRepo(cwd))) return;\n await git(cwd, 'add', '.');\n}\n\nexport async function gitHasStagedChanges(cwd: string): Promise<boolean> {\n if (!(await isInsideGitRepo(cwd))) return false;\n const { stdout } = await git(cwd, 'diff', '--cached', '--name-only');\n return stdout.trim().length > 0;\n}\n\nexport async function gitCommit(\n cwd: string,\n message: string,\n opts?: { allowEmpty?: boolean; skipIfNoStaged?: boolean },\n): Promise<boolean> {\n try {\n if (!(await isInsideGitRepo(cwd))) return false;\n if (opts?.skipIfNoStaged) {\n const has = await gitHasStagedChanges(cwd);\n if (!has) return false;\n }\n const args = ['commit', '-m', message];\n if (opts?.allowEmpty) args.push('--allow-empty');\n await git(cwd, ...args);\n return true;\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n if (/nothing to commit/i.test(msg) || /no changes added to commit/i.test(msg)) {\n return false;\n }\n throw e;\n }\n}\n\nexport async function gitAddAndCommit(\n cwd: string,\n message: string,\n files?: string[],\n opts?: { allowEmpty?: boolean; skipIfNoStaged?: boolean },\n): Promise<boolean> {\n try {\n if (!(await isInsideGitRepo(cwd))) return false;\n if (files && files.length > 0) {\n await gitAddFiles(cwd, files);\n } else {\n await gitAddAll(cwd);\n }\n return gitCommit(cwd, message, opts);\n } catch (e) {\n console.error(`Failed to add and commit files: ${e instanceof Error ? e.message : String(e)}`);\n return false;\n }\n}\n\nexport async function gitCheckoutBranch(branchName: string, targetPath: string) {\n try {\n if (!(await isInsideGitRepo(targetPath))) return;\n // Try to create new branch using centralized git runner\n await git(targetPath, 'checkout', '-b', branchName);\n console.info(`Created new branch: ${branchName}`);\n } catch (error) {\n // If branch exists, check if we can switch to it or create a unique name\n const errorStr = error instanceof Error ? error.message : String(error);\n if (errorStr.includes('already exists')) {\n try {\n // Try to switch to existing branch\n await git(targetPath, 'checkout', branchName);\n console.info(`Switched to existing branch: ${branchName}`);\n } catch {\n // If can't switch, create a unique branch name\n const timestamp = Date.now().toString().slice(-6);\n const uniqueBranchName = `${branchName}-${timestamp}`;\n await git(targetPath, 'checkout', '-b', uniqueBranchName);\n console.info(`Created unique branch: ${uniqueBranchName}`);\n }\n } else {\n throw error; // Re-throw if it's a different error\n }\n }\n}\n\n// File conflict resolution utilities (for future use)\nexport async function backupAndReplaceFile(sourceFile: string, targetFile: string): Promise<void> {\n // Create backup of existing file\n const backupFile = `${targetFile}.backup-${Date.now()}`;\n await copyFile(targetFile, backupFile);\n console.info(`π¦ Created backup: ${basename(backupFile)}`);\n\n // Replace with template file\n await copyFile(sourceFile, targetFile);\n console.info(`π Replaced file with template version (backup created)`);\n}\n\nexport async function renameAndCopyFile(sourceFile: string, targetFile: string): Promise<string> {\n // Find unique filename\n let counter = 1;\n let uniqueTargetFile = targetFile;\n const baseName = basename(targetFile, extname(targetFile));\n const extension = extname(targetFile);\n const directory = dirname(targetFile);\n\n while (existsSync(uniqueTargetFile)) {\n const uniqueName = `${baseName}.template-${counter}${extension}`;\n uniqueTargetFile = resolve(directory, uniqueName);\n counter++;\n }\n\n await copyFile(sourceFile, uniqueTargetFile);\n console.info(`π Copied with unique name: ${basename(uniqueTargetFile)}`);\n return uniqueTargetFile;\n}\n\n// Type guard to check if object is a valid MastraLanguageModel\nexport const isValidMastraLanguageModel = (model: any): model is MastraLanguageModel => {\n return model && typeof model === 'object' && typeof model.modelId === 'string';\n};\n\n// Helper function to resolve target path with smart defaults\nexport const resolveTargetPath = (inputData: any, requestContext: any): string => {\n // If explicitly provided, use it\n if (inputData.targetPath) {\n return inputData.targetPath;\n }\n\n // Check request context\n const contextPath = requestContext.get('targetPath');\n if (contextPath) {\n return contextPath;\n }\n\n // Smart resolution logic from prepareAgentBuilderWorkflowInstallation\n const envRoot = process.env.MASTRA_PROJECT_ROOT?.trim();\n if (envRoot) {\n return envRoot;\n }\n\n const cwd = process.cwd();\n const parent = dirname(cwd);\n const grand = dirname(parent);\n\n // Detect when running under `<project>/.mastra/output` and resolve back to project root\n if (basename(cwd) === 'output' && basename(parent) === '.mastra') {\n return grand;\n }\n\n return cwd;\n};\n\n// Helper function to merge .gitignore files intelligently\nexport const mergeGitignoreFiles = (targetContent: string, templateContent: string, templateSlug: string): string => {\n // Normalize line endings and split into lines\n const targetLines = targetContent.replace(/\\r\\n/g, '\\n').split('\\n');\n const templateLines = templateContent.replace(/\\r\\n/g, '\\n').split('\\n');\n\n // Parse existing target entries (normalize for comparison)\n const existingEntries = new Set<string>();\n\n for (const line of targetLines) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n // Normalize path for comparison (remove leading ./, handle different separators)\n const normalized = trimmed.replace(/^\\.\\//, '').replace(/\\\\/g, '/');\n existingEntries.add(normalized);\n }\n }\n\n // Extract new entries from template that don't already exist\n const newEntries: string[] = [];\n for (const line of templateLines) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const normalized = trimmed.replace(/^\\.\\//, '').replace(/\\\\/g, '/');\n if (!existingEntries.has(normalized)) {\n // Check for conflicts (e.g., !file vs file)\n const isNegation = normalized.startsWith('!');\n const basePath = isNegation ? normalized.slice(1) : normalized;\n const hasConflict = isNegation ? existingEntries.has(basePath) : existingEntries.has('!' + basePath);\n\n if (!hasConflict) {\n newEntries.push(trimmed);\n } else {\n console.info(`β Skipping conflicting .gitignore rule: ${trimmed} (conflicts with existing rule)`);\n }\n }\n }\n }\n\n // If no new entries, return original content\n if (newEntries.length === 0) {\n return targetContent;\n }\n\n // Build merged content\n const result: string[] = [...targetLines];\n\n // Add a blank line if the file doesn't end with one\n const lastLine = result[result.length - 1];\n if (result.length > 0 && lastLine && lastLine.trim() !== '') {\n result.push('');\n }\n\n // Add template section header\n result.push(`# Added by template: ${templateSlug}`);\n result.push(...newEntries);\n\n return result.join('\\n');\n};\n\n// Helper function to merge .env files intelligently\nexport const mergeEnvFiles = (\n targetContent: string,\n templateVariables: Record<string, string>,\n templateSlug: string,\n): string => {\n // Parse existing target .env file\n const targetLines = targetContent.replace(/\\r\\n/g, '\\n').split('\\n');\n const existingVars = new Set<string>();\n\n // Extract existing variable names (handle comments and empty lines)\n for (const line of targetLines) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const equalIndex = trimmed.indexOf('=');\n if (equalIndex > 0) {\n const varName = trimmed.substring(0, equalIndex).trim();\n existingVars.add(varName);\n }\n }\n }\n\n // Filter out variables that already exist\n const newVars: Array<{ key: string; value: string }> = [];\n for (const [key, value] of Object.entries(templateVariables)) {\n if (!existingVars.has(key)) {\n newVars.push({ key, value });\n } else {\n console.info(`β Skipping existing environment variable: ${key} (already exists in .env)`);\n }\n }\n\n // If no new variables, return original content\n if (newVars.length === 0) {\n return targetContent;\n }\n\n // Build merged content\n const result: string[] = [...targetLines];\n\n // Add a blank line if the file doesn't end with one\n const lastLine = result[result.length - 1];\n if (result.length > 0 && lastLine && lastLine.trim() !== '') {\n result.push('');\n }\n\n // Add template section header\n result.push(`# Added by template: ${templateSlug}`);\n\n // Add new environment variables\n for (const { key, value } of newVars) {\n result.push(`${key}=${value}`);\n }\n\n return result.join('\\n');\n};\n\n// Helper function to detect AI SDK version from package.json\nexport const detectAISDKVersion = async (projectPath: string): Promise<'v1' | 'v2'> => {\n try {\n const packageJsonPath = join(projectPath, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n console.info('No package.json found, defaulting to v2');\n return 'v2';\n }\n\n const packageContent = await readFile(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(packageContent);\n\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies,\n };\n\n // Check individual provider packages for version hints\n const providerPackages = ['@ai-sdk/openai', '@ai-sdk/anthropic', '@ai-sdk/google', '@ai-sdk/groq', '@ai-sdk/xai'];\n for (const pkg of providerPackages) {\n const version = allDeps[pkg];\n if (version) {\n const versionMatch = version.match(/(\\d+)/);\n if (versionMatch) {\n const majorVersion = parseInt(versionMatch[1]);\n if (majorVersion >= 2) {\n console.info(`Detected ${pkg} v${majorVersion} -> using v2 specification`);\n return 'v2';\n } else {\n console.info(`Detected ${pkg} v${majorVersion} -> using v1 specification`);\n return 'v1';\n }\n }\n }\n }\n\n console.info('No AI SDK version detected, defaulting to v2');\n return 'v2';\n } catch (error) {\n console.warn(`Failed to detect AI SDK version: ${error instanceof Error ? error.message : String(error)}`);\n return 'v2';\n }\n};\n\n// Helper function to create model instance based on provider and version\nexport const createModelInstance = async (\n provider: string,\n modelId: string,\n version: 'v1' | 'v2' = 'v2',\n): Promise<MastraLanguageModel | null> => {\n try {\n // Dynamic imports to avoid issues if packages aren't available\n const providerMap = {\n v1: {\n openai: async () => {\n const { openai } = await import('@ai-sdk/openai');\n return openai(modelId);\n },\n anthropic: async () => {\n const { anthropic } = await import('@ai-sdk/anthropic');\n return anthropic(modelId);\n },\n groq: async () => {\n const { groq } = await import('@ai-sdk/groq');\n return groq(modelId);\n },\n xai: async () => {\n const { xai } = await import('@ai-sdk/xai');\n return xai(modelId);\n },\n google: async () => {\n const { google } = await import('@ai-sdk/google');\n return google(modelId);\n },\n },\n };\n\n const providerFn =\n version === `v1`\n ? providerMap[version][provider as keyof (typeof providerMap)[typeof version]]\n : () => new ModelRouterLanguageModel(`${provider}/${modelId}`);\n\n if (!providerFn) {\n console.error(`Unsupported provider: ${provider}`);\n return null;\n }\n\n const modelInstance = await providerFn();\n console.info(`Created ${provider} model instance (${version}): ${modelId}`);\n return modelInstance;\n } catch (error) {\n console.error(`Failed to create model instance: ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n};\n\n// Helper function to resolve model from request context with AI SDK version detection\nexport const resolveModel = async ({\n requestContext,\n defaultModel = 'openai/gpt-4.1',\n projectPath,\n}: {\n requestContext: RequestContext;\n defaultModel?: MastraLanguageModel | string;\n projectPath?: string;\n}): Promise<MastraLanguageModel> => {\n // First try to get model from request context\n const modelFromContext = requestContext.get('model');\n if (modelFromContext) {\n console.info('Using model from request context');\n // Type check to ensure it's a MastraLanguageModel\n if (isValidMastraLanguageModel(modelFromContext)) {\n return modelFromContext;\n }\n throw new Error(\n 'Invalid model provided. Model must be a MastraLanguageModel instance (e.g., openai(\"gpt-4\"), anthropic(\"claude-3-5-sonnet\"), etc.)',\n );\n }\n\n // Check for selected model info in request context\n const selectedModel = requestContext.get('selectedModel') as { provider: string; modelId: string } | undefined;\n if (selectedModel?.provider && selectedModel?.modelId && projectPath) {\n console.info(`Resolving selected model: ${selectedModel.provider}/${selectedModel.modelId}`);\n\n // Detect AI SDK version from project\n const version = await detectAISDKVersion(projectPath);\n\n // Create model instance with detected version\n const modelInstance = await createModelInstance(selectedModel.provider, selectedModel.modelId, version);\n if (modelInstance) {\n // Store resolved model back in context for other steps to use\n requestContext.set('model', modelInstance);\n return modelInstance;\n }\n }\n\n console.info('Using default model');\n return typeof defaultModel === `string` ? new ModelRouterLanguageModel(defaultModel) : defaultModel;\n};\n","import { spawn as nodeSpawn } from 'node:child_process';\nimport { readFile, writeFile, mkdir, stat, readdir } from 'node:fs/promises';\nimport { join, dirname, relative, isAbsolute, resolve } from 'node:path';\nimport { createTool } from '@mastra/core/tools';\nimport ignore from 'ignore';\nimport { z } from 'zod';\nimport { exec, execFile, spawnSWPM, spawnWithOutput } from './utils';\n\nexport class AgentBuilderDefaults {\n static DEFAULT_INSTRUCTIONS = (\n projectPath?: string,\n ) => `You are a Mastra Expert Agent, specialized in building production-ready AI applications using the Mastra framework. You excel at creating agents, tools, workflows, and complete applications with real, working implementations.\n\n## Core Identity & Capabilities\n\n**Primary Role:** Transform natural language requirements into working Mastra applications\n**Key Strength:** Deep knowledge of Mastra patterns, conventions, and best practices\n**Output Quality:** Production-ready code that follows Mastra ecosystem standards\n\n## Workflow: The MASTRA Method\n\nFollow this sequence for every coding task:\n\nIF NO PROJECT EXISTS, USE THE MANAGEPROJECT TOOL TO CREATE A NEW PROJECT\n\nDO NOT INCLUDE TODOS IN THE CODE, UNLESS SPECIFICALLY ASKED TO DO SO, CREATE REAL WORLD CODE\n\n### 1. π **UNDERSTAND** (Information Gathering)\n- **Explore Mastra Docs**: Use docs tools to understand relevant Mastra patterns and APIs\n- **Analyze Project**: Use file exploration to understand existing codebase structure\n- **Web Research**: Search for packages, examples, or solutions when docs are insufficient\n- **Clarify Requirements**: Ask targeted questions only when critical information is missing\n\n### 2. π **PLAN** (Strategy & Design)\n- **Architecture**: Design using Mastra conventions (agents, tools, workflows, memory)\n- **Dependencies**: Identify required packages and Mastra components\n- **Integration**: Plan how to integrate with existing project structure\n- **Validation**: Define how to test and verify the implementation\n\n### 3. π οΈ **BUILD** (Implementation)\n- **Install First**: Use \\`manageProject\\` tool to install required packages\n- **Follow Patterns**: Implement using established Mastra conventions\n- **Real Code Only**: Build actual working functionality, never mock implementations\n- **Environment Setup**: Create proper .env configuration and documentation\n\n### 4. β
**VALIDATE** (Quality Assurance)\n- **Code Validation**: Run \\`validateCode\\` with types and lint checks\n- **Testing**: Execute tests if available\n- **Server Testing**: Use \\`manageServer\\` and \\`httpRequest\\` for API validation\n- **Fix Issues**: Address all errors before completion\n\n## Mastra-Specific Guidelines\n\n### Framework Knowledge\n- **Agents**: Use \\`@mastra/core/agent\\` with proper configuration\n- **Tools**: Create tools with \\`@mastra/core/tools\\` and proper schemas\n- **Memory**: Implement memory with \\`@mastra/memory\\` and appropriate processors\n- **Workflows**: Build workflows with \\`@mastra/core/workflows\\`\n- **Integrations**: Leverage Mastra's extensive integration ecosystem\n\n### Code Standards\n- **TypeScript First**: All code must be properly typed\n- **Zod Schemas**: Use Zod for all data validation\n- **Environment Variables**: Proper .env configuration with examples\n- **Error Handling**: Comprehensive error handling with meaningful messages\n- **Security**: Never expose credentials or sensitive data\n\n### Project Structure\n- Follow Mastra project conventions (\\`src/mastra/\\`, config files)\n- Use proper file organization (agents, tools, workflows in separate directories)\n- Maintain consistent naming conventions\n- Include proper exports and imports\n\n## Communication Style\n\n**Conciseness**: Keep responses focused and actionable\n**Clarity**: Explain complex concepts in simple terms\n**Directness**: State what you're doing and why\n**No Fluff**: Avoid unnecessary explanations or apologies\n\n### Response Format\n1. **Brief Status**: One line stating what you're doing\n2. **Tool Usage**: Execute necessary tools\n3. **Results Summary**: Concise summary of what was accomplished\n4. **Next Steps**: Clear indication of completion or next actions\n\n## Tool Usage Strategy\n\n### File Operations\n- **Project-Relative Paths**: All file paths are resolved relative to the project directory (unless absolute paths are used)\n- **Read First**: Always read files before editing to understand context\n- **Precise Edits**: Use exact text matching for search/replace operations\n- **Batch Operations**: Group related file operations when possible\n\n### Project Management\n- **manageProject**: Use for package installation, project creation, dependency management\n- **validateCode**: Always run after code changes to ensure quality\n- **manageServer**: Use for testing Mastra server functionality\n- **httpRequest**: Test API endpoints and integrations\n\n### Information Gathering\n- **Mastra Docs**: Primary source for Mastra-specific information\n- **Web Search**: Secondary source for packages and external solutions\n- **File Exploration**: Understand existing project structure and patterns\n\n## Error Handling & Recovery\n\n### Validation Failures\n- Fix TypeScript errors immediately\n- Address linting issues systematically\n- Re-validate until clean\n\n### Build Issues\n- Check dependencies and versions\n- Verify Mastra configuration\n- Test in isolation when needed\n\n### Integration Problems\n- Verify API keys and environment setup\n- Test connections independently\n- Debug with logging and error messages\n\n## Security & Best Practices\n\n**Never:**\n- Hard-code API keys or secrets\n- Generate mock or placeholder implementations\n- Skip error handling\n- Ignore TypeScript errors\n- Create insecure code patterns\n- ask for file paths, you should be able to use the provided tools to explore the file system\n\n**Always:**\n- Use environment variables for configuration\n- Implement proper input validation\n- Follow security best practices\n- Create complete, working implementations\n- Test thoroughly before completion\n\n## Output Requirements\n\n### Code Quality\n- β
TypeScript compilation passes\n- β
ESLint validation passes\n- β
Proper error handling implemented\n- β
Environment variables configured\n- β
Tests included when appropriate\n\n### Documentation\n- β
Clear setup instructions\n- β
Environment variable documentation\n- β
Usage examples provided\n- β
API documentation for custom tools\n\n### Integration\n- β
Follows Mastra conventions\n- β
Integrates with existing project\n- β
Proper imports and exports\n- β
Compatible with Mastra ecosystem\n\n## Project Context\n\n**Working Directory**: ${projectPath}\n**Focus**: Mastra framework applications\n**Goal**: Production-ready implementations\n\nRemember: You are building real applications, not prototypes. Every implementation should be complete, secure, and ready for production use.\n\n## Enhanced Tool Set\n\nYou have access to an enhanced set of tools based on production coding agent patterns:\n\n### Task Management\n- **taskManager**: Create and track multi-step coding tasks with states (pending, in_progress, completed, blocked). Use this for complex projects that require systematic progress tracking.\n\n### Code Discovery & Analysis\n- **codeAnalyzer**: Analyze codebase structure, discover definitions (functions, classes, interfaces), map dependencies, and understand architectural patterns.\n- **smartSearch**: Intelligent search with context awareness, pattern matching, and relevance scoring.\n\n### Advanced File Operations\n- **readFile**: Read files with optional line ranges, encoding support, metadata\n- **writeFile**: Write files with directory creation\n- **listDirectory**: Directory listing with filtering, recursion, metadata\n- **multiEdit**: Perform multiple search-replace operations across files atomically with backup creation\n- **executeCommand**: Execute shell commands with proper error handling and working directory support\n\n**Important**: All file paths are resolved relative to the project directory unless absolute paths are provided.\n\n### Communication & Workflow\n- **attemptCompletion**: Signal task completion with validation status and confidence metrics.\n\n### Guidelines for Enhanced Tools:\n\n1. **Use taskManager proactively** for any task requiring 3+ steps or complex coordination\n2. **Start with codeAnalyzer** when working with unfamiliar codebases to understand structure\n3. **Use smartSearch** for intelligent pattern discovery across the codebase\n4. **Apply multiEdit** for systematic refactoring across multiple files\n5. **Ask for clarification** when requirements are ambiguous rather than making assumptions\n6. **Signal completion** with comprehensive summaries and validation status\n\nUse the following basic examples to guide your implementation.\n\n<examples>\n### Weather Agent\n\\`\\`\\`\n// ./src/agents/weather-agent.ts\nimport { openai } from '@ai-sdk/openai';\nimport { Agent } from '@mastra/core/agent';\nimport { Memory } from '@mastra/memory';\nimport { LibSQLStore } from '@mastra/libsql';\nimport { weatherTool } from '../tools/weather-tool';\n\nexport const weatherAgent = new Agent({\n id: 'weather-agent',\n name: 'Weather Agent',\n instructions: \\${instructions},\n model: openai('gpt-4o-mini'),\n tools: { weatherTool },\n memory: new Memory({\n storage: new LibSQLStore({\n id: 'mastra-memory-storage',\n url: 'file:../mastra.db', // ask user what database to use, use this as the default\n }),\n }),\n});\n\\`\\`\\`\n\n### Weather Tool\n\\`\\`\\`\n// ./src/tools/weather-tool.ts\nimport { createTool } from '@mastra/core/tools';\nimport { z } from 'zod';\nimport { getWeather } from '../tools/weather-tool';\n\nexport const weatherTool = createTool({\n id: 'get-weather',\n description: 'Get current weather for a location',\n inputSchema: z.object({\n location: z.string().describe('City name'),\n }),\n outputSchema: z.object({\n temperature: z.number(),\n feelsLike: z.number(),\n humidity: z.number(),\n windSpeed: z.number(),\n windGust: z.number(),\n conditions: z.string(),\n location: z.string(),\n }),\n execute: async (inputData) => {\n return await getWeather(inputData.location);\n },\n});\n\\`\\`\\`\n\n### Weather Workflow\n\\`\\`\\`\n// ./src/workflows/weather-workflow.ts\nimport { createStep, createWorkflow } from '@mastra/core/workflows';\nimport { z } from 'zod';\n\nconst fetchWeather = createStep({\n id: 'fetch-weather',\n description: 'Fetches weather forecast for a given city',\n inputSchema: z.object({\n city: z.string().describe('The city to get the weather for'),\n }),\n outputSchema: forecastSchema,\n execute: async (inputData) => {\n if (!inputData) {\n throw new Error('Input data not found');\n }\n\n const geocodingUrl = \\`https://geocoding-api.open-meteo.com/v1/search?name=\\${encodeURIComponent(inputData.city)}&count=1\\`;\n const geocodingResponse = await fetch(geocodingUrl);\n const geocodingData = (await geocodingResponse.json()) as {\n results: { latitude: number; longitude: number; name: string }[];\n };\n\n if (!geocodingData.results?.[0]) {\n throw new Error(\\`Location '\\${inputData.city}' not found\\`);\n }\n\n const { latitude, longitude, name } = geocodingData.results[0];\n\n const weatherUrl = \\`https://api.open-meteo.com/v1/forecast?latitude=\\${latitude}&longitude=\\${longitude}¤t=precipitation,weathercode&timezone=auto,&hourly=precipitation_probability,temperature_2m\\`\n const response = await fetch(weatherUrl);\n const data = (await response.json()) as {\n current: {\n time: string;\n precipitation: number;\n weathercode: number;\n };\n hourly: {\n precipitation_probability: number[];\n temperature_2m: number[];\n };\n };\n\n const forecast = {\n date: new Date().toISOString(),\n maxTemp: Math.max(...data.hourly.temperature_2m),\n minTemp: Math.min(...data.hourly.temperature_2m),\n condition: getWeatherCondition(data.current.weathercode),\n precipitationChance: data.hourly.precipitation_probability.reduce(\n (acc, curr) => Math.max(acc, curr),\n 0,\n ),\n location: name,\n };\n\n return forecast;\n },\n});\n\nconst planActivities = createStep({\n id: 'plan-activities',\n description: 'Suggests activities based on weather conditions',\n inputSchema: forecastSchema,\n outputSchema: z.object({\n activities: z.string(),\n }),\n execute: async (inputData, context) => {\n const mastra = context?.mastra;\n const forecast = inputData;\n\n if (!forecast) {\n throw new Error('Forecast data not found');\n }\n\n const agent = mastra?.getAgent('weatherAgent');\n if (!agent) {\n throw new Error('Weather agent not found');\n }\n\n const prompt = \\${weatherWorkflowPrompt}\n\n const response = await agent.stream([\n {\n role: 'user',\n content: prompt,\n },\n ]);\n\n let activitiesText = '';\n\n for await (const chunk of response.textStream) {\n process.stdout.write(chunk);\n activitiesText += chunk;\n }\n\n return {\n activities: activitiesText,\n };\n },\n});\n\nconst weatherWorkflow = createWorkflow({\n id: 'weather-workflow',\n inputSchema: z.object({\n city: z.string().describe('The city to get the weather for'),\n }),\n outputSchema: z.object({\n activities: z.string(),\n }),\n})\n .then(fetchWeather)\n .then(planActivities);\n\nweatherWorkflow.commit();\n\\`\\`\\`\nexport { weatherWorkflow };\n\\`\\`\\`\n\n### Mastra instance\n\\`\\`\\`\n// ./src/mastra.ts\n\nimport { Mastra } from '@mastra/core/mastra';\nimport { PinoLogger } from '@mastra/loggers';\nimport { LibSQLStore } from '@mastra/libsql';\nimport { weatherWorkflow } from './workflows/weather-workflow';\nimport { weatherAgent } from './agents/weather-agent';\n\nexport const mastra = new Mastra({\n workflows: { weatherWorkflow },\n agents: { weatherAgent },\n storage: new LibSQLStore({\n id: 'mastra-storage',\n // stores observability, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db\n url: \":memory:\",\n }),\n logger: new PinoLogger({\n name: 'Mastra',\n level: 'info',\n }),\n});\n\\`\\`\\`\n\n</examples>`;\n\n static DEFAULT_MEMORY_CONFIG = {\n lastMessages: 20,\n };\n\n static DEFAULT_FOLDER_STRUCTURE = {\n agent: 'src/mastra/agents',\n workflow: 'src/mastra/workflows',\n tool: 'src/mastra/tools',\n 'mcp-server': 'src/mastra/mcp',\n network: 'src/mastra/networks',\n };\n\n static DEFAULT_TOOLS = async (projectPath: string) => {\n return {\n readFile: createTool({\n id: 'read-file',\n description: 'Read contents of a file with optional line range selection.',\n inputSchema: z.object({\n filePath: z.string().describe('Path to the file to read'),\n startLine: z.number().optional().describe('Starting line number (1-indexed)'),\n endLine: z.number().optional().describe('Ending line number (1-indexed, inclusive)'),\n encoding: z.string().default('utf-8').describe('File encoding'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n content: z.string().optional(),\n lines: z.array(z.string()).optional(),\n metadata: z\n .object({\n size: z.number(),\n totalLines: z.number(),\n encoding: z.string(),\n lastModified: z.string(),\n })\n .optional(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.readFile({ ...inputData, projectPath });\n },\n }),\n\n writeFile: createTool({\n id: 'write-file',\n description: 'Write content to a file, with options for creating directories.',\n inputSchema: z.object({\n filePath: z.string().describe('Path to the file to write'),\n content: z.string().describe('Content to write to the file'),\n createDirs: z.boolean().default(true).describe(\"Create parent directories if they don't exist\"),\n encoding: z.string().default('utf-8').describe('File encoding'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n filePath: z.string(),\n bytesWritten: z.number().optional(),\n message: z.string(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.writeFile({ ...inputData, projectPath });\n },\n }),\n\n listDirectory: createTool({\n id: 'list-directory',\n description: 'List contents of a directory with filtering and metadata options.',\n inputSchema: z.object({\n path: z.string().describe('Directory path to list'),\n recursive: z.boolean().default(false).describe('List subdirectories recursively'),\n includeHidden: z.boolean().default(false).describe('Include hidden files and directories'),\n pattern: z.string().default('*').describe('Glob pattern to filter files'),\n maxDepth: z.number().default(10).describe('Maximum recursion depth'),\n includeMetadata: z.boolean().default(true).describe('Include file metadata'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n items: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n type: z.enum(['file', 'directory', 'symlink']),\n size: z.number().optional(),\n lastModified: z.string().optional(),\n permissions: z.string().optional(),\n }),\n ),\n totalItems: z.number(),\n path: z.string(),\n message: z.string(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.listDirectory({ ...inputData, projectPath });\n },\n }),\n\n executeCommand: createTool({\n id: 'execute-command',\n description: 'Execute shell commands with proper error handling and output capture.',\n inputSchema: z.object({\n command: z.string().describe('Shell command to execute'),\n workingDirectory: z.string().optional().describe('Working directory for command execution'),\n timeout: z.number().default(30000).describe('Timeout in milliseconds'),\n captureOutput: z.boolean().default(true).describe('Capture command output'),\n shell: z.string().optional().describe('Shell to use (defaults to system shell)'),\n env: z.record(z.string()).optional().describe('Environment variables'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n exitCode: z.number().optional(),\n stdout: z.string().optional(),\n stderr: z.string().optional(),\n command: z.string(),\n workingDirectory: z.string().optional(),\n executionTime: z.number().optional(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.executeCommand({\n ...inputData,\n workingDirectory: inputData.workingDirectory || projectPath,\n });\n },\n }),\n // Enhanced Task Management (Critical for complex coding tasks)\n taskManager: createTool({\n id: 'task-manager',\n description:\n 'Create and manage structured task lists for coding sessions. Use this for complex multi-step tasks to track progress and ensure thoroughness.',\n inputSchema: z.object({\n action: z.enum(['create', 'update', 'list', 'complete', 'remove']).describe('Task management action'),\n tasks: z\n .array(\n z.object({\n id: z.string().describe('Unique task identifier'),\n content: z.string().describe('Task description, optional if just updating the status').optional(),\n status: z.enum(['pending', 'in_progress', 'completed', 'blocked']).describe('Task status'),\n priority: z.enum(['high', 'medium', 'low']).default('medium').describe('Task priority'),\n dependencies: z.array(z.string()).optional().describe('IDs of tasks this depends on'),\n notes: z.string().optional().describe('Additional notes or context'),\n }),\n )\n .optional()\n .describe('Tasks to create or update'),\n taskId: z.string().optional().describe('Specific task ID for single task operations'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n tasks: z.array(\n z.object({\n id: z.string(),\n content: z.string(),\n status: z.string(),\n priority: z.string(),\n dependencies: z.array(z.string()).optional(),\n notes: z.string().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n }),\n ),\n message: z.string(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.manageTaskList(inputData);\n },\n }),\n\n // Advanced File Operations\n multiEdit: createTool({\n id: 'multi-edit',\n description: 'Perform multiple search-replace operations on one or more files in a single atomic operation.',\n inputSchema: z.object({\n operations: z\n .array(\n z.object({\n filePath: z.string().describe('Path to the file to edit'),\n edits: z\n .array(\n z.object({\n oldString: z.string().describe('Exact text to replace'),\n newString: z.string().describe('Replacement text'),\n replaceAll: z.boolean().default(false).describe('Replace all occurrences'),\n }),\n )\n .describe('List of edit operations for this file'),\n }),\n )\n .describe('File edit operations to perform'),\n createBackup: z.boolean().default(false).describe('Create backup files before editing'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n results: z.array(\n z.object({\n filePath: z.string(),\n editsApplied: z.number(),\n errors: z.array(z.string()),\n backup: z.string().optional(),\n }),\n ),\n message: z.string(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.performMultiEdit({ ...inputData, projectPath });\n },\n }),\n\n replaceLines: createTool({\n id: 'replace-lines',\n description:\n 'Replace specific line ranges in files with new content. IMPORTANT: This tool replaces ENTIRE lines, not partial content within lines. Lines are 1-indexed.',\n inputSchema: z.object({\n filePath: z.string().describe('Path to the file to edit'),\n startLine: z\n .number()\n .describe('Starting line number to replace (1-indexed, inclusive). Count from the first line = 1'),\n endLine: z\n .number()\n .describe(\n 'Ending line number to replace (1-indexed, inclusive). To replace single line, use same number as startLine',\n ),\n newContent: z\n .string()\n .describe(\n 'New content to replace the lines with. Use empty string \"\" to delete lines completely. For multiline content, include \\\\n characters',\n ),\n createBackup: z.boolean().default(false).describe('Create backup file before editing'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n message: z.string(),\n linesReplaced: z.number().optional(),\n backup: z.string().optional(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.replaceLines({ ...inputData, projectPath });\n },\n }),\n\n // File diagnostics tool to help debug line replacement issues\n showFileLines: createTool({\n id: 'show-file-lines',\n description:\n 'Show specific lines from a file with line numbers. Useful for debugging before using replaceLines.',\n inputSchema: z.object({\n filePath: z.string().describe('Path to the file to examine'),\n startLine: z\n .number()\n .optional()\n .describe('Starting line number to show (1-indexed). If not provided, shows all lines'),\n endLine: z\n .number()\n .optional()\n .describe(\n 'Ending line number to show (1-indexed, inclusive). If not provided but startLine is, shows only that line',\n ),\n context: z.number().default(2).describe('Number of context lines to show before and after the range'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n lines: z.array(\n z.object({\n lineNumber: z.number(),\n content: z.string(),\n isTarget: z.boolean().describe('Whether this line is in the target range'),\n }),\n ),\n totalLines: z.number(),\n message: z.string(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.showFileLines({ ...inputData, projectPath });\n },\n }),\n\n // Enhanced Pattern Search\n smartSearch: createTool({\n id: 'smart-search',\n description: 'Intelligent search across codebase with context awareness and pattern matching.',\n inputSchema: z.object({\n query: z.string().describe('Search query or pattern'),\n type: z.enum(['text', 'regex', 'fuzzy', 'semantic']).default('text').describe('Type of search to perform'),\n scope: z\n .object({\n paths: z.array(z.string()).optional().describe('Specific paths to search'),\n fileTypes: z.array(z.string()).optional().describe('File extensions to include'),\n excludePaths: z.array(z.string()).optional().describe('Paths to exclude'),\n maxResults: z.number().default(50).describe('Maximum number of results'),\n })\n .optional(),\n context: z\n .object({\n beforeLines: z.number().default(2).describe('Lines of context before match'),\n afterLines: z.number().default(2).describe('Lines of context after match'),\n includeDefinitions: z.boolean().default(false).describe('Include function/class definitions'),\n })\n .optional(),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n matches: z.array(\n z.object({\n file: z.string(),\n line: z.number(),\n column: z.number().optional(),\n match: z.string(),\n context: z.object({\n before: z.array(z.string()),\n after: z.array(z.string()),\n }),\n relevance: z.number().optional(),\n }),\n ),\n summary: z.object({\n totalMatches: z.number(),\n filesSearched: z.number(),\n patterns: z.array(z.string()),\n }),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.performSmartSearch(inputData, projectPath);\n },\n }),\n\n validateCode: createTool({\n id: 'validate-code',\n description:\n 'Validates code using a fast hybrid approach: syntax β semantic β lint. RECOMMENDED: Always provide specific files for optimal performance and accuracy.',\n inputSchema: z.object({\n projectPath: z.string().optional().describe('Path to the project to validate (defaults to current project)'),\n validationType: z\n .array(z.enum(['types', 'lint', 'schemas', 'tests', 'build']))\n .describe('Types of validation to perform. Recommended: [\"types\", \"lint\"] for code quality'),\n files: z\n .array(z.string())\n .optional()\n .describe(\n 'RECOMMENDED: Specific files to validate (e.g., files you created/modified). Uses hybrid validation: fast syntax check β semantic types β ESLint. Without files, falls back to slower CLI validation.',\n ),\n }),\n outputSchema: z.object({\n valid: z.boolean(),\n errors: z.array(\n z.object({\n type: z.enum(['typescript', 'eslint', 'schema', 'test', 'build']),\n severity: z.enum(['error', 'warning', 'info']),\n message: z.string(),\n file: z.string().optional(),\n line: z.number().optional(),\n column: z.number().optional(),\n code: z.string().optional(),\n }),\n ),\n summary: z.object({\n totalErrors: z.number(),\n totalWarnings: z.number(),\n validationsPassed: z.array(z.string()),\n validationsFailed: z.array(z.string()),\n }),\n }),\n execute: async inputData => {\n const { projectPath: validationProjectPath, validationType, files } = inputData;\n const targetPath = validationProjectPath || projectPath;\n\n // BEST PRACTICE: Always provide files array for optimal performance\n // Hybrid approach: syntax (1ms) β semantic (100ms) β ESLint (50ms)\n // Without files: falls back to CLI validation (2000ms+)\n\n return await AgentBuilderDefaults.validateCode({\n projectPath: targetPath,\n validationType,\n files,\n });\n },\n }),\n\n // Web Search (replaces MCP web search)\n webSearch: createTool({\n id: 'web-search',\n description: 'Search the web for current information and return structured results.',\n inputSchema: z.object({\n query: z.string().describe('Search query'),\n maxResults: z.number().default(10).describe('Maximum number of results to return'),\n region: z.string().default('us').describe('Search region/country code'),\n language: z.string().default('en').describe('Search language'),\n includeImages: z.boolean().default(false).describe('Include image results'),\n dateRange: z.enum(['day', 'week', 'month', 'year', 'all']).default('all').describe('Date range filter'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n query: z.string(),\n results: z.array(\n z.object({\n title: z.string(),\n url: z.string(),\n snippet: z.string(),\n domain: z.string(),\n publishDate: z.string().optional(),\n relevanceScore: z.number().optional(),\n }),\n ),\n totalResults: z.number(),\n searchTime: z.number(),\n suggestions: z.array(z.string()).optional(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.webSearch(inputData);\n },\n }),\n\n // Task Completion Signaling\n attemptCompletion: createTool({\n id: 'attempt-completion',\n description: 'Signal that you believe the requested task has been completed and provide a summary.',\n inputSchema: z.object({\n summary: z.string().describe('Summary of what was accomplished'),\n changes: z\n .array(\n z.object({\n type: z.enum(['file_created', 'file_modified', 'file_deleted', 'command_executed', 'dependency_added']),\n description: z.string(),\n path: z.string().optional(),\n }),\n )\n .describe('List of changes made'),\n validation: z\n .object({\n testsRun: z.boolean().default(false),\n buildsSuccessfully: z.boolean().default(false),\n manualTestingRequired: z.boolean().default(false),\n })\n .describe('Validation status'),\n nextSteps: z.array(z.string()).optional().describe('Suggested next steps or follow-up actions'),\n }),\n outputSchema: z.object({\n completionId: z.string(),\n status: z.enum(['completed', 'needs_review', 'needs_testing']),\n summary: z.string(),\n confidence: z.number().min(0).max(100),\n }),\n execute: async inputData => {\n return await AgentBuilderDefaults.signalCompletion(inputData);\n },\n }),\n\n manageProject: createTool({\n id: 'manage-project',\n description:\n 'Handles project management including creating project structures, managing dependencies, and package operations.',\n inputSchema: z.object({\n action: z.enum(['create', 'install', 'upgrade']).describe('The action to perform'),\n features: z\n .array(z.string())\n .optional()\n .describe('Mastra features to include (e.g., [\"agents\", \"memory\", \"workflows\"])'),\n packages: z\n .array(\n z.object({\n name: z.string(),\n version: z.string().optional(),\n }),\n )\n .optional()\n .describe('Packages to install/upgrade'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n installed: z.array(z.string()).optional(),\n upgraded: z.array(z.string()).optional(),\n warnings: z.array(z.string()).optional(),\n message: z.string().optional(),\n details: z.string().optional(),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n const { action, features, packages } = inputData;\n try {\n switch (action) {\n case 'create':\n return await AgentBuilderDefaults.createMastraProject({\n projectName: projectPath,\n features,\n });\n case 'install':\n if (!packages?.length) {\n return {\n success: false,\n message: 'Packages array is required for install action',\n };\n }\n return await AgentBuilderDefaults.installPackages({\n packages,\n projectPath,\n });\n case 'upgrade':\n if (!packages?.length) {\n return {\n success: false,\n message: 'Packages array is required for upgrade action',\n };\n }\n return await AgentBuilderDefaults.upgradePackages({\n packages,\n projectPath,\n });\n default:\n return {\n success: false,\n message: `Unknown action: ${action}`,\n };\n }\n } catch (error) {\n return {\n success: false,\n message: `Error executing ${action}: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n },\n }),\n manageServer: createTool({\n id: 'manage-server',\n description:\n 'Manages the Mastra server - start, stop, restart, and check status, use the terminal tool to make curl requests to the server. There is an openapi spec for the server at http://localhost:{port}/openapi.json',\n inputSchema: z.object({\n action: z.enum(['start', 'stop', 'restart', 'status']).describe('Server management action'),\n port: z.number().optional().default(4200).describe('Port to run the server on'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n status: z.enum(['running', 'stopped', 'starting', 'stopping', 'unknown']),\n pid: z.number().optional(),\n port: z.number().optional(),\n url: z.string().optional(),\n message: z.string().optional(),\n stdout: z.array(z.string()).optional().describe('Server output lines captured during startup'),\n error: z.string().optional(),\n }),\n execute: async inputData => {\n const { action, port } = inputData;\n try {\n switch (action) {\n case 'start':\n return await AgentBuilderDefaults.startMastraServer({\n port,\n projectPath,\n });\n case 'stop':\n return await AgentBuilderDefaults.stopMastraServer({\n port,\n projectPath,\n });\n case 'restart':\n const stopResult = await AgentBuilderDefaults.stopMastraServer({\n port,\n projectPath,\n });\n if (!stopResult.success) {\n return {\n success: false,\n status: 'unknown' as const,\n message: `Failed to restart: could not stop server on port ${port}`,\n error: stopResult.error || 'Unknown stop error',\n };\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n const startResult = await AgentBuilderDefaults.startMastraServer({\n port,\n projectPath,\n });\n if (!startResult.success) {\n return {\n success: false,\n status: 'stopped' as const,\n message: `Failed to restart: server stopped successfully but failed to start on port ${port}`,\n error: startResult.error || 'Unknown start error',\n };\n }\n return {\n ...startResult,\n message: `Mastra server restarted successfully on port ${port}`,\n };\n case 'status':\n return await AgentBuilderDefaults.checkMastraServerStatus({\n port,\n projectPath,\n });\n default:\n return {\n success: false,\n status: 'unknown' as const,\n message: `Unknown action: ${action}`,\n };\n }\n } catch (error) {\n return {\n success: false,\n status: 'unknown' as const,\n message: `Error managing server: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n },\n }),\n httpRequest: createTool({\n id: 'http-request',\n description: 'Makes HTTP requests to the Mastra server or external APIs for testing and integration',\n inputSchema: z.object({\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']).describe('HTTP method'),\n url: z.string().describe('Full URL or path (if baseUrl provided)'),\n baseUrl: z.string().optional().describe('Base URL for the server (e.g., http://localhost:4200)'),\n headers: z.record(z.string()).optional().describe('HTTP headers'),\n body: z.any().optional().describe('Request body (will be JSON stringified if object)'),\n timeout: z.number().optional().default(30000).describe('Request timeout in milliseconds'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n status: z.number().optional(),\n statusText: z.string().optional(),\n headers: z.record(z.string()).optional(),\n data: z.any().optional(),\n error: z.string().optional(),\n url: z.string(),\n method: z.string(),\n }),\n execute: async inputData => {\n const { method, url, baseUrl, headers, body, timeout } = inputData;\n try {\n return await AgentBuilderDefaults.makeHttpRequest({\n method,\n url,\n baseUrl,\n headers,\n body,\n timeout,\n });\n } catch (error) {\n return {\n success: false,\n url: baseUrl ? `${baseUrl}${url}` : url,\n method,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n }),\n };\n };\n\n /**\n * Filter tools for template builder mode (excludes web search and other advanced tools)\n */\n static filterToolsForTemplateBuilder(tools: Record<string, any>): Record<string, any> {\n const templateBuilderTools = [\n 'readFile',\n 'writeFile',\n 'listDirectory',\n 'executeCommand',\n 'taskManager',\n 'multiEdit',\n 'replaceLines',\n 'showFileLines',\n 'smartSearch',\n 'validateCode',\n ];\n\n const filtered: Record<string, ReturnType<typeof createTool>> = {};\n for (const toolName of templateBuilderTools) {\n if (tools[toolName]) {\n filtered[toolName] = tools[toolName];\n }\n }\n return filtered;\n }\n\n /**\n * Filter tools for code editor mode (includes all tools)\n */\n static filterToolsForCodeEditor(tools: Record<string, any>): Record<string, any> {\n return tools; // Return all tools for code editor mode\n }\n\n /**\n * Get tools for a specific mode\n */\n static async listToolsForMode(\n projectPath: string,\n mode: 'template' | 'code-editor' = 'code-editor',\n ): Promise<Record<string, any>> {\n const allTools = await AgentBuilderDefaults.DEFAULT_TOOLS(projectPath);\n\n if (mode === 'template') {\n return AgentBuilderDefaults.filterToolsForTemplateBuilder(allTools);\n } else {\n return AgentBuilderDefaults.filterToolsForCodeEditor(allTools);\n }\n }\n\n /**\n * Create a new Mastra project using create-mastra CLI\n */\n static async createMastraProject({ features, projectName }: { features?: string[]; projectName?: string }) {\n try {\n const args = ['pnpx', 'create-mastra@latest', projectName?.replace(/[;&|`$(){}\\[\\]]/g, '') ?? '', '-l', 'openai'];\n if (features && features.length > 0) {\n args.push('--components', features.join(','));\n }\n args.push('--example');\n\n const { stdout, stderr } = await spawnWithOutput(args[0]!, args.slice(1), {});\n\n return {\n success: true,\n projectPath: `./${projectName}`,\n message: `Successfully created Mastra project: ${projectName}.`,\n details: stdout,\n error: stderr,\n };\n } catch (error) {\n console.error(error);\n return {\n success: false,\n message: `Failed to create project: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n /**\n * Install packages using the detected package manager\n */\n static async installPackages({\n packages,\n projectPath,\n }: {\n packages: Array<{ name: string; version?: string }>;\n projectPath?: string;\n }) {\n try {\n console.info('Installing packages:', JSON.stringify(packages, null, 2));\n\n const packageStrings = packages.map(p => `${p.name}`);\n\n await spawnSWPM(projectPath || '', 'add', packageStrings);\n\n return {\n success: true,\n installed: packageStrings,\n message: `Successfully installed ${packages.length} package(s).`,\n details: '',\n };\n } catch (error) {\n return {\n success: false,\n message: `Failed to install packages: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n /**\n * Upgrade packages using the detected package manager\n */\n static async upgradePackages({\n packages,\n projectPath,\n }: {\n packages?: Array<{ name: string; version?: string }>;\n projectPath?: string;\n }) {\n try {\n console.info('Upgrading specific packages:', JSON.stringify(packages, null, 2));\n\n let packageNames: string[] = [];\n\n if (packages && packages.length > 0) {\n packageNames = packages.map(p => `${p.name}`);\n }\n await spawnSWPM(projectPath || '', 'upgrade', packageNames);\n\n return {\n success: true,\n upgraded: packages?.map(p => p.name) || ['all packages'],\n message: `Packages upgraded successfully.`,\n details: '',\n };\n } catch (error) {\n return {\n success: false,\n message: `Failed to upgrade packages: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n /**\n * Start the Mastra server\n */\n static async startMastraServer({\n port = 4200,\n projectPath,\n env = {},\n }: {\n port?: number;\n projectPath?: string;\n env?: Record<string, string>;\n }) {\n try {\n const serverEnv = { ...process.env, ...env, PORT: port.toString() };\n const execOptions = {\n cwd: projectPath || process.cwd(),\n env: serverEnv,\n };\n\n const serverProcess = nodeSpawn('pnpm', ['run', 'dev'], {\n ...execOptions,\n detached: true,\n stdio: 'pipe',\n });\n\n const stdoutLines: string[] = [];\n\n const serverStarted = new Promise<any>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error(`Server startup timeout after 30 seconds. Output: ${stdoutLines.join('\\n')}`));\n }, 30000);\n\n serverProcess.stdout?.on('data', data => {\n const output = data.toString();\n const lines = output.split('\\n').filter((line: string) => line.trim());\n stdoutLines.push(...lines);\n\n if (output.includes('Mastra API running on port')) {\n clearTimeout(timeout);\n resolve({\n success: true,\n status: 'running' as const,\n pid: serverProcess.pid,\n port,\n url: `http://localhost:${port}`,\n message: `Mastra server started successfully on port ${port}`,\n stdout: stdoutLines,\n });\n }\n });\n\n serverProcess.stderr?.on('data', data => {\n const errorOutput = data.toString();\n stdoutLines.push(`[STDERR] ${errorOutput}`);\n clearTimeout(timeout);\n reject(new Error(`Server startup failed with error: ${errorOutput}`));\n });\n\n serverProcess.on('error', error => {\n clearTimeout(timeout);\n reject(error);\n });\n\n serverProcess.on('exit', (code, signal) => {\n clearTimeout(timeout);\n if (code !== 0 && code !== null) {\n reject(\n new Error(\n `Server process exited with code ${code}${signal ? ` (signal: ${signal})` : ''}. Output: ${stdoutLines.join('\\n')}`,\n ),\n );\n }\n });\n });\n\n return await serverStarted;\n } catch (error) {\n return {\n success: false,\n status: 'stopped' as const,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Stop the Mastra server\n */\n static async stopMastraServer({ port = 4200, projectPath: _projectPath }: { port?: number; projectPath?: string }) {\n // Validate port to ensure it is a safe integer\n if (typeof port !== 'number' || !Number.isInteger(port) || port < 1 || port > 65535) {\n return {\n success: false,\n status: 'error' as const,\n error: `Invalid port value: ${String(port)}`,\n };\n }\n try {\n // Run lsof safely without shell interpretation\n const { stdout } = await execFile('lsof', ['-ti', String(port)]);\n // If no output, treat as \"No process found\"\n const effectiveStdout = stdout.trim() ? stdout : 'No process found';\n\n if (!effectiveStdout || effectiveStdout === 'No process found') {\n return {\n success: true,\n status: 'stopped' as const,\n message: `No Mastra server found running on port ${port}`,\n };\n }\n\n const pids = stdout\n .trim()\n .split('\\n')\n .filter((pid: string) => pid.trim());\n const killedPids: number[] = [];\n const failedPids: number[] = [];\n\n for (const pidStr of pids) {\n const pid = parseInt(pidStr.trim());\n if (isNaN(pid)) continue;\n\n try {\n process.kill(pid, 'SIGTERM');\n killedPids.push(pid);\n } catch (e) {\n failedPids.push(pid);\n console.warn(`Failed to kill process ${pid}:`, e);\n }\n }\n\n // If some processes failed to be killed, still report partial success\n // but include warning about failed processes\n\n if (killedPids.length === 0) {\n return {\n success: false,\n status: 'unknown' as const,\n message: `Failed to stop any processes on port ${port}`,\n error: `Could not kill PIDs: ${failedPids.join(', ')}`,\n };\n }\n\n // Report partial success if some processes were killed but others failed\n if (failedPids.length > 0) {\n console.warn(\n `Killed ${killedPids.length} processes but failed to kill ${failedPids.length} processes: ${failedPids.join(', ')}`,\n );\n }\n\n // Wait a bit and check if processes are still running\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n try {\n const { stdout: checkStdoutRaw } = await execFile('lsof', ['-ti', String(port)]);\n const checkStdout = checkStdoutRaw.trim() ? checkStdoutRaw : 'No process found';\n if (checkStdout && checkStdout !== 'No process found') {\n // Force kill remaining processes\n const remainingPids = checkStdout\n .trim()\n .split('\\n')\n .filter((pid: string) => pid.trim());\n for (const pidStr of remainingPids) {\n const pid = parseInt(pidStr.trim());\n if (!isNaN(pid)) {\n try {\n process.kill(pid, 'SIGKILL');\n } catch {\n // ignore\n }\n }\n }\n\n // Final check\n await new Promise(resolve => setTimeout(resolve, 1000));\n const { stdout: finalCheckRaw } = await execFile('lsof', ['-ti', String(port)]);\n const finalCheck = finalCheckRaw.trim() ? finalCheckRaw : 'No process found';\n if (finalCheck && finalCheck !== 'No process found') {\n return {\n success: false,\n status: 'unknown' as const,\n message: `Server processes still running on port ${port} after stop attempts`,\n error: `Remaining PIDs: ${finalCheck.trim()}`,\n };\n }\n }\n } catch (error) {\n console.warn('Failed to verify server stop:', error);\n }\n\n return {\n success: true,\n status: 'stopped' as const,\n message: `Mastra server stopped successfully (port ${port}). Killed PIDs: ${killedPids.join(', ')}`,\n };\n } catch (error) {\n return {\n success: false,\n status: 'unknown' as const,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Check Mastra server status\n */\n static async checkMastraServerStatus({\n port = 4200,\n projectPath: _projectPath,\n }: {\n port?: number;\n projectPath?: string;\n }) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(`http://localhost:${port}/health`, {\n method: 'GET',\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (response.ok) {\n return {\n success: true,\n status: 'running' as const,\n port,\n url: `http://localhost:${port}`,\n message: 'Mastra server is running and healthy',\n };\n } else {\n return {\n success: false,\n status: 'unknown' as const,\n port,\n message: `Server responding but not healthy (status: ${response.status})`,\n };\n }\n } catch {\n // Check if process exists on port\n try {\n const { stdout } = await execFile('lsof', ['-ti', String(port)]);\n const effectiveStdout = stdout.trim() ? stdout : 'No process found';\n const hasProcess = effectiveStdout && effectiveStdout !== 'No process found';\n\n return {\n success: Boolean(hasProcess),\n status: hasProcess ? ('starting' as const) : ('stopped' as const),\n port,\n message: hasProcess\n ? 'Server process exists but not responding to health checks'\n : 'No server process found on specified port',\n };\n } catch {\n return {\n success: false,\n status: 'stopped' as const,\n port,\n message: 'Server is not running',\n };\n }\n }\n }\n\n // Cache for TypeScript program (lazily loaded)\n private static tsProgram: any | null = null;\n private static programProjectPath: string | null = null;\n\n /**\n * Validate code using hybrid approach: syntax -> types -> lint\n *\n * BEST PRACTICES FOR CODING AGENTS:\n *\n * β
RECOMMENDED (Fast & Accurate):\n * validateCode({\n * validationType: ['types', 'lint'],\n * files: ['src/workflows/my-workflow.ts', 'src/components/Button.tsx']\n * })\n *\n * Performance: ~150ms\n * - Syntax check (1ms) - catches 80% of issues instantly\n * - Semantic validation (100ms) - full type checking with dependencies\n * - ESLint (50ms) - style and best practices\n * - Only shows errors from YOUR files\n *\n * β AVOID (Slow & Noisy):\n * validateCode({ validationType: ['types', 'lint'] }) // no files specified\n *\n * Performance: ~2000ms+\n * - Full project CLI validation\n * - Shows errors from all project files (confusing)\n * - Much slower for coding agents\n *\n * @param projectPath - Project root directory (defaults to cwd)\n * @param validationType - ['types', 'lint'] recommended for most use cases\n * @param files - ALWAYS provide this for best performance\n */\n static async validateCode({\n projectPath,\n validationType,\n files,\n }: {\n projectPath?: string;\n validationType: Array<'types' | 'lint' | 'schemas' | 'tests' | 'build'>;\n files?: string[];\n }) {\n const errors: Array<{\n type: 'typescript' | 'eslint' | 'schema' | 'test' | 'build';\n severity: 'error' | 'warning' | 'info';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> = [];\n const validationsPassed: string[] = [];\n const validationsFailed: string[] = [];\n\n const targetProjectPath = projectPath || process.cwd();\n\n // If no files specified, use legacy CLI-based validation for backward compatibility\n if (!files || files.length === 0) {\n return this.validateCodeCLI({ projectPath, validationType });\n }\n\n // Hybrid validation approach for specific files (default behavior)\n for (const filePath of files) {\n const absolutePath = isAbsolute(filePath) ? filePath : resolve(targetProjectPath, filePath);\n\n try {\n const fileContent = await readFile(absolutePath, 'utf-8');\n const fileResults = await this.validateSingleFileHybrid(\n absolutePath,\n fileContent,\n targetProjectPath,\n validationType,\n );\n\n errors.push(...fileResults.errors);\n\n // Track validation results\n for (const type of validationType) {\n const hasErrors = fileResults.errors.some(e => e.type === type && e.severity === 'error');\n if (hasErrors) {\n if (!validationsFailed.includes(type)) validationsFailed.push(type);\n } else {\n if (!validationsPassed.includes(type)) validationsPassed.push(type);\n }\n }\n } catch (error) {\n errors.push({\n type: 'typescript',\n severity: 'error',\n message: `Failed to read file ${filePath}: ${error instanceof Error ? error.message : String(error)}`,\n file: filePath,\n });\n validationsFailed.push('types');\n }\n }\n\n const totalErrors = errors.filter(e => e.severity === 'error').length;\n const totalWarnings = errors.filter(e => e.severity === 'warning').length;\n const isValid = totalErrors === 0;\n\n return {\n valid: isValid,\n errors,\n summary: {\n totalErrors,\n totalWarnings,\n validationsPassed,\n validationsFailed,\n },\n };\n }\n\n /**\n * CLI-based validation for when no specific files are provided\n */\n static async validateCodeCLI({\n projectPath,\n validationType,\n }: {\n projectPath?: string;\n validationType: Array<'types' | 'lint' | 'schemas' | 'tests' | 'build'>;\n }) {\n const errors: Array<{\n type: 'typescript' | 'eslint' | 'schema' | 'test' | 'build';\n severity: 'error' | 'warning' | 'info';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> = [];\n const validationsPassed: string[] = [];\n const validationsFailed: string[] = [];\n\n const execOptions = { cwd: projectPath };\n\n // TypeScript validation (legacy approach)\n if (validationType.includes('types')) {\n try {\n // Use execFile for safe argument passing to avoid shell interpretation\n const args = ['tsc', '--noEmit'];\n await execFile('npx', args, execOptions);\n validationsPassed.push('types');\n } catch (error: any) {\n let tsOutput = '';\n if (error.stdout) {\n tsOutput = error.stdout;\n } else if (error.stderr) {\n tsOutput = error.stderr;\n } else if (error.message) {\n tsOutput = error.message;\n }\n\n errors.push({\n type: 'typescript',\n severity: 'error',\n message: tsOutput.trim() || `TypeScript validation failed: ${error.message || String(error)}`,\n });\n validationsFailed.push('types');\n }\n }\n\n // ESLint validation\n if (validationType.includes('lint')) {\n try {\n const eslintArgs = ['eslint', '--format', 'json'];\n const { stdout } = await execFile('npx', eslintArgs, execOptions);\n\n if (stdout) {\n const eslintResults = JSON.parse(stdout);\n const eslintErrors = AgentBuilderDefaults.parseESLintErrors(eslintResults);\n errors.push(...eslintErrors);\n\n if (eslintErrors.some(e => e.severity === 'error')) {\n validationsFailed.push('lint');\n } else {\n validationsPassed.push('lint');\n }\n } else {\n validationsPassed.push('lint');\n }\n } catch (error: any) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n if (errorMessage.includes('\"filePath\"') || errorMessage.includes('messages')) {\n try {\n const eslintResults = JSON.parse(errorMessage);\n const eslintErrors = AgentBuilderDefaults.parseESLintErrors(eslintResults);\n errors.push(...eslintErrors);\n validationsFailed.push('lint');\n } catch {\n errors.push({\n type: 'eslint',\n severity: 'error',\n message: `ESLint validation failed: ${errorMessage}`,\n });\n validationsFailed.push('lint');\n }\n } else {\n validationsPassed.push('lint');\n }\n }\n }\n\n const totalErrors = errors.filter(e => e.severity === 'error').length;\n const totalWarnings = errors.filter(e => e.severity === 'warning').length;\n const isValid = totalErrors === 0;\n\n return {\n valid: isValid,\n errors,\n summary: {\n totalErrors,\n totalWarnings,\n validationsPassed,\n validationsFailed,\n },\n };\n }\n\n /**\n * Hybrid validation for a single file\n */\n static async validateSingleFileHybrid(\n filePath: string,\n fileContent: string,\n projectPath: string,\n validationType: Array<'types' | 'lint' | 'schemas' | 'tests' | 'build'>,\n ) {\n const errors: Array<{\n type: 'typescript' | 'eslint' | 'schema' | 'test' | 'build';\n severity: 'error' | 'warning' | 'info';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> = [];\n\n // Step 1: Fast syntax validation\n if (validationType.includes('types')) {\n const syntaxErrors = await this.validateSyntaxOnly(fileContent, filePath);\n errors.push(...syntaxErrors);\n\n // Fail fast on syntax errors\n if (syntaxErrors.length > 0) {\n return { errors };\n }\n\n // Step 2: TypeScript semantic validation (if syntax is clean)\n const typeErrors = await this.validateTypesSemantic(filePath, projectPath);\n errors.push(...typeErrors);\n }\n\n // Step 3: ESLint validation (only if no critical errors)\n if (validationType.includes('lint') && !errors.some(e => e.severity === 'error')) {\n const lintErrors = await this.validateESLintSingle(filePath, projectPath);\n errors.push(...lintErrors);\n }\n\n return { errors };\n }\n\n /**\n * Fast syntax-only validation using TypeScript parser\n */\n static async validateSyntaxOnly(fileContent: string, fileName: string) {\n const errors: Array<{\n type: 'typescript';\n severity: 'error';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n }> = [];\n\n try {\n // Dynamically import TypeScript to avoid bundling issues\n const ts = await import('typescript');\n\n const sourceFile = ts.createSourceFile(fileName, fileContent, ts.ScriptTarget.Latest, true);\n\n // Create a minimal program to get syntax diagnostics\n const options: any = {\n allowJs: true,\n checkJs: false,\n noEmit: true,\n };\n\n const host: any = {\n getSourceFile: (name: string) => (name === fileName ? sourceFile : undefined),\n writeFile: () => {},\n getCurrentDirectory: () => '',\n getDirectories: () => [],\n fileExists: (name: string) => name === fileName,\n readFile: (name: string) => (name === fileName ? fileContent : undefined),\n getCanonicalFileName: (name: string) => name,\n useCaseSensitiveFileNames: () => true,\n getNewLine: () => '\\n',\n getDefaultLibFileName: () => 'lib.d.ts',\n };\n\n const program = ts.createProgram([fileName], options, host);\n const diagnostics = program.getSyntacticDiagnostics(sourceFile);\n\n for (const diagnostic of diagnostics) {\n if (diagnostic.start !== undefined) {\n const position = sourceFile.getLineAndCharacterOfPosition(diagnostic.start);\n errors.push({\n type: 'typescript',\n severity: 'error',\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, '\\n'),\n file: fileName,\n line: position.line + 1,\n column: position.character + 1,\n });\n }\n }\n } catch (error) {\n // If TypeScript is not available, fall back to basic validation\n console.warn('TypeScript not available for syntax validation:', error);\n\n // Basic syntax check - look for common syntax errors\n const lines = fileContent.split('\\n');\n const commonErrors = [\n { pattern: /\\bimport\\s+.*\\s+from\\s+['\"\"][^'\"]*$/, message: 'Unterminated import statement' },\n { pattern: /\\{[^}]*$/, message: 'Unclosed brace' },\n { pattern: /\\([^)]*$/, message: 'Unclosed parenthesis' },\n { pattern: /\\[[^\\]]*$/, message: 'Unclosed bracket' },\n ];\n\n lines.forEach((line, index) => {\n commonErrors.forEach(({ pattern, message }) => {\n if (pattern.test(line)) {\n errors.push({\n type: 'typescript',\n severity: 'error',\n message,\n file: fileName,\n line: index + 1,\n });\n }\n });\n });\n }\n\n return errors;\n }\n\n /**\n * TypeScript semantic validation using incremental program\n */\n static async validateTypesSemantic(filePath: string, projectPath: string) {\n const errors: Array<{\n type: 'typescript';\n severity: 'error' | 'warning';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n }> = [];\n\n try {\n // Initialize or reuse TypeScript program\n const program = await this.getOrCreateTSProgram(projectPath);\n if (!program) {\n return errors; // Fallback to no validation if program creation fails\n }\n\n const sourceFile = program.getSourceFile(filePath);\n if (!sourceFile) {\n return errors; // File not in program\n }\n\n const diagnostics = [\n ...program.getSemanticDiagnostics(sourceFile),\n ...program.getSyntacticDiagnostics(sourceFile),\n ];\n\n // Dynamically import TypeScript for diagnostic processing\n const ts = await import('typescript');\n\n for (const diagnostic of diagnostics) {\n if (diagnostic.start !== undefined) {\n const position = sourceFile.getLineAndCharacterOfPosition(diagnostic.start);\n errors.push({\n type: 'typescript',\n severity: diagnostic.category === ts.DiagnosticCategory.Warning ? 'warning' : 'error',\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, '\\n'),\n file: filePath,\n line: position.line + 1,\n column: position.character + 1,\n });\n }\n }\n } catch (error) {\n // Fallback to no semantic validation on error\n console.warn(`TypeScript semantic validation failed for ${filePath}:`, error);\n }\n\n return errors;\n }\n\n /**\n * ESLint validation for a single file\n */\n static async validateESLintSingle(filePath: string, projectPath: string) {\n const errors: Array<{\n type: 'eslint';\n severity: 'error' | 'warning';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> = [];\n\n try {\n const { stdout } = await execFile('npx', ['eslint', filePath, '--format', 'json'], { cwd: projectPath });\n\n if (stdout) {\n const eslintResults = JSON.parse(stdout);\n const eslintErrors = this.parseESLintErrors(eslintResults);\n errors.push(...eslintErrors);\n }\n } catch (error: any) {\n // Try to parse error output\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (errorMessage.includes('\"filePath\"') || errorMessage.includes('messages')) {\n try {\n const eslintResults = JSON.parse(errorMessage);\n const eslintErrors = this.parseESLintErrors(eslintResults);\n errors.push(...eslintErrors);\n } catch {\n // Ignore ESLint errors in hybrid mode for now\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Get or create TypeScript program\n */\n static async getOrCreateTSProgram(projectPath: string): Promise<any | null> {\n // Return cached program if same project\n if (this.tsProgram && this.programProjectPath === projectPath) {\n return this.tsProgram;\n }\n\n try {\n // Dynamically import TypeScript\n const ts = await import('typescript');\n\n const configPath = ts.findConfigFile(projectPath, ts.sys.fileExists, 'tsconfig.json');\n if (!configPath) {\n return null; // No tsconfig found\n }\n\n const configFile = ts.readConfigFile(configPath, ts.sys.readFile);\n if (configFile.error) {\n return null;\n }\n\n const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, projectPath);\n\n if (parsedConfig.errors.length > 0) {\n return null;\n }\n\n // Create regular program\n this.tsProgram = ts.createProgram({\n rootNames: parsedConfig.fileNames,\n options: parsedConfig.options,\n });\n\n this.programProjectPath = projectPath;\n return this.tsProgram;\n } catch (error) {\n console.warn('Failed to create TypeScript program:', error);\n return null;\n }\n }\n\n // Note: Old filterTypeScriptErrors method removed in favor of hybrid validation approach\n\n /**\n * Parse ESLint errors from JSON output\n */\n static parseESLintErrors(eslintResults: any[]): Array<{\n type: 'eslint';\n severity: 'error' | 'warning';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> {\n const errors: Array<{\n type: 'eslint';\n severity: 'error' | 'warning';\n message: string;\n file?: string;\n line?: number;\n column?: number;\n code?: string;\n }> = [];\n\n for (const result of eslintResults) {\n for (const message of result.messages || []) {\n if (message.message) {\n errors.push({\n type: 'eslint',\n severity: message.severity === 1 ? 'warning' : 'error',\n message: message.message,\n file: result.filePath || undefined,\n line: message.line || undefined,\n column: message.column || undefined,\n code: message.ruleId || undefined,\n });\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Make HTTP request to server or external API\n */\n static async makeHttpRequest({\n method,\n url,\n baseUrl,\n headers = {},\n body,\n timeout = 30000,\n }: {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n url: string;\n baseUrl?: string;\n headers?: Record<string, string>;\n body?: any;\n timeout?: number;\n }) {\n try {\n const fullUrl = baseUrl ? `${baseUrl}${url}` : url;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const requestOptions: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: controller.signal,\n };\n\n if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n requestOptions.body = typeof body === 'string' ? body : JSON.stringify(body);\n }\n\n const response = await fetch(fullUrl, requestOptions);\n clearTimeout(timeoutId);\n\n let data: any;\n const contentType = response.headers.get('content-type');\n if (contentType?.includes('application/json')) {\n data = await response.json();\n } else {\n data = await response.text();\n }\n\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n return {\n success: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n data,\n url: fullUrl,\n method,\n };\n } catch (error) {\n return {\n success: false,\n url: baseUrl ? `${baseUrl}${url}` : url,\n method,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Enhanced task management system for complex coding tasks\n */\n static async manageTaskList(context: {\n action: 'create' | 'update' | 'list' | 'complete' | 'remove';\n tasks?: Array<{\n id: string;\n content?: string;\n status: 'pending' | 'in_progress' | 'completed' | 'blocked';\n priority: 'high' | 'medium' | 'low';\n dependencies?: string[];\n notes?: string;\n }>;\n taskId?: string;\n }) {\n // In-memory task storage (could be enhanced with persistent storage)\n if (!AgentBuilderDefaults.taskStorage) {\n AgentBuilderDefaults.taskStorage = new Map();\n }\n\n // Cleanup old sessions to prevent memory leaks\n // Keep only the last 10 sessions\n const sessions = Array.from(AgentBuilderDefaults.taskStorage.keys());\n if (sessions.length > 10) {\n const sessionsToRemove = sessions.slice(0, sessions.length - 10);\n sessionsToRemove.forEach(session => AgentBuilderDefaults.taskStorage.delete(session));\n }\n\n const sessionId = 'current'; // Could be enhanced with proper session management\n const existingTasks = AgentBuilderDefaults.taskStorage.get(sessionId) || [];\n\n try {\n switch (context.action) {\n case 'create':\n if (!context.tasks?.length) {\n return {\n success: false,\n tasks: existingTasks,\n message: 'No tasks provided for creation',\n };\n }\n\n const newTasks = context.tasks.map(task => ({\n ...task,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }));\n\n const allTasks = [...existingTasks, ...newTasks];\n AgentBuilderDefaults.taskStorage.set(sessionId, allTasks);\n\n return {\n success: true,\n tasks: allTasks,\n message: `Created ${newTasks.length} new task(s)`,\n };\n\n case 'update':\n if (!context.tasks?.length) {\n return {\n success: false,\n tasks: existingTasks,\n message: 'No tasks provided for update',\n };\n }\n\n const updatedTasks = existingTasks.map(existing => {\n const update = context.tasks!.find(t => t.id === existing.id);\n return update ? { ...existing, ...update, updatedAt: new Date().toISOString() } : existing;\n });\n\n AgentBuilderDefaults.taskStorage.set(sessionId, updatedTasks);\n\n return {\n success: true,\n tasks: updatedTasks,\n message: 'Tasks updated successfully',\n };\n\n case 'complete':\n if (!context.taskId) {\n return {\n success: false,\n tasks: existingTasks,\n message: 'Task ID required for completion',\n };\n }\n\n const completedTasks = existingTasks.map(task =>\n task.id === context.taskId\n ? { ...task, status: 'completed' as const, updatedAt: new Date().toISOString() }\n : task,\n );\n\n AgentBuilderDefaults.taskStorage.set(sessionId, completedTasks);\n\n return {\n success: true,\n tasks: completedTasks,\n message: `Task ${context.taskId} marked as completed`,\n };\n\n case 'remove':\n if (!context.taskId) {\n return {\n success: false,\n tasks: existingTasks,\n message: 'Task ID required for removal',\n };\n }\n\n const filteredTasks = existingTasks.filter(task => task.id !== context.taskId);\n AgentBuilderDefaults.taskStorage.set(sessionId, filteredTasks);\n\n return {\n success: true,\n tasks: filteredTasks,\n message: `Task ${context.taskId} removed`,\n };\n\n case 'list':\n default:\n return {\n success: true,\n tasks: existingTasks,\n message: `Found ${existingTasks.length} task(s)`,\n };\n }\n } catch (error) {\n return {\n success: false,\n tasks: existingTasks,\n message: `Task management error: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n /**\n * Perform multiple edits across files atomically\n */\n static async performMultiEdit(context: {\n operations: Array<{\n filePath: string;\n edits: Array<{\n oldString: string;\n newString: string;\n replaceAll?: boolean;\n }>;\n }>;\n createBackup?: boolean;\n projectPath?: string;\n }) {\n const { operations, createBackup = false, projectPath = process.cwd() } = context;\n const results: Array<{\n filePath: string;\n editsApplied: number;\n errors: string[];\n backup?: string;\n }> = [];\n\n try {\n for (const operation of operations) {\n const filePath = isAbsolute(operation.filePath) ? operation.filePath : join(projectPath, operation.filePath);\n let editsApplied = 0;\n const errors: string[] = [];\n let backup: string | undefined;\n\n try {\n // Create backup if requested\n if (createBackup) {\n const backupPath = `${filePath}.backup.${Date.now()}`;\n const originalContent = await readFile(filePath, 'utf-8');\n await writeFile(backupPath, originalContent, 'utf-8');\n backup = backupPath;\n }\n\n // Read current file content\n let content = await readFile(filePath, 'utf-8');\n\n // Apply each edit\n for (const edit of operation.edits) {\n const { oldString, newString, replaceAll = false } = edit;\n\n if (replaceAll) {\n const regex = new RegExp(oldString.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g');\n const matches = content.match(regex);\n if (matches) {\n content = content.replace(regex, newString);\n editsApplied += matches.length;\n }\n } else {\n if (content.includes(oldString)) {\n content = content.replace(oldString, newString);\n editsApplied++;\n } else {\n errors.push(`String not found: \"${oldString.substring(0, 50)}${oldString.length > 50 ? '...' : ''}\"`);\n }\n }\n }\n\n // Write updated content back\n await writeFile(filePath, content, 'utf-8');\n } catch (error) {\n errors.push(`File operation error: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n results.push({\n filePath: operation.filePath,\n editsApplied,\n errors,\n backup,\n });\n }\n\n const totalEdits = results.reduce((sum, r) => sum + r.editsApplied, 0);\n const totalErrors = results.reduce((sum, r) => sum + r.errors.length, 0);\n\n return {\n success: totalErrors === 0,\n results,\n message: `Applied ${totalEdits} edits across ${operations.length} files${totalErrors > 0 ? ` with ${totalErrors} errors` : ''}`,\n };\n } catch (error) {\n return {\n success: false,\n results,\n message: `Multi-edit operation failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n /**\n * Replace specific line ranges in a file with new content\n */\n static async replaceLines(context: {\n filePath: string;\n startLine: number;\n endLine: number;\n newContent: string;\n createBackup?: boolean;\n projectPath?: string;\n }) {\n const { filePath, startLine, endLine, newContent, createBackup = false, projectPath = process.cwd() } = context;\n\n try {\n const fullPath = isAbsolute(filePath) ? filePath : join(projectPath, filePath);\n\n // Read current file content\n const content = await readFile(fullPath, 'utf-8');\n const lines = content.split('\\n');\n\n // Validate line numbers\n if (startLine < 1 || endLine < 1) {\n return {\n success: false,\n message: `Line numbers must be 1 or greater. Got startLine: ${startLine}, endLine: ${endLine}`,\n error: 'Invalid line range',\n };\n }\n\n if (startLine > lines.length || endLine > lines.length) {\n return {\n success: false,\n message: `Line range ${startLine}-${endLine} is out of bounds. File has ${lines.length} lines. Remember: lines are 1-indexed, so valid range is 1-${lines.length}.`,\n error: 'Invalid line range',\n };\n }\n\n if (startLine > endLine) {\n return {\n success: false,\n message: `Start line (${startLine}) cannot be greater than end line (${endLine}).`,\n error: 'Invalid line range',\n };\n }\n\n // Create backup if requested\n let backup: string | undefined;\n if (createBackup) {\n const backupPath = `${fullPath}.backup.${Date.now()}`;\n await writeFile(backupPath, content, 'utf-8');\n backup = backupPath;\n }\n\n // Replace the specified line range\n const beforeLines = lines.slice(0, startLine - 1);\n const afterLines = lines.slice(endLine);\n const newLines = newContent ? newContent.split('\\n') : [];\n\n const updatedLines = [...beforeLines, ...newLines, ...afterLines];\n const updatedContent = updatedLines.join('\\n');\n\n // Write updated content back\n await writeFile(fullPath, updatedContent, 'utf-8');\n\n const linesReplaced = endLine - startLine + 1;\n const newLineCount = newLines.length;\n\n return {\n success: true,\n message: `Successfully replaced ${linesReplaced} lines (${startLine}-${endLine}) with ${newLineCount} new lines in ${filePath}`,\n linesReplaced,\n backup,\n };\n } catch (error) {\n return {\n success: false,\n message: `Failed to replace lines: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Show file lines with line numbers for debugging\n */\n static async showFileLines(context: {\n filePath: string;\n startLine?: number;\n endLine?: number;\n context?: number;\n projectPath?: string;\n }) {\n const { filePath, startLine, endLine, context: contextLines = 2, projectPath = process.cwd() } = context;\n\n try {\n const fullPath = isAbsolute(filePath) ? filePath : join(projectPath, filePath);\n\n // Read current file content\n const content = await readFile(fullPath, 'utf-8');\n const lines = content.split('\\n');\n\n let targetStart = startLine;\n let targetEnd = endLine;\n\n // If no range specified, show all lines\n if (!targetStart) {\n targetStart = 1;\n targetEnd = lines.length;\n } else if (!targetEnd) {\n targetEnd = targetStart;\n }\n\n // Calculate actual display range with context\n const displayStart = Math.max(1, targetStart - contextLines);\n const displayEnd = Math.min(lines.length, targetEnd + contextLines);\n\n const result = [];\n for (let i = displayStart; i <= displayEnd; i++) {\n const lineIndex = i - 1; // Convert to 0-based for array access\n const isTarget = i >= targetStart && i <= targetEnd;\n\n result.push({\n lineNumber: i,\n content: lineIndex < lines.length ? (lines[lineIndex] ?? '') : '',\n isTarget,\n });\n }\n\n return {\n success: true,\n lines: result,\n totalLines: lines.length,\n message: `Showing lines ${displayStart}-${displayEnd} of ${lines.length} total lines in ${filePath}`,\n };\n } catch (error) {\n return {\n success: false,\n lines: [],\n totalLines: 0,\n message: `Failed to read file: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Signal task completion\n */\n static async signalCompletion(context: {\n summary: string;\n changes: Array<{\n type: 'file_created' | 'file_modified' | 'file_deleted' | 'command_executed' | 'dependency_added';\n description: string;\n path?: string;\n }>;\n validation: {\n testsRun?: boolean;\n buildsSuccessfully?: boolean;\n manualTestingRequired?: boolean;\n };\n nextSteps?: string[];\n }) {\n const completionId = `completion_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\n // Calculate confidence based on validation status\n let confidence = 70; // Base confidence\n if (context.validation.testsRun) confidence += 15;\n if (context.validation.buildsSuccessfully) confidence += 15;\n if (context.validation.manualTestingRequired) confidence -= 10;\n\n // Determine status\n let status: 'completed' | 'needs_review' | 'needs_testing';\n if (context.validation.testsRun && context.validation.buildsSuccessfully) {\n status = 'completed';\n } else if (context.validation.manualTestingRequired) {\n status = 'needs_testing';\n } else {\n status = 'needs_review';\n }\n\n return {\n completionId,\n status,\n summary: context.summary,\n confidence: Math.min(100, Math.max(0, confidence)),\n };\n }\n\n /**\n * Perform intelligent search with context\n */\n static async performSmartSearch(\n context: {\n query: string;\n type?: 'text' | 'regex' | 'fuzzy' | 'semantic';\n scope?: {\n paths?: string[];\n fileTypes?: string[];\n excludePaths?: string[];\n maxResults?: number;\n };\n context?: {\n beforeLines?: number;\n afterLines?: number;\n includeDefinitions?: boolean;\n };\n },\n projectPath: string,\n ) {\n try {\n const { query, type = 'text', scope = {}, context: searchContext = {} } = context;\n\n const { paths = ['.'], fileTypes = [], excludePaths = [], maxResults = 50 } = scope;\n\n const { beforeLines = 2, afterLines = 2 } = searchContext;\n\n // Build command and arguments array safely\n const rgArgs: string[] = [];\n\n // Add context lines\n if (beforeLines > 0) {\n rgArgs.push('-B', beforeLines.toString());\n }\n if (afterLines > 0) {\n rgArgs.push('-A', afterLines.toString());\n }\n\n // Add line numbers\n rgArgs.push('-n');\n\n // Handle search type\n if (type === 'regex') {\n rgArgs.push('-e');\n } else if (type === 'fuzzy') {\n rgArgs.push('--fixed-strings');\n }\n\n // Add file type filters\n if (fileTypes.length > 0) {\n fileTypes.forEach(ft => {\n rgArgs.push('--type-add', `custom:*.${ft}`, '-t', 'custom');\n });\n }\n\n // Add exclude patterns\n excludePaths.forEach(path => {\n rgArgs.push('--glob', `!${path}`);\n });\n\n // Add max count\n rgArgs.push('-m', maxResults.toString());\n\n // Add the search query and paths\n rgArgs.push(query);\n rgArgs.push(...paths);\n\n // Execute safely using execFile\n const { stdout } = await execFile('rg', rgArgs, {\n cwd: projectPath,\n });\n const lines = stdout.split('\\n').filter((line: string) => line.trim());\n\n const matches: Array<{\n file: string;\n line: number;\n column?: number;\n match: string;\n context: { before: string[]; after: string[] };\n relevance?: number;\n }> = [];\n\n let currentMatch: any = null;\n\n lines.forEach((line: string) => {\n if (line.includes(':') && !line.startsWith('-')) {\n // This is a match line\n const parts = line.split(':');\n if (parts.length >= 3) {\n // Save previous match if exists\n if (currentMatch) {\n matches.push(currentMatch);\n }\n\n currentMatch = {\n file: parts[0] || '',\n line: parseInt(parts[1] || '0'),\n match: parts.slice(2).join(':'),\n context: { before: [], after: [] },\n relevance: type === 'fuzzy' ? Math.random() * 100 : undefined,\n };\n }\n } else if (line.startsWith('-') && currentMatch) {\n // This is a context line\n const contextLine = line.substring(1);\n if (currentMatch.context.before.length < beforeLines) {\n currentMatch.context.before.push(contextLine);\n } else {\n currentMatch.context.after.push(contextLine);\n }\n }\n });\n\n // Add the last match\n if (currentMatch) {\n matches.push(currentMatch);\n }\n\n // Count files searched (approximate)\n const filesSearched = new Set(matches.map(m => m.file)).size;\n\n return {\n success: true,\n matches: matches.slice(0, maxResults),\n summary: {\n totalMatches: matches.length,\n filesSearched,\n patterns: [query],\n },\n };\n } catch {\n return {\n success: false,\n matches: [],\n summary: {\n totalMatches: 0,\n filesSearched: 0,\n patterns: [context.query],\n },\n };\n }\n }\n\n // Static storage properties\n private static taskStorage: Map<string, any[]>;\n private static pendingQuestions: Map<string, any>;\n\n /**\n * Read file contents with optional line range\n */\n static async readFile(context: {\n filePath: string;\n startLine?: number;\n endLine?: number;\n encoding?: string;\n projectPath?: string;\n }) {\n try {\n const { filePath, startLine, endLine, encoding = 'utf-8', projectPath } = context;\n\n // Resolve path relative to project directory if it's not absolute\n const resolvedPath = isAbsolute(filePath) ? filePath : resolve(projectPath || process.cwd(), filePath);\n\n const stats = await stat(resolvedPath);\n const content = await readFile(resolvedPath, { encoding: encoding as BufferEncoding });\n const lines = content.split('\\n');\n\n let resultContent = content;\n let resultLines = lines;\n\n if (startLine !== undefined || endLine !== undefined) {\n const start = Math.max(0, (startLine || 1) - 1);\n const end = endLine !== undefined ? Math.min(lines.length, endLine) : lines.length;\n resultLines = lines.slice(start, end);\n resultContent = resultLines.join('\\n');\n }\n\n return {\n success: true,\n content: resultContent,\n lines: resultLines,\n metadata: {\n size: stats.size,\n totalLines: lines.length,\n encoding,\n lastModified: stats.mtime.toISOString(),\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Write content to file with directory creation and backup options\n */\n static async writeFile(context: {\n filePath: string;\n content: string;\n createDirs?: boolean;\n encoding?: string;\n projectPath?: string;\n }) {\n try {\n const { filePath, content, createDirs = true, encoding = 'utf-8', projectPath } = context;\n\n // Resolve path relative to project directory if it's not absolute\n const resolvedPath = isAbsolute(filePath) ? filePath : resolve(projectPath || process.cwd(), filePath);\n const dir = dirname(resolvedPath);\n\n // Create directories if needed\n if (createDirs) {\n await mkdir(dir, { recursive: true });\n }\n\n // Write the file\n await writeFile(resolvedPath, content, { encoding: encoding as BufferEncoding });\n\n return {\n success: true,\n filePath: resolvedPath,\n bytesWritten: Buffer.byteLength(content, encoding as BufferEncoding),\n message: `Successfully wrote ${Buffer.byteLength(content, encoding as BufferEncoding)} bytes to ${filePath}`,\n };\n } catch (error) {\n return {\n success: false,\n filePath: context.filePath,\n message: `Failed to write file: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * List directory contents with filtering and metadata\n */\n static async listDirectory(context: {\n path: string;\n recursive?: boolean;\n includeHidden?: boolean;\n pattern?: string;\n maxDepth?: number;\n includeMetadata?: boolean;\n projectPath?: string;\n }) {\n try {\n const {\n path,\n recursive = false,\n includeHidden = false,\n pattern,\n maxDepth = 10,\n includeMetadata = true,\n projectPath,\n } = context;\n\n const gitignorePath = join(projectPath || process.cwd(), '.gitignore');\n let gitignoreFilter: ignore.Ignore | undefined;\n\n try {\n const gitignoreContent = await readFile(gitignorePath, 'utf-8');\n gitignoreFilter = ignore().add(gitignoreContent);\n } catch (err: any) {\n if (err.code !== 'ENOENT') {\n console.error(`Error reading .gitignore file:`, err);\n }\n // If .gitignore doesn't exist, gitignoreFilter remains undefined, meaning no files are ignored by gitignore.\n }\n\n // Resolve path relative to project directory if it's not absolute\n const resolvedPath = isAbsolute(path) ? path : resolve(projectPath || process.cwd(), path);\n\n const items: Array<{\n name: string;\n path: string;\n type: 'file' | 'directory' | 'symlink';\n size?: number;\n lastModified?: string;\n permissions?: string;\n }> = [];\n\n async function processDirectory(dirPath: string, currentDepth: number = 0) {\n const relativeToProject = relative(projectPath || process.cwd(), dirPath);\n if (gitignoreFilter?.ignores(relativeToProject)) return;\n if (currentDepth > maxDepth) return;\n\n const entries = await readdir(dirPath);\n\n for (const entry of entries) {\n const entryPath = join(dirPath, entry);\n const relativeEntryPath = relative(projectPath || process.cwd(), entryPath);\n if (gitignoreFilter?.ignores(relativeEntryPath)) continue;\n if (!includeHidden && entry.startsWith('.')) continue;\n\n const fullPath = entryPath;\n const relativePath = relative(resolvedPath, fullPath);\n\n if (pattern) {\n // Simple pattern matching\n const regexPattern = pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.');\n if (!new RegExp(regexPattern).test(entry)) continue;\n }\n\n let stats;\n let type: 'file' | 'directory' | 'symlink';\n\n try {\n stats = await stat(fullPath);\n if (stats.isDirectory()) {\n type = 'directory';\n } else if (stats.isSymbolicLink()) {\n type = 'symlink';\n } else {\n type = 'file';\n }\n } catch {\n continue; // Skip entries we can't stat\n }\n\n const item: any = {\n name: entry,\n path: relativePath || entry,\n type,\n };\n\n if (includeMetadata) {\n item.size = stats.size;\n item.lastModified = stats.mtime.toISOString();\n item.permissions = `0${(stats.mode & parseInt('777', 8)).toString(8)}`;\n }\n\n items.push(item);\n\n // Recurse into directories if requested\n if (recursive && type === 'directory') {\n await processDirectory(fullPath, currentDepth + 1);\n }\n }\n }\n\n await processDirectory(resolvedPath);\n\n return {\n success: true,\n items,\n totalItems: items.length,\n path: resolvedPath,\n message: `Listed ${items.length} items in ${resolvedPath}`,\n };\n } catch (error) {\n return {\n success: false,\n items: [],\n totalItems: 0,\n path: context.path,\n message: `Failed to list directory: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Execute shell commands with proper error handling\n */\n static async executeCommand(context: {\n command: string;\n workingDirectory?: string;\n timeout?: number;\n captureOutput?: boolean;\n shell?: string;\n env?: Record<string, string>;\n }) {\n const startTime = Date.now();\n try {\n const { command, workingDirectory, timeout = 30000, captureOutput = true, shell, env } = context;\n\n const execOptions: any = {\n timeout,\n env: { ...process.env, ...env },\n };\n\n if (workingDirectory) {\n execOptions.cwd = workingDirectory;\n }\n\n if (shell) {\n execOptions.shell = shell;\n }\n\n const { stdout, stderr } = await exec(command, execOptions);\n const executionTime = Date.now() - startTime;\n\n return {\n success: true,\n exitCode: 0,\n stdout: captureOutput ? String(stdout) : undefined,\n stderr: captureOutput ? String(stderr) : undefined,\n command,\n workingDirectory,\n executionTime,\n };\n } catch (error: any) {\n const executionTime = Date.now() - startTime;\n\n return {\n success: false,\n exitCode: error.code || 1,\n stdout: String(error.stdout || ''),\n stderr: String(error.stderr || ''),\n command: context.command,\n workingDirectory: context.workingDirectory,\n executionTime,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Web search using a simple search approach\n */\n static async webSearch(context: {\n query: string;\n maxResults?: number;\n region?: string;\n language?: string;\n includeImages?: boolean;\n dateRange?: 'day' | 'week' | 'month' | 'year' | 'all';\n }) {\n try {\n const {\n query,\n maxResults = 10,\n // region = 'us',\n // language = 'en',\n // includeImages = false,\n // dateRange = 'all',\n } = context;\n\n const startTime = Date.now();\n\n // For now, implement a basic search using DuckDuckGo's instant answer API\n // In a real implementation, you'd want to use a proper search API\n const searchUrl = `https://api.duckduckgo.com/?q=${encodeURIComponent(query)}&format=json&no_redirect=1&skip_disambig=1`;\n\n const response = await fetch(searchUrl);\n const data: any = await response.json();\n\n const results: Array<{\n title: string;\n url: string;\n snippet: string;\n domain: string;\n publishDate?: string;\n relevanceScore?: number;\n }> = [];\n\n // Parse DuckDuckGo results\n if (data.RelatedTopics && Array.isArray(data.RelatedTopics)) {\n for (const topic of data.RelatedTopics.slice(0, maxResults)) {\n if (topic.FirstURL && topic.Text) {\n const url = new URL(topic.FirstURL);\n results.push({\n title: topic.Text.split(' - ')[0] || topic.Text.substring(0, 60),\n url: topic.FirstURL,\n snippet: topic.Text,\n domain: url.hostname,\n relevanceScore: Math.random() * 100, // Placeholder scoring\n });\n }\n }\n }\n\n // Add abstract as first result if available\n if (data.Abstract && data.AbstractURL) {\n const url = new URL(data.AbstractURL);\n results.unshift({\n title: data.Heading || 'Main Result',\n url: data.AbstractURL,\n snippet: data.Abstract,\n domain: url.hostname,\n relevanceScore: 100,\n });\n }\n\n const searchTime = Date.now() - startTime;\n\n return {\n success: true,\n query,\n results: results.slice(0, maxResults),\n totalResults: results.length,\n searchTime,\n suggestions:\n data.RelatedTopics?.slice(maxResults, maxResults + 3)\n ?.map((t: any) => t.Text?.split(' - ')[0] || t.Text?.substring(0, 30))\n .filter(Boolean) || [],\n };\n } catch (error) {\n return {\n success: false,\n query: context.query,\n results: [],\n totalResults: 0,\n searchTime: 0,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n}\n","import { Agent } from '@mastra/core/agent';\nimport type { MastraDBMessage, MastraLanguageModel, MessageList } from '@mastra/core/agent';\nimport type { Processor } from '@mastra/core/processors';\n\n/**\n * Summarizes tool calls and caches results to avoid re-summarizing identical calls\n */\nexport class ToolSummaryProcessor implements Processor {\n readonly id = 'tool-summary-processor';\n readonly name = 'ToolSummaryProcessor';\n\n private summaryAgent: Agent;\n private summaryCache: Map<string, string> = new Map();\n\n constructor({ summaryModel }: { summaryModel: MastraLanguageModel }) {\n this.summaryAgent = new Agent({\n id: 'tool-summary-agent',\n name: 'Tool Summary Agent',\n description: 'A summary agent that summarizes tool calls and results',\n instructions: 'You are a summary agent that summarizes tool calls and results',\n model: summaryModel,\n });\n }\n\n /**\n * Creates a cache key from tool call arguments\n */\n public createCacheKey(toolCall: any): string {\n if (!toolCall) return 'unknown';\n\n // Create a deterministic key from tool name and arguments\n const toolName = toolCall.toolName || 'unknown';\n const args = toolCall.args || {};\n\n // Sort keys for consistent hashing\n const sortedArgs = Object.keys(args)\n .sort()\n .reduce((result: Record<string, any>, key) => {\n result[key] = args[key];\n return result;\n }, {});\n\n return `${toolName}:${JSON.stringify(sortedArgs)}`;\n }\n\n /**\n * Clears the summary cache\n */\n public clearCache(): void {\n this.summaryCache.clear();\n }\n\n /**\n * Gets cache statistics\n */\n public getCacheStats(): { size: number; keys: string[] } {\n return {\n size: this.summaryCache.size,\n keys: Array.from(this.summaryCache.keys()),\n };\n }\n\n async processInput({\n messages,\n messageList: _messageList,\n }: {\n messages: MastraDBMessage[];\n messageList: MessageList;\n abort: (reason?: string) => never;\n }): Promise<MastraDBMessage[]> {\n // Collect all tool calls that need summarization\n const summaryTasks: Array<{\n message: MastraDBMessage;\n partIndex: number;\n promise: Promise<any>;\n cacheKey: string;\n }> = [];\n\n // First pass: collect all tool results that need summarization\n for (const message of messages) {\n if (message.content.format === 2 && message.content.parts) {\n for (let partIndex = 0; partIndex < message.content.parts.length; partIndex++) {\n const part = message.content.parts[partIndex];\n\n // Check if this is a tool invocation with a result\n if (part && part.type === 'tool-invocation' && part.toolInvocation?.state === 'result') {\n const cacheKey = this.createCacheKey(part.toolInvocation);\n const cachedSummary = this.summaryCache.get(cacheKey);\n\n if (cachedSummary) {\n // Use cached summary - update the tool invocation result\n message.content.parts[partIndex] = {\n type: 'tool-invocation',\n toolInvocation: {\n state: 'result',\n step: part.toolInvocation.step,\n toolCallId: part.toolInvocation.toolCallId,\n toolName: part.toolInvocation.toolName,\n args: part.toolInvocation.args,\n result: `Tool call summary: ${cachedSummary}`,\n },\n };\n } else {\n // Create a promise for this summary (but don't await yet)\n const summaryPromise = this.summaryAgent.generate(\n `Summarize the following tool call: ${JSON.stringify(part.toolInvocation)}`,\n );\n\n summaryTasks.push({\n message,\n partIndex,\n promise: summaryPromise,\n cacheKey,\n });\n }\n }\n }\n }\n }\n\n // Execute all non-cached summaries in parallel\n if (summaryTasks.length > 0) {\n const summaryResults = await Promise.allSettled(summaryTasks.map(task => task.promise));\n\n // Apply the results back to the content and cache them\n summaryTasks.forEach((task, index) => {\n const result = summaryResults[index];\n if (!result) return;\n\n if (result.status === 'fulfilled') {\n const summaryResult = result.value;\n const summaryText = summaryResult.text;\n\n // Cache the summary for future use\n this.summaryCache.set(task.cacheKey, summaryText);\n\n // Apply to message content\n if (task.message.content.format === 2 && task.message.content.parts) {\n const part = task.message.content.parts[task.partIndex];\n if (part && part.type === 'tool-invocation' && part.toolInvocation?.state === 'result') {\n task.message.content.parts[task.partIndex] = {\n type: 'tool-invocation',\n toolInvocation: {\n state: 'result',\n step: part.toolInvocation.step,\n toolCallId: part.toolInvocation.toolCallId,\n toolName: part.toolInvocation.toolName,\n args: part.toolInvocation.args,\n result: `Tool call summary: ${summaryText}`,\n },\n };\n }\n }\n } else if (result.status === 'rejected') {\n // Handle failed summary - use fallback or log error\n console.warn(`Failed to generate summary for tool call:`, result.reason);\n }\n });\n }\n\n return messages;\n }\n}\n","import { Agent } from '@mastra/core/agent';\nimport type {\n AiMessageType,\n AgentGenerateOptions,\n AgentStreamOptions,\n AgentExecutionOptions,\n} from '@mastra/core/agent';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { CoreMessage } from '@mastra/core/llm';\nimport type { MastraModelOutput, OutputSchema } from '@mastra/core/stream';\nimport { Memory } from '@mastra/memory';\nimport { AgentBuilderDefaults } from '../defaults';\nimport { ToolSummaryProcessor } from '../processors/tool-summary';\nimport type { AgentBuilderConfig, GenerateAgentOptions } from '../types';\n\n// =============================================================================\n// Template Merge Workflow Implementation\n// =============================================================================\n//\n// This workflow implements a comprehensive template merging system that:\n// 1. Clones template repositories at specific refs (tags/commits)\n// 2. Discovers units (agents, workflows, MCP servers/tools) in templates\n// 3. Topologically orders units based on dependencies\n// 4. Analyzes conflicts and creates safety classifications\n// 5. Applies changes with git branching and checkpoints per unit\n//\n// The workflow follows the \"auto-decide vs ask\" principles:\n// - Auto: adding new files, missing deps, appending arrays, new scripts with template:slug:* namespace\n// - Prompt: overwriting files, major upgrades, renaming conflicts, new ports, postInstall commands\n// - Block: removing files, downgrading deps, changing TS target/module, modifying CI/CD secrets\n//\n// Usage with Mastra templates (see https://mastra.ai/api/templates.json):\n// const run = await agentBuilderTemplateWorkflow.createRun();\n// const result = await run.start({\n// inputData: {\n// repo: 'https://github.com/mastra-ai/template-pdf-questions',\n// ref: 'main', // optional\n// targetPath: './my-project', // optional, defaults to cwd\n// }\n// });\n// // The workflow will automatically analyze and merge the template structure\n//\n// =============================================================================\n\nexport class AgentBuilder extends Agent {\n private builderConfig: AgentBuilderConfig;\n\n /**\n * Constructor for AgentBuilder\n */\n constructor(config: AgentBuilderConfig) {\n const additionalInstructions = config.instructions ? `## Priority Instructions \\n\\n${config.instructions}` : '';\n const combinedInstructions = additionalInstructions + AgentBuilderDefaults.DEFAULT_INSTRUCTIONS(config.projectPath);\n\n const agentConfig = {\n id: 'agent-builder',\n name: 'agent-builder',\n description:\n 'An AI agent specialized in generating Mastra agents, tools, and workflows from natural language requirements.',\n instructions: combinedInstructions,\n model: config.model,\n tools: async () => {\n return {\n ...(await AgentBuilderDefaults.listToolsForMode(config.projectPath, config.mode)),\n ...(config.tools || {}),\n };\n },\n memory: new Memory({\n options: AgentBuilderDefaults.DEFAULT_MEMORY_CONFIG,\n }),\n inputProcessors: [\n // use the write to disk processor to debug the agent's context\n // new WriteToDiskProcessor({ prefix: 'before-filter' }),\n new ToolSummaryProcessor({ summaryModel: config.summaryModel || config.model }),\n // new WriteToDiskProcessor({ prefix: 'after-filter' }),\n ],\n };\n\n super(agentConfig);\n this.builderConfig = config;\n }\n\n /**\n * Enhanced generate method with AgentBuilder-specific configuration\n * Overrides the base Agent generate method to provide additional project context\n */\n generateLegacy: Agent['generateLegacy'] = async (\n messages: string | string[] | CoreMessage[] | AiMessageType[],\n generateOptions: (GenerateAgentOptions & AgentGenerateOptions<any, any>) | undefined = {},\n ): Promise<any> => {\n const { maxSteps, ...baseOptions } = generateOptions;\n\n const originalInstructions = await this.getInstructions({ requestContext: generateOptions?.requestContext });\n const additionalInstructions = baseOptions.instructions;\n\n let enhancedInstructions = originalInstructions as string;\n if (additionalInstructions) {\n enhancedInstructions = `${originalInstructions}\\n\\n${additionalInstructions}`;\n }\n\n const enhancedContext = [...(baseOptions.context || [])];\n\n const enhancedOptions = {\n ...baseOptions,\n maxSteps: maxSteps || 100, // Higher default for code generation\n temperature: 0.3, // Lower temperature for more consistent code generation\n instructions: enhancedInstructions,\n context: enhancedContext,\n } satisfies AgentGenerateOptions<any, any>;\n\n this.logger.debug(`[AgentBuilder:${this.name}] Starting generation with enhanced context`, {\n projectPath: this.builderConfig.projectPath,\n });\n\n return super.generateLegacy(messages, enhancedOptions);\n };\n\n /**\n * Enhanced stream method with AgentBuilder-specific configuration\n * Overrides the base Agent stream method to provide additional project context\n */\n streamLegacy: Agent['streamLegacy'] = async (\n messages: string | string[] | CoreMessage[] | AiMessageType[],\n streamOptions: (GenerateAgentOptions & AgentStreamOptions<any, any>) | undefined = {},\n ): Promise<any> => {\n const { maxSteps, ...baseOptions } = streamOptions;\n\n const originalInstructions = await this.getInstructions({ requestContext: streamOptions?.requestContext });\n const additionalInstructions = baseOptions.instructions;\n\n let enhancedInstructions = originalInstructions as string;\n if (additionalInstructions) {\n enhancedInstructions = `${originalInstructions}\\n\\n${additionalInstructions}`;\n }\n const enhancedContext = [...(baseOptions.context || [])];\n\n const enhancedOptions = {\n ...baseOptions,\n maxSteps: maxSteps || 100, // Higher default for code generation\n temperature: 0.3, // Lower temperature for more consistent code generation\n instructions: enhancedInstructions,\n context: enhancedContext,\n };\n\n this.logger.debug(`[AgentBuilder:${this.name}] Starting streaming with enhanced context`, {\n projectPath: this.builderConfig.projectPath,\n });\n\n return super.streamLegacy(messages, enhancedOptions);\n };\n\n /**\n * Enhanced stream method with AgentBuilder-specific configuration\n * Overrides the base Agent stream method to provide additional project context\n */\n async stream<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n streamOptions?: AgentExecutionOptions<OUTPUT>,\n ): Promise<MastraModelOutput<OUTPUT>> {\n const { ...baseOptions } = streamOptions || {};\n\n const originalInstructions = await this.getInstructions({ requestContext: streamOptions?.requestContext });\n const additionalInstructions = baseOptions.instructions;\n\n let enhancedInstructions = originalInstructions as string;\n if (additionalInstructions) {\n enhancedInstructions = `${originalInstructions}\\n\\n${additionalInstructions}`;\n }\n const enhancedContext = [...(baseOptions.context || [])];\n\n const enhancedOptions = {\n ...baseOptions,\n temperature: 0.3, // Lower temperature for more consistent code generation\n maxSteps: baseOptions?.maxSteps || 100,\n instructions: enhancedInstructions,\n context: enhancedContext,\n };\n\n this.logger.debug(`[AgentBuilder:${this.name}] Starting streaming with enhanced context`, {\n projectPath: this.builderConfig.projectPath,\n });\n\n return super.stream(messages, enhancedOptions);\n }\n\n async generate<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n options?: AgentExecutionOptions<OUTPUT>,\n ): Promise<Awaited<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>>> {\n const { ...baseOptions } = options || {};\n\n const originalInstructions = await this.getInstructions({ requestContext: options?.requestContext });\n const additionalInstructions = baseOptions.instructions;\n\n let enhancedInstructions = originalInstructions as string;\n if (additionalInstructions) {\n enhancedInstructions = `${originalInstructions}\\n\\n${additionalInstructions}`;\n }\n const enhancedContext = [...(baseOptions.context || [])];\n\n const enhancedOptions = {\n ...baseOptions,\n temperature: 0.3, // Lower temperature for more consistent code generation\n maxSteps: baseOptions?.maxSteps || 100,\n instructions: enhancedInstructions,\n context: enhancedContext,\n };\n\n this.logger.debug(`[AgentBuilder:${this.name}] Starting streaming with enhanced context`, {\n projectPath: this.builderConfig.projectPath,\n });\n\n return super.generate(messages, enhancedOptions);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { mkdtemp, copyFile, readFile, mkdir, readdir, rm, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join, dirname, resolve, extname, basename } from 'node:path';\nimport { openai } from '@ai-sdk/openai';\nimport { Agent, tryGenerateWithJsonFallback, tryStreamWithJsonFallback } from '@mastra/core/agent';\nimport { createTool } from '@mastra/core/tools';\nimport { createWorkflow, createStep } from '@mastra/core/workflows';\nimport { z } from 'zod';\nimport { AgentBuilder } from '../..';\nimport { AgentBuilderDefaults } from '../../defaults';\nimport type { TemplateUnit, UnitKind } from '../../types';\nimport {\n ApplyResultSchema,\n AgentBuilderInputSchema,\n CloneTemplateResultSchema,\n PackageAnalysisSchema,\n DiscoveryResultSchema,\n OrderedUnitsSchema,\n PackageMergeInputSchema,\n PackageMergeResultSchema,\n InstallInputSchema,\n InstallResultSchema,\n FileCopyInputSchema,\n FileCopyResultSchema,\n IntelligentMergeInputSchema,\n IntelligentMergeResultSchema,\n ValidationFixInputSchema,\n ValidationFixResultSchema,\n PrepareBranchInputSchema,\n PrepareBranchResultSchema,\n} from '../../types';\nimport {\n getMastraTemplate,\n kindWeight,\n spawnSWPM,\n logGitState,\n backupAndReplaceFile,\n renameAndCopyFile,\n gitCheckoutBranch,\n gitClone,\n gitCheckoutRef,\n gitRevParse,\n gitAddAndCommit,\n resolveTargetPath,\n mergeGitignoreFiles,\n mergeEnvFiles,\n resolveModel,\n} from '../../utils';\n\n// Step 1: Clone template to temp directory\nconst cloneTemplateStep = createStep({\n id: 'clone-template',\n description: 'Clone the template repository to a temporary directory at the specified ref',\n inputSchema: AgentBuilderInputSchema,\n outputSchema: CloneTemplateResultSchema,\n execute: async ({ inputData }) => {\n const { repo, ref = 'main', slug, targetPath } = inputData;\n\n if (!repo) {\n throw new Error('Repository URL or path is required');\n }\n\n // Extract slug from repo URL if not provided\n const inferredSlug =\n slug ||\n repo\n .split('/')\n .pop()\n ?.replace(/\\.git$/, '') ||\n 'template';\n\n // Create temporary directory\n const tempDir = await mkdtemp(join(tmpdir(), 'mastra-template-'));\n\n try {\n // Clone repository\n await gitClone(repo, tempDir);\n\n // Checkout specific ref if provided\n if (ref !== 'main' && ref !== 'master') {\n await gitCheckoutRef(tempDir, ref);\n }\n\n // Get commit SHA\n const commitSha = await gitRevParse(tempDir, 'HEAD');\n\n return {\n templateDir: tempDir,\n commitSha: commitSha.trim(),\n slug: inferredSlug,\n success: true,\n targetPath,\n };\n } catch (error) {\n // Cleanup on error\n try {\n await rm(tempDir, { recursive: true, force: true });\n } catch {}\n\n return {\n templateDir: '',\n commitSha: '',\n slug: slug || 'unknown',\n success: false,\n error: `Failed to clone template: ${error instanceof Error ? error.message : String(error)}`,\n targetPath,\n };\n }\n },\n});\n\n// Step 2: Analyze template package.json for dependencies\nconst analyzePackageStep = createStep({\n id: 'analyze-package',\n description: 'Analyze the template package.json to extract dependency information',\n inputSchema: CloneTemplateResultSchema,\n outputSchema: PackageAnalysisSchema,\n execute: async ({ inputData }) => {\n console.info('Analyzing template package.json...');\n const { templateDir } = inputData;\n const packageJsonPath = join(templateDir, 'package.json');\n\n try {\n const packageJsonContent = await readFile(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(packageJsonContent);\n\n console.info('Template package.json:', JSON.stringify(packageJson, null, 2));\n\n return {\n dependencies: packageJson.dependencies || {},\n devDependencies: packageJson.devDependencies || {},\n peerDependencies: packageJson.peerDependencies || {},\n scripts: packageJson.scripts || {},\n name: packageJson.name || '',\n version: packageJson.version || '',\n description: packageJson.description || '',\n success: true,\n };\n } catch (error) {\n console.warn(`Failed to read template package.json: ${error instanceof Error ? error.message : String(error)}`);\n return {\n dependencies: {},\n devDependencies: {},\n peerDependencies: {},\n scripts: {},\n name: '',\n version: '',\n description: '',\n success: true, // This is a graceful fallback, not a failure\n };\n }\n },\n});\n\n// Step 3: Discover template units by scanning the templates directory\nconst discoverUnitsStep = createStep({\n id: 'discover-units',\n description: 'Discover template units by analyzing the templates directory structure',\n inputSchema: CloneTemplateResultSchema,\n outputSchema: DiscoveryResultSchema,\n execute: async ({ inputData, requestContext }) => {\n const { templateDir } = inputData;\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n const tools = await AgentBuilderDefaults.DEFAULT_TOOLS(templateDir);\n\n console.info('targetPath', targetPath);\n\n const model = await resolveModel({ requestContext, projectPath: targetPath, defaultModel: openai('gpt-4.1') });\n\n try {\n const agent = new Agent({\n id: 'mastra-project-discoverer',\n model,\n instructions: `You are an expert at analyzing Mastra projects.\n\nYour task is to scan the provided directory and identify all available units (agents, workflows, tools, MCP servers, networks).\n\nMastra Project Structure Analysis:\n- Each Mastra project has a structure like: ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.agent}, ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.workflow}, ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.tool}, ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE['mcp-server']}, ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.network}\n- Analyze TypeScript files in each category directory to identify exported units\n\nCRITICAL: YOU MUST USE YOUR TOOLS (readFile, listDirectory) TO DISCOVER THE UNITS IN THE TEMPLATE DIRECTORY.\n\nIMPORTANT - Agent Discovery Rules:\n1. **Multiple Agent Files**: Some templates have separate files for each agent (e.g., evaluationAgent.ts, researchAgent.ts)\n2. **Single File Multiple Agents**: Some files may export multiple agents (look for multiple 'export const' or 'export default' statements)\n3. **Agent Identification**: Look for exported variables that are instances of 'new Agent()' or similar patterns\n4. **Naming Convention**: Agent names should be extracted from the export name (e.g., 'weatherAgent', 'evaluationAgent')\n\nFor each Mastra project directory you analyze:\n1. Scan all TypeScript files in ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.agent} and identify ALL exported agents\n2. Scan all TypeScript files in ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.workflow} and identify ALL exported workflows\n3. Scan all TypeScript files in ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.tool} and identify ALL exported tools\n4. Scan all TypeScript files in ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE['mcp-server']} and identify ALL exported MCP servers\n5. Scan all TypeScript files in ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.network} and identify ALL exported networks\n6. Scan for any OTHER files in src/mastra that are NOT in the above default folders (e.g., lib/, utils/, types/, etc.) and identify them as 'other' files\n\nIMPORTANT - Naming Consistency Rules:\n- For ALL unit types (including 'other'), the 'name' field should be the filename WITHOUT extension\n- For structured units (agents, workflows, tools, etc.), prefer the actual export name if clearly identifiable\n- use the base filename without extension for the id (e.g., 'util.ts' β name: 'util')\n- use the relative path from the template root for the file (e.g., 'src/mastra/lib/util.ts' β file: 'src/mastra/lib/util.ts')\n\nReturn the actual exported names of the units, as well as the file names.`,\n name: 'Mastra Project Discoverer',\n tools: {\n readFile: tools.readFile,\n listDirectory: tools.listDirectory,\n },\n });\n\n const isV2 = model.specificationVersion === 'v2';\n\n const prompt = `Analyze the Mastra project directory structure at \"${templateDir}\".\n\n List directory contents using listDirectory tool, and then analyze each file with readFile tool.\n IMPORTANT:\n - Look inside the actual file content to find export statements like 'export const agentName = new Agent(...)'\n - A single file may contain multiple exports\n - Return the actual exported variable names, as well as the file names\n - If a directory doesn't exist or has no files, return an empty array\n\n Return the analysis in the exact format specified in the output schema.`;\n\n const output = z.object({\n agents: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n workflows: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n tools: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n mcp: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n networks: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n other: z.array(z.object({ name: z.string(), file: z.string() })).optional(),\n });\n\n const result = isV2\n ? await tryGenerateWithJsonFallback(agent, prompt, {\n structuredOutput: {\n schema: output,\n },\n maxSteps: 100,\n })\n : await agent.generateLegacy(prompt, {\n experimental_output: output,\n maxSteps: 100,\n });\n\n const template = result.object ?? {};\n\n const units: TemplateUnit[] = [];\n\n // Add agents\n template.agents?.forEach((agentId: { name: string; file: string }) => {\n units.push({ kind: 'agent', id: agentId.name, file: agentId.file });\n });\n\n // Add workflows\n template.workflows?.forEach((workflowId: { name: string; file: string }) => {\n units.push({ kind: 'workflow', id: workflowId.name, file: workflowId.file });\n });\n\n // Add tools\n template.tools?.forEach((toolId: { name: string; file: string }) => {\n units.push({ kind: 'tool', id: toolId.name, file: toolId.file });\n });\n\n // Add MCP servers\n template.mcp?.forEach((mcpId: { name: string; file: string }) => {\n units.push({ kind: 'mcp-server', id: mcpId.name, file: mcpId.file });\n });\n\n // Add networks\n template.networks?.forEach((networkId: { name: string; file: string }) => {\n units.push({ kind: 'network', id: networkId.name, file: networkId.file });\n });\n\n // Add other files\n template.other?.forEach((otherId: { name: string; file: string }) => {\n units.push({ kind: 'other', id: otherId.name, file: otherId.file });\n });\n\n console.info('Discovered units:', JSON.stringify(units, null, 2));\n\n if (units.length === 0) {\n throw new Error(`No Mastra units (agents, workflows, tools) found in template.\n Possible causes:\n - Template may not follow standard Mastra structure\n - AI agent couldn't analyze template files (model/token limits)\n - Template is empty or in wrong branch\n\n Debug steps:\n - Check template has files in src/mastra/ directories\n - Try a different branch\n - Check template repository structure manually`);\n }\n\n return {\n units,\n success: true,\n };\n } catch (error) {\n console.error('Failed to discover units:', error);\n return {\n units: [],\n success: false,\n error: `Failed to discover units: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n },\n});\n\n// Step 4: Topological ordering (simplified)\nconst orderUnitsStep = createStep({\n id: 'order-units',\n description: 'Sort units in topological order based on kind weights',\n inputSchema: DiscoveryResultSchema,\n outputSchema: OrderedUnitsSchema,\n execute: async ({ inputData }) => {\n const { units } = inputData;\n\n // Simple sort by kind weight (mcp-servers first, then tools, agents, workflows, integration last)\n const orderedUnits = [...units].sort((a, b) => {\n const aWeight = kindWeight(a.kind);\n const bWeight = kindWeight(b.kind);\n return aWeight - bWeight;\n });\n\n return {\n orderedUnits,\n success: true,\n };\n },\n});\n\n// Step 5: Prepare branch\nconst prepareBranchStep = createStep({\n id: 'prepare-branch',\n description: 'Create or switch to integration branch before modifications',\n inputSchema: PrepareBranchInputSchema,\n outputSchema: PrepareBranchResultSchema,\n execute: async ({ inputData, requestContext }) => {\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n try {\n const branchName = `feat/install-template-${inputData.slug}`;\n await gitCheckoutBranch(branchName, targetPath);\n\n return {\n branchName,\n success: true,\n };\n } catch (error) {\n console.error('Failed to prepare branch:', error);\n return {\n branchName: `feat/install-template-${inputData.slug}`, // Return the intended name anyway\n success: false,\n error: `Failed to prepare branch: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n },\n});\n\n// Step 6: Package merge\nconst packageMergeStep = createStep({\n id: 'package-merge',\n description: 'Merge template package.json dependencies into target project',\n inputSchema: PackageMergeInputSchema,\n outputSchema: PackageMergeResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Package merge step starting...');\n const { slug, packageInfo } = inputData;\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n try {\n const targetPkgPath = join(targetPath, 'package.json');\n\n let targetPkgRaw = '{}';\n try {\n targetPkgRaw = await readFile(targetPkgPath, 'utf-8');\n } catch {\n console.warn(`No existing package.json at ${targetPkgPath}, creating a new one`);\n }\n\n let targetPkg: any;\n try {\n targetPkg = JSON.parse(targetPkgRaw || '{}');\n } catch (e) {\n throw new Error(\n `Failed to parse existing package.json at ${targetPkgPath}: ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n\n const ensureObj = (o: any) => (o && typeof o === 'object' ? o : {});\n\n targetPkg.dependencies = ensureObj(targetPkg.dependencies);\n targetPkg.devDependencies = ensureObj(targetPkg.devDependencies);\n targetPkg.peerDependencies = ensureObj(targetPkg.peerDependencies);\n targetPkg.scripts = ensureObj(targetPkg.scripts);\n\n const tplDeps = ensureObj(packageInfo.dependencies);\n const tplDevDeps = ensureObj(packageInfo.devDependencies);\n const tplPeerDeps = ensureObj(packageInfo.peerDependencies);\n const tplScripts = ensureObj(packageInfo.scripts);\n\n const existsAnywhere = (name: string) =>\n name in targetPkg.dependencies || name in targetPkg.devDependencies || name in targetPkg.peerDependencies;\n\n // Merge dependencies: add only if missing everywhere\n for (const [name, ver] of Object.entries(tplDeps)) {\n if (!existsAnywhere(name)) {\n (targetPkg.dependencies as Record<string, string>)[name] = String(ver);\n }\n }\n\n // Merge devDependencies\n for (const [name, ver] of Object.entries(tplDevDeps)) {\n if (!existsAnywhere(name)) {\n (targetPkg.devDependencies as Record<string, string>)[name] = String(ver);\n }\n }\n\n // Merge peerDependencies\n for (const [name, ver] of Object.entries(tplPeerDeps)) {\n if (!(name in targetPkg.peerDependencies)) {\n (targetPkg.peerDependencies as Record<string, string>)[name] = String(ver);\n }\n }\n\n // Merge scripts with prefixed keys to avoid collisions\n const prefix = `template:${slug}:`;\n for (const [name, cmd] of Object.entries(tplScripts)) {\n const newKey = `${prefix}${name}`;\n if (!(newKey in targetPkg.scripts)) {\n (targetPkg.scripts as Record<string, string>)[newKey] = String(cmd);\n }\n }\n\n await writeFile(targetPkgPath, JSON.stringify(targetPkg, null, 2), 'utf-8');\n\n await gitAddAndCommit(targetPath, `feat(template): merge deps for ${slug}`, [targetPkgPath], {\n skipIfNoStaged: true,\n });\n\n return {\n success: true,\n applied: true,\n message: `Successfully merged template dependencies for ${slug}`,\n };\n } catch (error) {\n console.error('Package merge failed:', error);\n return {\n success: false,\n applied: false,\n message: `Package merge failed: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 7: Install\nconst installStep = createStep({\n id: 'install',\n description: 'Install packages based on merged package.json',\n inputSchema: InstallInputSchema,\n outputSchema: InstallResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Running install step...');\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n try {\n // Run install using swpm (no specific packages)\n await spawnSWPM(targetPath, 'install', []);\n\n const lock = ['pnpm-lock.yaml', 'package-lock.json', 'yarn.lock']\n .map(f => join(targetPath, f))\n .find(f => existsSync(f));\n\n if (lock) {\n await gitAddAndCommit(targetPath, `chore(template): commit lockfile after install`, [lock], {\n skipIfNoStaged: true,\n });\n }\n\n return {\n success: true,\n };\n } catch (error) {\n console.error('Install failed:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 7: Programmatic File Copy Step - copies template files to target project\nconst programmaticFileCopyStep = createStep({\n id: 'programmatic-file-copy',\n description: 'Programmatically copy template files to target project based on ordered units',\n inputSchema: FileCopyInputSchema,\n outputSchema: FileCopyResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Programmatic file copy step starting...');\n const { orderedUnits, templateDir, commitSha, slug } = inputData;\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n try {\n const copiedFiles: Array<{\n source: string;\n destination: string;\n unit: { kind: UnitKind; id: string };\n }> = [];\n\n const conflicts: Array<{\n unit: { kind: UnitKind; id: string };\n issue: string;\n sourceFile: string;\n targetFile: string;\n }> = [];\n\n // Analyze target project naming convention first\n const analyzeNamingConvention = async (\n directory: string,\n ): Promise<'camelCase' | 'snake_case' | 'kebab-case' | 'PascalCase' | 'unknown'> => {\n try {\n const files = await readdir(resolve(targetPath, directory), { withFileTypes: true });\n const tsFiles = files.filter(f => f.isFile() && f.name.endsWith('.ts')).map(f => f.name);\n\n if (tsFiles.length === 0) return 'unknown';\n\n // Check for patterns\n const camelCaseCount = tsFiles.filter(f => /^[a-z][a-zA-Z0-9]*\\.ts$/.test(f)).length;\n const snakeCaseCount = tsFiles.filter(f => /^[a-z][a-z0-9_]*\\.ts$/.test(f) && f.includes('_')).length;\n const kebabCaseCount = tsFiles.filter(f => /^[a-z][a-z0-9-]*\\.ts$/.test(f) && f.includes('-')).length;\n const pascalCaseCount = tsFiles.filter(f => /^[A-Z][a-zA-Z0-9]*\\.ts$/.test(f)).length;\n\n const max = Math.max(camelCaseCount, snakeCaseCount, kebabCaseCount, pascalCaseCount);\n if (max === 0) return 'unknown';\n\n if (camelCaseCount === max) return 'camelCase';\n if (snakeCaseCount === max) return 'snake_case';\n if (kebabCaseCount === max) return 'kebab-case';\n if (pascalCaseCount === max) return 'PascalCase';\n\n return 'unknown';\n } catch {\n return 'unknown';\n }\n };\n\n // Convert naming based on convention\n const convertNaming = (name: string, convention: string): string => {\n const baseName = basename(name, extname(name));\n const ext = extname(name);\n\n switch (convention) {\n case 'camelCase':\n return (\n baseName\n .replace(/[-_]/g, '')\n .replace(/([A-Z])/g, (match, p1, offset) => (offset === 0 ? p1.toLowerCase() : p1)) + ext\n );\n case 'snake_case':\n return (\n baseName\n .replace(/[-]/g, '_')\n .replace(/([A-Z])/g, (match, p1, offset) => (offset === 0 ? '' : '_') + p1.toLowerCase()) + ext\n );\n case 'kebab-case':\n return (\n baseName\n .replace(/[_]/g, '-')\n .replace(/([A-Z])/g, (match, p1, offset) => (offset === 0 ? '' : '-') + p1.toLowerCase()) + ext\n );\n case 'PascalCase':\n return baseName.replace(/[-_]/g, '').replace(/^[a-z]/, match => match.toUpperCase()) + ext;\n default:\n return name;\n }\n };\n\n // Process each unit\n for (const unit of orderedUnits) {\n console.info(`Processing ${unit.kind} unit \"${unit.id}\" from file \"${unit.file}\"`);\n\n // Resolve source file path with fallback logic\n let sourceFile: string;\n let resolvedUnitFile: string;\n\n // Check if unit.file already contains directory structure\n if (unit.file.includes('/')) {\n // unit.file has path structure (e.g., \"src/mastra/agents/weatherAgent.ts\")\n sourceFile = resolve(templateDir, unit.file);\n resolvedUnitFile = unit.file;\n } else {\n // unit.file is just filename (e.g., \"weatherAgent.ts\") - use fallback\n const folderPath =\n AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE[\n unit.kind as keyof typeof AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE\n ];\n if (!folderPath) {\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Unknown unit kind: ${unit.kind}`,\n sourceFile: unit.file,\n targetFile: 'N/A',\n });\n continue;\n }\n resolvedUnitFile = `${folderPath}/${unit.file}`;\n sourceFile = resolve(templateDir, resolvedUnitFile);\n }\n\n // Check if source file exists\n if (!existsSync(sourceFile)) {\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Source file not found: ${sourceFile}`,\n sourceFile: resolvedUnitFile,\n targetFile: 'N/A',\n });\n continue;\n }\n\n // Extract target directory from resolved unit file path\n const targetDir = dirname(resolvedUnitFile);\n\n // Analyze target naming convention\n const namingConvention = await analyzeNamingConvention(targetDir);\n console.info(`Detected naming convention in ${targetDir}: ${namingConvention}`);\n\n // Convert unit.id to target filename with proper extension\n // Note: Check if unit.id already includes extension to avoid double extensions\n const hasExtension = extname(unit.id) !== '';\n const baseId = hasExtension ? basename(unit.id, extname(unit.id)) : unit.id;\n const fileExtension = extname(unit.file);\n const convertedFileName =\n namingConvention !== 'unknown'\n ? convertNaming(baseId + fileExtension, namingConvention)\n : baseId + fileExtension;\n\n const targetFile = resolve(targetPath, targetDir, convertedFileName);\n\n // Handle file conflicts with strategy-based resolution\n if (existsSync(targetFile)) {\n const strategy = determineConflictStrategy(unit, targetFile);\n console.info(`File exists: ${convertedFileName}, using strategy: ${strategy}`);\n\n switch (strategy) {\n case 'skip':\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `File exists - skipped: ${convertedFileName}`,\n sourceFile: unit.file,\n targetFile: `${targetDir}/${convertedFileName}`,\n });\n console.info(`βοΈ Skipped ${unit.kind} \"${unit.id}\": file already exists`);\n continue;\n\n case 'backup-and-replace':\n try {\n await backupAndReplaceFile(sourceFile, targetFile);\n copiedFiles.push({\n source: sourceFile,\n destination: targetFile,\n unit: { kind: unit.kind, id: unit.id },\n });\n console.info(\n `π Replaced ${unit.kind} \"${unit.id}\": ${unit.file} β ${convertedFileName} (backup created)`,\n );\n continue;\n } catch (backupError) {\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Failed to backup and replace: ${backupError instanceof Error ? backupError.message : String(backupError)}`,\n sourceFile: unit.file,\n targetFile: `${targetDir}/${convertedFileName}`,\n });\n continue;\n }\n\n case 'rename':\n try {\n const uniqueTargetFile = await renameAndCopyFile(sourceFile, targetFile);\n copiedFiles.push({\n source: sourceFile,\n destination: uniqueTargetFile,\n unit: { kind: unit.kind, id: unit.id },\n });\n console.info(`π Renamed ${unit.kind} \"${unit.id}\": ${unit.file} β ${basename(uniqueTargetFile)}`);\n continue;\n } catch (renameError) {\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Failed to rename and copy: ${renameError instanceof Error ? renameError.message : String(renameError)}`,\n sourceFile: unit.file,\n targetFile: `${targetDir}/${convertedFileName}`,\n });\n continue;\n }\n\n default:\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Unknown conflict strategy: ${strategy}`,\n sourceFile: unit.file,\n targetFile: `${targetDir}/${convertedFileName}`,\n });\n continue;\n }\n }\n\n // Ensure target directory exists\n await mkdir(dirname(targetFile), { recursive: true });\n\n // Copy the file\n try {\n await copyFile(sourceFile, targetFile);\n copiedFiles.push({\n source: sourceFile,\n destination: targetFile,\n unit: { kind: unit.kind, id: unit.id },\n });\n console.info(`β Copied ${unit.kind} \"${unit.id}\": ${unit.file} β ${convertedFileName}`);\n } catch (copyError) {\n conflicts.push({\n unit: { kind: unit.kind, id: unit.id },\n issue: `Failed to copy file: ${copyError instanceof Error ? copyError.message : String(copyError)}`,\n sourceFile: unit.file,\n targetFile: `${targetDir}/${convertedFileName}`,\n });\n }\n }\n\n // Ensure tsconfig.json exists in target by copying from template if available, else generate a minimal one\n try {\n const targetTsconfig = resolve(targetPath, 'tsconfig.json');\n if (!existsSync(targetTsconfig)) {\n const templateTsconfig = resolve(templateDir, 'tsconfig.json');\n if (existsSync(templateTsconfig)) {\n await copyFile(templateTsconfig, targetTsconfig);\n copiedFiles.push({\n source: templateTsconfig,\n destination: targetTsconfig,\n unit: { kind: 'other', id: 'tsconfig.json' },\n });\n console.info('β Copied tsconfig.json from template to target');\n } else {\n // Generate a minimal tsconfig.json as a fallback\n const minimalTsconfig = {\n compilerOptions: {\n target: 'ES2020',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n strict: false,\n esModuleInterop: true,\n skipLibCheck: true,\n resolveJsonModule: true,\n outDir: 'dist',\n },\n include: ['**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts'],\n exclude: ['node_modules', 'dist', 'build', '.next', '.output', '.turbo'],\n } as const;\n\n await writeFile(targetTsconfig, JSON.stringify(minimalTsconfig, null, 2), 'utf-8');\n copiedFiles.push({\n source: '[generated tsconfig.json]',\n destination: targetTsconfig,\n unit: { kind: 'other', id: 'tsconfig.json' },\n });\n console.info('β Generated minimal tsconfig.json in target');\n }\n }\n } catch (e) {\n conflicts.push({\n unit: { kind: 'other', id: 'tsconfig.json' },\n issue: `Failed to ensure tsconfig.json: ${e instanceof Error ? e.message : String(e)}`,\n sourceFile: 'tsconfig.json',\n targetFile: 'tsconfig.json',\n });\n }\n\n // If the target project has no Mastra index file, copy from template\n try {\n const targetMastraIndex = resolve(targetPath, 'src/mastra/index.ts');\n if (!existsSync(targetMastraIndex)) {\n const templateMastraIndex = resolve(templateDir, 'src/mastra/index.ts');\n if (existsSync(templateMastraIndex)) {\n if (!existsSync(dirname(targetMastraIndex))) {\n await mkdir(dirname(targetMastraIndex), { recursive: true });\n }\n await copyFile(templateMastraIndex, targetMastraIndex);\n copiedFiles.push({\n source: templateMastraIndex,\n destination: targetMastraIndex,\n unit: { kind: 'other', id: 'mastra-index' },\n });\n console.info('β Copied Mastra index file from template');\n }\n }\n } catch (e) {\n conflicts.push({\n unit: { kind: 'other', id: 'mastra-index' },\n issue: `Failed to ensure Mastra index file: ${e instanceof Error ? e.message : String(e)}`,\n sourceFile: 'src/mastra/index.ts',\n targetFile: 'src/mastra/index.ts',\n });\n }\n\n // Handle .gitignore file merging\n try {\n const targetGitignore = resolve(targetPath, '.gitignore');\n const templateGitignore = resolve(templateDir, '.gitignore');\n\n const targetExists = existsSync(targetGitignore);\n const templateExists = existsSync(templateGitignore);\n\n if (templateExists) {\n if (!targetExists) {\n // Target has no .gitignore - copy template's completely\n await copyFile(templateGitignore, targetGitignore);\n copiedFiles.push({\n source: templateGitignore,\n destination: targetGitignore,\n unit: { kind: 'other', id: 'gitignore' },\n });\n console.info('β Copied .gitignore from template to target');\n } else {\n // Both exist - merge them intelligently\n const targetContent = await readFile(targetGitignore, 'utf-8');\n const templateContent = await readFile(templateGitignore, 'utf-8');\n\n const mergedContent = mergeGitignoreFiles(targetContent, templateContent, slug);\n\n if (mergedContent !== targetContent) {\n const addedLines = mergedContent.split('\\n').length - targetContent.split('\\n').length;\n await writeFile(targetGitignore, mergedContent, 'utf-8');\n copiedFiles.push({\n source: templateGitignore,\n destination: targetGitignore,\n unit: { kind: 'other', id: 'gitignore-merge' },\n });\n console.info(`β Merged template .gitignore entries into existing .gitignore (${addedLines} new entries)`);\n } else {\n console.info('βΉ No new .gitignore entries to add from template');\n }\n }\n }\n } catch (e) {\n conflicts.push({\n unit: { kind: 'other', id: 'gitignore' },\n issue: `Failed to handle .gitignore file: ${e instanceof Error ? e.message : String(e)}`,\n sourceFile: '.gitignore',\n targetFile: '.gitignore',\n });\n }\n\n // Handle .env file merging with template variables\n try {\n const { variables } = inputData;\n if (variables && Object.keys(variables).length > 0) {\n const targetEnv = resolve(targetPath, '.env');\n const targetExists = existsSync(targetEnv);\n\n if (!targetExists) {\n // Target has no .env - create new one with template variables\n const envContent = [\n `# Environment variables for ${slug}`,\n ...Object.entries(variables).map(([key, value]) => `${key}=${value}`),\n ].join('\\n');\n\n await writeFile(targetEnv, envContent, 'utf-8');\n copiedFiles.push({\n source: '[template variables]',\n destination: targetEnv,\n unit: { kind: 'other', id: 'env' },\n });\n console.info(`β Created .env file with ${Object.keys(variables).length} template variables`);\n } else {\n // Both exist - merge them intelligently\n const targetContent = await readFile(targetEnv, 'utf-8');\n const mergedContent = mergeEnvFiles(targetContent, variables, slug);\n\n if (mergedContent !== targetContent) {\n const addedLines = mergedContent.split('\\n').length - targetContent.split('\\n').length;\n await writeFile(targetEnv, mergedContent, 'utf-8');\n copiedFiles.push({\n source: '[template variables]',\n destination: targetEnv,\n unit: { kind: 'other', id: 'env-merge' },\n });\n console.info(`β Merged new environment variables into existing .env file (${addedLines} new entries)`);\n } else {\n console.info('βΉ No new environment variables to add (all already exist in .env)');\n }\n }\n }\n } catch (e) {\n conflicts.push({\n unit: { kind: 'other', id: 'env' },\n issue: `Failed to handle .env file: ${e instanceof Error ? e.message : String(e)}`,\n sourceFile: '.env',\n targetFile: '.env',\n });\n }\n\n // Commit the copied files\n if (copiedFiles.length > 0) {\n try {\n const fileList = copiedFiles.map(f => f.destination);\n await gitAddAndCommit(\n targetPath,\n `feat(template): copy ${copiedFiles.length} files from ${slug}@${commitSha.substring(0, 7)}`,\n fileList,\n { skipIfNoStaged: true },\n );\n console.info(`β Committed ${copiedFiles.length} copied files`);\n } catch (commitError) {\n console.warn('Failed to commit copied files:', commitError);\n }\n }\n\n const message = `Programmatic file copy completed. Copied ${copiedFiles.length} files, ${conflicts.length} conflicts detected.`;\n console.info(message);\n\n return {\n success: true,\n copiedFiles,\n conflicts,\n message,\n };\n } catch (error) {\n console.error('Programmatic file copy failed:', error);\n\n return {\n success: false,\n copiedFiles: [],\n conflicts: [],\n message: `Programmatic file copy failed: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 9: Intelligent merging with AgentBuilder\nconst intelligentMergeStep = createStep({\n id: 'intelligent-merge',\n description: 'Use AgentBuilder to intelligently merge template files',\n inputSchema: IntelligentMergeInputSchema,\n outputSchema: IntelligentMergeResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Intelligent merge step starting...');\n const { conflicts, copiedFiles, commitSha, slug, templateDir, branchName } = inputData;\n const targetPath = resolveTargetPath(inputData, requestContext);\n try {\n const model = await resolveModel({ requestContext, projectPath: targetPath, defaultModel: openai('gpt-4.1') });\n\n // Create copyFile tool for edge cases\n const copyFileTool = createTool({\n id: 'copy-file',\n description:\n 'Copy a file from template to target project (use only for edge cases - most files are already copied programmatically).',\n inputSchema: z.object({\n sourcePath: z.string().describe('Path to the source file relative to template directory'),\n destinationPath: z.string().describe('Path to the destination file relative to target project'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n message: z.string(),\n error: z.string().optional(),\n }),\n execute: async input => {\n try {\n const { sourcePath, destinationPath } = input;\n\n // Use templateDir directly from input\n const resolvedSourcePath = resolve(templateDir, sourcePath);\n const resolvedDestinationPath = resolve(targetPath, destinationPath);\n\n if (existsSync(resolvedSourcePath) && !existsSync(dirname(resolvedDestinationPath))) {\n await mkdir(dirname(resolvedDestinationPath), { recursive: true });\n }\n\n await copyFile(resolvedSourcePath, resolvedDestinationPath);\n return {\n success: true,\n message: `Successfully copied file from ${sourcePath} to ${destinationPath}`,\n };\n } catch (error) {\n return {\n success: false,\n message: `Failed to copy file: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n });\n\n // Initialize AgentBuilder for merge and registration\n const agentBuilder = new AgentBuilder({\n projectPath: targetPath,\n mode: 'template',\n model,\n instructions: `\nYou are an expert at integrating Mastra template components into existing projects.\n\nCRITICAL CONTEXT:\n- Files have been programmatically copied from template to target project\n- Your job is to handle integration issues, registration, and validation\n\nFILES SUCCESSFULLY COPIED:\n${JSON.stringify(copiedFiles, null, 2)}\n\nCONFLICTS TO RESOLVE:\n${JSON.stringify(conflicts, null, 2)}\n\nCRITICAL INSTRUCTIONS:\n1. **Package management**: NO need to install packages (already handled by package merge step)\n2. **File copying**: Most files are already copied programmatically. Only use copyFile tool for edge cases where additional files are needed for conflict resolution\n\nKEY RESPONSIBILITIES:\n1. Resolve any conflicts from the programmatic copy step\n2. Register components in existing Mastra index file (agents, workflows, networks, mcp-servers)\n3. DO NOT register tools in existing Mastra index file - tools should remain standalone\n4. Copy additional files ONLY if needed for conflict resolution\n\nMASTRA INDEX FILE HANDLING (src/mastra/index.ts):\n1. **Verify the file exists**\n - Call readFile\n - If it fails with ENOENT (or listDirectory shows it missing) -> copyFile the template version to src/mastra/index.ts, then confirm it now exists\n - Always verify after copying that the file exists and is accessible\n\n2. **Edit the file**\n - Always work with the full file content\n - Generate the complete, correct source (imports, anchors, registrations, formatting)\n - Keep existing registrations intact and maintain file structure\n - Ensure proper spacing and organization of new additions\n\n3. **Handle anchors and structure**\n - When generating new content, ensure you do not duplicate existing imports or object entries\n - If required anchors (e.g., agents: {}) are missing, add them while generating the new content\n - Add missing anchors just before the closing brace of the Mastra config\n - Do not restructure or reorder existing anchors and registrations\n\nCRITICAL: ALWAYS use writeFile to update the mastra/index.ts file when needed to register new components.\n\nMASTRA-SPECIFIC REGISTRATION:\n- Agents: Register in existing Mastra index file\n- Workflows: Register in existing Mastra index file\n- Networks: Register in existing Mastra index file\n- MCP servers: Register in existing Mastra index file\n- Tools: Copy to ${AgentBuilderDefaults.DEFAULT_FOLDER_STRUCTURE.tool} but DO NOT register in existing Mastra index file\n- If an anchor (e.g., \"agents: {\") is not found, avoid complex restructuring; instead, insert the missing anchor on a new line (e.g., add \"agents: {\" just before the closing brace of the Mastra config) and then proceed with the other registrations.\n\nCONFLICT RESOLUTION AND FILE COPYING:\n- Only copy files if needed to resolve specific conflicts\n- When copying files from template:\n - Ensure you get the right file name and path\n - Verify the destination directory exists\n - Maintain the same relative path structure\n - Only copy files that are actually needed\n- Preserve existing functionality when resolving conflicts\n- Focus on registration and conflict resolution, validation will happen in a later step\n\nTemplate information:\n- Slug: ${slug}\n- Commit: ${commitSha.substring(0, 7)}\n- Branch: ${branchName}\n`,\n tools: {\n copyFile: copyFileTool,\n },\n });\n\n // Create task list for systematic processing\n const tasks = [];\n\n // Add conflict resolution tasks\n conflicts.forEach(conflict => {\n tasks.push({\n id: `conflict-${conflict.unit.kind}-${conflict.unit.id}`,\n content: `Resolve conflict: ${conflict.issue}`,\n status: 'pending' as const,\n priority: 'high' as const,\n notes: `Unit: ${conflict.unit.kind}:${conflict.unit.id}, Issue: ${conflict.issue}, Source: ${conflict.sourceFile}, Target: ${conflict.targetFile}`,\n });\n });\n\n // Add registration tasks for successfully copied files\n const registrableKinds = new Set(['agent', 'workflow', 'network', 'mcp-server']);\n const registrableFiles = copiedFiles.filter(f => registrableKinds.has(f.unit.kind as any));\n const targetMastraIndex = resolve(targetPath, 'src/mastra/index.ts');\n const mastraIndexExists = existsSync(targetMastraIndex);\n console.info(`Mastra index exists: ${mastraIndexExists} at ${targetMastraIndex}`);\n console.info(\n 'Registrable components:',\n registrableFiles.map(f => `${f.unit.kind}:${f.unit.id}`),\n );\n if (registrableFiles.length > 0) {\n tasks.push({\n id: 'register-components',\n content: `Register ${registrableFiles.length} components in existing Mastra index file (src/mastra/index.ts)`,\n status: 'pending' as const,\n priority: 'medium' as const,\n dependencies: conflicts.length > 0 ? conflicts.map(c => `conflict-${c.unit.kind}-${c.unit.id}`) : undefined,\n notes: `Components to register: ${registrableFiles.map(f => `${f.unit.kind}:${f.unit.id}`).join(', ')}`,\n });\n }\n\n // Note: Validation is handled by the dedicated validation step, not here\n\n console.info(`Creating task list with ${tasks.length} tasks...`);\n await AgentBuilderDefaults.manageTaskList({ action: 'create', tasks });\n\n // Log git state before merge operations\n await logGitState(targetPath, 'before intelligent merge');\n\n const prompt = `\nYou need to work through a task list to complete the template integration.\n\nCRITICAL INSTRUCTIONS:\n\n**STEP 1: GET YOUR TASK LIST**\n1. Use manageTaskList tool with action \"list\" to see all pending tasks\n2. Work through tasks in dependency order (complete dependencies first)\n\n**STEP 2: PROCESS EACH TASK SYSTEMATICALLY**\nFor each task:\n1. Use manageTaskList to mark the current task as 'in_progress'\n2. Complete the task according to its requirements\n3. Use manageTaskList to mark the task as 'completed' when done\n4. Continue until all tasks are completed\n\n**TASK TYPES AND REQUIREMENTS:**\n\n**Conflict Resolution Tasks:**\n- Analyze the specific conflict and determine best resolution strategy\n- For file name conflicts: merge content or rename appropriately\n- For missing files: investigate and copy if needed\n- For other issues: apply appropriate fixes\n\n**Component Registration Task:**\n- Update main Mastra instance file to register new components\n- Only register: agents, workflows, networks, mcp-servers\n- DO NOT register tools in main config\n- Ensure proper import paths and naming conventions\n\n**COMMIT STRATEGY:**\n- After resolving conflicts: \"feat(template): resolve conflicts for ${slug}@${commitSha.substring(0, 7)}\"\n- After registration: \"feat(template): register components from ${slug}@${commitSha.substring(0, 7)}\"\n\n**CRITICAL NOTES:**\n- Template source: ${templateDir}\n- Target project: ${targetPath}\n- Focus ONLY on conflict resolution and component registration\n- Use executeCommand for git commits after each task\n- DO NOT perform validation - that's handled by the dedicated validation step\n\nStart by listing your tasks and work through them systematically!\n`;\n\n // Process tasks systematically\n const isV2 = model.specificationVersion === 'v2';\n const result = isV2 ? await agentBuilder.stream(prompt) : await agentBuilder.streamLegacy(prompt);\n\n // Extract actual conflict resolution details from agent execution\n const actualResolutions: Array<{\n taskId: string;\n action: string;\n status: string;\n content: string;\n notes?: string;\n }> = [];\n\n for await (const chunk of result.fullStream) {\n if (chunk.type === 'step-finish' || chunk.type === 'step-start') {\n const chunkData = 'payload' in chunk ? chunk.payload : chunk;\n console.info({\n type: chunk.type,\n msgId: chunkData.messageId,\n });\n } else {\n console.info(JSON.stringify(chunk, null, 2));\n\n // Extract task management tool results\n if (chunk.type === 'tool-result') {\n const chunkData = 'payload' in chunk ? chunk.payload : chunk;\n if (chunkData.toolName === 'manageTaskList') {\n try {\n const toolResult = chunkData.result;\n if (toolResult.action === 'update' && toolResult.status === 'completed') {\n actualResolutions.push({\n taskId: toolResult.taskId || '',\n action: toolResult.action,\n status: toolResult.status,\n content: toolResult.content || '',\n notes: toolResult.notes,\n });\n console.info(`π Task completed: ${toolResult.taskId} - ${toolResult.content}`);\n }\n } catch (parseError) {\n console.warn('Failed to parse task management result:', parseError);\n }\n }\n }\n }\n }\n\n // Log git state after merge operations\n await logGitState(targetPath, 'after intelligent merge');\n\n // Map actual resolutions back to conflicts\n const conflictResolutions = conflicts.map(conflict => {\n const taskId = `conflict-${conflict.unit.kind}-${conflict.unit.id}`;\n const actualResolution = actualResolutions.find(r => r.taskId === taskId);\n\n if (actualResolution) {\n return {\n unit: conflict.unit,\n issue: conflict.issue,\n resolution:\n actualResolution.notes ||\n actualResolution.content ||\n `Completed: ${conflict.unit.kind} ${conflict.unit.id}`,\n actualWork: true,\n };\n } else {\n return {\n unit: conflict.unit,\n issue: conflict.issue,\n resolution: `No specific resolution found for ${conflict.unit.kind} ${conflict.unit.id}`,\n actualWork: false,\n };\n }\n });\n\n await gitAddAndCommit(targetPath, `feat(template): apply intelligent merge for ${slug}`, undefined, {\n skipIfNoStaged: true,\n });\n\n return {\n success: true,\n applied: true,\n message: `Successfully resolved ${conflicts.length} conflicts from template ${slug}`,\n conflictsResolved: conflictResolutions,\n };\n } catch (error) {\n return {\n success: false,\n applied: false,\n message: `Failed to resolve conflicts: ${error instanceof Error ? error.message : String(error)}`,\n conflictsResolved: [],\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 10: Validation and Fix Step - validates merged code and fixes any issues\nconst validationAndFixStep = createStep({\n id: 'validation-and-fix',\n description: 'Validate the merged template code and fix any issues using a specialized agent',\n inputSchema: ValidationFixInputSchema,\n outputSchema: ValidationFixResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Validation and fix step starting...');\n const { commitSha, slug, orderedUnits, templateDir, copiedFiles, conflictsResolved, maxIterations = 5 } = inputData;\n const targetPath = resolveTargetPath(inputData, requestContext);\n\n // Skip validation if no changes were made\n const hasChanges = copiedFiles.length > 0 || (conflictsResolved && conflictsResolved.length > 0);\n if (!hasChanges) {\n console.info('βοΈ Skipping validation - no files copied or conflicts resolved');\n return {\n success: true,\n applied: false,\n message: 'No changes to validate - template already integrated or no conflicts resolved',\n validationResults: {\n valid: true,\n errorsFixed: 0,\n remainingErrors: 0,\n },\n };\n }\n\n console.info(\n `π Changes detected: ${copiedFiles.length} files copied, ${conflictsResolved?.length || 0} conflicts resolved`,\n );\n\n let currentIteration = 1; // Declare at function scope for error handling\n\n try {\n const model = await resolveModel({ requestContext, projectPath: targetPath, defaultModel: openai('gpt-4.1') });\n\n const allTools = await AgentBuilderDefaults.listToolsForMode(targetPath, 'template');\n\n const validationAgent = new Agent({\n id: 'code-validator-fixer',\n name: 'Code Validator Fixer',\n description: 'Specialized agent for validating and fixing template integration issues',\n instructions: `You are a code validation and fixing specialist. Your job is to:\n\n1. **Run comprehensive validation** using the validateCode tool to check for:\n - TypeScript compilation errors\n - ESLint issues\n - Import/export problems\n - Missing dependencies\n - Index file structure and exports\n - Component registration correctness\n - Naming convention compliance\n\n2. **Fix validation errors systematically**:\n - Use readFile to examine files with errors\n - Use multiEdit for simple search-replace fixes (single line changes)\n - Use replaceLines for complex multiline fixes (imports, function signatures, etc.)\n - Use listDirectory to understand project structure when fixing import paths\n - Update file contents to resolve TypeScript and linting issues\n\n3. **Choose the right tool for the job**:\n - multiEdit: Simple replacements, single line changes, small fixes\n - replaceLines: Multiline imports, function signatures, complex code blocks\n - writeFile: ONLY for creating new files (never overwrite existing)\n\n4. **Create missing files ONLY when necessary**:\n - Use writeFile ONLY for creating NEW files that don't exist\n - NEVER overwrite existing files - use multiEdit or replaceLines instead\n - Common cases: missing barrel files (index.ts), missing config files, missing type definitions\n - Always check with readFile first to ensure file doesn't exist\n\n5. **Fix ALL template integration issues**:\n - Fix import path issues in copied files\n - Ensure TypeScript imports and exports are correct\n - Validate integration works properly\n - Fix files copied with new names based on unit IDs\n - Update original template imports that reference old filenames\n - Fix missing imports in index files\n - Fix incorrect file paths in imports\n - Fix type mismatches after integration\n - Fix missing exports in barrel files\n - Use the COPIED FILES mapping below to fix import paths\n - Fix any missing dependencies or module resolution issues\n\n6. **Validate index file structure**:\n - Correct imports for all components\n - Proper anchor structure (agents: {}, etc.)\n - No duplicate registrations\n - Correct export names and paths\n - Proper formatting and organization\n\n7. **Follow naming conventions**:\n Import paths:\n - camelCase: import { myAgent } from './myAgent'\n - snake_case: import { myAgent } from './my_agent'\n - kebab-case: import { myAgent } from './my-agent'\n - PascalCase: import { MyAgent } from './MyAgent'\n\n File names:\n - camelCase: weatherAgent.ts, chatAgent.ts\n - snake_case: weather_agent.ts, chat_agent.ts\n - kebab-case: weather-agent.ts, chat-agent.ts\n - PascalCase: WeatherAgent.ts, ChatAgent.ts\n\n Key Rule: Keep variable/export names unchanged, only adapt file names and import paths\n\n8. **Re-validate after fixes** to ensure all issues are resolved\n\nCRITICAL: Always validate the entire project first to get a complete picture of issues, then fix them systematically, and re-validate to confirm fixes worked.\n\nCRITICAL TOOL SELECTION GUIDE:\n- **multiEdit**: Use for simple string replacements, single-line changes\n Example: changing './oldPath' to './newPath'\n \n- **replaceLines**: Use for multiline fixes, complex code structures\n Example: fixing multiline imports, function signatures, or code blocks\n Usage: replaceLines({ filePath: 'file.ts', startLine: 5, endLine: 8, newContent: 'new multiline content' })\n \n- **writeFile**: ONLY for creating new files that don't exist\n Example: creating missing index.ts barrel files\n\nCRITICAL WRITEFILΠ SAFETY RULES:\n- ONLY use writeFile for creating NEW files that don't exist\n- ALWAYS check with readFile first to verify file doesn't exist\n- NEVER use writeFile to overwrite existing files - use multiEdit or replaceLines instead\n- Common valid uses: missing index.ts barrel files, missing type definitions, missing config files\n\nCRITICAL IMPORT PATH RESOLUTION:\nThe following files were copied from template with new names:\n${JSON.stringify(copiedFiles, null, 2)}\n\nWhen fixing import errors:\n1. Check if the missing module corresponds to a copied file\n2. Use listDirectory to verify actual filenames in target directories\n3. Update import paths to match the actual copied filenames\n4. Ensure exported variable names match what's being imported\n\nEXAMPLE: If error shows \"Cannot find module './tools/download-csv-tool'\" but a file was copied as \"csv-fetcher-tool.ts\", update the import to \"./tools/csv-fetcher-tool\"\n\n${conflictsResolved ? `CONFLICTS RESOLVED BY INTELLIGENT MERGE:\\n${JSON.stringify(conflictsResolved, null, 2)}\\n` : ''}\n\nINTEGRATED UNITS:\n${JSON.stringify(orderedUnits, null, 2)}\n\nBe thorough and methodical. Always use listDirectory to verify actual file existence before fixing imports.`,\n model,\n tools: {\n validateCode: allTools.validateCode,\n readFile: allTools.readFile,\n writeFile: allTools.writeFile,\n multiEdit: allTools.multiEdit,\n replaceLines: allTools.replaceLines,\n listDirectory: allTools.listDirectory,\n executeCommand: allTools.executeCommand,\n },\n });\n\n console.info('Starting validation and fix agent with internal loop...');\n\n let validationResults = {\n valid: false,\n errorsFixed: 0,\n remainingErrors: 1, // Start with 1 to enter the loop\n iteration: currentIteration,\n lastValidationErrors: [] as any[], // Store the actual error details\n };\n\n // Loop up to maxIterations times or until all errors are fixed\n while (validationResults.remainingErrors > 0 && currentIteration <= maxIterations) {\n console.info(`\\n=== Validation Iteration ${currentIteration} ===`);\n\n const iterationPrompt =\n currentIteration === 1\n ? `Please validate the template integration and fix any errors found in the project at ${targetPath}. The template \"${slug}\" (${commitSha.substring(0, 7)}) was just integrated and may have validation issues that need fixing.\n\nStart by running validateCode with all validation types to get a complete picture of any issues, then systematically fix them.`\n : `Continue validation and fixing for the template integration at ${targetPath}. This is iteration ${currentIteration} of validation.\n\nPrevious iterations may have fixed some issues, so start by re-running validateCode to see the current state, then fix any remaining issues.`;\n\n const isV2 = model.specificationVersion === 'v2';\n const output = z.object({ success: z.boolean() });\n const result = isV2\n ? await tryStreamWithJsonFallback(validationAgent, iterationPrompt, {\n structuredOutput: {\n schema: output,\n },\n })\n : await validationAgent.streamLegacy(iterationPrompt, {\n experimental_output: output,\n });\n\n let iterationErrors = 0;\n let previousErrors = validationResults.remainingErrors;\n let lastValidationResult: any = null;\n\n for await (const chunk of result.fullStream) {\n if (chunk.type === 'step-finish' || chunk.type === 'step-start') {\n const chunkData = 'payload' in chunk ? chunk.payload : chunk;\n console.info({\n type: chunk.type,\n msgId: chunkData.messageId,\n iteration: currentIteration,\n });\n } else {\n console.info(JSON.stringify(chunk, null, 2));\n }\n if (chunk.type === 'tool-result') {\n // Track validation results\n const chunkData = 'payload' in chunk ? chunk.payload : chunk;\n if (chunkData.toolName === 'validateCode') {\n const toolResult = chunkData.result;\n lastValidationResult = toolResult; // Store the full result\n if (toolResult?.summary) {\n iterationErrors = toolResult.summary.totalErrors || 0;\n console.info(`Iteration ${currentIteration}: Found ${iterationErrors} errors`);\n }\n }\n }\n }\n\n // Update results for this iteration\n validationResults.remainingErrors = iterationErrors;\n validationResults.errorsFixed += Math.max(0, previousErrors - iterationErrors);\n validationResults.valid = iterationErrors === 0;\n validationResults.iteration = currentIteration;\n\n // Store the last validation errors if any remain\n if (iterationErrors > 0 && lastValidationResult?.errors) {\n validationResults.lastValidationErrors = lastValidationResult.errors;\n }\n\n console.info(`Iteration ${currentIteration} complete: ${iterationErrors} errors remaining`);\n\n // Break if no errors or max iterations reached\n if (iterationErrors === 0) {\n console.info(`β
All validation issues resolved in ${currentIteration} iterations!`);\n break;\n } else if (currentIteration >= maxIterations) {\n console.info(`β οΈ Max iterations (${maxIterations}) reached. ${iterationErrors} errors still remaining.`);\n break;\n }\n\n currentIteration++;\n }\n\n // Commit the validation fixes\n try {\n await gitAddAndCommit(\n targetPath,\n `fix(template): resolve validation errors for ${slug}@${commitSha.substring(0, 7)}`,\n undefined,\n {\n skipIfNoStaged: true,\n },\n );\n } catch (commitError) {\n console.warn('Failed to commit validation fixes:', commitError);\n }\n\n const success = validationResults.valid;\n\n return {\n success,\n applied: true,\n message: `Validation completed in ${currentIteration} iteration${currentIteration > 1 ? 's' : ''}. ${validationResults.valid ? 'All issues resolved!' : `${validationResults.remainingErrors} issue${validationResults.remainingErrors > 1 ? 's' : ''} remaining`}`,\n validationResults: {\n valid: validationResults.valid,\n errorsFixed: validationResults.errorsFixed,\n remainingErrors: validationResults.remainingErrors,\n errors: validationResults.lastValidationErrors,\n },\n };\n } catch (error) {\n console.error('Validation and fix failed:', error);\n return {\n success: false,\n applied: false,\n message: `Validation and fix failed: ${error instanceof Error ? error.message : String(error)}`,\n validationResults: {\n valid: false,\n errorsFixed: 0,\n remainingErrors: -1,\n },\n error: error instanceof Error ? error.message : String(error),\n };\n } finally {\n // Cleanup template directory\n try {\n await rm(templateDir, { recursive: true, force: true });\n console.info(`β Cleaned up template directory: ${templateDir}`);\n } catch (cleanupError) {\n console.warn('Failed to cleanup template directory:', cleanupError);\n }\n }\n },\n});\n\n// Create the complete workflow\nexport const agentBuilderTemplateWorkflow = createWorkflow({\n id: 'agent-builder-template',\n description:\n 'Merges a Mastra template repository into the current project using intelligent AgentBuilder-powered merging',\n inputSchema: AgentBuilderInputSchema,\n outputSchema: ApplyResultSchema,\n steps: [\n cloneTemplateStep,\n analyzePackageStep,\n discoverUnitsStep,\n orderUnitsStep,\n packageMergeStep,\n installStep,\n programmaticFileCopyStep,\n intelligentMergeStep,\n validationAndFixStep,\n ],\n})\n .then(cloneTemplateStep)\n .map(async ({ getStepResult }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n\n // Check for failure in clone step\n if (shouldAbortWorkflow(cloneResult)) {\n throw new Error(`Critical failure in clone step: ${cloneResult.error}`);\n }\n\n return cloneResult;\n })\n .parallel([analyzePackageStep, discoverUnitsStep])\n .map(async ({ getStepResult }) => {\n const analyzeResult = getStepResult(analyzePackageStep);\n const discoverResult = getStepResult(discoverUnitsStep);\n\n // Check for failures in parallel steps\n if (shouldAbortWorkflow(analyzeResult)) {\n throw new Error(`Failure in analyze package step: ${analyzeResult.error || 'Package analysis failed'}`);\n }\n\n if (shouldAbortWorkflow(discoverResult)) {\n throw new Error(`Failure in discover units step: ${discoverResult.error || 'Unit discovery failed'}`);\n }\n\n return discoverResult;\n })\n .then(orderUnitsStep)\n .map(async ({ getStepResult, getInitData }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n const initData = getInitData();\n return {\n commitSha: cloneResult.commitSha,\n slug: cloneResult.slug,\n targetPath: initData.targetPath,\n };\n })\n .then(prepareBranchStep)\n .map(async ({ getStepResult, getInitData }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n const packageResult = getStepResult(analyzePackageStep);\n const initData = getInitData();\n return {\n commitSha: cloneResult.commitSha,\n slug: cloneResult.slug,\n targetPath: initData.targetPath,\n packageInfo: packageResult,\n };\n })\n .then(packageMergeStep)\n .map(async ({ getInitData }) => {\n const initData = getInitData();\n return {\n targetPath: initData.targetPath,\n };\n })\n .then(installStep)\n .map(async ({ getStepResult, getInitData }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n const orderResult = getStepResult(orderUnitsStep);\n const installResult = getStepResult(installStep);\n const initData = getInitData();\n\n if (shouldAbortWorkflow(installResult)) {\n throw new Error(`Failure in install step: ${installResult.error || 'Install failed'}`);\n }\n return {\n orderedUnits: orderResult.orderedUnits,\n templateDir: cloneResult.templateDir,\n commitSha: cloneResult.commitSha,\n slug: cloneResult.slug,\n targetPath: initData.targetPath,\n variables: initData.variables,\n };\n })\n .then(programmaticFileCopyStep)\n .map(async ({ getStepResult, getInitData }) => {\n const copyResult = getStepResult(programmaticFileCopyStep);\n const cloneResult = getStepResult(cloneTemplateStep);\n const initData = getInitData();\n\n return {\n conflicts: copyResult.conflicts,\n copiedFiles: copyResult.copiedFiles,\n commitSha: cloneResult.commitSha,\n slug: cloneResult.slug,\n targetPath: initData.targetPath,\n templateDir: cloneResult.templateDir,\n };\n })\n .then(intelligentMergeStep)\n .map(async ({ getStepResult, getInitData }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n const orderResult = getStepResult(orderUnitsStep);\n const copyResult = getStepResult(programmaticFileCopyStep);\n const mergeResult = getStepResult(intelligentMergeStep);\n const initData = getInitData();\n\n return {\n commitSha: cloneResult.commitSha,\n slug: cloneResult.slug,\n targetPath: initData.targetPath,\n templateDir: cloneResult.templateDir,\n orderedUnits: orderResult.orderedUnits,\n copiedFiles: copyResult.copiedFiles,\n conflictsResolved: mergeResult.conflictsResolved,\n };\n })\n .then(validationAndFixStep)\n .map(async ({ getStepResult }) => {\n const cloneResult = getStepResult(cloneTemplateStep);\n const analyzeResult = getStepResult(analyzePackageStep);\n const discoverResult = getStepResult(discoverUnitsStep);\n const orderResult = getStepResult(orderUnitsStep);\n const prepareBranchResult = getStepResult(prepareBranchStep);\n const packageMergeResult = getStepResult(packageMergeStep);\n const installResult = getStepResult(installStep);\n const copyResult = getStepResult(programmaticFileCopyStep);\n const intelligentMergeResult = getStepResult(intelligentMergeStep);\n const validationResult = getStepResult(validationAndFixStep);\n\n const branchName = prepareBranchResult.branchName;\n\n // Aggregate errors from all steps\n const allErrors = [\n cloneResult.error,\n analyzeResult.error,\n discoverResult.error,\n orderResult.error,\n prepareBranchResult.error,\n packageMergeResult.error,\n installResult.error,\n copyResult.error,\n intelligentMergeResult.error,\n validationResult.error,\n ].filter(Boolean);\n\n // Determine overall success based on all step results\n const overallSuccess =\n cloneResult.success !== false &&\n analyzeResult.success !== false &&\n discoverResult.success !== false &&\n orderResult.success !== false &&\n prepareBranchResult.success !== false &&\n packageMergeResult.success !== false &&\n installResult.success !== false &&\n copyResult.success !== false &&\n intelligentMergeResult.success !== false &&\n validationResult.success !== false;\n\n // Create comprehensive message\n const messages = [];\n if (copyResult.copiedFiles?.length > 0) {\n messages.push(`${copyResult.copiedFiles.length} files copied`);\n }\n if (copyResult.conflicts?.length > 0) {\n messages.push(`${copyResult.conflicts.length} conflicts skipped`);\n }\n if (intelligentMergeResult.conflictsResolved?.length > 0) {\n messages.push(`${intelligentMergeResult.conflictsResolved.length} conflicts resolved`);\n }\n if (validationResult.validationResults?.errorsFixed > 0) {\n messages.push(`${validationResult.validationResults.errorsFixed} validation errors fixed`);\n }\n\n if (validationResult.validationResults?.remainingErrors > 0) {\n messages.push(`${validationResult.validationResults.remainingErrors} validation issues remain`);\n }\n\n const comprehensiveMessage =\n messages.length > 0\n ? `Template merge completed: ${messages.join(', ')}`\n : validationResult.message || 'Template merge completed';\n\n return {\n success: overallSuccess,\n applied: validationResult.applied || copyResult.copiedFiles?.length > 0 || false,\n message: comprehensiveMessage,\n validationResults: validationResult.validationResults,\n error: allErrors.length > 0 ? allErrors.join('; ') : undefined,\n errors: allErrors.length > 0 ? allErrors : undefined,\n branchName,\n // Additional debugging info\n stepResults: {\n cloneSuccess: cloneResult.success,\n analyzeSuccess: analyzeResult.success,\n discoverSuccess: discoverResult.success,\n orderSuccess: orderResult.success,\n prepareBranchSuccess: prepareBranchResult.success,\n packageMergeSuccess: packageMergeResult.success,\n installSuccess: installResult.success,\n copySuccess: copyResult.success,\n mergeSuccess: intelligentMergeResult.success,\n validationSuccess: validationResult.success,\n filesCopied: copyResult.copiedFiles?.length || 0,\n conflictsSkipped: copyResult.conflicts?.length || 0,\n conflictsResolved: intelligentMergeResult.conflictsResolved?.length || 0,\n },\n };\n })\n .commit();\n\n// Helper to merge a template by slug\nexport async function mergeTemplateBySlug(slug: string, targetPath?: string) {\n const template = await getMastraTemplate(slug);\n const run = await agentBuilderTemplateWorkflow.createRun();\n return await run.start({\n inputData: {\n repo: template.githubUrl,\n slug: template.slug,\n targetPath,\n },\n });\n}\n\n// Helper function to determine conflict resolution strategy\nconst determineConflictStrategy = (\n _unit: { kind: string; id: string },\n _targetFile: string,\n): 'skip' | 'backup-and-replace' | 'rename' => {\n // For now, always skip conflicts to avoid disrupting existing files\n // TODO: Enable advanced strategies based on user feedback\n return 'skip';\n\n // Future logic (currently disabled):\n // if (['agent', 'workflow', 'network'].includes(unit.kind)) {\n // return 'backup-and-replace';\n // }\n // if (unit.kind === 'tool') {\n // return 'rename';\n // }\n // return 'backup-and-replace';\n};\n\n// Helper function to check if a step result indicates a failure\nconst shouldAbortWorkflow = (stepResult: any): boolean => {\n return stepResult?.success === false || stepResult?.error;\n};\n","import { z } from 'zod';\n\nexport const TaskSchema = z.array(\n z.object({\n id: z.string().describe('Unique task ID using kebab-case'),\n content: z.string().describe('Specific, actionable task description'),\n status: z.enum(['pending', 'in_progress', 'completed', 'blocked']).default('pending'),\n priority: z.enum(['high', 'medium', 'low']).describe('Task priority'),\n dependencies: z.array(z.string()).optional().describe('IDs of tasks this depends on'),\n notes: z.string().describe('Detailed implementation notes and specifics'),\n }),\n);\n\nexport const QuestionSchema = z.array(\n z.object({\n id: z.string().describe('Unique question ID'),\n question: z.string().describe('Clear, specific question for the user'),\n type: z.enum(['choice', 'text', 'boolean']).describe('Type of answer expected'),\n options: z.array(z.string()).optional().describe('Options for choice questions'),\n context: z.string().optional().describe('Additional context or explanation'),\n }),\n);\nexport const PlanningIterationResultSchema = z.object({\n success: z.boolean(),\n tasks: TaskSchema,\n questions: QuestionSchema,\n reasoning: z.string(),\n planComplete: z.boolean(),\n message: z.string(),\n error: z.string().optional(),\n allPreviousQuestions: z.array(z.any()).optional(),\n allPreviousAnswers: z.record(z.string()).optional(),\n});\n","/**\n * Prompts and instructions for task planning workflow\n */\n\nexport interface TaskPlanningPrompts {\n planningAgent: {\n instructions: (context: { storedQAPairs: any[] }) => string;\n refinementPrompt: (context: {\n action: string;\n workflowName?: string;\n description?: string;\n requirements?: string;\n discoveredWorkflows: any[];\n projectStructure: any;\n research: any;\n storedQAPairs: any[];\n hasTaskFeedback: boolean;\n userAnswers?: any;\n }) => string;\n initialPrompt: (context: {\n action: string;\n workflowName?: string;\n description?: string;\n requirements?: string;\n discoveredWorkflows: any[];\n projectStructure: any;\n research: any;\n }) => string;\n };\n taskApproval: {\n message: (questionsCount: number) => string;\n approvalMessage: (tasksCount: number) => string;\n };\n}\n\nexport const taskPlanningPrompts: TaskPlanningPrompts = {\n planningAgent: {\n instructions:\n context => `You are a Mastra workflow planning expert. Your task is to create a detailed, executable task plan.\n\nPLANNING RESPONSIBILITIES:\n1. **Analyze Requirements**: Review the user's description and requirements thoroughly\n2. **Identify Decision Points**: Find any choices that require user input (email providers, databases, APIs, etc.)\n3. **Create Specific Tasks**: Generate concrete, actionable tasks with clear implementation notes\n4. **Ask Clarifying Questions**: If any decisions are unclear, formulate specific questions for the user \n- do not ask about package managers\n- Assume the user is going to use zod for validation\n- You do not need to ask questions if you have none\n- NEVER ask questions that have already been answered before\n5. **Incorporate Feedback**: Use any previous answers or feedback to refine the plan\n\n${\n context.storedQAPairs.length > 0\n ? `PREVIOUS QUESTION-ANSWER PAIRS (${context.storedQAPairs.length} total):\\n${context.storedQAPairs\n .map(\n (pair, index) =>\n `${index + 1}. Q: ${pair.question.question}\\n A: ${pair.answer || 'NOT ANSWERED YET'}\\n Type: ${pair.question.type}\\n Asked: ${pair.askedAt}\\n ${pair.answer ? `Answered: ${pair.answeredAt}` : ''}`,\n )\n .join('\\n\\n')}\\n\\nIMPORTANT: DO NOT ASK ANY QUESTIONS THAT HAVE ALREADY BEEN ASKED!`\n : ''\n}\n\nBased on the context and any user answers, create or refine the task plan.`,\n\n refinementPrompt: context => `Refine the existing task plan based on all user answers collected so far. \n\nANSWERED QUESTIONS AND RESPONSES:\n${context.storedQAPairs\n .filter(pair => pair.answer)\n .map(\n (pair, index) =>\n `${index + 1}. Q: ${pair.question.question}\\n A: ${pair.answer}\\n Context: ${pair.question.context || 'None'}`,\n )\n .join('\\n\\n')}\n\nREQUIREMENTS:\n- Action: ${context.action}\n- Workflow Name: ${context.workflowName || 'To be determined'}\n- Description: ${context.description || 'Not specified'}\n- Requirements: ${context.requirements || 'Not specified'}\n\nPROJECT CONTEXT:\n- Discovered Workflows: ${JSON.stringify(context.discoveredWorkflows, null, 2)}\n- Project Structure: ${JSON.stringify(context.projectStructure, null, 2)}\n- Research: ${JSON.stringify(context.research, null, 2)}\n\n${context.hasTaskFeedback ? `\\nUSER FEEDBACK ON PREVIOUS TASK LIST:\\n${context.userAnswers?.taskFeedback}\\n\\nPLEASE INCORPORATE THIS FEEDBACK INTO THE REFINED TASK LIST.` : ''}\n\nRefine the task list and determine if any additional questions are needed.`,\n\n initialPrompt: context => `Create an initial task plan for ${context.action}ing a Mastra workflow.\n\nREQUIREMENTS:\n- Action: ${context.action}\n- Workflow Name: ${context.workflowName || 'To be determined'}\n- Description: ${context.description || 'Not specified'} \n- Requirements: ${context.requirements || 'Not specified'}\n\nPROJECT CONTEXT:\n- Discovered Workflows: ${JSON.stringify(context.discoveredWorkflows, null, 2)}\n- Project Structure: ${JSON.stringify(context.projectStructure, null, 2)}\n- Research: ${JSON.stringify(context.research, null, 2)}\n\nCreate specific tasks and identify any questions that need user clarification.`,\n },\n\n taskApproval: {\n message: questionsCount => `Please answer ${questionsCount} question(s) to finalize the workflow plan:`,\n approvalMessage: tasksCount => `Please review and approve the ${tasksCount} task(s) for execution:`,\n },\n};\n","import { z } from 'zod';\nimport { PlanningIterationResultSchema, QuestionSchema, TaskSchema } from '../shared/schema';\n\n// Workflow Builder schemas and types\nexport const WorkflowBuilderInputSchema = z.object({\n workflowName: z.string().optional().describe('Name of the workflow to create or edit'),\n action: z.enum(['create', 'edit']).describe('Action to perform: create new or edit existing workflow'),\n description: z.string().optional().describe('Description of what the workflow should do'),\n requirements: z.string().optional().describe('Detailed requirements for the workflow'),\n projectPath: z.string().optional().describe('Path to the Mastra project (defaults to current directory)'),\n});\n\nexport const DiscoveredWorkflowSchema = z.object({\n name: z.string(),\n file: z.string(),\n description: z.string().optional(),\n inputSchema: z.any().optional(),\n outputSchema: z.any().optional(),\n steps: z.array(z.string()).optional(),\n});\n\nexport const WorkflowDiscoveryResultSchema = z.object({\n success: z.boolean(),\n workflows: z.array(DiscoveredWorkflowSchema),\n mastraIndexExists: z.boolean(),\n message: z.string(),\n error: z.string().optional(),\n});\n\nexport const ProjectDiscoveryResultSchema = z.object({\n success: z.boolean(),\n structure: z.object({\n hasWorkflowsDir: z.boolean(),\n hasAgentsDir: z.boolean(),\n hasToolsDir: z.boolean(),\n hasMastraIndex: z.boolean(),\n existingWorkflows: z.array(z.string()),\n existingAgents: z.array(z.string()),\n existingTools: z.array(z.string()),\n }),\n dependencies: z.record(z.string()),\n message: z.string(),\n error: z.string().optional(),\n});\n\nexport const WorkflowResearchResultSchema = z.object({\n success: z.boolean(),\n documentation: z.object({\n workflowPatterns: z.array(z.string()),\n stepExamples: z.array(z.string()),\n bestPractices: z.array(z.string()),\n }),\n webResources: z.array(\n z.object({\n title: z.string(),\n url: z.string(),\n snippet: z.string(),\n relevance: z.number(),\n }),\n ),\n message: z.string(),\n error: z.string().optional(),\n});\n\nexport const TaskManagementResultSchema = z.object({\n success: z.boolean(),\n tasks: TaskSchema,\n message: z.string(),\n error: z.string().optional(),\n});\n\nexport const TaskExecutionInputSchema = z.object({\n action: z.enum(['create', 'edit']),\n workflowName: z.string().optional(),\n description: z.string().optional(),\n requirements: z.string().optional(),\n tasks: TaskSchema,\n discoveredWorkflows: z.array(z.any()),\n projectStructure: z.any(),\n research: z.any(),\n projectPath: z.string().optional(),\n});\n\nexport const TaskExecutionSuspendSchema = z.object({\n questions: QuestionSchema,\n currentProgress: z.string(),\n completedTasks: z.array(z.string()),\n message: z.string(),\n});\n\nexport const TaskExecutionResumeSchema = z.object({\n answers: z.array(\n z.object({\n questionId: z.string(),\n answer: z.string(),\n }),\n ),\n});\n\nexport const TaskExecutionResultSchema = z.object({\n success: z.boolean(),\n filesModified: z.array(z.string()),\n validationResults: z.object({\n passed: z.boolean(),\n errors: z.array(z.string()),\n warnings: z.array(z.string()),\n }),\n completedTasks: z.array(z.string()),\n message: z.string(),\n error: z.string().optional(),\n});\n\nexport const UserClarificationInputSchema = z.object({\n questions: QuestionSchema,\n});\n\nexport const UserClarificationResultSchema = z.object({\n answers: z.record(z.string()),\n hasAnswers: z.boolean(),\n});\n\nexport const WorkflowBuilderResultSchema = z.object({\n success: z.boolean(),\n action: z.enum(['create', 'edit']),\n workflowName: z.string().optional(),\n workflowFile: z.string().optional(),\n discovery: WorkflowDiscoveryResultSchema.optional(),\n projectStructure: ProjectDiscoveryResultSchema.optional(),\n research: WorkflowResearchResultSchema.optional(),\n planning: PlanningIterationResultSchema.optional(),\n taskManagement: TaskManagementResultSchema.optional(),\n execution: TaskExecutionResultSchema.optional(),\n needsUserInput: z.boolean().optional(),\n questions: QuestionSchema.optional(),\n message: z.string(),\n nextSteps: z.array(z.string()).optional(),\n error: z.string().optional(),\n});\n\nexport const TaskExecutionIterationInputSchema = (taskLength: number) =>\n z.object({\n status: z\n .enum(['in_progress', 'completed', 'needs_clarification'])\n .describe('Status - only use \"completed\" when ALL remaining tasks are finished'),\n progress: z.string().describe('Current progress description'),\n completedTasks: z\n .array(z.string())\n .describe('List of ALL completed task IDs (including previously completed ones)'),\n totalTasksRequired: z.number().describe(`Total number of tasks that must be completed (should be ${taskLength})`),\n tasksRemaining: z.array(z.string()).describe('List of task IDs that still need to be completed'),\n filesModified: z\n .array(z.string())\n .describe('List of files that were created or modified - use these exact paths for validateCode tool'),\n questions: QuestionSchema.optional().describe('Questions for user if clarification is needed'),\n message: z.string().describe('Summary of work completed or current status'),\n error: z.string().optional().describe('Any errors encountered'),\n });\n","import { z } from 'zod';\nimport { QuestionSchema, TaskSchema } from '../shared/schema';\nimport {\n ProjectDiscoveryResultSchema,\n WorkflowResearchResultSchema,\n DiscoveredWorkflowSchema,\n} from '../workflow-builder/schema';\n\nexport const PlanningIterationInputSchema = z.object({\n action: z.enum(['create', 'edit']),\n workflowName: z.string().optional(),\n description: z.string().optional(),\n requirements: z.string().optional(),\n discoveredWorkflows: z.array(DiscoveredWorkflowSchema),\n projectStructure: ProjectDiscoveryResultSchema,\n research: WorkflowResearchResultSchema,\n\n userAnswers: z.record(z.string()).optional(),\n});\n\nexport const PlanningIterationSuspendSchema = z.object({\n questions: QuestionSchema,\n message: z.string(),\n currentPlan: z.object({\n tasks: TaskSchema,\n reasoning: z.string(),\n }),\n});\n\nexport const PlanningIterationResumeSchema = z.object({\n answers: z.record(z.string()),\n});\n\nexport const PlanningAgentOutputSchema = z.object({\n tasks: TaskSchema,\n questions: QuestionSchema.optional(),\n reasoning: z.string().describe('Explanation of the plan and any questions'),\n planComplete: z.boolean().describe('Whether the plan is ready for execution (no more questions)'),\n});\n\nexport const TaskApprovalOutputSchema = z.object({\n approved: z.boolean(),\n tasks: TaskSchema,\n message: z.string(),\n userFeedback: z.string().optional(),\n});\n\nexport const TaskApprovalSuspendSchema = z.object({\n taskList: TaskSchema,\n summary: z.string(),\n message: z.string(),\n});\n\nexport const TaskApprovalResumeSchema = z.object({\n approved: z.boolean(),\n modifications: z.string().optional(),\n});\n","import { Agent } from '@mastra/core/agent';\nimport { createWorkflow, createStep } from '@mastra/core/workflows';\nimport { resolveModel } from '../../utils';\nimport { PlanningIterationResultSchema } from '../shared/schema';\nimport { taskPlanningPrompts } from './prompts';\nimport {\n PlanningAgentOutputSchema,\n PlanningIterationInputSchema,\n PlanningIterationResumeSchema,\n PlanningIterationSuspendSchema,\n TaskApprovalOutputSchema,\n TaskApprovalResumeSchema,\n TaskApprovalSuspendSchema,\n} from './schema';\n\n// Planning iteration step (with questions and user answers)\nconst planningIterationStep = createStep({\n id: 'planning-iteration',\n description: 'Create or refine task plan with user input',\n inputSchema: PlanningIterationInputSchema,\n outputSchema: PlanningIterationResultSchema,\n suspendSchema: PlanningIterationSuspendSchema,\n resumeSchema: PlanningIterationResumeSchema,\n execute: async ({ inputData, resumeData, suspend, requestContext }) => {\n const {\n action,\n workflowName,\n description,\n requirements,\n discoveredWorkflows,\n projectStructure,\n research,\n userAnswers,\n } = inputData;\n\n console.info('Starting planning iteration...');\n\n // Get or initialize Q&A tracking in request context\n const qaKey = 'workflow-builder-qa';\n let storedQAPairs: Array<{\n question: any;\n answer: string | null;\n askedAt: string;\n answeredAt: string | null;\n }> = requestContext.get(qaKey) || [];\n\n // Process new answers from user input or resume data\n const newAnswers = { ...(userAnswers || {}), ...(resumeData?.answers || {}) };\n\n // console.info('before', storedQAPairs);\n // console.info('newAnswers', newAnswers);\n // Update existing Q&A pairs with new answers\n if (Object.keys(newAnswers).length > 0) {\n storedQAPairs = storedQAPairs.map(pair => {\n if (newAnswers[pair.question.id]) {\n return {\n ...pair,\n answer: newAnswers[pair.question.id] || null,\n answeredAt: new Date().toISOString(),\n };\n }\n return pair;\n });\n\n // Store updated pairs back to request context\n requestContext.set(qaKey, storedQAPairs);\n }\n\n // console.info('after', storedQAPairs);\n\n // console.info(\n // `Current Q&A state: ${storedQAPairs.length} question-answer pairs, ${storedQAPairs.filter(p => p.answer).length} answered`,\n // );\n\n try {\n // const filteredMcpTools = await initializeMcpTools();\n\n const model = await resolveModel({ requestContext });\n\n const planningAgent = new Agent({\n id: 'workflow-planning-agent',\n model,\n instructions: taskPlanningPrompts.planningAgent.instructions({\n storedQAPairs,\n }),\n name: 'Workflow Planning Agent',\n // tools: filteredMcpTools,\n });\n\n // Check if we have user feedback from rejected task list in input data\n const hasTaskFeedback = Boolean(userAnswers && userAnswers.taskFeedback);\n\n const planningPrompt = storedQAPairs.some(pair => pair.answer)\n ? taskPlanningPrompts.planningAgent.refinementPrompt({\n action,\n workflowName,\n description,\n requirements,\n discoveredWorkflows,\n projectStructure,\n research,\n storedQAPairs,\n hasTaskFeedback,\n userAnswers,\n })\n : taskPlanningPrompts.planningAgent.initialPrompt({\n action,\n workflowName,\n description,\n requirements,\n discoveredWorkflows,\n projectStructure,\n research,\n });\n\n const result = await planningAgent.generate(planningPrompt, {\n structuredOutput: {\n schema: PlanningAgentOutputSchema,\n },\n // maxSteps: 15,\n });\n\n const planResult = await result.object;\n if (!planResult) {\n return {\n tasks: [],\n success: false,\n questions: [],\n reasoning: 'Planning agent failed to generate a valid response',\n planComplete: false,\n message: 'Planning failed',\n };\n }\n\n // If we have questions and plan is not complete, suspend for user input\n if (planResult.questions && planResult.questions.length > 0 && !planResult.planComplete) {\n console.info(`Planning needs user clarification: ${planResult.questions.length} questions`);\n\n console.info(planResult.questions);\n\n // Store new questions as Q&A pairs in request context\n const newQAPairs = planResult.questions.map((question: any) => ({\n question,\n answer: null,\n askedAt: new Date().toISOString(),\n answeredAt: null,\n }));\n\n storedQAPairs = [...storedQAPairs, ...newQAPairs];\n requestContext.set(qaKey, storedQAPairs);\n\n console.info(\n `Updated Q&A state: ${storedQAPairs.length} total question-answer pairs, ${storedQAPairs.filter(p => p.answer).length} answered`,\n );\n\n return suspend({\n questions: planResult.questions,\n message: taskPlanningPrompts.taskApproval.message(planResult.questions.length),\n currentPlan: {\n tasks: planResult.tasks,\n reasoning: planResult.reasoning,\n },\n });\n }\n\n // Plan is complete\n console.info(`Planning complete with ${planResult.tasks.length} tasks`);\n\n // Update request context with final state\n requestContext.set(qaKey, storedQAPairs);\n console.info(\n `Final Q&A state: ${storedQAPairs.length} total question-answer pairs, ${storedQAPairs.filter(p => p.answer).length} answered`,\n );\n\n return {\n tasks: planResult.tasks,\n success: true,\n questions: [],\n reasoning: planResult.reasoning,\n planComplete: true,\n message: `Successfully created ${planResult.tasks.length} tasks`,\n allPreviousQuestions: storedQAPairs.map(pair => pair.question),\n allPreviousAnswers: Object.fromEntries(\n storedQAPairs.filter(pair => pair.answer).map(pair => [pair.question.id, pair.answer]),\n ),\n };\n } catch (error) {\n console.error('Planning iteration failed:', error);\n return {\n tasks: [],\n success: false,\n questions: [],\n reasoning: `Planning failed: ${error instanceof Error ? error.message : String(error)}`,\n planComplete: false,\n message: 'Planning iteration failed',\n error: error instanceof Error ? error.message : String(error),\n allPreviousQuestions: storedQAPairs.map(pair => pair.question),\n allPreviousAnswers: Object.fromEntries(\n storedQAPairs.filter(pair => pair.answer).map(pair => [pair.question.id, pair.answer]),\n ),\n };\n }\n },\n});\n\n// Task approval step\nconst taskApprovalStep = createStep({\n id: 'task-approval',\n description: 'Get user approval for the final task list',\n inputSchema: PlanningIterationResultSchema,\n outputSchema: TaskApprovalOutputSchema,\n suspendSchema: TaskApprovalSuspendSchema,\n resumeSchema: TaskApprovalResumeSchema,\n execute: async ({ inputData, resumeData, suspend }) => {\n const { tasks } = inputData;\n\n // If no resume data, suspend for user approval\n if (!resumeData?.approved && resumeData?.approved !== false) {\n console.info(`Requesting user approval for ${tasks.length} tasks`);\n\n const summary = `Task List for Approval:\n\n${tasks.length} tasks planned:\n${tasks.map((task, i) => `${i + 1}. [${task.priority.toUpperCase()}] ${task.content}${task.dependencies?.length ? ` (depends on: ${task.dependencies.join(', ')})` : ''}\\n Notes: ${task.notes || 'None'}`).join('\\n')}`;\n\n return suspend({\n taskList: tasks,\n summary,\n message: taskPlanningPrompts.taskApproval.approvalMessage(tasks.length),\n });\n }\n\n // User responded\n if (resumeData.approved) {\n console.info('Task list approved by user');\n return {\n approved: true,\n tasks,\n message: 'Task list approved, ready for execution',\n };\n } else {\n console.info('Task list rejected by user');\n return {\n approved: false,\n tasks,\n message: 'Task list rejected',\n userFeedback: resumeData.modifications,\n };\n }\n },\n});\n\n// Sub-workflow: Planning and Approval Cycle\nexport const planningAndApprovalWorkflow = createWorkflow({\n id: 'planning-and-approval',\n description: 'Handle iterative planning with questions and task list approval',\n inputSchema: PlanningIterationInputSchema,\n outputSchema: TaskApprovalOutputSchema,\n steps: [planningIterationStep, taskApprovalStep],\n})\n // Step 1: Planning iteration (with questions suspension)\n .dountil(planningIterationStep, async ({ inputData }) => {\n console.info(`Sub-workflow planning check: planComplete=${inputData.planComplete}`);\n return inputData.planComplete === true;\n })\n // Map to approval step input format\n .map(async ({ inputData }) => {\n // After doUntil completes, inputData contains the final result\n return {\n tasks: inputData.tasks || [],\n success: inputData.success || false,\n questions: inputData.questions || [],\n reasoning: inputData.reasoning || '',\n planComplete: inputData.planComplete || false,\n message: inputData.message || '',\n };\n })\n // Step 2: Task list approval\n .then(taskApprovalStep)\n .commit();\n","export const workflowResearch = `\n## π **COMPREHENSIVE MASTRA WORKFLOW RESEARCH SUMMARY**\n\nBased on extensive research of Mastra documentation and examples, here's essential information for building effective Mastra workflows:\n\n### **π WORKFLOW FUNDAMENTALS**\n\n**Core Components:**\n- **\\`createWorkflow()\\`**: Main factory function that creates workflow instances\n- **\\`createStep()\\`**: Creates individual workflow steps with typed inputs/outputs \n- **\\`.commit()\\`**: Finalizes workflow definition (REQUIRED to make workflows executable)\n- **Zod schemas**: Used for strict input/output typing and validation\n\n**Basic Structure:**\n\\`\\`\\`typescript\nimport { createWorkflow, createStep } from \"@mastra/core/workflows\";\nimport { z } from \"zod\";\n\nconst workflow = createWorkflow({\n id: \"unique-workflow-id\", // Required: kebab-case recommended\n description: \"What this workflow does\", // Optional but recommended\n inputSchema: z.object({...}), // Required: Defines workflow inputs\n outputSchema: z.object({...}) // Required: Defines final outputs\n})\n .then(step1) // Chain steps sequentially\n .then(step2)\n .commit(); // CRITICAL: Makes workflow executable\n\\`\\`\\`\n\n### **π§ STEP CREATION PATTERNS**\n\n**Standard Step Definition:**\n\\`\\`\\`typescript\nconst myStep = createStep({\n id: \"step-id\", // Required: unique identifier\n description: \"Step description\", // Recommended for clarity\n inputSchema: z.object({...}), // Required: input validation\n outputSchema: z.object({...}), // Required: output validation\n execute: async ({ inputData, mastra, getStepResult, getInitData }) => {\n // Step logic here\n return { /* matches outputSchema */ };\n }\n});\n\\`\\`\\`\n\n**Execute Function Parameters:**\n- \\`inputData\\`: Validated input matching inputSchema\n- \\`mastra\\`: Access to Mastra instance (agents, tools, other workflows)\n- \\`getStepResult(stepInstance)\\`: Get results from previous steps\n- \\`getInitData()\\`: Access original workflow input data\n- \\`requestContext\\`: Runtime dependency injection context\n- \\`runCount\\`: Number of times this step has run (useful for retries)\n\n### **π CONTROL FLOW METHODS**\n\n**Sequential Execution:**\n- \\`.then(step)\\`: Execute steps one after another\n- Data flows automatically if schemas match\n\n**Parallel Execution:**\n- \\`.parallel([step1, step2])\\`: Run steps simultaneously\n- All parallel steps complete before continuing\n\n**Conditional Logic:**\n- \\`.branch([[condition, step], [condition, step]])\\`: Execute different steps based on conditions\n- Conditions evaluated sequentially, matching steps run in parallel\n\n**Loops:**\n- \\`.dountil(step, condition)\\`: Repeat until condition becomes true\n- \\`.dowhile(step, condition)\\`: Repeat while condition is true \n- \\`.foreach(step, {concurrency: N})\\`: Execute step for each array item\n\n**Data Transformation:**\n- \\`.map(({ inputData, getStepResult, getInitData }) => transformedData)\\`: Transform data between steps\n\n### **βΈοΈ SUSPEND & RESUME CAPABILITIES**\n\n**For Human-in-the-Loop Workflows:**\n\\`\\`\\`typescript\nconst userInputStep = createStep({\n id: \"user-input\",\n suspendSchema: z.object({}), // Schema for suspension payload\n resumeSchema: z.object({ // Schema for resume data\n userResponse: z.string()\n }),\n execute: async ({ resumeData, suspend }) => {\n if (!resumeData?.userResponse) {\n await suspend({}); // Pause workflow\n return { response: \"\" };\n }\n return { response: resumeData.userResponse };\n }\n});\n\\`\\`\\`\n\n**Resume Workflow:**\n\\`\\`\\`typescript\nconst result = await run.start({ inputData: {...} });\nif (result.status === \"suspended\") {\n await run.resume({\n step: result.suspended[0], // Or specific step ID\n resumeData: { userResponse: \"answer\" }\n });\n}\n\\`\\`\\`\n\n### **π οΈ INTEGRATING AGENTS & TOOLS**\n\n**Using Agents in Steps:**\n\\`\\`\\`typescript\n// Method 1: Agent as step\nconst agentStep = createStep(myAgent);\n\n// Method 2: Call agent in execute function\nconst step = createStep({\n execute: async ({ inputData }) => {\n const result = await myAgent.generate(prompt);\n return { output: result.text };\n }\n});\n\\`\\`\\`\n\n**Using Tools in Steps:**\n\\`\\`\\`typescript\n// Method 1: Tool as step \nconst toolStep = createStep(myTool);\n\n// Method 2: Call tool in execute function\nconst step = createStep({\n execute: async ({ inputData, requestContext }) => {\n const result = await myTool.execute({\n context: inputData,\n requestContext\n });\n return result;\n }\n});\n\\`\\`\\`\n\n### **ποΈ PROJECT ORGANIZATION PATTERNS**\n\n**MANDATORY Workflow Organization:**\nEach workflow MUST be organized in its own dedicated folder with separated concerns:\n\n\\`\\`\\`\nsrc/mastra/workflows/\nβββ my-workflow-name/ # Kebab-case folder name\nβ βββ types.ts # All Zod schemas and TypeScript types\nβ βββ steps.ts # All individual step definitions\nβ βββ workflow.ts # Main workflow composition and export\nβ βββ utils.ts # Helper functions (if needed)\nβββ another-workflow/\nβ βββ types.ts\nβ βββ steps.ts\nβ βββ workflow.ts\nβ βββ utils.ts\nβββ index.ts # Export all workflows\n\\`\\`\\`\n\n**CRITICAL File Organization Rules:**\n- **ALWAYS create a dedicated folder** for each workflow\n- **Folder names MUST be kebab-case** version of workflow name\n- **types.ts**: Define all input/output schemas, validation types, and interfaces\n- **steps.ts**: Create all individual step definitions using createStep()\n- **workflow.ts**: Compose steps into workflow using createWorkflow() and export the final workflow\n- **utils.ts**: Any helper functions, constants, or utilities (create only if needed)\n- **NEVER put everything in one file** - always separate concerns properly\n\n**Workflow Registration:**\n\\`\\`\\`typescript\n// src/mastra/index.ts\nexport const mastra = new Mastra({\n workflows: {\n sendEmailWorkflow, // Use camelCase for keys\n dataProcessingWorkflow\n },\n storage: new LibSQLStore({ id: 'mastra-storage', url: 'file:./mastra.db' }), // Required for suspend/resume\n});\n\\`\\`\\`\n\n### **π¦ ESSENTIAL DEPENDENCIES**\n\n**Required Packages:**\n\\`\\`\\`json\n{\n \"dependencies\": {\n \"@mastra/core\": \"latest\",\n \"zod\": \"^3.25.67\"\n }\n}\n\\`\\`\\`\n\n**Additional Packages (as needed):**\n- \\`@mastra/libsql\\`: For workflow state persistence\n- \\`@ai-sdk/openai\\`: For AI model integration\n- \\`ai\\`: For AI SDK functionality\n\n### **β
WORKFLOW BEST PRACTICES**\n\n**Schema Design:**\n- Use descriptive property names in schemas\n- Make schemas as specific as possible (avoid \\`z.any()\\`)\n- Include validation for required business logic\n\n**Error Handling:**\n- Use \\`try/catch\\` blocks in step execute functions\n- Return meaningful error messages\n- Consider using \\`bail()\\` for early successful exits\n\n**Step Organization:**\n- Keep steps focused on single responsibilities\n- Use descriptive step IDs (kebab-case recommended)\n- Create reusable steps for common operations\n\n**Data Flow:**\n- Use \\`.map()\\` when schemas don't align between steps\n- Access previous step results with \\`getStepResult(stepInstance)\\`\n- Use \\`getInitData()\\` to access original workflow input\n\n### **π EXECUTION PATTERNS**\n\n**Running Workflows:**\n\\`\\`\\`typescript\n// Create and start run\nconst run = await workflow.createRun();\nconst result = await run.start({ inputData: {...} });\n\n// Stream execution for real-time monitoring\nconst stream = await run.streamVNext({ inputData: {...} });\nfor await (const chunk of stream) {\n console.log(chunk);\n}\n\n// Watch for events\nrun.watch((event) => console.log(event));\n\\`\\`\\`\n\n**Workflow Status Types:**\n- \\`\"success\"\\`: Completed successfully\n- \\`\"suspended\"\\`: Paused awaiting input\n- \\`\"failed\"\\`: Encountered error\n\n### **π ADVANCED FEATURES**\n\n**Nested Workflows:**\n- Use workflows as steps: \\`.then(otherWorkflow)\\`\n- Enable complex workflow composition\n\n**Request Context:**\n- Pass shared data across all steps\n- Enable dependency injection patterns\n\n**Streaming & Events:**\n- Real-time workflow monitoring\n- Integration with external event systems\n\n**Cloning:**\n- \\`cloneWorkflow(original, {id: \"new-id\"})\\`: Reuse workflow structure\n- \\`cloneStep(original, {id: \"new-id\"})\\`: Reuse step logic\n\nThis comprehensive research provides the foundation for creating robust, maintainable Mastra workflows with proper typing, error handling, and architectural patterns.\n`;\n/**\n * Prompts and instructions for workflow builder agents\n */\n\nexport interface WorkflowBuilderPrompts {\n researchAgent: {\n instructions: string;\n prompt: (context: { projectStructure: any; dependencies: any; hasWorkflowsDir: boolean }) => string;\n };\n executionAgent: {\n instructions: (context: {\n action: string;\n workflowName?: string;\n tasksLength: number;\n currentProjectPath: string;\n discoveredWorkflows: any;\n projectStructure: any;\n research: any;\n tasks: any[];\n resumeData?: any;\n }) => string;\n prompt: (context: { action: string; workflowName?: string; tasks: any[]; resumeData?: any }) => string;\n iterationPrompt: (context: {\n completedTasks: any[];\n pendingTasks: any[];\n workflowName?: string;\n resumeData?: any;\n }) => string;\n };\n validation: {\n instructions: string;\n };\n}\n\nexport const workflowBuilderPrompts: WorkflowBuilderPrompts = {\n researchAgent: {\n instructions: `You are a Mastra workflow research expert. Your task is to gather relevant information about creating Mastra workflows.\n\nRESEARCH OBJECTIVES:\n1. **Core Concepts**: Understand how Mastra workflows work\n2. **Best Practices**: Learn workflow patterns and conventions \n3. **Code Examples**: Find relevant implementation examples\n4. **Technical Details**: Understand schemas, steps, and configuration\n\nUse the available documentation and examples tools to gather comprehensive information about Mastra workflows.`,\n\n prompt: context => `Research everything about Mastra workflows to help create or edit them effectively.\n\nPROJECT CONTEXT:\n- Project Structure: ${JSON.stringify(context.projectStructure, null, 2)}\n- Dependencies: ${JSON.stringify(context.dependencies, null, 2)}\n- Has Workflows Directory: ${context.hasWorkflowsDir}\n\nFocus on:\n1. How to create workflows using createWorkflow()\n2. How to create and chain workflow steps\n3. Best practices for workflow organization\n4. Common workflow patterns and examples\n5. Schema definitions and types\n6. Error handling and debugging\n\nUse the docs and examples tools to gather comprehensive information.`,\n },\n\n executionAgent: {\n instructions: context => `You are executing a workflow ${context.action} task for: \"${context.workflowName}\"\n\nCRITICAL WORKFLOW EXECUTION REQUIREMENTS:\n1. **EXPLORE PROJECT STRUCTURE FIRST**: Use listDirectory and readFile tools to understand the existing project layout, folder structure, and conventions before creating any files\n2. **FOLLOW PROJECT CONVENTIONS**: Look at existing workflows, agents, and file structures to understand where new files should be placed (typically src/mastra/workflows/, src/mastra/agents/, etc.)\n3. **USE PRE-LOADED TASK LIST**: Your task list has been pre-populated in the taskManager tool. Use taskManager with action 'list' to see all tasks, and action 'update' to mark progress\n4. **COMPLETE EVERY SINGLE TASK**: You MUST complete ALL ${context.tasksLength} tasks that are already in the taskManager. Do not stop until every task is marked as 'completed'\n5. **Follow Task Dependencies**: Execute tasks in the correct order, respecting dependencies\n6. **Request User Input When Needed**: If you encounter choices (like email providers, databases, etc.) that require user decision, return questions for clarification\n7. **STRICT WORKFLOW ORGANIZATION**: When creating or editing workflows, you MUST follow this exact structure\n\nMANDATORY WORKFLOW FOLDER STRUCTURE:\nWhen ${context.action === 'create' ? 'creating a new workflow' : 'editing a workflow'}, you MUST organize files as follows:\n\nπ src/mastra/workflows/${context.workflowName?.toLowerCase().replace(/[^a-z0-9]/g, '-') || 'new-workflow'}/\nβββ π types.ts # All Zod schemas and TypeScript types\nβββ π steps.ts # All individual step definitions \nβββ π workflow.ts # Main workflow composition and export\nβββ π utils.ts # Helper functions (if needed)\n\nCRITICAL FILE ORGANIZATION RULES:\n- **ALWAYS create a dedicated folder** for the workflow in src/mastra/workflows/\n- **Folder name MUST be kebab-case** version of workflow name\n- **types.ts**: Define all input/output schemas, validation types, and interfaces\n- **steps.ts**: Create all individual step definitions using createStep()\n- **workflow.ts**: Compose steps into workflow using createWorkflow() and export the final workflow\n- **utils.ts**: Any helper functions, constants, or utilities (create only if needed)\n- **NEVER put everything in one file** - always separate concerns properly\n\nCRITICAL COMPLETION REQUIREMENTS: \n- ALWAYS explore the directory structure before creating files to understand where they should go\n- You MUST complete ALL ${context.tasksLength} tasks before returning status='completed'\n- Use taskManager tool with action 'list' to see your current task list and action 'update' to mark tasks as 'in_progress' or 'completed'\n- If you need to make any decisions during implementation (choosing providers, configurations, etc.), return questions for user clarification\n- DO NOT make assumptions about file locations - explore first!\n- You cannot finish until ALL tasks in the taskManager are marked as 'completed'\n\nPROJECT CONTEXT:\n- Action: ${context.action}\n- Workflow Name: ${context.workflowName}\n- Project Path: ${context.currentProjectPath}\n- Discovered Workflows: ${JSON.stringify(context.discoveredWorkflows, null, 2)}\n- Project Structure: ${JSON.stringify(context.projectStructure, null, 2)}\n\nAVAILABLE RESEARCH:\n${JSON.stringify(context.research, null, 2)}\n\nPRE-LOADED TASK LIST (${context.tasksLength} tasks already in taskManager):\n${context.tasks.map(task => `- ${task.id}: ${task.content} (Priority: ${task.priority})`).join('\\n')}\n\n${context.resumeData ? `USER PROVIDED ANSWERS: ${JSON.stringify(context.resumeData.answers, null, 2)}` : ''}\n\nStart by exploring the project structure, then use 'taskManager' with action 'list' to see your pre-loaded tasks, and work through each task systematically.`,\n\n prompt: context =>\n context.resumeData\n ? `Continue working on the task list. The user has provided answers to your questions: ${JSON.stringify(context.resumeData.answers, null, 2)}. \n\nCRITICAL: You must complete ALL ${context.tasks.length} tasks that are pre-loaded in the taskManager. Use the taskManager tool with action 'list' to check your progress and continue with the next tasks. Do not stop until every single task is marked as 'completed'.`\n : `Begin executing the pre-loaded task list to ${context.action} the workflow \"${context.workflowName}\". \n\nCRITICAL REQUIREMENTS:\n- Your ${context.tasks.length} tasks have been PRE-LOADED into the taskManager tool\n- Start by exploring the project directory structure using listDirectory and readFile tools to understand:\n - Where workflows are typically stored (look for src/mastra/workflows/ or similar)\n - What the existing file structure looks like\n - How other workflows are organized and named\n - Where agent files are stored if needed\n- Then use taskManager with action 'list' to see your pre-loaded tasks\n- Use taskManager with action 'update' to mark tasks as 'in_progress' or 'completed'\n\nCRITICAL FILE ORGANIZATION RULES:\n- **ALWAYS create a dedicated folder** for the workflow in src/mastra/workflows/\n- **Folder name MUST be kebab-case** version of workflow name \n- **NEVER put everything in one file** - separate types, steps, and workflow composition\n- Follow the 4-file structure above for maximum maintainability and clarity\n\n- DO NOT return status='completed' until ALL ${context.tasks.length} tasks are marked as 'completed' in the taskManager\n\nPRE-LOADED TASKS (${context.tasks.length} total tasks in taskManager):\n${context.tasks.map((task, index) => `${index + 1}. [${task.id}] ${task.content}`).join('\\n')}\n\nUse taskManager with action 'list' to see the current status of all tasks. You must complete every single one before finishing.`,\n\n iterationPrompt:\n context => `Continue working on the remaining tasks. You have already completed these tasks: [${context.completedTasks.map(t => t.id).join(', ')}]\n\nREMAINING TASKS TO COMPLETE (${context.pendingTasks.length} tasks):\n${context.pendingTasks.map((task, index) => `${index + 1}. [${task.id}] ${task.content}`).join('\\n')}\n\nCRITICAL: You must complete ALL of these remaining ${context.pendingTasks.length} tasks. Use taskManager with action 'list' to check current status and action 'update' to mark tasks as completed.\n\n${context.resumeData ? `USER PROVIDED ANSWERS: ${JSON.stringify(context.resumeData.answers, null, 2)}` : ''}`,\n },\n\n validation: {\n instructions: `CRITICAL VALIDATION INSTRUCTIONS:\n- When using the validateCode tool, ALWAYS pass the specific files you created or modified using the 'files' parameter\n- The tool uses a hybrid validation approach: fast syntax checking β semantic type checking β ESLint\n- This is much faster than full project compilation and only shows errors from your specific files\n- Example: validateCode({ validationType: ['types', 'lint'], files: ['src/workflows/my-workflow.ts', 'src/agents/my-agent.ts'] })\n- ALWAYS validate after creating or modifying files to ensure they compile correctly`,\n },\n};\n","import { createTool } from '@mastra/core/tools';\nimport { z } from 'zod';\nimport { AgentBuilderDefaults } from '../../defaults';\n\n// taskManager tool that only allows updates, not creation\nexport const restrictedTaskManager = createTool({\n id: 'task-manager',\n description:\n 'View and update your pre-loaded task list. You can only mark tasks as in_progress or completed, not create new tasks.',\n inputSchema: z.object({\n action: z\n .enum(['list', 'update', 'complete'])\n .describe('List tasks, update status, or mark complete - tasks are pre-loaded'),\n tasks: z\n .array(\n z.object({\n id: z.string().describe('Task ID - must match existing task'),\n content: z.string().optional().describe('Task content (read-only)'),\n status: z.enum(['pending', 'in_progress', 'completed', 'blocked']).describe('Task status'),\n priority: z.enum(['high', 'medium', 'low']).optional().describe('Task priority (read-only)'),\n dependencies: z.array(z.string()).optional().describe('Task dependencies (read-only)'),\n notes: z.string().optional().describe('Additional notes or progress updates'),\n }),\n )\n .optional()\n .describe('Tasks to update (status and notes only)'),\n taskId: z.string().optional().describe('Specific task ID for single task operations'),\n }),\n outputSchema: z.object({\n success: z.boolean(),\n tasks: z.array(\n z.object({\n id: z.string(),\n content: z.string(),\n status: z.string(),\n priority: z.string(),\n dependencies: z.array(z.string()).optional(),\n notes: z.string().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n }),\n ),\n message: z.string(),\n }),\n execute: async input => {\n // Convert to the expected format for manageTaskList\n const adaptedContext = {\n ...input,\n action: input.action,\n tasks: input.tasks?.map(task => ({\n ...task,\n priority: task.priority || ('medium' as const),\n })),\n };\n return await AgentBuilderDefaults.manageTaskList(adaptedContext);\n },\n});\n","import { existsSync } from 'node:fs';\nimport { readFile, readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { Agent } from '@mastra/core/agent';\nimport { createWorkflow, createStep } from '@mastra/core/workflows';\nimport { stepCountIs } from 'ai';\nimport type { z } from 'zod';\nimport { AgentBuilder } from '../../agent';\nimport { AgentBuilderDefaults } from '../../defaults';\nimport { resolveModel } from '../../utils';\nimport { planningAndApprovalWorkflow } from '../task-planning/task-planning';\nimport { workflowBuilderPrompts, workflowResearch as research } from './prompts';\nimport {\n WorkflowBuilderInputSchema,\n WorkflowBuilderResultSchema,\n WorkflowDiscoveryResultSchema,\n ProjectDiscoveryResultSchema,\n WorkflowResearchResultSchema,\n TaskExecutionResultSchema,\n TaskExecutionInputSchema,\n TaskExecutionResumeSchema,\n TaskExecutionSuspendSchema,\n TaskExecutionIterationInputSchema,\n} from './schema';\nimport type { DiscoveredWorkflowSchema } from './schema';\nimport { restrictedTaskManager } from './tools';\n\n// Step 1: Always discover existing workflows\nconst workflowDiscoveryStep = createStep({\n id: 'workflow-discovery',\n description: 'Discover existing workflows in the project',\n inputSchema: WorkflowBuilderInputSchema,\n outputSchema: WorkflowDiscoveryResultSchema,\n execute: async ({ inputData, requestContext: _requestContext }) => {\n console.info('Starting workflow discovery...');\n const { projectPath = process.cwd() } = inputData;\n\n try {\n // Check if workflows directory exists\n const workflowsPath = join(projectPath, 'src/mastra/workflows');\n if (!existsSync(workflowsPath)) {\n console.info('No workflows directory found');\n return {\n success: true,\n workflows: [],\n mastraIndexExists: existsSync(join(projectPath, 'src/mastra/index.ts')),\n message: 'No existing workflows found in the project',\n };\n }\n\n // Read workflow files directly\n const workflowFiles = await readdir(workflowsPath);\n const workflows: z.infer<typeof DiscoveredWorkflowSchema>[] = [];\n\n for (const fileName of workflowFiles) {\n if (fileName.endsWith('.ts') && !fileName.endsWith('.test.ts')) {\n const filePath = join(workflowsPath, fileName);\n try {\n const content = await readFile(filePath, 'utf-8');\n\n // Extract basic workflow info\n const nameMatch = content.match(/createWorkflow\\s*\\(\\s*{\\s*id:\\s*['\"]([^'\"]+)['\"]/);\n const descMatch = content.match(/description:\\s*['\"]([^'\"]*)['\"]/);\n\n if (nameMatch && nameMatch[1]) {\n workflows.push({\n name: nameMatch[1],\n file: filePath,\n description: descMatch?.[1] ?? 'No description available',\n });\n }\n } catch (error) {\n console.warn(`Failed to read workflow file ${filePath}:`, error);\n }\n }\n }\n\n console.info(`Discovered ${workflows.length} existing workflows`);\n return {\n success: true,\n workflows,\n mastraIndexExists: existsSync(join(projectPath, 'src/mastra/index.ts')),\n message:\n workflows.length > 0\n ? `Found ${workflows.length} existing workflow(s): ${workflows.map(w => w.name).join(', ')}`\n : 'No existing workflows found in the project',\n };\n } catch (error) {\n console.error('Workflow discovery failed:', error);\n return {\n success: false,\n workflows: [],\n mastraIndexExists: false,\n message: `Workflow discovery failed: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 2: Always discover project structure\nconst projectDiscoveryStep = createStep({\n id: 'project-discovery',\n description: 'Analyze the project structure and setup',\n inputSchema: WorkflowDiscoveryResultSchema,\n outputSchema: ProjectDiscoveryResultSchema,\n execute: async ({ inputData: _inputData, requestContext: _requestContext }) => {\n console.info('Starting project discovery...');\n\n try {\n // Get project structure - no need for AgentBuilder since we're just checking files\n const projectPath = process.cwd(); // Use current working directory as default\n const projectStructure = {\n hasPackageJson: existsSync(join(projectPath, 'package.json')),\n hasMastraConfig:\n existsSync(join(projectPath, 'mastra.config.js')) || existsSync(join(projectPath, 'mastra.config.ts')),\n hasSrcDirectory: existsSync(join(projectPath, 'src')),\n hasMastraDirectory: existsSync(join(projectPath, 'src/mastra')),\n hasWorkflowsDirectory: existsSync(join(projectPath, 'src/mastra/workflows')),\n hasToolsDirectory: existsSync(join(projectPath, 'src/mastra/tools')),\n hasAgentsDirectory: existsSync(join(projectPath, 'src/mastra/agents')),\n };\n\n // Read package.json if it exists\n let packageInfo = null;\n if (projectStructure.hasPackageJson) {\n try {\n const packageContent = await readFile(join(projectPath, 'package.json'), 'utf-8');\n packageInfo = JSON.parse(packageContent);\n } catch (error) {\n console.warn('Failed to read package.json:', error);\n }\n }\n\n console.info('Project discovery completed');\n return {\n success: true,\n structure: {\n hasWorkflowsDir: projectStructure.hasWorkflowsDirectory,\n hasAgentsDir: projectStructure.hasAgentsDirectory,\n hasToolsDir: projectStructure.hasToolsDirectory,\n hasMastraIndex: existsSync(join(projectPath, 'src/mastra/index.ts')),\n existingWorkflows: [],\n existingAgents: [],\n existingTools: [],\n },\n dependencies: packageInfo?.dependencies || {},\n message: 'Project discovery completed successfully',\n };\n } catch (error) {\n console.error('Project discovery failed:', error);\n return {\n success: false,\n structure: {\n hasWorkflowsDir: false,\n hasAgentsDir: false,\n hasToolsDir: false,\n hasMastraIndex: false,\n existingWorkflows: [],\n existingAgents: [],\n existingTools: [],\n },\n dependencies: {},\n message: 'Project discovery failed',\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Step 3: Research what is needed to be done\nconst workflowResearchStep = createStep({\n id: 'workflow-research',\n description: 'Research Mastra workflows and gather relevant documentation',\n inputSchema: ProjectDiscoveryResultSchema,\n outputSchema: WorkflowResearchResultSchema,\n execute: async ({ inputData, requestContext }) => {\n console.info('Starting workflow research...');\n\n try {\n // const filteredMcpTools = await initializeMcpTools();\n\n const model = await resolveModel({ requestContext });\n\n const researchAgent = new Agent({\n id: 'workflow-research-agent',\n model,\n instructions: workflowBuilderPrompts.researchAgent.instructions,\n name: 'Workflow Research Agent',\n // tools: filteredMcpTools,\n });\n\n const researchPrompt = workflowBuilderPrompts.researchAgent.prompt({\n projectStructure: inputData.structure,\n dependencies: inputData.dependencies,\n hasWorkflowsDir: inputData.structure.hasWorkflowsDir,\n });\n\n const result = await researchAgent.generate(researchPrompt, {\n structuredOutput: {\n schema: WorkflowResearchResultSchema,\n },\n // stopWhen: stepCountIs(10),\n });\n\n const researchResult = await result.object;\n if (!researchResult) {\n return {\n success: false,\n documentation: {\n workflowPatterns: [],\n stepExamples: [],\n bestPractices: [],\n },\n webResources: [],\n message: 'Research agent failed to generate valid response',\n error: 'Research agent failed to generate valid response',\n };\n }\n\n console.info('Research completed successfully');\n return {\n success: true,\n documentation: {\n workflowPatterns: researchResult.documentation.workflowPatterns,\n stepExamples: researchResult.documentation.stepExamples,\n bestPractices: researchResult.documentation.bestPractices,\n },\n webResources: researchResult.webResources,\n message: 'Research completed successfully',\n };\n } catch (error) {\n console.error('Workflow research failed:', error);\n return {\n success: false,\n documentation: {\n workflowPatterns: [],\n stepExamples: [],\n bestPractices: [],\n },\n webResources: [],\n message: 'Research failed',\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Task execution step remains the same\nconst taskExecutionStep = createStep({\n id: 'task-execution',\n description: 'Execute the approved task list to create or edit the workflow',\n inputSchema: TaskExecutionInputSchema,\n outputSchema: TaskExecutionResultSchema,\n suspendSchema: TaskExecutionSuspendSchema,\n resumeSchema: TaskExecutionResumeSchema,\n execute: async ({ inputData, resumeData, suspend, requestContext }) => {\n const {\n action,\n workflowName,\n description: _description,\n requirements: _requirements,\n tasks,\n discoveredWorkflows,\n projectStructure,\n research,\n projectPath,\n } = inputData;\n\n console.info(`Starting task execution for ${action}ing workflow: ${workflowName}`);\n console.info(`Executing ${tasks.length} tasks using AgentBuilder stream...`);\n\n try {\n const model = await resolveModel({ requestContext });\n const currentProjectPath = projectPath || process.cwd();\n\n // Pre-populate taskManager with the planned tasks\n console.info('Pre-populating taskManager with planned tasks...');\n const taskManagerContext = {\n action: 'create' as const,\n tasks: tasks.map(task => ({\n id: task.id,\n content: task.content,\n status: 'pending' as const,\n priority: task.priority,\n dependencies: task.dependencies,\n notes: task.notes,\n })),\n };\n\n const taskManagerResult = await AgentBuilderDefaults.manageTaskList(taskManagerContext);\n console.info(`Task manager initialized with ${taskManagerResult.tasks.length} tasks`);\n\n if (!taskManagerResult.success) {\n throw new Error(`Failed to initialize task manager: ${taskManagerResult.message}`);\n }\n\n const executionAgent = new AgentBuilder({\n projectPath: currentProjectPath,\n model,\n tools: {\n 'task-manager': restrictedTaskManager,\n },\n instructions: `${workflowBuilderPrompts.executionAgent.instructions({\n action,\n workflowName,\n tasksLength: tasks.length,\n currentProjectPath,\n discoveredWorkflows,\n projectStructure,\n research,\n tasks,\n resumeData,\n })}\n\n${workflowBuilderPrompts.validation.instructions}`,\n });\n\n const executionPrompt = workflowBuilderPrompts.executionAgent.prompt({\n action,\n workflowName,\n tasks,\n resumeData,\n });\n\n const originalInstructions = await executionAgent.getInstructions({ requestContext: requestContext });\n\n const enhancedOptions = {\n stopWhen: stepCountIs(100),\n temperature: 0.3,\n instructions: originalInstructions,\n };\n\n // Loop until all tasks are completed\n let finalResult: any = null;\n let allTasksCompleted = false;\n let iterationCount = 0;\n const maxIterations = 5;\n\n const expectedTaskIds = tasks.map(task => task.id);\n\n while (!allTasksCompleted && iterationCount < maxIterations) {\n iterationCount++;\n\n const currentTaskStatus = await AgentBuilderDefaults.manageTaskList({ action: 'list' });\n const completedTasks = currentTaskStatus.tasks.filter(task => task.status === 'completed');\n const pendingTasks = currentTaskStatus.tasks.filter(task => task.status !== 'completed');\n\n console.info(`\\n=== EXECUTION ITERATION ${iterationCount} ===`);\n console.info(`Completed tasks: ${completedTasks.length}/${expectedTaskIds.length}`);\n console.info(`Remaining tasks: ${pendingTasks.map(t => t.id).join(', ')}`);\n\n // Check if all tasks are completed\n allTasksCompleted = pendingTasks.length === 0;\n\n if (allTasksCompleted) {\n console.info('All tasks completed! Breaking execution loop.');\n break;\n }\n\n // Create prompt for this iteration\n const iterationPrompt =\n iterationCount === 1\n ? executionPrompt\n : `${workflowBuilderPrompts.executionAgent.iterationPrompt({\n completedTasks,\n pendingTasks,\n workflowName,\n resumeData,\n })}\n\n${workflowBuilderPrompts.validation.instructions}`;\n\n const stream = await executionAgent.stream(iterationPrompt, {\n structuredOutput: {\n schema: TaskExecutionIterationInputSchema(tasks.length),\n model,\n },\n ...enhancedOptions,\n });\n\n let finalMessage = '';\n for await (const chunk of stream.fullStream) {\n if (chunk.type === 'text-delta') {\n finalMessage += chunk.payload.text;\n }\n\n if (chunk.type === 'step-finish') {\n console.info(finalMessage);\n finalMessage = '';\n }\n\n if (chunk.type === 'tool-result') {\n console.info(JSON.stringify(chunk, null, 2));\n }\n\n if (chunk.type === 'finish') {\n console.info(chunk);\n }\n }\n\n await stream.consumeStream();\n finalResult = await stream.object;\n\n console.info(`Iteration ${iterationCount} result:`, { finalResult });\n\n if (!finalResult) {\n throw new Error(`No result received from agent execution on iteration ${iterationCount}`);\n }\n\n const postIterationTaskStatus = await AgentBuilderDefaults.manageTaskList({ action: 'list' });\n const postCompletedTasks = postIterationTaskStatus.tasks.filter(task => task.status === 'completed');\n const postPendingTasks = postIterationTaskStatus.tasks.filter(task => task.status !== 'completed');\n\n allTasksCompleted = postPendingTasks.length === 0;\n\n console.info(\n `After iteration ${iterationCount}: ${postCompletedTasks.length}/${expectedTaskIds.length} tasks completed in taskManager`,\n );\n\n // If agent needs clarification, break out and suspend\n if (finalResult.status === 'needs_clarification' && finalResult.questions && finalResult.questions.length > 0) {\n console.info(\n `Agent needs clarification on iteration ${iterationCount}: ${finalResult.questions.length} questions`,\n );\n break;\n }\n\n // If agent claims completed but taskManager shows pending tasks, continue loop\n if (finalResult.status === 'completed' && !allTasksCompleted) {\n console.info(\n `Agent claimed completion but taskManager shows pending tasks: ${postPendingTasks.map(t => t.id).join(', ')}`,\n );\n // Continue to next iteration\n }\n }\n\n if (iterationCount >= maxIterations && !allTasksCompleted) {\n finalResult.error = `Maximum iterations (${maxIterations}) reached but not all tasks completed`;\n finalResult.status = 'in_progress';\n }\n\n if (!finalResult) {\n throw new Error('No result received from agent execution');\n }\n\n // If the agent needs clarification, suspend the workflow\n if (finalResult.status === 'needs_clarification' && finalResult.questions && finalResult.questions.length > 0) {\n console.info(`Agent needs clarification: ${finalResult.questions.length} questions`);\n\n console.info('finalResult', JSON.stringify(finalResult, null, 2));\n return suspend({\n questions: finalResult.questions,\n currentProgress: finalResult.progress,\n completedTasks: finalResult.completedTasks || [],\n message: finalResult.message,\n });\n }\n\n const finalTaskStatus = await AgentBuilderDefaults.manageTaskList({ action: 'list' });\n const finalCompletedTasks = finalTaskStatus.tasks.filter(task => task.status === 'completed');\n const finalPendingTasks = finalTaskStatus.tasks.filter(task => task.status !== 'completed');\n\n const tasksCompleted = finalCompletedTasks.length;\n const tasksExpected = expectedTaskIds.length;\n const finalAllTasksCompleted = finalPendingTasks.length === 0;\n\n const success = finalAllTasksCompleted && !finalResult.error;\n const message = success\n ? `Successfully completed workflow ${action} - all ${tasksExpected} tasks completed after ${iterationCount} iteration(s): ${finalResult.message}`\n : `Workflow execution finished with issues after ${iterationCount} iteration(s): ${finalResult.message}. Completed: ${tasksCompleted}/${tasksExpected} tasks`;\n\n console.info(message);\n\n const missingTasks = finalPendingTasks.map(task => task.id);\n const validationErrors = [];\n\n if (finalResult.error) {\n validationErrors.push(finalResult.error);\n }\n\n if (!finalAllTasksCompleted) {\n validationErrors.push(\n `Incomplete tasks: ${missingTasks.join(', ')} (${tasksCompleted}/${tasksExpected} completed)`,\n );\n }\n\n return {\n success,\n completedTasks: finalCompletedTasks.map(task => task.id),\n filesModified: finalResult.filesModified || [],\n validationResults: {\n passed: success,\n errors: validationErrors,\n warnings: finalAllTasksCompleted ? [] : [`Missing ${missingTasks.length} tasks: ${missingTasks.join(', ')}`],\n },\n message,\n error: finalResult.error,\n };\n } catch (error) {\n console.error('Task execution failed:', error);\n return {\n success: false,\n completedTasks: [],\n filesModified: [],\n validationResults: {\n passed: false,\n errors: [`Task execution failed: ${error instanceof Error ? error.message : String(error)}`],\n warnings: [],\n },\n message: `Task execution failed: ${error instanceof Error ? error.message : String(error)}`,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n});\n\n// Main Workflow Builder Workflow\nexport const workflowBuilderWorkflow = createWorkflow({\n id: 'workflow-builder',\n description: 'Create or edit Mastra workflows using AI-powered assistance with iterative planning',\n inputSchema: WorkflowBuilderInputSchema,\n outputSchema: WorkflowBuilderResultSchema,\n steps: [\n workflowDiscoveryStep,\n projectDiscoveryStep,\n workflowResearchStep,\n planningAndApprovalWorkflow,\n taskExecutionStep,\n ],\n})\n // Step 1: Always discover existing workflows\n .then(workflowDiscoveryStep)\n // Step 2: Always discover project structure\n .then(projectDiscoveryStep)\n // Step 3: Research workflows and documentation\n .then(workflowResearchStep)\n // Map research result to planning input format\n .map(async ({ getStepResult, getInitData }) => {\n const initData = getInitData();\n const discoveryResult = getStepResult(workflowDiscoveryStep);\n const projectResult = getStepResult(projectDiscoveryStep);\n // const researchResult = getStepResult(workflowResearchStep);\n\n return {\n action: initData.action,\n workflowName: initData.workflowName,\n description: initData.description,\n requirements: initData.requirements,\n discoveredWorkflows: discoveryResult.workflows,\n projectStructure: projectResult,\n // research: researchResult,\n research,\n\n userAnswers: undefined,\n };\n })\n // Step 4: Planning and Approval Sub-workflow (loops until approved)\n .dountil(planningAndApprovalWorkflow, async ({ inputData }) => {\n // Continue looping until user approves the task list\n console.info(`Sub-workflow check: approved=${inputData.approved}`);\n return inputData.approved === true;\n })\n // Map sub-workflow result to task execution input\n .map(async ({ getStepResult, getInitData }) => {\n const initData = getInitData();\n const discoveryResult = getStepResult(workflowDiscoveryStep);\n const projectResult = getStepResult(projectDiscoveryStep);\n // const researchResult = getStepResult(workflowResearchStep);\n const subWorkflowResult = getStepResult(planningAndApprovalWorkflow);\n\n return {\n action: initData.action,\n workflowName: initData.workflowName,\n description: initData.description,\n requirements: initData.requirements,\n tasks: subWorkflowResult.tasks,\n discoveredWorkflows: discoveryResult.workflows,\n projectStructure: projectResult,\n // research: researchResult,\n research,\n projectPath: initData.projectPath || process.cwd(),\n };\n })\n // Step 5: Execute the approved tasks\n .then(taskExecutionStep)\n .commit();\n","import type { Workflow } from '@mastra/core/workflows';\nimport { agentBuilderTemplateWorkflow } from './template-builder/template-builder';\nimport { workflowBuilderWorkflow } from './workflow-builder/workflow-builder';\n\nexport const agentBuilderWorkflows: Record<string, Workflow<any, any, any, any, any, any>> = {\n 'merge-template': agentBuilderTemplateWorkflow,\n 'workflow-builder': workflowBuilderWorkflow,\n};\n"]}
|