@mastra/agent-builder 1.0.0-beta.0 β 1.0.0-beta.10
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 +117 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/chunk-2CIPVDK5.js +250 -0
- package/dist/chunk-2CIPVDK5.js.map +1 -0
- package/dist/chunk-E53QBCQN.js +84 -0
- package/dist/chunk-E53QBCQN.js.map +1 -0
- package/dist/defaults.d.ts +137 -107
- package/dist/defaults.d.ts.map +1 -1
- package/dist/index.js +4428 -103
- package/dist/index.js.map +1 -1
- package/dist/processors/tool-summary.d.ts +12 -6
- package/dist/processors/tool-summary.d.ts.map +1 -1
- package/dist/token-6GSAFR2W-KVDFAJ2M.js +61 -0
- package/dist/token-6GSAFR2W-KVDFAJ2M.js.map +1 -0
- package/dist/token-util-NEHG7TUY-DJYRKLRD.js +9 -0
- package/dist/token-util-NEHG7TUY-DJYRKLRD.js.map +1 -0
- package/dist/types.d.ts +7 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +8 -7
- package/dist/utils.d.ts.map +1 -1
- package/dist/workflows/task-planning/task-planning.d.ts.map +1 -1
- package/dist/workflows/template-builder/template-builder.d.ts +6 -6
- package/dist/workflows/template-builder/template-builder.d.ts.map +1 -1
- package/dist/workflows/workflow-builder/tools.d.ts +3 -1
- package/dist/workflows/workflow-builder/tools.d.ts.map +1 -1
- package/dist/workflows/workflow-builder/workflow-builder.d.ts.map +1 -1
- package/package.json +9 -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","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.0/node_modules/@ai-sdk/provider/src/errors/ai-sdk-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.0/node_modules/@ai-sdk/provider/src/errors/api-call-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.0/node_modules/@ai-sdk/provider/src/errors/empty-response-body-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.0/node_modules/@ai-sdk/provider/src/errors/get-error-message.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.0/node_modules/@ai-sdk/provider/src/errors/invalid-argument-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.0/node_modules/@ai-sdk/provider/src/errors/json-parse-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.0/node_modules/@ai-sdk/provider/src/errors/type-validation-error.ts","../../../node_modules/.pnpm/eventsource-parser@3.0.6/node_modules/eventsource-parser/src/errors.ts","../../../node_modules/.pnpm/eventsource-parser@3.0.6/node_modules/eventsource-parser/src/parse.ts","../../../node_modules/.pnpm/eventsource-parser@3.0.6/node_modules/eventsource-parser/src/stream.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/combine-headers.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/extract-response-headers.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/generate-id.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/is-abort-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/handle-fetch-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/get-runtime-environment-user-agent.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/normalize-headers.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/with-user-agent-suffix.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/version.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/get-from-api.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/load-optional-setting.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/secure-json-parse.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/validator.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/validate-types.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/parse-json.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/parse-json-event-stream.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/post-to-api.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/resolve.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/response-handler.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/get-relative-path.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/options.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/any.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/array.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/bigint.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/boolean.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/branded.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/catch.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/date.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/default.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/effects.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/enum.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/intersection.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/literal.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/string.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/record.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/map.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/native-enum.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/never.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/null.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/union.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/nullable.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/number.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/object.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/optional.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/pipeline.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/promise.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/set.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/tuple.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/undefined.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/unknown.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/readonly.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/select-parser.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parse-def.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/refs.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/zod-to-json-schema.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/index.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/zod-schema.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/schema.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.17_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/without-trailing-slash.ts","../../../node_modules/.pnpm/@vercel+oidc@3.0.5/node_modules/@vercel/oidc/dist/get-context.js","../../../node_modules/.pnpm/@vercel+oidc@3.0.5/node_modules/@vercel/oidc/dist/get-vercel-oidc-token.js","../../../node_modules/.pnpm/@vercel+oidc@3.0.5/node_modules/@vercel/oidc/dist/index.js","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/vercel-environment.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-authentication-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-invalid-request-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-rate-limit-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-model-not-found-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-internal-server-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-response-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/create-gateway-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/as-gateway-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/extract-api-call-response.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/parse-auth-method.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-fetch-metadata.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-language-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-embedding-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-image-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/version.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.15_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-provider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/platform/node/globalThis.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/version.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/internal/semver.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/internal/global-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/ComponentLogger.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/types.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/internal/logLevelLogger.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/diag.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context/context.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context/NoopContextManager.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/context.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/trace_flags.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/invalid-span-constants.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NonRecordingSpan.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/context-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/spancontext-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NoopTracer.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/ProxyTracer.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NoopTracerProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/ProxyTracerProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/status.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/trace.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace-api.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/error/no-object-generated-error.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/prompt/data-content.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/types/json-value.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/types/provider-metadata.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/prompt/content-part.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/prompt/message.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/generate-text/stop-condition.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/generate-text/generate-text.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/ui-message-stream/json-to-sse-transform-stream.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/util/fix-json.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/util/parse-partial-json.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/generate-text/stream-text.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/generate-object/generate-object.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/generate-object/stream-object.ts","../../../node_modules/.pnpm/ai@5.0.101_zod@3.25.76/node_modules/ai/src/generate-text/output.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","name","join","dirname","Agent","writeFile","existsSync","readdir","basename","extname","mkdir","copyFile","createTool","_AISDKError","marker","symbol","_a","text","_TypeValidationError","_b","fetch","APICallError","validator","TypeValidationError","getOriginalFetch","ZodFirstPartyTypeKind","object","types","x","jsonSchema","schema","zodSchema","__defProp","__export","getContext","getVercelOidcToken","getVercelOidcTokenSync","import_oidc","lazyValidator","safeValidateTypes","createJsonResponseHandler","createJsonErrorResponseHandler","postJsonToApi","combineHeaders","VERSION","now","isCompatible","DiagComponentLogger","DiagLogLevel","DiagAPI","__spreadArray","__read","BaseContext","NoopContextManager","API_NAME","ContextAPI","TraceFlags","NonRecordingSpan","NoopTracer","ProxyTracer","NoopTracerProvider","ProxyTracerProvider","SpanStatusCode","TraceAPI","AISDKError","safeParseJSON","createIdGenerator","asSchema","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;;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;AA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","file":"index.js","sourcesContent":["import type { ToolsInput } from '@mastra/core/agent';\nimport type { MastraModelConfig } from '@mastra/core/llm';\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: MastraModelConfig;\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?: MastraModelConfig;\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().optional().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, MastraLegacyLanguageModel } 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 language model (V1, V2, or V3)\nexport const isValidMastraLanguageModel = (model: any): model is MastraLanguageModel | MastraLegacyLanguageModel => {\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 | MastraLegacyLanguageModel | ModelRouterLanguageModel | 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 | MastraLegacyLanguageModel | string;\n projectPath?: string;\n}): Promise<MastraLanguageModel | MastraLegacyLanguageModel> => {\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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: stopResult.errorMessage || '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 errorMessage: startResult.errorMessage || '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 errorMessage: 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 errorMessage: 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 errorMessage: 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 ')) {\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 errorMessage: 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 errorMessage: `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 errorMessage: `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 errorMessage: `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 errorMessage: 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 errorMessage: 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 errorMessage: '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 errorMessage: '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 errorMessage: '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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: 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 errorMessage: error instanceof Error ? error.message : String(error),\n };\n }\n }\n}\n","import { Agent } from '@mastra/core/agent';\nimport type { MastraDBMessage, MessageList } from '@mastra/core/agent';\nimport type { MastraModelConfig } from '@mastra/core/llm';\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: MastraModelConfig }) {\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 {\n Agent,\n tryGenerateWithJsonFallback,\n tryStreamWithJsonFallback,\n isSupportedLanguageModel,\n} 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 resolvedModel = await agent.getModel();\n const isSupported = isSupportedLanguageModel(resolvedModel);\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 = isSupported\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 errorMessage: 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 (err) {\n return {\n success: false,\n message: `Failed to copy file: ${err instanceof Error ? err.message : String(err)}`,\n errorMessage: err instanceof Error ? err.message : String(err),\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 resolvedModel = await agentBuilder.getModel();\n const isSupported = isSupportedLanguageModel(resolvedModel);\n const result = isSupported ? 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 resolvedModel = await validationAgent.getModel();\n const isSupported = isSupportedLanguageModel(resolvedModel);\n const output = z.object({ success: z.boolean() });\n const result = isSupported\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","/**\n * Symbol used for identifying AI SDK Error instances.\n * Enables checking if an error is an instance of AISDKError across package versions.\n */\nconst marker = 'vercel.ai.error';\nconst symbol = Symbol.for(marker);\n\n/**\n * Custom error class for AI SDK related errors.\n * @extends Error\n */\nexport class AISDKError extends Error {\n private readonly [symbol] = true; // used in isInstance\n\n /**\n * The underlying cause of the error, if any.\n */\n readonly cause?: unknown;\n\n /**\n * Creates an AI SDK Error.\n *\n * @param {Object} params - The parameters for creating the error.\n * @param {string} params.name - The name of the error.\n * @param {string} params.message - The error message.\n * @param {unknown} [params.cause] - The underlying cause of the error.\n */\n constructor({\n name,\n message,\n cause,\n }: {\n name: string;\n message: string;\n cause?: unknown;\n }) {\n super(message);\n\n this.name = name;\n this.cause = cause;\n }\n\n /**\n * Checks if the given error is an AI SDK Error.\n * @param {unknown} error - The error to check.\n * @returns {boolean} True if the error is an AI SDK Error, false otherwise.\n */\n static isInstance(error: unknown): error is AISDKError {\n return AISDKError.hasMarker(error, marker);\n }\n\n protected static hasMarker(error: unknown, marker: string): boolean {\n const markerSymbol = Symbol.for(marker);\n return (\n error != null &&\n typeof error === 'object' &&\n markerSymbol in error &&\n typeof error[markerSymbol] === 'boolean' &&\n error[markerSymbol] === true\n );\n }\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_APICallError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class APICallError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly url: string;\n readonly requestBodyValues: unknown;\n readonly statusCode?: number;\n\n readonly responseHeaders?: Record<string, string>;\n readonly responseBody?: string;\n\n readonly isRetryable: boolean;\n readonly data?: unknown;\n\n constructor({\n message,\n url,\n requestBodyValues,\n statusCode,\n responseHeaders,\n responseBody,\n cause,\n isRetryable = statusCode != null &&\n (statusCode === 408 || // request timeout\n statusCode === 409 || // conflict\n statusCode === 429 || // too many requests\n statusCode >= 500), // server error\n data,\n }: {\n message: string;\n url: string;\n requestBodyValues: unknown;\n statusCode?: number;\n responseHeaders?: Record<string, string>;\n responseBody?: string;\n cause?: unknown;\n isRetryable?: boolean;\n data?: unknown;\n }) {\n super({ name, message, cause });\n\n this.url = url;\n this.requestBodyValues = requestBodyValues;\n this.statusCode = statusCode;\n this.responseHeaders = responseHeaders;\n this.responseBody = responseBody;\n this.isRetryable = isRetryable;\n this.data = data;\n }\n\n static isInstance(error: unknown): error is APICallError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_EmptyResponseBodyError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class EmptyResponseBodyError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n constructor({ message = 'Empty response body' }: { message?: string } = {}) {\n super({ name, message });\n }\n\n static isInstance(error: unknown): error is EmptyResponseBodyError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","export function getErrorMessage(error: unknown | undefined) {\n if (error == null) {\n return 'unknown error';\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n if (error instanceof Error) {\n return error.message;\n }\n\n return JSON.stringify(error);\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_InvalidArgumentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * A function argument is invalid.\n */\nexport class InvalidArgumentError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly argument: string;\n\n constructor({\n message,\n cause,\n argument,\n }: {\n argument: string;\n message: string;\n cause?: unknown;\n }) {\n super({ name, message, cause });\n\n this.argument = argument;\n }\n\n static isInstance(error: unknown): error is InvalidArgumentError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from './ai-sdk-error';\nimport { getErrorMessage } from './get-error-message';\n\nconst name = 'AI_JSONParseError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n// TODO v5: rename to ParseError\nexport class JSONParseError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly text: string;\n\n constructor({ text, cause }: { text: string; cause: unknown }) {\n super({\n name,\n message:\n `JSON parsing failed: ` +\n `Text: ${text}.\\n` +\n `Error message: ${getErrorMessage(cause)}`,\n cause,\n });\n\n this.text = text;\n }\n\n static isInstance(error: unknown): error is JSONParseError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from './ai-sdk-error';\nimport { getErrorMessage } from './get-error-message';\n\nconst name = 'AI_TypeValidationError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class TypeValidationError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly value: unknown;\n\n constructor({ value, cause }: { value: unknown; cause: unknown }) {\n super({\n name,\n message:\n `Type validation failed: ` +\n `Value: ${JSON.stringify(value)}.\\n` +\n `Error message: ${getErrorMessage(cause)}`,\n cause,\n });\n\n this.value = value;\n }\n\n static isInstance(error: unknown): error is TypeValidationError {\n return AISDKError.hasMarker(error, marker);\n }\n\n /**\n * Wraps an error into a TypeValidationError.\n * If the cause is already a TypeValidationError with the same value, it returns the cause.\n * Otherwise, it creates a new TypeValidationError.\n *\n * @param {Object} params - The parameters for wrapping the error.\n * @param {unknown} params.value - The value that failed validation.\n * @param {unknown} params.cause - The original error or cause of the validation failure.\n * @returns {TypeValidationError} A TypeValidationError instance.\n */\n static wrap({\n value,\n cause,\n }: {\n value: unknown;\n cause: unknown;\n }): TypeValidationError {\n return TypeValidationError.isInstance(cause) && cause.value === value\n ? cause\n : new TypeValidationError({ value, cause });\n }\n}\n","/**\n * The type of error that occurred.\n * @public\n */\nexport type ErrorType = 'invalid-retry' | 'unknown-field'\n\n/**\n * Error thrown when encountering an issue during parsing.\n *\n * @public\n */\nexport class ParseError extends Error {\n /**\n * The type of error that occurred.\n */\n type: ErrorType\n\n /**\n * In the case of an unknown field encountered in the stream, this will be the field name.\n */\n field?: string | undefined\n\n /**\n * In the case of an unknown field encountered in the stream, this will be the value of the field.\n */\n value?: string | undefined\n\n /**\n * The line that caused the error, if available.\n */\n line?: string | undefined\n\n constructor(\n message: string,\n options: {type: ErrorType; field?: string; value?: string; line?: string},\n ) {\n super(message)\n this.name = 'ParseError'\n this.type = options.type\n this.field = options.field\n this.value = options.value\n this.line = options.line\n }\n}\n","/**\n * EventSource/Server-Sent Events parser\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html\n */\nimport {ParseError} from './errors.ts'\nimport type {EventSourceParser, ParserCallbacks} from './types.ts'\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction noop(_arg: unknown) {\n // intentional noop\n}\n\n/**\n * Creates a new EventSource parser.\n *\n * @param callbacks - Callbacks to invoke on different parsing events:\n * - `onEvent` when a new event is parsed\n * - `onError` when an error occurs\n * - `onRetry` when a new reconnection interval has been sent from the server\n * - `onComment` when a comment is encountered in the stream\n *\n * @returns A new EventSource parser, with `parse` and `reset` methods.\n * @public\n */\nexport function createParser(callbacks: ParserCallbacks): EventSourceParser {\n if (typeof callbacks === 'function') {\n throw new TypeError(\n '`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?',\n )\n }\n\n const {onEvent = noop, onError = noop, onRetry = noop, onComment} = callbacks\n\n let incompleteLine = ''\n\n let isFirstChunk = true\n let id: string | undefined\n let data = ''\n let eventType = ''\n\n function feed(newChunk: string) {\n // Strip any UTF8 byte order mark (BOM) at the start of the stream\n const chunk = isFirstChunk ? newChunk.replace(/^\\xEF\\xBB\\xBF/, '') : newChunk\n\n // If there was a previous incomplete line, append it to the new chunk,\n // so we may process it together as a new (hopefully complete) chunk.\n const [complete, incomplete] = splitLines(`${incompleteLine}${chunk}`)\n\n for (const line of complete) {\n parseLine(line)\n }\n\n incompleteLine = incomplete\n isFirstChunk = false\n }\n\n function parseLine(line: string) {\n // If the line is empty (a blank line), dispatch the event\n if (line === '') {\n dispatchEvent()\n return\n }\n\n // If the line starts with a U+003A COLON character (:), ignore the line.\n if (line.startsWith(':')) {\n if (onComment) {\n onComment(line.slice(line.startsWith(': ') ? 2 : 1))\n }\n return\n }\n\n // If the line contains a U+003A COLON character (:)\n const fieldSeparatorIndex = line.indexOf(':')\n if (fieldSeparatorIndex !== -1) {\n // Collect the characters on the line before the first U+003A COLON character (:),\n // and let `field` be that string.\n const field = line.slice(0, fieldSeparatorIndex)\n\n // Collect the characters on the line after the first U+003A COLON character (:),\n // and let `value` be that string. If value starts with a U+0020 SPACE character,\n // remove it from value.\n const offset = line[fieldSeparatorIndex + 1] === ' ' ? 2 : 1\n const value = line.slice(fieldSeparatorIndex + offset)\n\n processField(field, value, line)\n return\n }\n\n // Otherwise, the string is not empty but does not contain a U+003A COLON character (:)\n // Process the field using the whole line as the field name, and an empty string as the field value.\n // π This is according to spec. That means that a line that has the value `data` will result in\n // a newline being added to the current `data` buffer, for instance.\n processField(line, '', line)\n }\n\n function processField(field: string, value: string, line: string) {\n // Field names must be compared literally, with no case folding performed.\n switch (field) {\n case 'event':\n // Set the `event type` buffer to field value\n eventType = value\n break\n case 'data':\n // Append the field value to the `data` buffer, then append a single U+000A LINE FEED(LF)\n // character to the `data` buffer.\n data = `${data}${value}\\n`\n break\n case 'id':\n // If the field value does not contain U+0000 NULL, then set the `ID` buffer to\n // the field value. Otherwise, ignore the field.\n id = value.includes('\\0') ? undefined : value\n break\n case 'retry':\n // If the field value consists of only ASCII digits, then interpret the field value as an\n // integer in base ten, and set the event stream's reconnection time to that integer.\n // Otherwise, ignore the field.\n if (/^\\d+$/.test(value)) {\n onRetry(parseInt(value, 10))\n } else {\n onError(\n new ParseError(`Invalid \\`retry\\` value: \"${value}\"`, {\n type: 'invalid-retry',\n value,\n line,\n }),\n )\n }\n break\n default:\n // Otherwise, the field is ignored.\n onError(\n new ParseError(\n `Unknown field \"${field.length > 20 ? `${field.slice(0, 20)}β¦` : field}\"`,\n {type: 'unknown-field', field, value, line},\n ),\n )\n break\n }\n }\n\n function dispatchEvent() {\n const shouldDispatch = data.length > 0\n if (shouldDispatch) {\n onEvent({\n id,\n event: eventType || undefined,\n // If the data buffer's last character is a U+000A LINE FEED (LF) character,\n // then remove the last character from the data buffer.\n data: data.endsWith('\\n') ? data.slice(0, -1) : data,\n })\n }\n\n // Reset for the next event\n id = undefined\n data = ''\n eventType = ''\n }\n\n function reset(options: {consume?: boolean} = {}) {\n if (incompleteLine && options.consume) {\n parseLine(incompleteLine)\n }\n\n isFirstChunk = true\n id = undefined\n data = ''\n eventType = ''\n incompleteLine = ''\n }\n\n return {feed, reset}\n}\n\n/**\n * For the given `chunk`, split it into lines according to spec, and return any remaining incomplete line.\n *\n * @param chunk - The chunk to split into lines\n * @returns A tuple containing an array of complete lines, and any remaining incomplete line\n * @internal\n */\nfunction splitLines(chunk: string): [complete: Array<string>, incomplete: string] {\n /**\n * According to the spec, a line is terminated by either:\n * - U+000D CARRIAGE RETURN U+000A LINE FEED (CRLF) character pair\n * - a single U+000A LINE FEED(LF) character not preceded by a U+000D CARRIAGE RETURN(CR) character\n * - a single U+000D CARRIAGE RETURN(CR) character not followed by a U+000A LINE FEED(LF) character\n */\n const lines: Array<string> = []\n let incompleteLine = ''\n let searchIndex = 0\n\n while (searchIndex < chunk.length) {\n // Find next line terminator\n const crIndex = chunk.indexOf('\\r', searchIndex)\n const lfIndex = chunk.indexOf('\\n', searchIndex)\n\n // Determine line end\n let lineEnd = -1\n if (crIndex !== -1 && lfIndex !== -1) {\n // CRLF case\n lineEnd = Math.min(crIndex, lfIndex)\n } else if (crIndex !== -1) {\n // CR at the end of a chunk might be part of a CRLF sequence that spans chunks,\n // so we shouldn't treat it as a line terminator (yet)\n if (crIndex === chunk.length - 1) {\n lineEnd = -1\n } else {\n lineEnd = crIndex\n }\n } else if (lfIndex !== -1) {\n lineEnd = lfIndex\n }\n\n // Extract line if terminator found\n if (lineEnd === -1) {\n // No terminator found, rest is incomplete\n incompleteLine = chunk.slice(searchIndex)\n break\n } else {\n const line = chunk.slice(searchIndex, lineEnd)\n lines.push(line)\n\n // Move past line terminator\n searchIndex = lineEnd + 1\n if (chunk[searchIndex - 1] === '\\r' && chunk[searchIndex] === '\\n') {\n searchIndex++\n }\n }\n }\n\n return [lines, incompleteLine]\n}\n","import {createParser} from './parse.ts'\nimport type {EventSourceMessage, EventSourceParser} from './types.ts'\n\n/**\n * Options for the EventSourceParserStream.\n *\n * @public\n */\nexport interface StreamOptions {\n /**\n * Behavior when a parsing error occurs.\n *\n * - A custom function can be provided to handle the error.\n * - `'terminate'` will error the stream and stop parsing.\n * - Any other value will ignore the error and continue parsing.\n *\n * @defaultValue `undefined`\n */\n onError?: ('terminate' | ((error: Error) => void)) | undefined\n\n /**\n * Callback for when a reconnection interval is sent from the server.\n *\n * @param retry - The number of milliseconds to wait before reconnecting.\n */\n onRetry?: ((retry: number) => void) | undefined\n\n /**\n * Callback for when a comment is encountered in the stream.\n *\n * @param comment - The comment encountered in the stream.\n */\n onComment?: ((comment: string) => void) | undefined\n}\n\n/**\n * A TransformStream that ingests a stream of strings and produces a stream of `EventSourceMessage`.\n *\n * @example Basic usage\n * ```\n * const eventStream =\n * response.body\n * .pipeThrough(new TextDecoderStream())\n * .pipeThrough(new EventSourceParserStream())\n * ```\n *\n * @example Terminate stream on parsing errors\n * ```\n * const eventStream =\n * response.body\n * .pipeThrough(new TextDecoderStream())\n * .pipeThrough(new EventSourceParserStream({terminateOnError: true}))\n * ```\n *\n * @public\n */\nexport class EventSourceParserStream extends TransformStream<string, EventSourceMessage> {\n constructor({onError, onRetry, onComment}: StreamOptions = {}) {\n let parser!: EventSourceParser\n\n super({\n start(controller) {\n parser = createParser({\n onEvent: (event) => {\n controller.enqueue(event)\n },\n onError(error) {\n if (onError === 'terminate') {\n controller.error(error)\n } else if (typeof onError === 'function') {\n onError(error)\n }\n\n // Ignore by default\n },\n onRetry,\n onComment,\n })\n },\n transform(chunk) {\n parser.feed(chunk)\n },\n })\n }\n}\n\nexport {type ErrorType, ParseError} from './errors.ts'\nexport type {EventSourceMessage} from './types.ts'\n","export function combineHeaders(\n ...headers: Array<Record<string, string | undefined> | undefined>\n): Record<string, string | undefined> {\n return headers.reduce(\n (combinedHeaders, currentHeaders) => ({\n ...combinedHeaders,\n ...(currentHeaders ?? {}),\n }),\n {},\n ) as Record<string, string | undefined>;\n}\n","/**\nExtracts the headers from a response object and returns them as a key-value object.\n\n@param response - The response object to extract headers from.\n@returns The headers as a key-value object.\n*/\nexport function extractResponseHeaders(response: Response) {\n return Object.fromEntries<string>([...response.headers]);\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\n\n/**\nCreates an ID generator.\nThe total length of the ID is the sum of the prefix, separator, and random part length.\nNot cryptographically secure.\n\n@param alphabet - The alphabet to use for the ID. Default: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.\n@param prefix - The prefix of the ID to generate. Optional.\n@param separator - The separator between the prefix and the random part of the ID. Default: '-'.\n@param size - The size of the random part of the ID to generate. Default: 16.\n */\nexport const createIdGenerator = ({\n prefix,\n size = 16,\n alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n separator = '-',\n}: {\n prefix?: string;\n separator?: string;\n size?: number;\n alphabet?: string;\n} = {}): IdGenerator => {\n const generator = () => {\n const alphabetLength = alphabet.length;\n const chars = new Array(size);\n for (let i = 0; i < size; i++) {\n chars[i] = alphabet[(Math.random() * alphabetLength) | 0];\n }\n return chars.join('');\n };\n\n if (prefix == null) {\n return generator;\n }\n\n // check that the prefix is not part of the alphabet (otherwise prefix checking can fail randomly)\n if (alphabet.includes(separator)) {\n throw new InvalidArgumentError({\n argument: 'separator',\n message: `The separator \"${separator}\" must not be part of the alphabet \"${alphabet}\".`,\n });\n }\n\n return () => `${prefix}${separator}${generator()}`;\n};\n\n/**\nA function that generates an ID.\n */\nexport type IdGenerator = () => string;\n\n/**\nGenerates a 16-character random string to use for IDs.\nNot cryptographically secure.\n */\nexport const generateId = createIdGenerator();\n","export function isAbortError(error: unknown): error is Error {\n return (\n (error instanceof Error || error instanceof DOMException) &&\n (error.name === 'AbortError' ||\n error.name === 'ResponseAborted' || // Next.js\n error.name === 'TimeoutError')\n );\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { isAbortError } from './is-abort-error';\n\nconst FETCH_FAILED_ERROR_MESSAGES = ['fetch failed', 'failed to fetch'];\n\nexport function handleFetchError({\n error,\n url,\n requestBodyValues,\n}: {\n error: unknown;\n url: string;\n requestBodyValues: unknown;\n}) {\n if (isAbortError(error)) {\n return error;\n }\n\n // unwrap original error when fetch failed (for easier debugging):\n if (\n error instanceof TypeError &&\n FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())\n ) {\n const cause = (error as any).cause;\n\n if (cause != null) {\n // Failed to connect to server:\n return new APICallError({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n requestBodyValues,\n isRetryable: true, // retry when network error\n });\n }\n }\n\n return error;\n}\n","export function getRuntimeEnvironmentUserAgent(\n globalThisAny: any = globalThis as any,\n): string {\n // Browsers\n if (globalThisAny.window) {\n return `runtime/browser`;\n }\n\n // Cloudflare Workers / Deno / Bun / Node.js >= 21.1\n if (globalThisAny.navigator?.userAgent) {\n return `runtime/${globalThisAny.navigator.userAgent.toLowerCase()}`;\n }\n\n // Nodes.js < 21.1\n if (globalThisAny.process?.versions?.node) {\n return `runtime/node.js/${globalThisAny.process.version.substring(0)}`;\n }\n\n if (globalThisAny.EdgeRuntime) {\n return `runtime/vercel-edge`;\n }\n\n return 'runtime/unknown';\n}\n","/**\n * Normalizes different header inputs into a plain record with lower-case keys.\n * Entries with `undefined` or `null` values are removed.\n *\n * @param headers - Input headers (`Headers`, tuples array, plain record) to normalize.\n * @returns A record containing the normalized header entries.\n */\nexport function normalizeHeaders(\n headers:\n | HeadersInit\n | Record<string, string | undefined>\n | Array<[string, string | undefined]>\n | undefined,\n): Record<string, string> {\n if (headers == null) {\n return {};\n }\n\n const normalized: Record<string, string> = {};\n\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n normalized[key.toLowerCase()] = value;\n });\n } else {\n if (!Array.isArray(headers)) {\n headers = Object.entries(headers);\n }\n\n for (const [key, value] of headers) {\n if (value != null) {\n normalized[key.toLowerCase()] = value;\n }\n }\n }\n\n return normalized;\n}\n","import { normalizeHeaders } from './normalize-headers';\n\n/**\n * Appends suffix parts to the `user-agent` header.\n * If a `user-agent` header already exists, the suffix parts are appended to it.\n * If no `user-agent` header exists, a new one is created with the suffix parts.\n * Automatically removes undefined entries from the headers.\n *\n * @param headers - The original headers.\n * @param userAgentSuffixParts - The parts to append to the `user-agent` header.\n * @returns The new headers with the `user-agent` header set or updated.\n */\nexport function withUserAgentSuffix(\n headers: HeadersInit | Record<string, string | undefined> | undefined,\n ...userAgentSuffixParts: string[]\n): Record<string, string> {\n const normalizedHeaders = new Headers(normalizeHeaders(headers));\n\n const currentUserAgentHeader = normalizedHeaders.get('user-agent') || '';\n\n normalizedHeaders.set(\n 'user-agent',\n [currentUserAgentHeader, ...userAgentSuffixParts].filter(Boolean).join(' '),\n );\n\n return Object.fromEntries(normalizedHeaders.entries());\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport { ResponseHandler } from './response-handler';\nimport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nimport { withUserAgentSuffix } from './with-user-agent-suffix';\nimport { VERSION } from './version';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => globalThis.fetch;\n\nexport const getFromApi = async <T>({\n url,\n headers = {},\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch(),\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n failedResponseHandler: ResponseHandler<Error>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}) => {\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: withUserAgentSuffix(\n headers,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n ),\n signal: abortSignal,\n });\n\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.ok) {\n let errorInformation: {\n value: Error;\n responseHeaders?: Record<string, string> | undefined;\n };\n\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: {},\n });\n } catch (error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n\n throw new APICallError({\n message: 'Failed to process error response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {},\n });\n }\n\n throw errorInformation.value;\n }\n\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: {},\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n }\n\n throw new APICallError({\n message: 'Failed to process successful response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {},\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: {} });\n }\n};\n","/**\n * Loads an optional `string` setting from the environment or a parameter.\n *\n * @param settingValue - The setting value.\n * @param environmentVariableName - The environment variable name.\n * @returns The setting value.\n */\nexport function loadOptionalSetting({\n settingValue,\n environmentVariableName,\n}: {\n settingValue: string | undefined;\n environmentVariableName: string;\n}): string | undefined {\n if (typeof settingValue === 'string') {\n return settingValue;\n }\n\n if (settingValue != null || typeof process === 'undefined') {\n return undefined;\n }\n\n settingValue = process.env[environmentVariableName];\n\n if (settingValue == null || typeof settingValue !== 'string') {\n return undefined;\n }\n\n return settingValue;\n}\n","// Licensed under BSD-3-Clause (this file only)\n// Code adapted from https://github.com/fastify/secure-json-parse/blob/783fcb1b5434709466759847cec974381939673a/index.js\n//\n// Copyright (c) Vercel, Inc. (https://vercel.com)\n// Copyright (c) 2019 The Fastify Team\n// Copyright (c) 2019, Sideway Inc, and project contributors\n// All rights reserved.\n//\n// The complete list of contributors can be found at:\n// - https://github.com/hapijs/bourne/graphs/contributors\n// - https://github.com/fastify/secure-json-parse/graphs/contributors\n// - https://github.com/vercel/ai/commits/main/packages/provider-utils/src/secure-parse-json.ts\n//\n// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n//\n// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nconst suspectProtoRx = /\"__proto__\"\\s*:/;\nconst suspectConstructorRx = /\"constructor\"\\s*:/;\n\nfunction _parse(text: string) {\n // Parse normally\n const obj = JSON.parse(text);\n\n // Ignore null and non-objects\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (\n suspectProtoRx.test(text) === false &&\n suspectConstructorRx.test(text) === false\n ) {\n return obj;\n }\n\n // Scan result for proto keys\n return filter(obj);\n}\n\nfunction filter(obj: any) {\n let next = [obj];\n\n while (next.length) {\n const nodes = next;\n next = [];\n\n for (const node of nodes) {\n if (Object.prototype.hasOwnProperty.call(node, '__proto__')) {\n throw new SyntaxError('Object contains forbidden prototype property');\n }\n\n if (\n Object.prototype.hasOwnProperty.call(node, 'constructor') &&\n Object.prototype.hasOwnProperty.call(node.constructor, 'prototype')\n ) {\n throw new SyntaxError('Object contains forbidden prototype property');\n }\n\n for (const key in node) {\n const value = node[key];\n if (value && typeof value === 'object') {\n next.push(value);\n }\n }\n }\n }\n return obj;\n}\n\nexport function secureJsonParse(text: string) {\n const { stackTraceLimit } = Error;\n try {\n // Performance optimization, see https://github.com/fastify/secure-json-parse/pull/90\n Error.stackTraceLimit = 0;\n } catch (e) {\n // Fallback in case Error is immutable (v8 readonly)\n return _parse(text);\n }\n\n try {\n return _parse(text);\n } finally {\n Error.stackTraceLimit = stackTraceLimit;\n }\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\n\n/**\n * Used to mark validator functions so we can support both Zod and custom schemas.\n */\nexport const validatorSymbol = Symbol.for('vercel.ai.validator');\n\nexport type ValidationResult<OBJECT> =\n | { success: true; value: OBJECT }\n | { success: false; error: Error };\n\nexport type Validator<OBJECT = unknown> = {\n /**\n * Used to mark validator functions so we can support both Zod and custom schemas.\n */\n [validatorSymbol]: true;\n\n /**\n * Optional. Validates that the structure of a value matches this schema,\n * and returns a typed version of the value if it does.\n */\n readonly validate?: (\n value: unknown,\n ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>;\n};\n\n/**\n * Create a validator.\n *\n * @param validate A validation function for the schema.\n */\nexport function validator<OBJECT>(\n validate?:\n | undefined\n | ((\n value: unknown,\n ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>),\n): Validator<OBJECT> {\n return { [validatorSymbol]: true, validate };\n}\n\nexport function isValidator(value: unknown): value is Validator {\n return (\n typeof value === 'object' &&\n value !== null &&\n validatorSymbol in value &&\n value[validatorSymbol] === true &&\n 'validate' in value\n );\n}\n\n/**\n * Creates a validator with deferred creation.\n * This is important to reduce the startup time of the library\n * and to avoid initializing unused validators.\n *\n * @param createValidator A function that creates a validator.\n * @returns A function that returns a validator.\n */\nexport function lazyValidator<OBJECT>(\n createValidator: () => Validator<OBJECT>,\n): LazyValidator<OBJECT> {\n // cache the validator to avoid initializing it multiple times\n let validator: Validator<OBJECT> | undefined;\n return () => {\n if (validator == null) {\n validator = createValidator();\n }\n return validator;\n };\n}\n\nexport type LazyValidator<OBJECT> = () => Validator<OBJECT>;\n\nexport type FlexibleValidator<OBJECT> =\n | Validator<OBJECT>\n | LazyValidator<OBJECT>\n | StandardSchemaV1<unknown, OBJECT>;\n\nexport type InferValidator<SCHEMA> =\n SCHEMA extends StandardSchemaV1<unknown, infer T>\n ? T\n : SCHEMA extends LazyValidator<infer T>\n ? T\n : SCHEMA extends Validator<infer T>\n ? T\n : never;\n\nexport function asValidator<OBJECT>(\n value: FlexibleValidator<OBJECT>,\n): Validator<OBJECT> {\n return isValidator(value)\n ? value\n : typeof value === 'function'\n ? value()\n : standardSchemaValidator(value);\n}\n\nexport function standardSchemaValidator<OBJECT>(\n standardSchema: StandardSchemaV1<unknown, OBJECT>,\n): Validator<OBJECT> {\n return validator(async value => {\n const result = await standardSchema['~standard'].validate(value);\n\n return result.issues == null\n ? { success: true, value: result.value }\n : {\n success: false,\n error: new TypeValidationError({\n value,\n cause: result.issues,\n }),\n };\n });\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { FlexibleValidator, asValidator } from './validator';\n\n/**\n * Validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @returns {Promise<T>} - The typed object.\n */\nexport async function validateTypes<OBJECT>({\n value,\n schema,\n}: {\n value: unknown;\n schema: FlexibleValidator<OBJECT>;\n}): Promise<OBJECT> {\n const result = await safeValidateTypes({ value, schema });\n\n if (!result.success) {\n throw TypeValidationError.wrap({ value, cause: result.error });\n }\n\n return result.value;\n}\n\n/**\n * Safely validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The JSON object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport async function safeValidateTypes<OBJECT>({\n value,\n schema,\n}: {\n value: unknown;\n schema: FlexibleValidator<OBJECT>;\n}): Promise<\n | {\n success: true;\n value: OBJECT;\n rawValue: unknown;\n }\n | {\n success: false;\n error: TypeValidationError;\n rawValue: unknown;\n }\n> {\n const validator = asValidator(schema);\n\n try {\n if (validator.validate == null) {\n return { success: true, value: value as OBJECT, rawValue: value };\n }\n\n const result = await validator.validate(value);\n\n if (result.success) {\n return { success: true, value: result.value, rawValue: value };\n }\n\n return {\n success: false,\n error: TypeValidationError.wrap({ value, cause: result.error }),\n rawValue: value,\n };\n } catch (error) {\n return {\n success: false,\n error: TypeValidationError.wrap({ value, cause: error }),\n rawValue: value,\n };\n }\n}\n","import {\n JSONParseError,\n JSONValue,\n TypeValidationError,\n} from '@ai-sdk/provider';\nimport { secureJsonParse } from './secure-json-parse';\nimport { safeValidateTypes, validateTypes } from './validate-types';\nimport { FlexibleValidator, Validator } from './validator';\n\n/**\n * Parses a JSON string into an unknown object.\n *\n * @param text - The JSON string to parse.\n * @returns {JSONValue} - The parsed JSON object.\n */\nexport async function parseJSON(options: {\n text: string;\n schema?: undefined;\n}): Promise<JSONValue>;\n/**\n * Parses a JSON string into a strongly-typed object using the provided schema.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns {Promise<T>} - The parsed object.\n */\nexport async function parseJSON<T>(options: {\n text: string;\n schema: FlexibleValidator<T>;\n}): Promise<T>;\nexport async function parseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: FlexibleValidator<T>;\n}): Promise<T> {\n try {\n const value = secureJsonParse(text);\n\n if (schema == null) {\n return value;\n }\n\n return validateTypes<T>({ value, schema });\n } catch (error) {\n if (\n JSONParseError.isInstance(error) ||\n TypeValidationError.isInstance(error)\n ) {\n throw error;\n }\n\n throw new JSONParseError({ text, cause: error });\n }\n}\n\nexport type ParseResult<T> =\n | { success: true; value: T; rawValue: unknown }\n | {\n success: false;\n error: JSONParseError | TypeValidationError;\n rawValue: unknown;\n };\n\n/**\n * Safely parses a JSON string and returns the result as an object of type `unknown`.\n *\n * @param text - The JSON string to parse.\n * @returns {Promise<object>} Either an object with `success: true` and the parsed data, or an object with `success: false` and the error that occurred.\n */\nexport async function safeParseJSON(options: {\n text: string;\n schema?: undefined;\n}): Promise<ParseResult<JSONValue>>;\n/**\n * Safely parses a JSON string into a strongly-typed object, using a provided schema to validate the object.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport async function safeParseJSON<T>(options: {\n text: string;\n schema: FlexibleValidator<T>;\n}): Promise<ParseResult<T>>;\nexport async function safeParseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: FlexibleValidator<T>;\n}): Promise<ParseResult<T>> {\n try {\n const value = secureJsonParse(text);\n\n if (schema == null) {\n return { success: true, value: value as T, rawValue: value };\n }\n\n return await safeValidateTypes<T>({ value, schema });\n } catch (error) {\n return {\n success: false,\n error: JSONParseError.isInstance(error)\n ? error\n : new JSONParseError({ text, cause: error }),\n rawValue: undefined,\n };\n }\n}\n\nexport function isParsableJson(input: string): boolean {\n try {\n secureJsonParse(input);\n return true;\n } catch {\n return false;\n }\n}\n","import {\n EventSourceMessage,\n EventSourceParserStream,\n} from 'eventsource-parser/stream';\nimport { ParseResult, safeParseJSON } from './parse-json';\nimport { FlexibleValidator } from './validator';\n\n/**\n * Parses a JSON event stream into a stream of parsed JSON objects.\n */\nexport function parseJsonEventStream<T>({\n stream,\n schema,\n}: {\n stream: ReadableStream<Uint8Array>;\n schema: FlexibleValidator<T>;\n}): ReadableStream<ParseResult<T>> {\n return stream\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream())\n .pipeThrough(\n new TransformStream<EventSourceMessage, ParseResult<T>>({\n async transform({ data }, controller) {\n // ignore the 'DONE' event that e.g. OpenAI sends:\n if (data === '[DONE]') {\n return;\n }\n\n controller.enqueue(await safeParseJSON({ text: data, schema }));\n },\n }),\n );\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport { ResponseHandler } from './response-handler';\nimport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nimport { withUserAgentSuffix } from './with-user-agent-suffix';\nimport { VERSION } from './version';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => globalThis.fetch;\n\nexport const postJsonToApi = async <T>({\n url,\n headers,\n body,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n body: unknown;\n failedResponseHandler: ResponseHandler<APICallError>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}) =>\n postToApi({\n url,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n });\n\nexport const postFormDataToApi = async <T>({\n url,\n headers,\n formData,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n formData: FormData;\n failedResponseHandler: ResponseHandler<APICallError>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}) =>\n postToApi({\n url,\n headers,\n body: {\n content: formData,\n values: Object.fromEntries((formData as any).entries()),\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch,\n });\n\nexport const postToApi = async <T>({\n url,\n headers = {},\n body,\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch(),\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n body: {\n content: string | FormData | Uint8Array;\n values: unknown;\n };\n failedResponseHandler: ResponseHandler<Error>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}) => {\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: withUserAgentSuffix(\n headers,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n ),\n body: body.content,\n signal: abortSignal,\n });\n\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.ok) {\n let errorInformation: {\n value: Error;\n responseHeaders?: Record<string, string> | undefined;\n };\n\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n\n throw new APICallError({\n message: 'Failed to process error response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values,\n });\n }\n\n throw errorInformation.value;\n }\n\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError.isInstance(error)) {\n throw error;\n }\n }\n\n throw new APICallError({\n message: 'Failed to process successful response',\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values,\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: body.values });\n }\n};\n","export type Resolvable<T> =\n | T // Raw value\n | Promise<T> // Promise of value\n | (() => T) // Function returning value\n | (() => Promise<T>); // Function returning promise of value\n\n/**\n * Resolves a value that could be a raw value, a Promise, a function returning a value,\n * or a function returning a Promise.\n */\nexport async function resolve<T>(value: Resolvable<T>): Promise<T> {\n // If it's a function, call it to get the value/promise\n if (typeof value === 'function') {\n value = (value as Function)();\n }\n\n // Otherwise just resolve whatever we got (value or promise)\n return Promise.resolve(value as T);\n}\n","import { APICallError, EmptyResponseBodyError } from '@ai-sdk/provider';\nimport { ZodType } from 'zod/v4';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { parseJSON, ParseResult, safeParseJSON } from './parse-json';\nimport { parseJsonEventStream } from './parse-json-event-stream';\nimport { FlexibleValidator } from './validator';\n\nexport type ResponseHandler<RETURN_TYPE> = (options: {\n url: string;\n requestBodyValues: unknown;\n response: Response;\n}) => PromiseLike<{\n value: RETURN_TYPE;\n rawValue?: unknown;\n responseHeaders?: Record<string, string>;\n}>;\n\nexport const createJsonErrorResponseHandler =\n <T>({\n errorSchema,\n errorToMessage,\n isRetryable,\n }: {\n errorSchema: FlexibleValidator<T>;\n errorToMessage: (error: T) => string;\n isRetryable?: (response: Response, error?: T) => boolean;\n }): ResponseHandler<APICallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n const responseHeaders = extractResponseHeaders(response);\n\n // Some providers return an empty response body for some errors:\n if (responseBody.trim() === '') {\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable?.(response),\n }),\n };\n }\n\n // resilient parsing in case the response is not JSON or does not match the schema:\n try {\n const parsedError = await parseJSON({\n text: responseBody,\n schema: errorSchema,\n });\n\n return {\n responseHeaders,\n value: new APICallError({\n message: errorToMessage(parsedError),\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n data: parsedError,\n isRetryable: isRetryable?.(response, parsedError),\n }),\n };\n } catch (parseError) {\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable?.(response),\n }),\n };\n }\n };\n\nexport const createEventSourceResponseHandler =\n <T>(\n chunkSchema: FlexibleValidator<T>,\n ): ResponseHandler<ReadableStream<ParseResult<T>>> =>\n async ({ response }: { response: Response }) => {\n const responseHeaders = extractResponseHeaders(response);\n\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n\n return {\n responseHeaders,\n value: parseJsonEventStream({\n stream: response.body,\n schema: chunkSchema,\n }),\n };\n };\n\nexport const createJsonStreamResponseHandler =\n <T>(\n chunkSchema: ZodType<T>,\n ): ResponseHandler<ReadableStream<ParseResult<T>>> =>\n async ({ response }: { response: Response }) => {\n const responseHeaders = extractResponseHeaders(response);\n\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n\n let buffer = '';\n\n return {\n responseHeaders,\n value: response.body.pipeThrough(new TextDecoderStream()).pipeThrough(\n new TransformStream<string, ParseResult<T>>({\n async transform(chunkText, controller) {\n if (chunkText.endsWith('\\n')) {\n controller.enqueue(\n await safeParseJSON({\n text: buffer + chunkText,\n schema: chunkSchema,\n }),\n );\n buffer = '';\n } else {\n buffer += chunkText;\n }\n },\n }),\n ),\n };\n };\n\nexport const createJsonResponseHandler =\n <T>(responseSchema: FlexibleValidator<T>): ResponseHandler<T> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n\n const parsedResult = await safeParseJSON({\n text: responseBody,\n schema: responseSchema,\n });\n\n const responseHeaders = extractResponseHeaders(response);\n\n if (!parsedResult.success) {\n throw new APICallError({\n message: 'Invalid JSON response',\n cause: parsedResult.error,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n url,\n requestBodyValues,\n });\n }\n\n return {\n responseHeaders,\n value: parsedResult.value,\n rawValue: parsedResult.rawValue,\n };\n };\n\nexport const createBinaryResponseHandler =\n (): ResponseHandler<Uint8Array> =>\n async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.body) {\n throw new APICallError({\n message: 'Response body is empty',\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: undefined,\n });\n }\n\n try {\n const buffer = await response.arrayBuffer();\n return {\n responseHeaders,\n value: new Uint8Array(buffer),\n };\n } catch (error) {\n throw new APICallError({\n message: 'Failed to read response as array buffer',\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: undefined,\n cause: error,\n });\n }\n };\n\nexport const createStatusCodeErrorResponseHandler =\n (): ResponseHandler<APICallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await response.text();\n\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues: requestBodyValues as Record<string, unknown>,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n }),\n };\n };\n","export const getRelativePath = (pathA: string[], pathB: string[]) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i]) break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join('/');\n};\n","import { ZodSchema, ZodTypeDef } from 'zod/v3';\nimport { Refs, Seen } from './refs';\nimport { JsonSchema7Type } from './parse-types';\n\nexport type DateStrategy =\n | 'format:date-time'\n | 'format:date'\n | 'string'\n | 'integer';\n\nexport const ignoreOverride = Symbol(\n 'Let zodToJsonSchema decide on which parser to use',\n);\n\nexport type OverrideCallback = (\n def: ZodTypeDef,\n refs: Refs,\n seen: Seen | undefined,\n forceResolution?: boolean,\n) => JsonSchema7Type | undefined | typeof ignoreOverride;\n\nexport type PostProcessCallback = (\n jsonSchema: JsonSchema7Type | undefined,\n def: ZodTypeDef,\n refs: Refs,\n) => JsonSchema7Type | undefined;\n\nexport const jsonDescription: PostProcessCallback = (jsonSchema, def) => {\n if (def.description) {\n try {\n return {\n ...jsonSchema,\n ...JSON.parse(def.description),\n };\n } catch {}\n }\n\n return jsonSchema;\n};\n\nexport type Options = {\n name: string | undefined;\n $refStrategy: 'root' | 'relative' | 'none' | 'seen';\n basePath: string[];\n effectStrategy: 'input' | 'any';\n pipeStrategy: 'input' | 'output' | 'all';\n dateStrategy: DateStrategy | DateStrategy[];\n mapStrategy: 'entries' | 'record';\n removeAdditionalStrategy: 'passthrough' | 'strict';\n allowedAdditionalProperties: true | undefined;\n rejectedAdditionalProperties: false | undefined;\n strictUnions: boolean;\n definitionPath: string;\n definitions: Record<string, ZodSchema>;\n errorMessages: boolean;\n patternStrategy: 'escape' | 'preserve';\n applyRegexFlags: boolean;\n emailStrategy: 'format:email' | 'format:idn-email' | 'pattern:zod';\n base64Strategy: 'format:binary' | 'contentEncoding:base64' | 'pattern:zod';\n nameStrategy: 'ref' | 'title';\n override?: OverrideCallback;\n postProcess?: PostProcessCallback;\n};\n\nexport const defaultOptions: Options = {\n name: undefined,\n $refStrategy: 'root',\n basePath: ['#'],\n effectStrategy: 'input',\n pipeStrategy: 'all',\n dateStrategy: 'format:date-time',\n mapStrategy: 'entries',\n removeAdditionalStrategy: 'passthrough',\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: 'definitions',\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n patternStrategy: 'escape',\n applyRegexFlags: false,\n emailStrategy: 'format:email',\n base64Strategy: 'contentEncoding:base64',\n nameStrategy: 'ref',\n};\n\nexport const getDefaultOptions = (\n options: Partial<Options> | string | undefined,\n) =>\n (typeof options === 'string'\n ? {\n ...defaultOptions,\n name: options,\n }\n : {\n ...defaultOptions,\n ...options,\n }) as Options;\n","export type JsonSchema7AnyType = { $ref?: string };\n\nexport function parseAnyDef(): JsonSchema7AnyType {\n return {};\n}\n","import { ZodArrayDef, ZodFirstPartyTypeKind } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7ArrayType = {\n type: 'array';\n items?: JsonSchema7Type;\n minItems?: number;\n maxItems?: number;\n};\n\nexport function parseArrayDef(def: ZodArrayDef, refs: Refs) {\n const res: JsonSchema7ArrayType = {\n type: 'array',\n };\n if (\n def.type?._def &&\n def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny\n ) {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items'],\n });\n }\n\n if (def.minLength) {\n res.minItems = def.minLength.value;\n }\n if (def.maxLength) {\n res.maxItems = def.maxLength.value;\n }\n if (def.exactLength) {\n res.minItems = def.exactLength.value;\n res.maxItems = def.exactLength.value;\n }\n return res;\n}\n","import { ZodBigIntDef } from 'zod/v3';\n\nexport type JsonSchema7BigintType = {\n type: 'integer';\n format: 'int64';\n minimum?: BigInt;\n exclusiveMinimum?: BigInt;\n maximum?: BigInt;\n exclusiveMaximum?: BigInt;\n multipleOf?: BigInt;\n};\n\nexport function parseBigintDef(def: ZodBigIntDef): JsonSchema7BigintType {\n const res: JsonSchema7BigintType = {\n type: 'integer',\n format: 'int64',\n };\n\n if (!def.checks) return res;\n\n for (const check of def.checks) {\n switch (check.kind) {\n case 'min':\n if (check.inclusive) {\n res.minimum = check.value;\n } else {\n res.exclusiveMinimum = check.value;\n }\n break;\n case 'max':\n if (check.inclusive) {\n res.maximum = check.value;\n } else {\n res.exclusiveMaximum = check.value;\n }\n\n break;\n case 'multipleOf':\n res.multipleOf = check.value;\n break;\n }\n }\n return res;\n}\n","export type JsonSchema7BooleanType = {\n type: 'boolean';\n};\n\nexport function parseBooleanDef(): JsonSchema7BooleanType {\n return { type: 'boolean' };\n}\n","import { ZodBrandedDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { Refs } from '../refs';\n\nexport function parseBrandedDef(_def: ZodBrandedDef<any>, refs: Refs) {\n return parseDef(_def.type._def, refs);\n}\n","import { ZodCatchDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { Refs } from '../refs';\n\nexport const parseCatchDef = (def: ZodCatchDef<any>, refs: Refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import { ZodDateDef } from 'zod/v3';\nimport { Refs } from '../refs';\nimport { DateStrategy } from '../options';\n\nexport type JsonSchema7DateType =\n | {\n type: 'integer' | 'string';\n format: 'unix-time' | 'date-time' | 'date';\n minimum?: number;\n maximum?: number;\n }\n | {\n anyOf: JsonSchema7DateType[];\n };\n\nexport function parseDateDef(\n def: ZodDateDef,\n refs: Refs,\n overrideDateStrategy?: DateStrategy,\n): JsonSchema7DateType {\n const strategy = overrideDateStrategy ?? refs.dateStrategy;\n\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n };\n }\n\n switch (strategy) {\n case 'string':\n case 'format:date-time':\n return {\n type: 'string',\n format: 'date-time',\n };\n case 'format:date':\n return {\n type: 'string',\n format: 'date',\n };\n case 'integer':\n return integerDateParser(def);\n }\n}\n\nconst integerDateParser = (def: ZodDateDef) => {\n const res: JsonSchema7DateType = {\n type: 'integer',\n format: 'unix-time',\n };\n\n for (const check of def.checks) {\n switch (check.kind) {\n case 'min':\n res.minimum = check.value;\n break;\n case 'max':\n res.maximum = check.value;\n break;\n }\n }\n\n return res;\n};\n","import { ZodDefaultDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport function parseDefaultDef(\n _def: ZodDefaultDef,\n refs: Refs,\n): JsonSchema7Type & { default: any } {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue(),\n };\n}\n","import { ZodEffectsDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseAnyDef } from './any';\n\nexport function parseEffectsDef(\n _def: ZodEffectsDef,\n refs: Refs,\n): JsonSchema7Type | undefined {\n return refs.effectStrategy === 'input'\n ? parseDef(_def.schema._def, refs)\n : parseAnyDef();\n}\n","import { ZodEnumDef } from 'zod/v3';\n\nexport type JsonSchema7EnumType = {\n type: 'string';\n enum: string[];\n};\n\nexport function parseEnumDef(def: ZodEnumDef): JsonSchema7EnumType {\n return {\n type: 'string',\n enum: Array.from(def.values),\n };\n}\n","import { ZodIntersectionDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { JsonSchema7StringType } from './string';\n\nexport type JsonSchema7AllOfType = {\n allOf: JsonSchema7Type[];\n unevaluatedProperties?: boolean;\n};\n\nconst isJsonSchema7AllOfType = (\n type: JsonSchema7Type | JsonSchema7StringType,\n): type is JsonSchema7AllOfType => {\n if ('type' in type && type.type === 'string') return false;\n return 'allOf' in type;\n};\n\nexport function parseIntersectionDef(\n def: ZodIntersectionDef,\n refs: Refs,\n): JsonSchema7AllOfType | JsonSchema7Type | undefined {\n const allOf = [\n parseDef(def.left._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', '0'],\n }),\n parseDef(def.right._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', '1'],\n }),\n ].filter((x): x is JsonSchema7Type => !!x);\n\n const mergedAllOf: JsonSchema7Type[] = [];\n // If either of the schemas is an allOf, merge them into a single allOf\n allOf.forEach(schema => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n } else {\n let nestedSchema: JsonSchema7Type = schema;\n if (\n 'additionalProperties' in schema &&\n schema.additionalProperties === false\n ) {\n const { additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length ? { allOf: mergedAllOf } : undefined;\n}\n","import { ZodLiteralDef } from 'zod/v3';\n\nexport type JsonSchema7LiteralType =\n | {\n type: 'string' | 'number' | 'integer' | 'boolean';\n const: string | number | boolean;\n }\n | {\n type: 'object' | 'array';\n };\n\nexport function parseLiteralDef(def: ZodLiteralDef): JsonSchema7LiteralType {\n const parsedType = typeof def.value;\n if (\n parsedType !== 'bigint' &&\n parsedType !== 'number' &&\n parsedType !== 'boolean' &&\n parsedType !== 'string'\n ) {\n return {\n type: Array.isArray(def.value) ? 'array' : 'object',\n };\n }\n\n return {\n type: parsedType === 'bigint' ? 'integer' : parsedType,\n const: def.value,\n };\n}\n","import { ZodStringDef } from 'zod/v3';\nimport { Refs } from '../refs';\n\nlet emojiRegex: RegExp | undefined = undefined;\n\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email:\n /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\n '^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$',\n 'u',\n );\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr:\n /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr:\n /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url:\n /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n} as const;\n\nexport type JsonSchema7StringType = {\n type: 'string';\n minLength?: number;\n maxLength?: number;\n format?:\n | 'email'\n | 'idn-email'\n | 'uri'\n | 'uuid'\n | 'date-time'\n | 'ipv4'\n | 'ipv6'\n | 'date'\n | 'time'\n | 'duration';\n pattern?: string;\n allOf?: {\n pattern: string;\n }[];\n anyOf?: {\n format: string;\n }[];\n contentEncoding?: string;\n};\n\nexport function parseStringDef(\n def: ZodStringDef,\n refs: Refs,\n): JsonSchema7StringType {\n const res: JsonSchema7StringType = {\n type: 'string',\n };\n\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case 'min':\n res.minLength =\n typeof res.minLength === 'number'\n ? Math.max(res.minLength, check.value)\n : check.value;\n break;\n case 'max':\n res.maxLength =\n typeof res.maxLength === 'number'\n ? Math.min(res.maxLength, check.value)\n : check.value;\n\n break;\n case 'email':\n switch (refs.emailStrategy) {\n case 'format:email':\n addFormat(res, 'email', check.message, refs);\n break;\n case 'format:idn-email':\n addFormat(res, 'idn-email', check.message, refs);\n break;\n case 'pattern:zod':\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n\n break;\n case 'url':\n addFormat(res, 'uri', check.message, refs);\n break;\n case 'uuid':\n addFormat(res, 'uuid', check.message, refs);\n break;\n case 'regex':\n addPattern(res, check.regex, check.message, refs);\n break;\n case 'cuid':\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case 'cuid2':\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case 'startsWith':\n addPattern(\n res,\n RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`),\n check.message,\n refs,\n );\n break;\n case 'endsWith':\n addPattern(\n res,\n RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`),\n check.message,\n refs,\n );\n break;\n case 'datetime':\n addFormat(res, 'date-time', check.message, refs);\n break;\n case 'date':\n addFormat(res, 'date', check.message, refs);\n break;\n case 'time':\n addFormat(res, 'time', check.message, refs);\n break;\n case 'duration':\n addFormat(res, 'duration', check.message, refs);\n break;\n case 'length':\n res.minLength =\n typeof res.minLength === 'number'\n ? Math.max(res.minLength, check.value)\n : check.value;\n res.maxLength =\n typeof res.maxLength === 'number'\n ? Math.min(res.maxLength, check.value)\n : check.value;\n break;\n case 'includes': {\n addPattern(\n res,\n RegExp(escapeLiteralCheckValue(check.value, refs)),\n check.message,\n refs,\n );\n break;\n }\n case 'ip': {\n if (check.version !== 'v6') {\n addFormat(res, 'ipv4', check.message, refs);\n }\n if (check.version !== 'v4') {\n addFormat(res, 'ipv6', check.message, refs);\n }\n break;\n }\n case 'base64url':\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case 'jwt':\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case 'cidr': {\n if (check.version !== 'v6') {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== 'v4') {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case 'emoji':\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case 'ulid': {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case 'base64': {\n switch (refs.base64Strategy) {\n case 'format:binary': {\n addFormat(res, 'binary' as any, check.message, refs);\n break;\n }\n\n case 'contentEncoding:base64': {\n res.contentEncoding = 'base64';\n break;\n }\n\n case 'pattern:zod': {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case 'nanoid': {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case 'toLowerCase':\n case 'toUpperCase':\n case 'trim':\n break;\n default:\n /* c8 ignore next */\n ((_: never) => {})(check);\n }\n }\n }\n\n return res;\n}\n\nfunction escapeLiteralCheckValue(literal: string, refs: Refs): string {\n return refs.patternStrategy === 'escape'\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\n\nconst ALPHA_NUMERIC = new Set(\n 'ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789',\n);\n\nfunction escapeNonAlphaNumeric(source: string) {\n let result = '';\n\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += '\\\\';\n }\n\n result += source[i];\n }\n\n return result;\n}\n\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(\n schema: JsonSchema7StringType,\n value: Required<JsonSchema7StringType>['format'],\n message: string | undefined,\n refs: Refs,\n) {\n if (schema.format || schema.anyOf?.some(x => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n\n if (schema.format) {\n schema.anyOf!.push({\n format: schema.format,\n });\n delete schema.format;\n }\n\n schema.anyOf!.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n } else {\n schema.format = value;\n }\n}\n\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(\n schema: JsonSchema7StringType,\n regex: RegExp,\n message: string | undefined,\n refs: Refs,\n) {\n if (schema.pattern || schema.allOf?.some(x => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n\n if (schema.pattern) {\n schema.allOf!.push({\n pattern: schema.pattern,\n });\n delete schema.pattern;\n }\n\n schema.allOf!.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n } else {\n schema.pattern = stringifyRegExpWithFlags(regex, refs);\n }\n}\n\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex: RegExp, refs: Refs): string {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n\n // Currently handled flags\n const flags = {\n i: regex.flags.includes('i'), // Case-insensitive\n m: regex.flags.includes('m'), // `^` and `$` matches adjacent to newline characters\n s: regex.flags.includes('s'), // `.` matches newlines\n };\n\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = '';\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n } else if (source[i + 1] === '-' && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n } else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n } else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n\n if (flags.m) {\n if (source[i] === '^') {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n } else if (source[i] === '$') {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n\n if (flags.s && source[i] === '.') {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n\n pattern += source[i];\n if (source[i] === '\\\\') {\n isEscaped = true;\n } else if (inCharGroup && source[i] === ']') {\n inCharGroup = false;\n } else if (!inCharGroup && source[i] === '[') {\n inCharGroup = true;\n }\n }\n\n try {\n new RegExp(pattern);\n } catch {\n console.warn(\n `Could not convert regex pattern at ${refs.currentPath.join(\n '/',\n )} to a flag-independent form! Falling back to the flag-ignorant source`,\n );\n return regex.source;\n }\n\n return pattern;\n}\n","import {\n ZodFirstPartyTypeKind,\n ZodMapDef,\n ZodRecordDef,\n ZodTypeAny,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseBrandedDef } from './branded';\nimport { JsonSchema7EnumType } from './enum';\nimport { JsonSchema7StringType, parseStringDef } from './string';\n\ntype JsonSchema7RecordPropertyNamesType =\n | Omit<JsonSchema7StringType, 'type'>\n | Omit<JsonSchema7EnumType, 'type'>;\n\nexport type JsonSchema7RecordType = {\n type: 'object';\n additionalProperties?: JsonSchema7Type | true;\n propertyNames?: JsonSchema7RecordPropertyNamesType;\n};\n\nexport function parseRecordDef(\n def: ZodRecordDef<ZodTypeAny, ZodTypeAny> | ZodMapDef,\n refs: Refs,\n): JsonSchema7RecordType {\n const schema: JsonSchema7RecordType = {\n type: 'object',\n additionalProperties:\n parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'additionalProperties'],\n }) ?? refs.allowedAdditionalProperties,\n };\n\n if (\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.checks?.length\n ) {\n const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n\n return {\n ...schema,\n propertyNames: keyType,\n };\n } else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values,\n },\n };\n } else if (\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.type._def.checks?.length\n ) {\n const { type, ...keyType } = parseBrandedDef(\n def.keyType._def,\n refs,\n ) as JsonSchema7StringType;\n\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n\n return schema;\n}\n","import { ZodMapDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseAnyDef } from './any';\nimport { JsonSchema7RecordType, parseRecordDef } from './record';\n\nexport type JsonSchema7MapType = {\n type: 'array';\n maxItems: 125;\n items: {\n type: 'array';\n items: [JsonSchema7Type, JsonSchema7Type];\n minItems: 2;\n maxItems: 2;\n };\n};\n\nexport function parseMapDef(\n def: ZodMapDef,\n refs: Refs,\n): JsonSchema7MapType | JsonSchema7RecordType {\n if (refs.mapStrategy === 'record') {\n return parseRecordDef(def, refs);\n }\n\n const keys =\n parseDef(def.keyType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', 'items', '0'],\n }) || parseAnyDef();\n const values =\n parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', 'items', '1'],\n }) || parseAnyDef();\n return {\n type: 'array',\n maxItems: 125,\n items: {\n type: 'array',\n items: [keys, values],\n minItems: 2,\n maxItems: 2,\n },\n };\n}\n","import { ZodNativeEnumDef } from 'zod/v3';\n\nexport type JsonSchema7NativeEnumType = {\n type: 'string' | 'number' | ['string', 'number'];\n enum: (string | number)[];\n};\n\nexport function parseNativeEnumDef(\n def: ZodNativeEnumDef,\n): JsonSchema7NativeEnumType {\n const object = def.values;\n const actualKeys = Object.keys(def.values).filter((key: string) => {\n return typeof object[object[key]] !== 'number';\n });\n\n const actualValues = actualKeys.map((key: string) => object[key]);\n\n const parsedTypes = Array.from(\n new Set(actualValues.map((values: string | number) => typeof values)),\n );\n\n return {\n type:\n parsedTypes.length === 1\n ? parsedTypes[0] === 'string'\n ? 'string'\n : 'number'\n : ['string', 'number'],\n enum: actualValues,\n };\n}\n","import { JsonSchema7AnyType, parseAnyDef } from './any';\n\nexport type JsonSchema7NeverType = {\n not: JsonSchema7AnyType;\n};\n\nexport function parseNeverDef(): JsonSchema7NeverType | undefined {\n return { not: parseAnyDef() };\n}\n","export type JsonSchema7NullType = {\n type: 'null';\n};\n\nexport function parseNullDef(): JsonSchema7NullType {\n return {\n type: 'null',\n };\n}\n","import {\n ZodDiscriminatedUnionDef,\n ZodLiteralDef,\n ZodTypeAny,\n ZodUnionDef,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport const primitiveMappings = {\n ZodString: 'string',\n ZodNumber: 'number',\n ZodBigInt: 'integer',\n ZodBoolean: 'boolean',\n ZodNull: 'null',\n} as const;\ntype ZodPrimitive = keyof typeof primitiveMappings;\ntype JsonSchema7Primitive =\n (typeof primitiveMappings)[keyof typeof primitiveMappings];\n\nexport type JsonSchema7UnionType =\n | JsonSchema7PrimitiveUnionType\n | JsonSchema7AnyOfType;\n\ntype JsonSchema7PrimitiveUnionType =\n | {\n type: JsonSchema7Primitive | JsonSchema7Primitive[];\n }\n | {\n type: JsonSchema7Primitive | JsonSchema7Primitive[];\n enum: (string | number | bigint | boolean | null)[];\n };\n\ntype JsonSchema7AnyOfType = {\n anyOf: JsonSchema7Type[];\n};\n\nexport function parseUnionDef(\n def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n refs: Refs,\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined {\n const options: readonly ZodTypeAny[] =\n def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n\n // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n if (\n options.every(\n x =>\n x._def.typeName in primitiveMappings &&\n (!x._def.checks || !x._def.checks.length),\n )\n ) {\n // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n\n const types = options.reduce((types: JsonSchema7Primitive[], x) => {\n const type = primitiveMappings[x._def.typeName as ZodPrimitive]; //Can be safely casted due to row 43\n return type && !types.includes(type) ? [...types, type] : types;\n }, []);\n\n return {\n type: types.length > 1 ? types : types[0],\n };\n } else if (\n options.every(x => x._def.typeName === 'ZodLiteral' && !x.description)\n ) {\n // all options literals\n\n const types = options.reduce(\n (acc: JsonSchema7Primitive[], x: { _def: ZodLiteralDef }) => {\n const type = typeof x._def.value;\n switch (type) {\n case 'string':\n case 'number':\n case 'boolean':\n return [...acc, type];\n case 'bigint':\n return [...acc, 'integer' as const];\n case 'object':\n if (x._def.value === null) return [...acc, 'null' as const];\n case 'symbol':\n case 'undefined':\n case 'function':\n default:\n return acc;\n }\n },\n [],\n );\n\n if (types.length === options.length) {\n // all the literals are primitive, as far as null can be considered primitive\n\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce(\n (acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n },\n [] as (string | number | bigint | boolean | null)[],\n ),\n };\n }\n } else if (options.every(x => x._def.typeName === 'ZodEnum')) {\n return {\n type: 'string',\n enum: options.reduce(\n (acc: string[], x) => [\n ...acc,\n ...x._def.values.filter((x: string) => !acc.includes(x)),\n ],\n [],\n ),\n };\n }\n\n return asAnyOf(def, refs);\n}\n\nconst asAnyOf = (\n def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n refs: Refs,\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined => {\n const anyOf = (\n (def.options instanceof Map\n ? Array.from(def.options.values())\n : def.options) as any[]\n )\n .map((x, i) =>\n parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'anyOf', `${i}`],\n }),\n )\n .filter(\n (x): x is JsonSchema7Type =>\n !!x &&\n (!refs.strictUnions ||\n (typeof x === 'object' && Object.keys(x).length > 0)),\n );\n\n return anyOf.length ? { anyOf } : undefined;\n};\n","import { ZodNullableDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { JsonSchema7NullType } from './null';\nimport { primitiveMappings } from './union';\n\nexport type JsonSchema7NullableType =\n | {\n anyOf: [JsonSchema7Type, JsonSchema7NullType];\n }\n | {\n type: [string, 'null'];\n };\n\nexport function parseNullableDef(\n def: ZodNullableDef,\n refs: Refs,\n): JsonSchema7NullableType | undefined {\n if (\n ['ZodString', 'ZodNumber', 'ZodBigInt', 'ZodBoolean', 'ZodNull'].includes(\n def.innerType._def.typeName,\n ) &&\n (!def.innerType._def.checks || !def.innerType._def.checks.length)\n ) {\n return {\n type: [\n primitiveMappings[\n def.innerType._def.typeName as keyof typeof primitiveMappings\n ],\n 'null',\n ],\n };\n }\n\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'anyOf', '0'],\n });\n\n return base && { anyOf: [base, { type: 'null' }] };\n}\n","import { ZodNumberDef } from 'zod/v3';\n\nexport type JsonSchema7NumberType = {\n type: 'number' | 'integer';\n minimum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n exclusiveMaximum?: number;\n multipleOf?: number;\n};\n\nexport function parseNumberDef(def: ZodNumberDef): JsonSchema7NumberType {\n const res: JsonSchema7NumberType = {\n type: 'number',\n };\n\n if (!def.checks) return res;\n\n for (const check of def.checks) {\n switch (check.kind) {\n case 'int':\n res.type = 'integer';\n break;\n case 'min':\n if (check.inclusive) {\n res.minimum = check.value;\n } else {\n res.exclusiveMinimum = check.value;\n }\n break;\n case 'max':\n if (check.inclusive) {\n res.maximum = check.value;\n } else {\n res.exclusiveMaximum = check.value;\n }\n break;\n case 'multipleOf':\n res.multipleOf = check.value;\n break;\n }\n }\n return res;\n}\n","import { ZodObjectDef, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7ObjectType = {\n type: 'object';\n properties: Record<string, JsonSchema7Type>;\n additionalProperties?: boolean | JsonSchema7Type;\n required?: string[];\n};\n\nexport function parseObjectDef(def: ZodObjectDef, refs: Refs) {\n const result: JsonSchema7ObjectType = {\n type: 'object',\n properties: {},\n };\n\n const required: string[] = [];\n\n const shape = def.shape();\n\n for (const propName in shape) {\n let propDef = shape[propName];\n\n if (propDef === undefined || propDef._def === undefined) {\n continue;\n }\n\n const propOptional = safeIsOptional(propDef);\n\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'properties', propName],\n propertyPath: [...refs.currentPath, 'properties', propName],\n });\n\n if (parsedDef === undefined) {\n continue;\n }\n\n result.properties[propName] = parsedDef;\n\n if (!propOptional) {\n required.push(propName);\n }\n }\n\n if (required.length) {\n result.required = required;\n }\n\n const additionalProperties = decideAdditionalProperties(def, refs);\n\n if (additionalProperties !== undefined) {\n result.additionalProperties = additionalProperties;\n }\n\n return result;\n}\n\nfunction decideAdditionalProperties(def: ZodObjectDef, refs: Refs) {\n if (def.catchall._def.typeName !== 'ZodNever') {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'additionalProperties'],\n });\n }\n\n switch (def.unknownKeys) {\n case 'passthrough':\n return refs.allowedAdditionalProperties;\n case 'strict':\n return refs.rejectedAdditionalProperties;\n case 'strip':\n return refs.removeAdditionalStrategy === 'strict'\n ? refs.allowedAdditionalProperties\n : refs.rejectedAdditionalProperties;\n }\n}\n\nfunction safeIsOptional(schema: ZodTypeAny): boolean {\n try {\n return schema.isOptional();\n } catch {\n return true;\n }\n}\n","import { ZodOptionalDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseAnyDef } from './any';\n\nexport const parseOptionalDef = (\n def: ZodOptionalDef,\n refs: Refs,\n): JsonSchema7Type | undefined => {\n if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n return parseDef(def.innerType._def, refs);\n }\n\n const innerSchema = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'anyOf', '1'],\n });\n\n return innerSchema\n ? { anyOf: [{ not: parseAnyDef() }, innerSchema] }\n : parseAnyDef();\n};\n","import { ZodPipelineDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { JsonSchema7AllOfType } from './intersection';\n\nexport const parsePipelineDef = (\n def: ZodPipelineDef<any, any>,\n refs: Refs,\n): JsonSchema7AllOfType | JsonSchema7Type | undefined => {\n if (refs.pipeStrategy === 'input') {\n return parseDef(def.in._def, refs);\n } else if (refs.pipeStrategy === 'output') {\n return parseDef(def.out._def, refs);\n }\n\n const a = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', '0'],\n });\n const b = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'allOf', a ? '1' : '0'],\n });\n\n return {\n allOf: [a, b].filter((x): x is JsonSchema7Type => x !== undefined),\n };\n};\n","import { ZodPromiseDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport function parsePromiseDef(\n def: ZodPromiseDef,\n refs: Refs,\n): JsonSchema7Type | undefined {\n return parseDef(def.type._def, refs);\n}\n","import { ZodSetDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7SetType = {\n type: 'array';\n uniqueItems: true;\n items?: JsonSchema7Type;\n minItems?: number;\n maxItems?: number;\n};\n\nexport function parseSetDef(def: ZodSetDef, refs: Refs): JsonSchema7SetType {\n const items = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items'],\n });\n\n const schema: JsonSchema7SetType = {\n type: 'array',\n uniqueItems: true,\n items,\n };\n\n if (def.minSize) {\n schema.minItems = def.minSize.value;\n }\n\n if (def.maxSize) {\n schema.maxItems = def.maxSize.value;\n }\n\n return schema;\n}\n","import { ZodTupleDef, ZodTupleItems, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7TupleType = {\n type: 'array';\n minItems: number;\n items: JsonSchema7Type[];\n} & (\n | {\n maxItems: number;\n }\n | {\n additionalItems?: JsonSchema7Type;\n }\n);\n\nexport function parseTupleDef(\n def: ZodTupleDef<ZodTupleItems | [], ZodTypeAny | null>,\n refs: Refs,\n): JsonSchema7TupleType {\n if (def.rest) {\n return {\n type: 'array',\n minItems: def.items.length,\n items: def.items\n .map((x, i) =>\n parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', `${i}`],\n }),\n )\n .reduce(\n (acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]),\n [],\n ),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'additionalItems'],\n }),\n };\n } else {\n return {\n type: 'array',\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items\n .map((x, i) =>\n parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, 'items', `${i}`],\n }),\n )\n .reduce(\n (acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]),\n [],\n ),\n };\n }\n}\n","import { JsonSchema7AnyType, parseAnyDef } from './any';\n\nexport type JsonSchema7UndefinedType = {\n not: JsonSchema7AnyType;\n};\n\nexport function parseUndefinedDef(): JsonSchema7UndefinedType {\n return {\n not: parseAnyDef(),\n };\n}\n","import { JsonSchema7AnyType, parseAnyDef } from './any';\n\nexport type JsonSchema7UnknownType = JsonSchema7AnyType;\n\nexport function parseUnknownDef(): JsonSchema7UnknownType {\n return parseAnyDef();\n}\n","import { ZodReadonlyDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { Refs } from '../refs';\n\nexport const parseReadonlyDef = (def: ZodReadonlyDef<any>, refs: Refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import { ZodFirstPartyTypeKind } from 'zod/v3';\nimport { parseAnyDef } from './parsers/any';\nimport { parseArrayDef } from './parsers/array';\nimport { parseBigintDef } from './parsers/bigint';\nimport { parseBooleanDef } from './parsers/boolean';\nimport { parseBrandedDef } from './parsers/branded';\nimport { parseCatchDef } from './parsers/catch';\nimport { parseDateDef } from './parsers/date';\nimport { parseDefaultDef } from './parsers/default';\nimport { parseEffectsDef } from './parsers/effects';\nimport { parseEnumDef } from './parsers/enum';\nimport { parseIntersectionDef } from './parsers/intersection';\nimport { parseLiteralDef } from './parsers/literal';\nimport { parseMapDef } from './parsers/map';\nimport { parseNativeEnumDef } from './parsers/native-enum';\nimport { parseNeverDef } from './parsers/never';\nimport { parseNullDef } from './parsers/null';\nimport { parseNullableDef } from './parsers/nullable';\nimport { parseNumberDef } from './parsers/number';\nimport { parseObjectDef } from './parsers/object';\nimport { parseOptionalDef } from './parsers/optional';\nimport { parsePipelineDef } from './parsers/pipeline';\nimport { parsePromiseDef } from './parsers/promise';\nimport { parseRecordDef } from './parsers/record';\nimport { parseSetDef } from './parsers/set';\nimport { parseStringDef } from './parsers/string';\nimport { parseTupleDef } from './parsers/tuple';\nimport { parseUndefinedDef } from './parsers/undefined';\nimport { parseUnionDef } from './parsers/union';\nimport { parseUnknownDef } from './parsers/unknown';\nimport { Refs } from './refs';\nimport { parseReadonlyDef } from './parsers/readonly';\nimport { JsonSchema7Type } from './parse-types';\n\nexport type InnerDefGetter = () => any;\n\nexport const selectParser = (\n def: any,\n typeName: ZodFirstPartyTypeKind,\n refs: Refs,\n): JsonSchema7Type | undefined | InnerDefGetter => {\n switch (typeName) {\n case ZodFirstPartyTypeKind.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNumber:\n return parseNumberDef(def);\n case ZodFirstPartyTypeKind.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBigInt:\n return parseBigintDef(def);\n case ZodFirstPartyTypeKind.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUndefined:\n return parseUndefinedDef();\n case ZodFirstPartyTypeKind.ZodNull:\n return parseNullDef();\n case ZodFirstPartyTypeKind.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUnion:\n case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLiteral:\n return parseLiteralDef(def);\n case ZodFirstPartyTypeKind.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLazy:\n return () => (def as any).getter()._def;\n case ZodFirstPartyTypeKind.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNaN:\n case ZodFirstPartyTypeKind.ZodNever:\n return parseNeverDef();\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef();\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef();\n case ZodFirstPartyTypeKind.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind.ZodFunction:\n case ZodFirstPartyTypeKind.ZodVoid:\n case ZodFirstPartyTypeKind.ZodSymbol:\n return undefined;\n default:\n /* c8 ignore next */\n return ((_: never) => undefined)(typeName);\n }\n};\n","import { ZodTypeDef } from 'zod/v3';\nimport { Refs, Seen } from './refs';\nimport { ignoreOverride } from './options';\nimport { JsonSchema7Type } from './parse-types';\nimport { selectParser } from './select-parser';\nimport { getRelativePath } from './get-relative-path';\nimport { parseAnyDef } from './parsers/any';\n\nexport function parseDef(\n def: ZodTypeDef,\n refs: Refs,\n forceResolution = false, // Forces a new schema to be instantiated even though its def has been seen. Used for improving refs in definitions. See https://github.com/StefanTerdell/zod-to-json-schema/pull/61.\n): JsonSchema7Type | undefined {\n const seenItem = refs.seen.get(def);\n\n if (refs.override) {\n const overrideResult = refs.override?.(\n def,\n refs,\n seenItem,\n forceResolution,\n );\n\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n\n if (seenSchema !== undefined) {\n return seenSchema;\n }\n }\n\n const newItem: Seen = { def, path: refs.currentPath, jsonSchema: undefined };\n\n refs.seen.set(def, newItem);\n\n const jsonSchemaOrGetter = selectParser(def, (def as any).typeName, refs);\n\n // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n const jsonSchema =\n typeof jsonSchemaOrGetter === 'function'\n ? parseDef(jsonSchemaOrGetter(), refs)\n : jsonSchemaOrGetter;\n\n if (jsonSchema) {\n addMeta(def, refs, jsonSchema);\n }\n\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n\n newItem.jsonSchema = jsonSchema;\n\n return postProcessResult;\n }\n\n newItem.jsonSchema = jsonSchema;\n\n return jsonSchema;\n}\n\nconst get$ref = (\n item: Seen,\n refs: Refs,\n):\n | {\n $ref: string;\n }\n | {}\n | undefined => {\n switch (refs.$refStrategy) {\n case 'root':\n return { $ref: item.path.join('/') };\n case 'relative':\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case 'none':\n case 'seen': {\n if (\n item.path.length < refs.currentPath.length &&\n item.path.every((value, index) => refs.currentPath[index] === value)\n ) {\n console.warn(\n `Recursive reference detected at ${refs.currentPath.join(\n '/',\n )}! Defaulting to any`,\n );\n\n return parseAnyDef();\n }\n\n return refs.$refStrategy === 'seen' ? parseAnyDef() : undefined;\n }\n }\n};\n\nconst addMeta = (\n def: ZodTypeDef,\n refs: Refs,\n jsonSchema: JsonSchema7Type,\n): JsonSchema7Type => {\n if (def.description) {\n jsonSchema.description = def.description;\n }\n return jsonSchema;\n};\n","import { ZodTypeDef } from 'zod/v3';\nimport { getDefaultOptions, Options } from './options';\nimport { JsonSchema7Type } from './parse-types';\n\nexport type Refs = {\n seen: Map<ZodTypeDef, Seen>;\n currentPath: string[];\n propertyPath: string[] | undefined;\n} & Options;\n\nexport type Seen = {\n def: ZodTypeDef;\n path: string[];\n jsonSchema: JsonSchema7Type | undefined;\n};\n\nexport const getRefs = (options?: string | Partial<Options>): Refs => {\n const _options = getDefaultOptions(options);\n const currentPath =\n _options.name !== undefined\n ? [..._options.basePath, _options.definitionPath, _options.name]\n : _options.basePath;\n return {\n ..._options,\n currentPath: currentPath,\n propertyPath: undefined,\n seen: new Map(\n Object.entries(_options.definitions).map(([name, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: undefined,\n },\n ]),\n ),\n };\n};\n","import { ZodSchema } from 'zod/v3';\nimport { Options } from './options';\nimport { parseDef } from './parse-def';\nimport { JsonSchema7Type } from './parse-types';\nimport { getRefs } from './refs';\nimport { parseAnyDef } from './parsers/any';\n\nconst zodToJsonSchema = (\n schema: ZodSchema<any>,\n options?: Partial<Options> | string,\n): JsonSchema7Type & {\n $schema?: string;\n definitions?: {\n [key: string]: JsonSchema7Type;\n };\n} => {\n const refs = getRefs(options);\n\n let definitions =\n typeof options === 'object' && options.definitions\n ? Object.entries(options.definitions).reduce(\n (acc: { [key: string]: JsonSchema7Type }, [name, schema]) => ({\n ...acc,\n [name]:\n parseDef(\n schema._def,\n {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n },\n true,\n ) ?? parseAnyDef(),\n }),\n {},\n )\n : undefined;\n\n const name =\n typeof options === 'string'\n ? options\n : options?.nameStrategy === 'title'\n ? undefined\n : options?.name;\n\n const main =\n parseDef(\n schema._def,\n name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n },\n false,\n ) ?? (parseAnyDef() as JsonSchema7Type);\n\n const title =\n typeof options === 'object' &&\n options.name !== undefined &&\n options.nameStrategy === 'title'\n ? options.name\n : undefined;\n\n if (title !== undefined) {\n main.title = title;\n }\n\n const combined: ReturnType<typeof zodToJsonSchema> =\n name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === 'relative' ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join('/'),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n\n combined.$schema = 'http://json-schema.org/draft-07/schema#';\n\n return combined;\n};\n\nexport { zodToJsonSchema };\n","export * from './get-relative-path';\nexport * from './options';\nexport * from './parse-def';\nexport * from './parse-types';\nexport * from './parsers/any';\nexport * from './parsers/array';\nexport * from './parsers/bigint';\nexport * from './parsers/boolean';\nexport * from './parsers/branded';\nexport * from './parsers/catch';\nexport * from './parsers/date';\nexport * from './parsers/default';\nexport * from './parsers/effects';\nexport * from './parsers/enum';\nexport * from './parsers/intersection';\nexport * from './parsers/literal';\nexport * from './parsers/map';\nexport * from './parsers/native-enum';\nexport * from './parsers/never';\nexport * from './parsers/null';\nexport * from './parsers/nullable';\nexport * from './parsers/number';\nexport * from './parsers/object';\nexport * from './parsers/optional';\nexport * from './parsers/pipeline';\nexport * from './parsers/promise';\nexport * from './parsers/readonly';\nexport * from './parsers/record';\nexport * from './parsers/set';\nexport * from './parsers/string';\nexport * from './parsers/tuple';\nexport * from './parsers/undefined';\nexport * from './parsers/union';\nexport * from './parsers/unknown';\nexport * from './refs';\nexport * from './select-parser';\nexport * from './zod-to-json-schema';\nimport { zodToJsonSchema } from './zod-to-json-schema';\nexport default zodToJsonSchema;\n","import { JSONSchema7 } from '@ai-sdk/provider';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4';\nimport zodToJsonSchema from './zod-to-json-schema';\nimport { jsonSchema, Schema } from './schema';\n\nexport function zod3Schema<OBJECT>(\n zodSchema: z3.Schema<OBJECT, z3.ZodTypeDef, any>,\n options?: {\n /**\n * Enables support for references in the schema.\n * This is required for recursive schemas, e.g. with `z.lazy`.\n * However, not all language models and providers support such references.\n * Defaults to `false`.\n */\n useReferences?: boolean;\n },\n): Schema<OBJECT> {\n // default to no references (to support openapi conversion for google)\n const useReferences = options?.useReferences ?? false;\n\n return jsonSchema(\n // defer json schema creation to avoid unnecessary computation when only validation is needed\n () =>\n zodToJsonSchema(zodSchema, {\n $refStrategy: useReferences ? 'root' : 'none',\n }) as JSONSchema7,\n {\n validate: async value => {\n const result = await zodSchema.safeParseAsync(value);\n return result.success\n ? { success: true, value: result.data }\n : { success: false, error: result.error };\n },\n },\n );\n}\n\nexport function zod4Schema<OBJECT>(\n zodSchema: z4.core.$ZodType<OBJECT, any>,\n options?: {\n /**\n * Enables support for references in the schema.\n * This is required for recursive schemas, e.g. with `z.lazy`.\n * However, not all language models and providers support such references.\n * Defaults to `false`.\n */\n useReferences?: boolean;\n },\n): Schema<OBJECT> {\n // default to no references (to support openapi conversion for google)\n const useReferences = options?.useReferences ?? false;\n\n return jsonSchema(\n // defer json schema creation to avoid unnecessary computation when only validation is needed\n () =>\n z4.toJSONSchema(zodSchema, {\n target: 'draft-7',\n io: 'output',\n reused: useReferences ? 'ref' : 'inline',\n }) as JSONSchema7,\n {\n validate: async value => {\n const result = await z4.safeParseAsync(zodSchema, value);\n return result.success\n ? { success: true, value: result.data }\n : { success: false, error: result.error };\n },\n },\n );\n}\n\nexport function isZod4Schema(\n zodSchema: z4.core.$ZodType<any, any> | z3.Schema<any, z3.ZodTypeDef, any>,\n): zodSchema is z4.core.$ZodType<any, any> {\n // https://zod.dev/library-authors?id=how-to-support-zod-3-and-zod-4-simultaneously\n return '_zod' in zodSchema;\n}\n\nexport function zodSchema<OBJECT>(\n zodSchema:\n | z4.core.$ZodType<OBJECT, any>\n | z3.Schema<OBJECT, z3.ZodTypeDef, any>,\n options?: {\n /**\n * Enables support for references in the schema.\n * This is required for recursive schemas, e.g. with `z.lazy`.\n * However, not all language models and providers support such references.\n * Defaults to `false`.\n */\n useReferences?: boolean;\n },\n): Schema<OBJECT> {\n if (isZod4Schema(zodSchema)) {\n return zod4Schema(zodSchema, options);\n } else {\n return zod3Schema(zodSchema, options);\n }\n}\n","import { JSONSchema7 } from '@ai-sdk/provider';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4';\nimport { Validator, validatorSymbol, type ValidationResult } from './validator';\nimport { zodSchema } from './zod-schema';\n\n/**\n * Used to mark schemas so we can support both Zod and custom schemas.\n */\nconst schemaSymbol = Symbol.for('vercel.ai.schema');\n\nexport type Schema<OBJECT = unknown> = Validator<OBJECT> & {\n /**\n * Used to mark schemas so we can support both Zod and custom schemas.\n */\n [schemaSymbol]: true;\n\n /**\n * Schema type for inference.\n */\n _type: OBJECT;\n\n /**\n * The JSON Schema for the schema. It is passed to the providers.\n */\n readonly jsonSchema: JSONSchema7;\n};\n\n/**\n * Creates a schema with deferred creation.\n * This is important to reduce the startup time of the library\n * and to avoid initializing unused validators.\n *\n * @param createValidator A function that creates a schema.\n * @returns A function that returns a schema.\n */\nexport function lazySchema<SCHEMA>(\n createSchema: () => Schema<SCHEMA>,\n): LazySchema<SCHEMA> {\n // cache the validator to avoid initializing it multiple times\n let schema: Schema<SCHEMA> | undefined;\n return () => {\n if (schema == null) {\n schema = createSchema();\n }\n return schema;\n };\n}\n\nexport type LazySchema<SCHEMA> = () => Schema<SCHEMA>;\n\n// Note: Zod types here exactly match the types in zod-schema.ts\n// to prevent type errors when using zod schemas with flexible schemas.\nexport type FlexibleSchema<SCHEMA> =\n | z4.core.$ZodType<SCHEMA, any>\n | z3.Schema<SCHEMA, z3.ZodTypeDef, any>\n | Schema<SCHEMA>\n | LazySchema<SCHEMA>;\n\nexport type InferSchema<SCHEMA> = SCHEMA extends z3.Schema\n ? z3.infer<SCHEMA>\n : SCHEMA extends z4.core.$ZodType\n ? z4.infer<SCHEMA>\n : SCHEMA extends LazySchema<infer T>\n ? T\n : SCHEMA extends Schema<infer T>\n ? T\n : never;\n\n/**\n * Create a schema using a JSON Schema.\n *\n * @param jsonSchema The JSON Schema for the schema.\n * @param options.validate Optional. A validation function for the schema.\n */\nexport function jsonSchema<OBJECT = unknown>(\n jsonSchema: JSONSchema7 | (() => JSONSchema7),\n {\n validate,\n }: {\n validate?: (\n value: unknown,\n ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>;\n } = {},\n): Schema<OBJECT> {\n return {\n [schemaSymbol]: true,\n _type: undefined as OBJECT, // should never be used directly\n [validatorSymbol]: true,\n get jsonSchema() {\n if (typeof jsonSchema === 'function') {\n jsonSchema = jsonSchema(); // cache the function results\n }\n return jsonSchema;\n },\n validate,\n };\n}\n\nfunction isSchema(value: unknown): value is Schema {\n return (\n typeof value === 'object' &&\n value !== null &&\n schemaSymbol in value &&\n value[schemaSymbol] === true &&\n 'jsonSchema' in value &&\n 'validate' in value\n );\n}\n\nexport function asSchema<OBJECT>(\n schema: FlexibleSchema<OBJECT> | undefined,\n): Schema<OBJECT> {\n return schema == null\n ? jsonSchema({\n properties: {},\n additionalProperties: false,\n })\n : isSchema(schema)\n ? schema\n : typeof schema === 'function'\n ? schema()\n : zodSchema(schema);\n}\n","export function withoutTrailingSlash(url: string | undefined) {\n return url?.replace(/\\/$/, '');\n}\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar get_context_exports = {};\n__export(get_context_exports, {\n SYMBOL_FOR_REQ_CONTEXT: () => SYMBOL_FOR_REQ_CONTEXT,\n getContext: () => getContext\n});\nmodule.exports = __toCommonJS(get_context_exports);\nconst SYMBOL_FOR_REQ_CONTEXT = Symbol.for(\"@vercel/request-context\");\nfunction getContext() {\n const fromSymbol = globalThis;\n return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n SYMBOL_FOR_REQ_CONTEXT,\n getContext\n});\n","\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar get_vercel_oidc_token_exports = {};\n__export(get_vercel_oidc_token_exports, {\n getVercelOidcToken: () => getVercelOidcToken,\n getVercelOidcTokenSync: () => getVercelOidcTokenSync\n});\nmodule.exports = __toCommonJS(get_vercel_oidc_token_exports);\nvar import_get_context = require(\"./get-context\");\nvar import_token_error = require(\"./token-error\");\nasync function getVercelOidcToken() {\n let token = \"\";\n let err;\n try {\n token = getVercelOidcTokenSync();\n } catch (error) {\n err = error;\n }\n try {\n const [{ getTokenPayload, isExpired }, { refreshToken }] = await Promise.all([\n await import(\"./token-util.js\"),\n await import(\"./token.js\")\n ]);\n if (!token || isExpired(getTokenPayload(token))) {\n await refreshToken();\n token = getVercelOidcTokenSync();\n }\n } catch (error) {\n if (err?.message && error instanceof Error) {\n error.message = `${err.message}\n${error.message}`;\n }\n throw new import_token_error.VercelOidcTokenError(`Failed to refresh OIDC token`, error);\n }\n return token;\n}\nfunction getVercelOidcTokenSync() {\n const token = (0, import_get_context.getContext)().headers?.[\"x-vercel-oidc-token\"] ?? process.env.VERCEL_OIDC_TOKEN;\n if (!token) {\n throw new Error(\n `The 'x-vercel-oidc-token' header is missing from the request. Do you have the OIDC option enabled in the Vercel project settings?`\n );\n }\n return token;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n getVercelOidcToken,\n getVercelOidcTokenSync\n});\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar src_exports = {};\n__export(src_exports, {\n getContext: () => import_get_context.getContext,\n getVercelOidcToken: () => import_get_vercel_oidc_token.getVercelOidcToken,\n getVercelOidcTokenSync: () => import_get_vercel_oidc_token.getVercelOidcTokenSync\n});\nmodule.exports = __toCommonJS(src_exports);\nvar import_get_vercel_oidc_token = require(\"./get-vercel-oidc-token\");\nvar import_get_context = require(\"./get-context\");\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n getContext,\n getVercelOidcToken,\n getVercelOidcTokenSync\n});\n","import { getContext } from '@vercel/oidc';\nexport { getVercelOidcToken } from '@vercel/oidc';\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n return getContext().headers?.['x-vercel-id'];\n}\n","const marker = 'vercel.ai.gateway.error';\nconst symbol = Symbol.for(marker);\n\nexport abstract class GatewayError extends Error {\n private readonly [symbol] = true; // used in isInstance\n\n abstract readonly name: string;\n abstract readonly type: string;\n readonly statusCode: number;\n readonly cause?: unknown;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n }) {\n super(message);\n this.statusCode = statusCode;\n this.cause = cause;\n }\n\n /**\n * Checks if the given error is a Gateway Error.\n * @param {unknown} error - The error to check.\n * @returns {boolean} True if the error is a Gateway Error, false otherwise.\n */\n static isInstance(error: unknown): error is GatewayError {\n return GatewayError.hasMarker(error);\n }\n\n static hasMarker(error: unknown): error is GatewayError {\n return (\n typeof error === 'object' &&\n error !== null &&\n symbol in error &&\n (error as any)[symbol] === true\n );\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayAuthenticationError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Authentication failed - invalid API key or OIDC token\n */\nexport class GatewayAuthenticationError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'authentication_error';\n\n constructor({\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayAuthenticationError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n\n /**\n * Creates a contextual error message when authentication fails\n */\n static createContextualError({\n apiKeyProvided,\n oidcTokenProvided,\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n }: {\n apiKeyProvided: boolean;\n oidcTokenProvided: boolean;\n message?: string;\n statusCode?: number;\n cause?: unknown;\n }): GatewayAuthenticationError {\n let contextualMessage: string;\n\n if (apiKeyProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid API key.\n\nCreate a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\n\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n } else if (oidcTokenProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid OIDC token.\n\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.\n\nAlternatively, use an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys`;\n } else {\n contextualMessage = `AI Gateway authentication failed: No authentication provided.\n\nOption 1 - API key:\nCreate an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.\n\nOption 2 - OIDC token:\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`;\n }\n\n return new GatewayAuthenticationError({\n message: contextualMessage,\n statusCode,\n cause,\n });\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInvalidRequestError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Invalid request - missing headers, malformed data, etc.\n */\nexport class GatewayInvalidRequestError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'invalid_request_error';\n\n constructor({\n message = 'Invalid request',\n statusCode = 400,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInvalidRequestError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayRateLimitError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Rate limit exceeded.\n */\nexport class GatewayRateLimitError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'rate_limit_exceeded';\n\n constructor({\n message = 'Rate limit exceeded',\n statusCode = 429,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayRateLimitError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { z } from 'zod/v4';\nimport { GatewayError } from './gateway-error';\nimport { lazyValidator, zodSchema } from '@ai-sdk/provider-utils';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = lazyValidator(() =>\n zodSchema(\n z.object({\n modelId: z.string(),\n }),\n ),\n);\n\n/**\n * Model not found or not available\n */\nexport class GatewayModelNotFoundError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'model_not_found';\n readonly modelId?: string;\n\n constructor({\n message = 'Model not found',\n statusCode = 404,\n modelId,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n modelId?: string;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.modelId = modelId;\n }\n\n static isInstance(error: unknown): error is GatewayModelNotFoundError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInternalServerError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Internal server error from the Gateway\n */\nexport class GatewayInternalServerError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'internal_server_error';\n\n constructor({\n message = 'Internal server error',\n statusCode = 500,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInternalServerError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { GatewayError } from './gateway-error';\n\nconst name = 'GatewayResponseError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Gateway response parsing error\n */\nexport class GatewayResponseError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'response_error';\n readonly response?: unknown;\n readonly validationError?: TypeValidationError;\n\n constructor({\n message = 'Invalid response from Gateway',\n statusCode = 502,\n response,\n validationError,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n response?: unknown;\n validationError?: TypeValidationError;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.response = response;\n this.validationError = validationError;\n }\n\n static isInstance(error: unknown): error is GatewayResponseError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { z } from 'zod/v4';\nimport type { GatewayError } from './gateway-error';\nimport { GatewayAuthenticationError } from './gateway-authentication-error';\nimport { GatewayInvalidRequestError } from './gateway-invalid-request-error';\nimport { GatewayRateLimitError } from './gateway-rate-limit-error';\nimport {\n GatewayModelNotFoundError,\n modelNotFoundParamSchema,\n} from './gateway-model-not-found-error';\nimport { GatewayInternalServerError } from './gateway-internal-server-error';\nimport { GatewayResponseError } from './gateway-response-error';\nimport {\n InferValidator,\n lazyValidator,\n safeValidateTypes,\n validateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport async function createGatewayErrorFromResponse({\n response,\n statusCode,\n defaultMessage = 'Gateway request failed',\n cause,\n authMethod,\n}: {\n response: unknown;\n statusCode: number;\n defaultMessage?: string;\n cause?: unknown;\n authMethod?: 'api-key' | 'oidc';\n}): Promise<GatewayError> {\n const parseResult = await safeValidateTypes({\n value: response,\n schema: gatewayErrorResponseSchema,\n });\n\n if (!parseResult.success) {\n return new GatewayResponseError({\n message: `Invalid error response format: ${defaultMessage}`,\n statusCode,\n response,\n validationError: parseResult.error,\n cause,\n });\n }\n\n const validatedResponse: GatewayErrorResponse = parseResult.value;\n const errorType = validatedResponse.error.type;\n const message = validatedResponse.error.message;\n\n switch (errorType) {\n case 'authentication_error':\n return GatewayAuthenticationError.createContextualError({\n apiKeyProvided: authMethod === 'api-key',\n oidcTokenProvided: authMethod === 'oidc',\n statusCode,\n cause,\n });\n case 'invalid_request_error':\n return new GatewayInvalidRequestError({ message, statusCode, cause });\n case 'rate_limit_exceeded':\n return new GatewayRateLimitError({ message, statusCode, cause });\n case 'model_not_found': {\n const modelResult = await safeValidateTypes({\n value: validatedResponse.error.param,\n schema: modelNotFoundParamSchema,\n });\n\n return new GatewayModelNotFoundError({\n message,\n statusCode,\n modelId: modelResult.success ? modelResult.value.modelId : undefined,\n cause,\n });\n }\n case 'internal_server_error':\n return new GatewayInternalServerError({ message, statusCode, cause });\n default:\n return new GatewayInternalServerError({ message, statusCode, cause });\n }\n}\n\nconst gatewayErrorResponseSchema = lazyValidator(() =>\n zodSchema(\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.unknown().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n }),\n ),\n);\n\nexport type GatewayErrorResponse = InferValidator<\n typeof gatewayErrorResponseSchema\n>;\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\n\nexport function asGatewayError(\n error: unknown,\n authMethod?: 'api-key' | 'oidc',\n) {\n if (GatewayError.isInstance(error)) {\n return error;\n }\n\n if (APICallError.isInstance(error)) {\n return createGatewayErrorFromResponse({\n response: extractApiCallResponse(error),\n statusCode: error.statusCode ?? 500,\n defaultMessage: 'Gateway request failed',\n cause: error,\n authMethod,\n });\n }\n\n return createGatewayErrorFromResponse({\n response: {},\n statusCode: 500,\n defaultMessage:\n error instanceof Error\n ? `Gateway request failed: ${error.message}`\n : 'Unknown Gateway error',\n cause: error,\n authMethod,\n });\n}\n","import type { APICallError } from '@ai-sdk/provider';\n\nexport function extractApiCallResponse(error: APICallError): unknown {\n if (error.data !== undefined) {\n return error.data;\n }\n if (error.responseBody != null) {\n try {\n return JSON.parse(error.responseBody);\n } catch {\n return error.responseBody;\n }\n }\n return {};\n}\n","import { z } from 'zod/v4';\nimport {\n lazyValidator,\n safeValidateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport const GATEWAY_AUTH_METHOD_HEADER = 'ai-gateway-auth-method' as const;\n\nexport async function parseAuthMethod(\n headers: Record<string, string | undefined>,\n) {\n const result = await safeValidateTypes({\n value: headers[GATEWAY_AUTH_METHOD_HEADER],\n schema: gatewayAuthMethodSchema,\n });\n\n return result.success ? result.value : undefined;\n}\n\nconst gatewayAuthMethodSchema = lazyValidator(() =>\n zodSchema(z.union([z.literal('api-key'), z.literal('oidc')])),\n);\n","import {\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n lazyValidator,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayLanguageModelEntry } from './gateway-model-entry';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n models: GatewayLanguageModelEntry[];\n}\n\nexport interface GatewayCreditsResponse {\n /** The remaining gateway credit balance available for API usage */\n balance: string;\n /** The total amount of gateway credits that have been consumed */\n totalUsed: string;\n}\n\nexport class GatewayFetchMetadata {\n constructor(private readonly config: GatewayFetchMetadataConfig) {}\n\n async getAvailableModels(): Promise<GatewayFetchMetadataResponse> {\n try {\n const { value } = await getFromApi({\n url: `${this.config.baseURL}/config`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayAvailableModelsResponseSchema,\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n fetch: this.config.fetch,\n });\n\n return value;\n } catch (error) {\n throw await asGatewayError(error);\n }\n }\n\n async getCredits(): Promise<GatewayCreditsResponse> {\n try {\n const baseUrl = new URL(this.config.baseURL);\n\n const { value } = await getFromApi({\n url: `${baseUrl.origin}/v1/credits`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayCreditsResponseSchema,\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n fetch: this.config.fetch,\n });\n\n return value;\n } catch (error) {\n throw await asGatewayError(error);\n }\n }\n}\n\nconst gatewayAvailableModelsResponseSchema = lazyValidator(() =>\n zodSchema(\n z.object({\n models: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullish(),\n pricing: z\n .object({\n input: z.string(),\n output: z.string(),\n input_cache_read: z.string().nullish(),\n input_cache_write: z.string().nullish(),\n })\n .transform(\n ({ input, output, input_cache_read, input_cache_write }) => ({\n input,\n output,\n ...(input_cache_read\n ? { cachedInputTokens: input_cache_read }\n : {}),\n ...(input_cache_write\n ? { cacheCreationInputTokens: input_cache_write }\n : {}),\n }),\n )\n .nullish(),\n specification: z.object({\n specificationVersion: z.literal('v2'),\n provider: z.string(),\n modelId: z.string(),\n }),\n modelType: z.enum(['language', 'embedding', 'image']).nullish(),\n }),\n ),\n }),\n ),\n);\n\nconst gatewayCreditsResponseSchema = lazyValidator(() =>\n zodSchema(\n z\n .object({\n balance: z.string(),\n total_used: z.string(),\n })\n .transform(({ balance, total_used }) => ({\n balance,\n totalUsed: total_used,\n })),\n ),\n);\n","import type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2CallWarning,\n LanguageModelV2FilePart,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n type ParseResult,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\ntype GatewayChatConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n readonly supportedUrls = { '*/*': [/.*/] };\n\n constructor(\n readonly modelId: GatewayModelId,\n private readonly config: GatewayChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n private async getArgs(options: Parameters<LanguageModelV2['doGenerate']>[0]) {\n const { abortSignal: _abortSignal, ...optionsWithoutSignal } = options;\n\n return {\n args: this.maybeEncodeFileParts(optionsWithoutSignal),\n warnings: [],\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = await resolve(this.config.headers());\n\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, false),\n await resolve(this.config.o11yHeaders),\n ),\n body: args,\n successfulResponseHandler: createJsonResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n ...responseBody,\n request: { body: args },\n response: { headers: responseHeaders, body: rawResponse },\n warnings,\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = await resolve(this.config.headers());\n\n try {\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, true),\n await resolve(this.config.o11yHeaders),\n ),\n body: args,\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<LanguageModelV2StreamPart>,\n LanguageModelV2StreamPart\n >({\n start(controller) {\n if (warnings.length > 0) {\n controller.enqueue({ type: 'stream-start', warnings });\n }\n },\n transform(chunk, controller) {\n if (chunk.success) {\n const streamPart = chunk.value;\n\n // Handle raw chunks: if this is a raw chunk from the gateway API,\n // only emit it if includeRawChunks is true\n if (streamPart.type === 'raw' && !options.includeRawChunks) {\n return; // Skip raw chunks if not requested\n }\n\n if (\n streamPart.type === 'response-metadata' &&\n streamPart.timestamp &&\n typeof streamPart.timestamp === 'string'\n ) {\n streamPart.timestamp = new Date(streamPart.timestamp);\n }\n\n controller.enqueue(streamPart);\n } else {\n controller.error(\n (chunk as { success: false; error: unknown }).error,\n );\n }\n },\n }),\n ),\n request: { body: args },\n response: { headers: responseHeaders },\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private isFilePart(part: unknown) {\n return (\n part && typeof part === 'object' && 'type' in part && part.type === 'file'\n );\n }\n\n /**\n * Encodes file parts in the prompt to base64. Mutates the passed options\n * instance directly to avoid copying the file data.\n * @param options - The options to encode.\n * @returns The options with the file parts encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV2CallOptions) {\n for (const message of options.prompt) {\n for (const part of message.content) {\n if (this.isFilePart(part)) {\n const filePart = part as LanguageModelV2FilePart;\n // If the file part is a URL it will get cleanly converted to a string.\n // If it's a binary file attachment we convert it to a data url.\n // In either case, server-side we should only ever see URLs as strings.\n if (filePart.data instanceof Uint8Array) {\n const buffer = Uint8Array.from(filePart.data);\n const base64Data = Buffer.from(buffer).toString('base64');\n filePart.data = new URL(\n `data:${filePart.mediaType || 'application/octet-stream'};base64,${base64Data}`,\n );\n }\n }\n }\n }\n return options;\n }\n\n private getUrl() {\n return `${this.config.baseURL}/language-model`;\n }\n\n private getModelConfigHeaders(modelId: string, streaming: boolean) {\n return {\n 'ai-language-model-specification-version': '2',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n","import type {\n EmbeddingModelV2,\n SharedV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n lazyValidator,\n postJsonToApi,\n resolve,\n zodSchema,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\nimport type { GatewayConfig } from './gateway-config';\n\nexport class GatewayEmbeddingModel implements EmbeddingModelV2<string> {\n readonly specificationVersion = 'v2';\n readonly maxEmbeddingsPerCall = 2048;\n readonly supportsParallelCalls = true;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV2<string>['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV2<string>['doEmbed']>>\n > {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n input: values.length === 1 ? values[0] : values,\n ...(providerOptions ? { providerOptions } : {}),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayEmbeddingResponseSchema,\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n embeddings: responseBody.embeddings,\n usage: responseBody.usage ?? undefined,\n providerMetadata:\n responseBody.providerMetadata as unknown as SharedV2ProviderMetadata,\n response: { headers: responseHeaders, body: rawValue },\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/embedding-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-embedding-model-specification-version': '2',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst gatewayEmbeddingResponseSchema = lazyValidator(() =>\n zodSchema(\n z.object({\n embeddings: z.array(z.array(z.number())),\n usage: z.object({ tokens: z.number() }).nullish(),\n providerMetadata: z\n .record(z.string(), z.record(z.string(), z.unknown()))\n .optional(),\n }),\n ),\n);\n","import type {\n ImageModelV2,\n ImageModelV2CallWarning,\n ImageModelV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayImageModel implements ImageModelV2 {\n readonly specificationVersion = 'v2';\n // Set a very large number to prevent client-side splitting of requests\n readonly maxImagesPerCall = Number.MAX_SAFE_INTEGER;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV2['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV2['doGenerate']>>\n > {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n prompt,\n n,\n ...(size && { size }),\n ...(aspectRatio && { aspectRatio }),\n ...(seed && { seed }),\n ...(providerOptions && { providerOptions }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayImageResponseSchema,\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n images: responseBody.images, // Always base64 strings from server\n warnings: responseBody.warnings ?? [],\n providerMetadata:\n responseBody.providerMetadata as ImageModelV2ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n } catch (error) {\n throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/image-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-image-model-specification-version': '2',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst providerMetadataEntrySchema = z\n .object({\n images: z.array(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nconst gatewayImageResponseSchema = z.object({\n images: z.array(z.string()), // Always base64 strings over the wire\n warnings: z\n .array(\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n )\n .optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n loadOptionalSetting,\n withoutTrailingSlash,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError, GatewayAuthenticationError } from './errors';\nimport {\n GATEWAY_AUTH_METHOD_HEADER,\n parseAuthMethod,\n} from './errors/parse-auth-method';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n type GatewayCreditsResponse,\n} from './gateway-fetch-metadata';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport { GatewayEmbeddingModel } from './gateway-embedding-model';\nimport { GatewayImageModel } from './gateway-image-model';\nimport type { GatewayEmbeddingModelId } from './gateway-embedding-model-settings';\nimport type { GatewayImageModelId } from './gateway-image-model-settings';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport type {\n LanguageModelV2,\n EmbeddingModelV2,\n ImageModelV2,\n ProviderV2,\n} from '@ai-sdk/provider';\nimport { withUserAgentSuffix } from '@ai-sdk/provider-utils';\nimport { VERSION } from './version';\n\nexport interface GatewayProvider extends ProviderV2 {\n (modelId: GatewayModelId): LanguageModelV2;\n\n /**\nCreates a model for text generation.\n*/\n languageModel(modelId: GatewayModelId): LanguageModelV2;\n\n /**\nReturns available providers and models for use with the remote provider.\n */\n getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n\n /**\nReturns credit information for the authenticated user.\n */\n getCredits(): Promise<GatewayCreditsResponse>;\n\n /**\nCreates a model for generating text embeddings.\n*/\n textEmbeddingModel(\n modelId: GatewayEmbeddingModelId,\n ): EmbeddingModelV2<string>;\n\n /**\nCreates a model for generating images.\n*/\n imageModel(modelId: GatewayImageModelId): ImageModelV2;\n}\n\nexport interface GatewayProviderSettings {\n /**\nThe base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n */\n baseURL?: string;\n\n /**\nAPI key that is being sent using the `Authorization` header.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\nHow frequently to refresh the metadata cache in milliseconds.\n */\n metadataCacheRefreshMillis?: number;\n\n /**\n * @internal For testing purposes only\n */\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nconst AI_GATEWAY_PROTOCOL_VERSION = '0.0.1';\n\n/**\nCreate a remote provider instance.\n */\nexport function createGatewayProvider(\n options: GatewayProviderSettings = {},\n): GatewayProvider {\n let pendingMetadata: Promise<GatewayFetchMetadataResponse> | null = null;\n let metadataCache: GatewayFetchMetadataResponse | null = null;\n const cacheRefreshMillis =\n options.metadataCacheRefreshMillis ?? 1000 * 60 * 5;\n let lastFetchTime = 0;\n\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://ai-gateway.vercel.sh/v1/ai';\n\n const getHeaders = async () => {\n const auth = await getGatewayAuthToken(options);\n if (auth) {\n return withUserAgentSuffix(\n {\n Authorization: `Bearer ${auth.token}`,\n 'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,\n ...options.headers,\n },\n `ai-sdk/gateway/${VERSION}`,\n );\n }\n\n throw GatewayAuthenticationError.createContextualError({\n apiKeyProvided: false,\n oidcTokenProvided: false,\n statusCode: 401,\n });\n };\n\n const createO11yHeaders = () => {\n const deploymentId = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_DEPLOYMENT_ID',\n });\n const environment = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_ENV',\n });\n const region = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_REGION',\n });\n\n return async () => {\n const requestId = await getVercelRequestId();\n return {\n ...(deploymentId && { 'ai-o11y-deployment-id': deploymentId }),\n ...(environment && { 'ai-o11y-environment': environment }),\n ...(region && { 'ai-o11y-region': region }),\n ...(requestId && { 'ai-o11y-request-id': requestId }),\n };\n };\n };\n\n const createLanguageModel = (modelId: GatewayModelId) => {\n return new GatewayLanguageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n\n const getAvailableModels = async () => {\n const now = options._internal?.currentDate?.().getTime() ?? Date.now();\n if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {\n lastFetchTime = now;\n\n pendingMetadata = new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getAvailableModels()\n .then(metadata => {\n metadataCache = metadata;\n return metadata;\n })\n .catch(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\n }\n\n return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n };\n\n const getCredits = async () => {\n return new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getCredits()\n .catch(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\n };\n\n const provider = function (modelId: GatewayModelId) {\n if (new.target) {\n throw new Error(\n 'The Gateway Provider model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.getAvailableModels = getAvailableModels;\n provider.getCredits = getCredits;\n provider.imageModel = (modelId: GatewayImageModelId) => {\n return new GatewayImageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.languageModel = createLanguageModel;\n provider.textEmbeddingModel = (modelId: GatewayEmbeddingModelId) => {\n return new GatewayEmbeddingModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n\n return provider;\n}\n\nexport const gateway = createGatewayProvider();\n\nexport async function getGatewayAuthToken(\n options: GatewayProviderSettings,\n): Promise<{\n token: string;\n authMethod: 'api-key' | 'oidc';\n} | null> {\n const apiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AI_GATEWAY_API_KEY',\n });\n\n if (apiKey) {\n return {\n token: apiKey,\n authMethod: 'api-key',\n };\n }\n\n try {\n const oidcToken = await getVercelOidcToken();\n return {\n token: oidcToken,\n authMethod: 'oidc',\n };\n } catch {\n return null;\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** only globals that common to node and browsers are allowed */\n// eslint-disable-next-line node/no-unsupported-features/es-builtins\nexport const _globalThis = typeof globalThis === 'object' ? globalThis : global;\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '1.9.0';\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { VERSION } from '../version';\n\nconst re = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;\n\n/**\n * Create a function to test an API version to see if it is compatible with the provided ownVersion.\n *\n * The returned function has the following semantics:\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param ownVersion version which should be checked against\n */\nexport function _makeCompatibilityCheck(\n ownVersion: string\n): (globalVersion: string) => boolean {\n const acceptedVersions = new Set<string>([ownVersion]);\n const rejectedVersions = new Set<string>();\n\n const myVersionMatch = ownVersion.match(re);\n if (!myVersionMatch) {\n // we cannot guarantee compatibility so we always return noop\n return () => false;\n }\n\n const ownVersionParsed = {\n major: +myVersionMatch[1],\n minor: +myVersionMatch[2],\n patch: +myVersionMatch[3],\n prerelease: myVersionMatch[4],\n };\n\n // if ownVersion has a prerelease tag, versions must match exactly\n if (ownVersionParsed.prerelease != null) {\n return function isExactmatch(globalVersion: string): boolean {\n return globalVersion === ownVersion;\n };\n }\n\n function _reject(v: string) {\n rejectedVersions.add(v);\n return false;\n }\n\n function _accept(v: string) {\n acceptedVersions.add(v);\n return true;\n }\n\n return function isCompatible(globalVersion: string): boolean {\n if (acceptedVersions.has(globalVersion)) {\n return true;\n }\n\n if (rejectedVersions.has(globalVersion)) {\n return false;\n }\n\n const globalVersionMatch = globalVersion.match(re);\n if (!globalVersionMatch) {\n // cannot parse other version\n // we cannot guarantee compatibility so we always noop\n return _reject(globalVersion);\n }\n\n const globalVersionParsed = {\n major: +globalVersionMatch[1],\n minor: +globalVersionMatch[2],\n patch: +globalVersionMatch[3],\n prerelease: globalVersionMatch[4],\n };\n\n // if globalVersion has a prerelease tag, versions must match exactly\n if (globalVersionParsed.prerelease != null) {\n return _reject(globalVersion);\n }\n\n // major versions must match\n if (ownVersionParsed.major !== globalVersionParsed.major) {\n return _reject(globalVersion);\n }\n\n if (ownVersionParsed.major === 0) {\n if (\n ownVersionParsed.minor === globalVersionParsed.minor &&\n ownVersionParsed.patch <= globalVersionParsed.patch\n ) {\n return _accept(globalVersion);\n }\n\n return _reject(globalVersion);\n }\n\n if (ownVersionParsed.minor <= globalVersionParsed.minor) {\n return _accept(globalVersion);\n }\n\n return _reject(globalVersion);\n };\n}\n\n/**\n * Test an API version to see if it is compatible with this API.\n *\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param version version of the API requesting an instance of the global API\n */\nexport const isCompatible = _makeCompatibilityCheck(VERSION);\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MeterProvider } from '../metrics/MeterProvider';\nimport { ContextManager } from '../context/types';\nimport { DiagLogger } from '../diag/types';\nimport { _globalThis } from '../platform';\nimport { TextMapPropagator } from '../propagation/TextMapPropagator';\nimport type { TracerProvider } from '../trace/tracer_provider';\nimport { VERSION } from '../version';\nimport { isCompatible } from './semver';\n\nconst major = VERSION.split('.')[0];\nconst GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(\n `opentelemetry.js.api.${major}`\n);\n\nconst _global = _globalThis as OTelGlobal;\n\nexport function registerGlobal<Type extends keyof OTelGlobalAPI>(\n type: Type,\n instance: OTelGlobalAPI[Type],\n diag: DiagLogger,\n allowOverride = false\n): boolean {\n const api = (_global[GLOBAL_OPENTELEMETRY_API_KEY] = _global[\n GLOBAL_OPENTELEMETRY_API_KEY\n ] ?? {\n version: VERSION,\n });\n\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n const err = new Error(\n `@opentelemetry/api: Attempted duplicate registration of API: ${type}`\n );\n diag.error(err.stack || err.message);\n return false;\n }\n\n if (api.version !== VERSION) {\n // All registered APIs must be of the same version exactly\n const err = new Error(\n `@opentelemetry/api: Registration of version v${api.version} for ${type} does not match previously registered API v${VERSION}`\n );\n diag.error(err.stack || err.message);\n return false;\n }\n\n api[type] = instance;\n diag.debug(\n `@opentelemetry/api: Registered a global for ${type} v${VERSION}.`\n );\n\n return true;\n}\n\nexport function getGlobal<Type extends keyof OTelGlobalAPI>(\n type: Type\n): OTelGlobalAPI[Type] | undefined {\n const globalVersion = _global[GLOBAL_OPENTELEMETRY_API_KEY]?.version;\n if (!globalVersion || !isCompatible(globalVersion)) {\n return;\n }\n return _global[GLOBAL_OPENTELEMETRY_API_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof OTelGlobalAPI, diag: DiagLogger) {\n diag.debug(\n `@opentelemetry/api: Unregistering a global for ${type} v${VERSION}.`\n );\n const api = _global[GLOBAL_OPENTELEMETRY_API_KEY];\n\n if (api) {\n delete api[type];\n }\n}\n\ntype OTelGlobal = {\n [GLOBAL_OPENTELEMETRY_API_KEY]?: OTelGlobalAPI;\n};\n\ntype OTelGlobalAPI = {\n version: string;\n\n diag?: DiagLogger;\n trace?: TracerProvider;\n context?: ContextManager;\n metrics?: MeterProvider;\n propagation?: TextMapPropagator;\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobal } from '../internal/global-utils';\nimport { ComponentLoggerOptions, DiagLogger, DiagLogFunction } from './types';\n\n/**\n * Component Logger which is meant to be used as part of any component which\n * will add automatically additional namespace in front of the log message.\n * It will then forward all message to global diag logger\n * @example\n * const cLogger = diag.createComponentLogger({ namespace: '@opentelemetry/instrumentation-http' });\n * cLogger.debug('test');\n * // @opentelemetry/instrumentation-http test\n */\nexport class DiagComponentLogger implements DiagLogger {\n private _namespace: string;\n\n constructor(props: ComponentLoggerOptions) {\n this._namespace = props.namespace || 'DiagComponentLogger';\n }\n\n public debug(...args: any[]): void {\n return logProxy('debug', this._namespace, args);\n }\n\n public error(...args: any[]): void {\n return logProxy('error', this._namespace, args);\n }\n\n public info(...args: any[]): void {\n return logProxy('info', this._namespace, args);\n }\n\n public warn(...args: any[]): void {\n return logProxy('warn', this._namespace, args);\n }\n\n public verbose(...args: any[]): void {\n return logProxy('verbose', this._namespace, args);\n }\n}\n\nfunction logProxy(\n funcName: keyof DiagLogger,\n namespace: string,\n args: any\n): void {\n const logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger) {\n return;\n }\n\n args.unshift(namespace);\n return logger[funcName](...(args as Parameters<DiagLogFunction>));\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type DiagLogFunction = (message: string, ...args: unknown[]) => void;\n\n/**\n * Defines an internal diagnostic logger interface which is used to log internal diagnostic\n * messages, you can set the default diagnostic logger via the {@link DiagAPI} setLogger function.\n * API provided implementations include :-\n * - a No-Op {@link createNoopDiagLogger}\n * - a {@link DiagLogLevel} filtering wrapper {@link createLogLevelDiagLogger}\n * - a general Console {@link DiagConsoleLogger} version.\n */\nexport interface DiagLogger {\n /** Log an error scenario that was not expected and caused the requested operation to fail. */\n error: DiagLogFunction;\n\n /**\n * Log a warning scenario to inform the developer of an issues that should be investigated.\n * The requested operation may or may not have succeeded or completed.\n */\n warn: DiagLogFunction;\n\n /**\n * Log a general informational message, this should not affect functionality.\n * This is also the default logging level so this should NOT be used for logging\n * debugging level information.\n */\n info: DiagLogFunction;\n\n /**\n * Log a general debug message that can be useful for identifying a failure.\n * Information logged at this level may include diagnostic details that would\n * help identify a failure scenario.\n * For example: Logging the order of execution of async operations.\n */\n debug: DiagLogFunction;\n\n /**\n * Log a detailed (verbose) trace level logging that can be used to identify failures\n * where debug level logging would be insufficient, this level of tracing can include\n * input and output parameters and as such may include PII information passing through\n * the API. As such it is recommended that this level of tracing should not be enabled\n * in a production environment.\n */\n verbose: DiagLogFunction;\n}\n\n/**\n * Defines the available internal logging levels for the diagnostic logger, the numeric values\n * of the levels are defined to match the original values from the initial LogLevel to avoid\n * compatibility/migration issues for any implementation that assume the numeric ordering.\n */\nexport enum DiagLogLevel {\n /** Diagnostic Logging level setting to disable all logging (except and forced logs) */\n NONE = 0,\n\n /** Identifies an error scenario */\n ERROR = 30,\n\n /** Identifies a warning scenario */\n WARN = 50,\n\n /** General informational log message */\n INFO = 60,\n\n /** General debug log message */\n DEBUG = 70,\n\n /**\n * Detailed trace level logging should only be used for development, should only be set\n * in a development environment.\n */\n VERBOSE = 80,\n\n /** Used to set the logging level to include all logging */\n ALL = 9999,\n}\n\n/**\n * Defines options for ComponentLogger\n */\nexport interface ComponentLoggerOptions {\n namespace: string;\n}\n\nexport interface DiagLoggerOptions {\n /**\n * The {@link DiagLogLevel} used to filter logs sent to the logger.\n *\n * @defaultValue DiagLogLevel.INFO\n */\n logLevel?: DiagLogLevel;\n\n /**\n * Setting this value to `true` will suppress the warning message normally emitted when registering a logger when another logger is already registered.\n */\n suppressOverrideMessage?: boolean;\n}\n\nexport interface DiagLoggerApi {\n /**\n * Set the global DiagLogger and DiagLogLevel.\n * If a global diag logger is already set, this will override it.\n *\n * @param logger - The {@link DiagLogger} instance to set as the default logger.\n * @param options - A {@link DiagLoggerOptions} object. If not provided, default values will be set.\n * @returns `true` if the logger was successfully registered, else `false`\n */\n setLogger(logger: DiagLogger, options?: DiagLoggerOptions): boolean;\n\n /**\n *\n * @param logger - The {@link DiagLogger} instance to set as the default logger.\n * @param logLevel - The {@link DiagLogLevel} used to filter logs sent to the logger. If not provided it will default to {@link DiagLogLevel.INFO}.\n * @returns `true` if the logger was successfully registered, else `false`\n */\n setLogger(logger: DiagLogger, logLevel?: DiagLogLevel): boolean;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagLogFunction, DiagLogger, DiagLogLevel } from '../types';\n\nexport function createLogLevelDiagLogger(\n maxLevel: DiagLogLevel,\n logger: DiagLogger\n): DiagLogger {\n if (maxLevel < DiagLogLevel.NONE) {\n maxLevel = DiagLogLevel.NONE;\n } else if (maxLevel > DiagLogLevel.ALL) {\n maxLevel = DiagLogLevel.ALL;\n }\n\n // In case the logger is null or undefined\n logger = logger || {};\n\n function _filterFunc(\n funcName: keyof DiagLogger,\n theLevel: DiagLogLevel\n ): DiagLogFunction {\n const theFunc = logger[funcName];\n\n if (typeof theFunc === 'function' && maxLevel >= theLevel) {\n return theFunc.bind(logger);\n }\n return function () {};\n }\n\n return {\n error: _filterFunc('error', DiagLogLevel.ERROR),\n warn: _filterFunc('warn', DiagLogLevel.WARN),\n info: _filterFunc('info', DiagLogLevel.INFO),\n debug: _filterFunc('debug', DiagLogLevel.DEBUG),\n verbose: _filterFunc('verbose', DiagLogLevel.VERBOSE),\n };\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport {\n ComponentLoggerOptions,\n DiagLogFunction,\n DiagLogger,\n DiagLoggerApi,\n DiagLogLevel,\n} from '../diag/types';\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\n\nconst API_NAME = 'diag';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry internal\n * diagnostic API\n */\nexport class DiagAPI implements DiagLogger, DiagLoggerApi {\n private static _instance?: DiagAPI;\n\n /** Get the singleton instance of the DiagAPI API */\n public static instance(): DiagAPI {\n if (!this._instance) {\n this._instance = new DiagAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Private internal constructor\n * @private\n */\n private constructor() {\n function _logProxy(funcName: keyof DiagLogger): DiagLogFunction {\n return function (...args) {\n const logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger) return;\n return logger[funcName](...args);\n };\n }\n\n // Using self local variable for minification purposes as 'this' cannot be minified\n const self = this;\n\n // DiagAPI specific functions\n\n const setLogger: DiagLoggerApi['setLogger'] = (\n logger,\n optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }\n ) => {\n if (logger === self) {\n // There isn't much we can do here.\n // Logging to the console might break the user application.\n // Try to log to self. If a logger was previously registered it will receive the log.\n const err = new Error(\n 'Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation'\n );\n self.error(err.stack ?? err.message);\n return false;\n }\n\n if (typeof optionsOrLogLevel === 'number') {\n optionsOrLogLevel = {\n logLevel: optionsOrLogLevel,\n };\n }\n\n const oldLogger = getGlobal('diag');\n const newLogger = createLogLevelDiagLogger(\n optionsOrLogLevel.logLevel ?? DiagLogLevel.INFO,\n logger\n );\n // There already is an logger registered. We'll let it know before overwriting it.\n if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {\n const stack = new Error().stack ?? '<failed to generate stacktrace>';\n oldLogger.warn(`Current logger will be overwritten from ${stack}`);\n newLogger.warn(\n `Current logger will overwrite one already registered from ${stack}`\n );\n }\n\n return registerGlobal('diag', newLogger, self, true);\n };\n\n self.setLogger = setLogger;\n\n self.disable = () => {\n unregisterGlobal(API_NAME, self);\n };\n\n self.createComponentLogger = (options: ComponentLoggerOptions) => {\n return new DiagComponentLogger(options);\n };\n\n self.verbose = _logProxy('verbose');\n self.debug = _logProxy('debug');\n self.info = _logProxy('info');\n self.warn = _logProxy('warn');\n self.error = _logProxy('error');\n }\n\n public setLogger!: DiagLoggerApi['setLogger'];\n /**\n *\n */\n public createComponentLogger!: (\n options: ComponentLoggerOptions\n ) => DiagLogger;\n\n // DiagLogger implementation\n public verbose!: DiagLogFunction;\n public debug!: DiagLogFunction;\n public info!: DiagLogFunction;\n public warn!: DiagLogFunction;\n public error!: DiagLogFunction;\n\n /**\n * Unregister the global logger and return to Noop\n */\n public disable!: () => void;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from './types';\n\n/** Get a key to uniquely identify a context value */\nexport function createContextKey(description: string) {\n // The specification states that for the same input, multiple calls should\n // return different keys. Due to the nature of the JS dependency management\n // system, this creates problems where multiple versions of some package\n // could hold different keys for the same property.\n //\n // Therefore, we use Symbol.for which returns the same key for the same input.\n return Symbol.for(description);\n}\n\nclass BaseContext implements Context {\n private _currentContext!: Map<symbol, unknown>;\n\n /**\n * Construct a new context which inherits values from an optional parent context.\n *\n * @param parentContext a context from which to inherit values\n */\n constructor(parentContext?: Map<symbol, unknown>) {\n // for minification\n const self = this;\n\n self._currentContext = parentContext ? new Map(parentContext) : new Map();\n\n self.getValue = (key: symbol) => self._currentContext.get(key);\n\n self.setValue = (key: symbol, value: unknown): Context => {\n const context = new BaseContext(self._currentContext);\n context._currentContext.set(key, value);\n return context;\n };\n\n self.deleteValue = (key: symbol): Context => {\n const context = new BaseContext(self._currentContext);\n context._currentContext.delete(key);\n return context;\n };\n }\n\n /**\n * Get a value from the context.\n *\n * @param key key which identifies a context value\n */\n public getValue!: (key: symbol) => unknown;\n\n /**\n * Create a new context which inherits from this context and has\n * the given key set to the given value.\n *\n * @param key context key for which to set the value\n * @param value value to set for the given key\n */\n public setValue!: (key: symbol, value: unknown) => Context;\n\n /**\n * Return a new context which inherits from this context but does\n * not contain a value for the given key.\n *\n * @param key context key for which to clear a value\n */\n public deleteValue!: (key: symbol) => Context;\n}\n\n/** The root context is used as the default parent context when there is no active context */\nexport const ROOT_CONTEXT: Context = new BaseContext();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ROOT_CONTEXT } from './context';\nimport * as types from './types';\n\nexport class NoopContextManager implements types.ContextManager {\n active(): types.Context {\n return ROOT_CONTEXT;\n }\n\n with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n _context: types.Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F> {\n return fn.call(thisArg, ...args);\n }\n\n bind<T>(_context: types.Context, target: T): T {\n return target;\n }\n\n enable(): this {\n return this;\n }\n\n disable(): this {\n return this;\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NoopContextManager } from '../context/NoopContextManager';\nimport { Context, ContextManager } from '../context/types';\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'context';\nconst NOOP_CONTEXT_MANAGER = new NoopContextManager();\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Context API\n */\nexport class ContextAPI {\n private static _instance?: ContextAPI;\n\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n private constructor() {}\n\n /** Get the singleton instance of the Context API */\n public static getInstance(): ContextAPI {\n if (!this._instance) {\n this._instance = new ContextAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Set the current context manager.\n *\n * @returns true if the context manager was successfully registered, else false\n */\n public setGlobalContextManager(contextManager: ContextManager): boolean {\n return registerGlobal(API_NAME, contextManager, DiagAPI.instance());\n }\n\n /**\n * Get the currently active context\n */\n public active(): Context {\n return this._getContextManager().active();\n }\n\n /**\n * Execute a function with an active context\n *\n * @param context context to be active during function execution\n * @param fn function to execute in a context\n * @param thisArg optional receiver to be used for calling fn\n * @param args optional arguments forwarded to fn\n */\n public with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n context: Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F> {\n return this._getContextManager().with(context, fn, thisArg, ...args);\n }\n\n /**\n * Bind a context to a target function or event emitter\n *\n * @param context context to bind to the event emitter or function. Defaults to the currently active context\n * @param target function or event emitter to bind\n */\n public bind<T>(context: Context, target: T): T {\n return this._getContextManager().bind(context, target);\n }\n\n private _getContextManager(): ContextManager {\n return getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER;\n }\n\n /** Disable and remove the global context manager */\n public disable() {\n this._getContextManager().disable();\n unregisterGlobal(API_NAME, DiagAPI.instance());\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport enum TraceFlags {\n /** Represents no flag set. */\n NONE = 0x0,\n /** Bit to represent whether trace is sampled in trace flags. */\n SAMPLED = 0x1 << 0,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SpanContext } from './span_context';\nimport { TraceFlags } from './trace_flags';\n\nexport const INVALID_SPANID = '0000000000000000';\nexport const INVALID_TRACEID = '00000000000000000000000000000000';\nexport const INVALID_SPAN_CONTEXT: SpanContext = {\n traceId: INVALID_TRACEID,\n spanId: INVALID_SPANID,\n traceFlags: TraceFlags.NONE,\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Exception } from '../common/Exception';\nimport { TimeInput } from '../common/Time';\nimport { SpanAttributes } from './attributes';\nimport { INVALID_SPAN_CONTEXT } from './invalid-span-constants';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { SpanStatus } from './status';\nimport { Link } from './link';\n\n/**\n * The NonRecordingSpan is the default {@link Span} that is used when no Span\n * implementation is available. All operations are no-op including context\n * propagation.\n */\nexport class NonRecordingSpan implements Span {\n constructor(\n private readonly _spanContext: SpanContext = INVALID_SPAN_CONTEXT\n ) {}\n\n // Returns a SpanContext.\n spanContext(): SpanContext {\n return this._spanContext;\n }\n\n // By default does nothing\n setAttribute(_key: string, _value: unknown): this {\n return this;\n }\n\n // By default does nothing\n setAttributes(_attributes: SpanAttributes): this {\n return this;\n }\n\n // By default does nothing\n addEvent(_name: string, _attributes?: SpanAttributes): this {\n return this;\n }\n\n addLink(_link: Link): this {\n return this;\n }\n\n addLinks(_links: Link[]): this {\n return this;\n }\n\n // By default does nothing\n setStatus(_status: SpanStatus): this {\n return this;\n }\n\n // By default does nothing\n updateName(_name: string): this {\n return this;\n }\n\n // By default does nothing\n end(_endTime?: TimeInput): void {}\n\n // isRecording always returns false for NonRecordingSpan.\n isRecording(): boolean {\n return false;\n }\n\n // By default does nothing\n recordException(_exception: Exception, _time?: TimeInput): void {}\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createContextKey } from '../context/context';\nimport { Context } from '../context/types';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { ContextAPI } from '../api/context';\n\n/**\n * span key\n */\nconst SPAN_KEY = createContextKey('OpenTelemetry Context Key SPAN');\n\n/**\n * Return the span if one exists\n *\n * @param context context to get span from\n */\nexport function getSpan(context: Context): Span | undefined {\n return (context.getValue(SPAN_KEY) as Span) || undefined;\n}\n\n/**\n * Gets the span from the current context, if one exists.\n */\nexport function getActiveSpan(): Span | undefined {\n return getSpan(ContextAPI.getInstance().active());\n}\n\n/**\n * Set the span on a context\n *\n * @param context context to use as parent\n * @param span span to set active\n */\nexport function setSpan(context: Context, span: Span): Context {\n return context.setValue(SPAN_KEY, span);\n}\n\n/**\n * Remove current span stored in the context\n *\n * @param context context to delete span from\n */\nexport function deleteSpan(context: Context): Context {\n return context.deleteValue(SPAN_KEY);\n}\n\n/**\n * Wrap span context in a NoopSpan and set as span in a new\n * context\n *\n * @param context context to set active span on\n * @param spanContext span context to be wrapped\n */\nexport function setSpanContext(\n context: Context,\n spanContext: SpanContext\n): Context {\n return setSpan(context, new NonRecordingSpan(spanContext));\n}\n\n/**\n * Get the span context of the span if it exists.\n *\n * @param context context to get values from\n */\nexport function getSpanContext(context: Context): SpanContext | undefined {\n return getSpan(context)?.spanContext();\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\n\nconst VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;\nconst VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;\n\nexport function isValidTraceId(traceId: string): boolean {\n return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID;\n}\n\nexport function isValidSpanId(spanId: string): boolean {\n return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID;\n}\n\n/**\n * Returns true if this {@link SpanContext} is valid.\n * @return true if this {@link SpanContext} is valid.\n */\nexport function isSpanContextValid(spanContext: SpanContext): boolean {\n return (\n isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId)\n );\n}\n\n/**\n * Wrap the given {@link SpanContext} in a new non-recording {@link Span}\n *\n * @param spanContext span context to be wrapped\n * @returns a new non-recording {@link Span} with the provided context\n */\nexport function wrapSpanContext(spanContext: SpanContext): Span {\n return new NonRecordingSpan(spanContext);\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContextAPI } from '../api/context';\nimport { Context } from '../context/types';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { isSpanContextValid } from './spancontext-utils';\nimport { SpanOptions } from './SpanOptions';\nimport { SpanContext } from './span_context';\nimport { Tracer } from './tracer';\n\nconst contextApi = ContextAPI.getInstance();\n\n/**\n * No-op implementations of {@link Tracer}.\n */\nexport class NoopTracer implements Tracer {\n // startSpan starts a noop span.\n startSpan(\n name: string,\n options?: SpanOptions,\n context = contextApi.active()\n ): Span {\n const root = Boolean(options?.root);\n if (root) {\n return new NonRecordingSpan();\n }\n\n const parentFromContext = context && getSpanContext(context);\n\n if (\n isSpanContext(parentFromContext) &&\n isSpanContextValid(parentFromContext)\n ) {\n return new NonRecordingSpan(parentFromContext);\n } else {\n return new NonRecordingSpan();\n }\n }\n\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n opts: SpanOptions | undefined,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n opts: SpanOptions | undefined,\n ctx: Context | undefined,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n arg2?: F | SpanOptions,\n arg3?: F | Context,\n arg4?: F\n ): ReturnType<F> | undefined {\n let opts: SpanOptions | undefined;\n let ctx: Context | undefined;\n let fn: F;\n\n if (arguments.length < 2) {\n return;\n } else if (arguments.length === 2) {\n fn = arg2 as F;\n } else if (arguments.length === 3) {\n opts = arg2 as SpanOptions | undefined;\n fn = arg3 as F;\n } else {\n opts = arg2 as SpanOptions | undefined;\n ctx = arg3 as Context | undefined;\n fn = arg4 as F;\n }\n\n const parentContext = ctx ?? contextApi.active();\n const span = this.startSpan(name, opts, parentContext);\n const contextWithSpanSet = setSpan(parentContext, span);\n\n return contextApi.with(contextWithSpanSet, fn, undefined, span);\n }\n}\n\nfunction isSpanContext(spanContext: any): spanContext is SpanContext {\n return (\n typeof spanContext === 'object' &&\n typeof spanContext['spanId'] === 'string' &&\n typeof spanContext['traceId'] === 'string' &&\n typeof spanContext['traceFlags'] === 'number'\n );\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from '../context/types';\nimport { NoopTracer } from './NoopTracer';\nimport { Span } from './span';\nimport { SpanOptions } from './SpanOptions';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER = new NoopTracer();\n\n/**\n * Proxy tracer provided by the proxy tracer provider\n */\nexport class ProxyTracer implements Tracer {\n // When a real implementation is provided, this will be it\n private _delegate?: Tracer;\n\n constructor(\n private _provider: TracerDelegator,\n public readonly name: string,\n public readonly version?: string,\n public readonly options?: TracerOptions\n ) {}\n\n startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n return this._getTracer().startSpan(name, options, context);\n }\n\n startActiveSpan<F extends (span: Span) => unknown>(\n _name: string,\n _options: F | SpanOptions,\n _context?: F | Context,\n _fn?: F\n ): ReturnType<F> {\n const tracer = this._getTracer();\n return Reflect.apply(tracer.startActiveSpan, tracer, arguments);\n }\n\n /**\n * Try to get a tracer from the proxy tracer provider.\n * If the proxy tracer provider has no delegate, return a noop tracer.\n */\n private _getTracer() {\n if (this._delegate) {\n return this._delegate;\n }\n\n const tracer = this._provider.getDelegateTracer(\n this.name,\n this.version,\n this.options\n );\n\n if (!tracer) {\n return NOOP_TRACER;\n }\n\n this._delegate = tracer;\n return this._delegate;\n }\n}\n\nexport interface TracerDelegator {\n getDelegateTracer(\n name: string,\n version?: string,\n options?: TracerOptions\n ): Tracer | undefined;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NoopTracer } from './NoopTracer';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\nimport { TracerProvider } from './tracer_provider';\n\n/**\n * An implementation of the {@link TracerProvider} which returns an impotent\n * Tracer for all calls to `getTracer`.\n *\n * All operations are no-op.\n */\nexport class NoopTracerProvider implements TracerProvider {\n getTracer(\n _name?: string,\n _version?: string,\n _options?: TracerOptions\n ): Tracer {\n return new NoopTracer();\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Tracer } from './tracer';\nimport { TracerProvider } from './tracer_provider';\nimport { ProxyTracer } from './ProxyTracer';\nimport { NoopTracerProvider } from './NoopTracerProvider';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER_PROVIDER = new NoopTracerProvider();\n\n/**\n * Tracer provider which provides {@link ProxyTracer}s.\n *\n * Before a delegate is set, tracers provided are NoOp.\n * When a delegate is set, traces are provided from the delegate.\n * When a delegate is set after tracers have already been provided,\n * all tracers already provided will use the provided delegate implementation.\n */\nexport class ProxyTracerProvider implements TracerProvider {\n private _delegate?: TracerProvider;\n\n /**\n * Get a {@link ProxyTracer}\n */\n getTracer(name: string, version?: string, options?: TracerOptions): Tracer {\n return (\n this.getDelegateTracer(name, version, options) ??\n new ProxyTracer(this, name, version, options)\n );\n }\n\n getDelegate(): TracerProvider {\n return this._delegate ?? NOOP_TRACER_PROVIDER;\n }\n\n /**\n * Set the delegate tracer provider\n */\n setDelegate(delegate: TracerProvider) {\n this._delegate = delegate;\n }\n\n getDelegateTracer(\n name: string,\n version?: string,\n options?: TracerOptions\n ): Tracer | undefined {\n return this._delegate?.getTracer(name, version, options);\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport interface SpanStatus {\n /** The status code of this message. */\n code: SpanStatusCode;\n /** A developer-facing error message. */\n message?: string;\n}\n\n/**\n * An enumeration of status codes.\n */\nexport enum SpanStatusCode {\n /**\n * The default status.\n */\n UNSET = 0,\n /**\n * The operation has been validated by an Application developer or\n * Operator to have completed successfully.\n */\n OK = 1,\n /**\n * The operation contains an error.\n */\n ERROR = 2,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\nimport { ProxyTracerProvider } from '../trace/ProxyTracerProvider';\nimport {\n isSpanContextValid,\n wrapSpanContext,\n} from '../trace/spancontext-utils';\nimport { Tracer } from '../trace/tracer';\nimport { TracerProvider } from '../trace/tracer_provider';\nimport {\n deleteSpan,\n getActiveSpan,\n getSpan,\n getSpanContext,\n setSpan,\n setSpanContext,\n} from '../trace/context-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'trace';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Tracing API\n */\nexport class TraceAPI {\n private static _instance?: TraceAPI;\n\n private _proxyTracerProvider = new ProxyTracerProvider();\n\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n private constructor() {}\n\n /** Get the singleton instance of the Trace API */\n public static getInstance(): TraceAPI {\n if (!this._instance) {\n this._instance = new TraceAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Set the current global tracer.\n *\n * @returns true if the tracer provider was successfully registered, else false\n */\n public setGlobalTracerProvider(provider: TracerProvider): boolean {\n const success = registerGlobal(\n API_NAME,\n this._proxyTracerProvider,\n DiagAPI.instance()\n );\n if (success) {\n this._proxyTracerProvider.setDelegate(provider);\n }\n return success;\n }\n\n /**\n * Returns the global tracer provider.\n */\n public getTracerProvider(): TracerProvider {\n return getGlobal(API_NAME) || this._proxyTracerProvider;\n }\n\n /**\n * Returns a tracer from the global tracer provider.\n */\n public getTracer(name: string, version?: string): Tracer {\n return this.getTracerProvider().getTracer(name, version);\n }\n\n /** Remove the global tracer provider */\n public disable() {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n this._proxyTracerProvider = new ProxyTracerProvider();\n }\n\n public wrapSpanContext = wrapSpanContext;\n\n public isSpanContextValid = isSpanContextValid;\n\n public deleteSpan = deleteSpan;\n\n public getSpan = getSpan;\n\n public getActiveSpan = getActiveSpan;\n\n public getSpanContext = getSpanContext;\n\n public setSpan = setSpan;\n\n public setSpanContext = setSpanContext;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TraceAPI } from './api/trace';\n/** Entrypoint for trace API */\nexport const trace = TraceAPI.getInstance();\n","import { AISDKError } from '@ai-sdk/provider';\nimport { FinishReason } from '../types/language-model';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../types/usage';\n\nconst name = 'AI_NoObjectGeneratedError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\nThrown when no object could be generated. This can have several causes:\n\n- The model failed to generate a response.\n- The model generated a response that could not be parsed.\n- The model generated a response that could not be validated against the schema.\n\nThe error contains the following properties:\n\n- `text`: The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n */\nexport class NoObjectGeneratedError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n /**\n The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n */\n readonly text: string | undefined;\n\n /**\n The response metadata.\n */\n readonly response: LanguageModelResponseMetadata | undefined;\n\n /**\n The usage of the model.\n */\n readonly usage: LanguageModelUsage | undefined;\n\n /**\n Reason why the model finished generating a response.\n */\n readonly finishReason: FinishReason | undefined;\n\n constructor({\n message = 'No object generated.',\n cause,\n text,\n response,\n usage,\n finishReason,\n }: {\n message?: string;\n cause?: Error;\n text?: string;\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n }) {\n super({ name, message, cause });\n\n this.text = text;\n this.response = response;\n this.usage = usage;\n this.finishReason = finishReason;\n }\n\n static isInstance(error: unknown): error is NoObjectGeneratedError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError, LanguageModelV2DataContent } from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n DataContent,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { InvalidDataContentError } from './invalid-data-content-error';\nimport { splitDataUrl } from './split-data-url';\n\n/**\n@internal\n */\nexport const dataContentSchema: z.ZodType<DataContent> = z.union([\n z.string(),\n z.instanceof(Uint8Array),\n z.instanceof(ArrayBuffer),\n z.custom<Buffer>(\n // Buffer might not be available in some environments such as CloudFlare:\n (value: unknown): value is Buffer =>\n globalThis.Buffer?.isBuffer(value) ?? false,\n { message: 'Must be a Buffer' },\n ),\n]);\n\nexport function convertToLanguageModelV2DataContent(\n content: DataContent | URL,\n): {\n data: LanguageModelV2DataContent;\n mediaType: string | undefined;\n} {\n // Buffer & Uint8Array:\n if (content instanceof Uint8Array) {\n return { data: content, mediaType: undefined };\n }\n\n // ArrayBuffer needs conversion to Uint8Array (lightweight):\n if (content instanceof ArrayBuffer) {\n return { data: new Uint8Array(content), mediaType: undefined };\n }\n\n // Attempt to create a URL from the data. If it fails, we can assume the data\n // is not a URL and likely some other sort of data.\n if (typeof content === 'string') {\n try {\n content = new URL(content);\n } catch (error) {\n // ignored\n }\n }\n\n // Extract data from data URL:\n if (content instanceof URL && content.protocol === 'data:') {\n const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(\n content.toString(),\n );\n\n if (dataUrlMediaType == null || base64Content == null) {\n throw new AISDKError({\n name: 'InvalidDataContentError',\n message: `Invalid data URL format in content ${content.toString()}`,\n });\n }\n\n return { data: base64Content, mediaType: dataUrlMediaType };\n }\n\n return { data: content, mediaType: undefined };\n}\n\n/**\nConverts data content to a base64-encoded string.\n\n@param content - Data content to convert.\n@returns Base64-encoded string.\n*/\nexport function convertDataContentToBase64String(content: DataContent): string {\n if (typeof content === 'string') {\n return content;\n }\n\n if (content instanceof ArrayBuffer) {\n return convertUint8ArrayToBase64(new Uint8Array(content));\n }\n\n return convertUint8ArrayToBase64(content);\n}\n\n/**\nConverts data content to a Uint8Array.\n\n@param content - Data content to convert.\n@returns Uint8Array.\n */\nexport function convertDataContentToUint8Array(\n content: DataContent,\n): Uint8Array {\n if (content instanceof Uint8Array) {\n return content;\n }\n\n if (typeof content === 'string') {\n try {\n return convertBase64ToUint8Array(content);\n } catch (error) {\n throw new InvalidDataContentError({\n message:\n 'Invalid data content. Content string is not a base64-encoded media.',\n content,\n cause: error,\n });\n }\n }\n\n if (content instanceof ArrayBuffer) {\n return new Uint8Array(content);\n }\n\n throw new InvalidDataContentError({ content });\n}\n\n/**\n * Converts a Uint8Array to a string of text.\n *\n * @param uint8Array - The Uint8Array to convert.\n * @returns The converted string.\n */\nexport function convertUint8ArrayToText(uint8Array: Uint8Array): string {\n try {\n return new TextDecoder().decode(uint8Array);\n } catch (error) {\n throw new Error('Error decoding Uint8Array to text');\n }\n}\n","import { JSONValue as OriginalJSONValue } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\n\nexport const jsonValueSchema: z.ZodType<JSONValue> = z.lazy(() =>\n z.union([\n z.null(),\n z.string(),\n z.number(),\n z.boolean(),\n z.record(z.string(), jsonValueSchema),\n z.array(jsonValueSchema),\n ]),\n);\n\nexport type JSONValue = OriginalJSONValue;\n","import { SharedV2ProviderMetadata } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from './json-value';\n\n/**\nAdditional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be\nfully encapsulated in the provider.\n */\nexport type ProviderMetadata = SharedV2ProviderMetadata;\n\nexport const providerMetadataSchema: z.ZodType<ProviderMetadata> = z.record(\n z.string(),\n z.record(z.string(), jsonValueSchema),\n);\n","import { LanguageModelV2ToolResultOutput } from '@ai-sdk/provider';\nimport {\n FilePart,\n ImagePart,\n ProviderOptions,\n ReasoningPart,\n TextPart,\n ToolResultPart,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from '../types/json-value';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport { dataContentSchema } from './data-content';\n\n/**\n@internal\n */\nexport const textPartSchema: z.ZodType<TextPart> = z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@internal\n */\nexport const imagePartSchema: z.ZodType<ImagePart> = z.object({\n type: z.literal('image'),\n image: z.union([dataContentSchema, z.instanceof(URL)]),\n mediaType: z.string().optional(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@internal\n */\nexport const filePartSchema: z.ZodType<FilePart> = z.object({\n type: z.literal('file'),\n data: z.union([dataContentSchema, z.instanceof(URL)]),\n filename: z.string().optional(),\n mediaType: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@internal\n */\nexport const reasoningPartSchema: z.ZodType<ReasoningPart> = z.object({\n type: z.literal('reasoning'),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\nTool call content part of a prompt. It contains a tool call (usually generated by the AI model).\n */\nexport interface ToolCallPart {\n type: 'tool-call';\n\n /**\nID of the tool call. This ID is used to match the tool call with the tool result.\n */\n toolCallId: string;\n\n /**\nName of the tool that is being called.\n */\n toolName: string;\n\n /**\nArguments of the tool call. This is a JSON-serializable object that matches the tool's input schema.\n */\n input: unknown;\n\n /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n}\n\n/**\n@internal\n */\nexport const toolCallPartSchema: z.ZodType<ToolCallPart> = z.object({\n type: z.literal('tool-call'),\n toolCallId: z.string(),\n toolName: z.string(),\n input: z.unknown(),\n providerOptions: providerMetadataSchema.optional(),\n providerExecuted: z.boolean().optional(),\n}) as z.ZodType<ToolCallPart>; // necessary bc input is optional on Zod type\n\n/**\n@internal\n */\nexport const outputSchema: z.ZodType<LanguageModelV2ToolResultOutput> =\n z.discriminatedUnion('type', [\n z.object({\n type: z.literal('text'),\n value: z.string(),\n }),\n z.object({\n type: z.literal('json'),\n value: jsonValueSchema,\n }),\n z.object({\n type: z.literal('error-text'),\n value: z.string(),\n }),\n z.object({\n type: z.literal('error-json'),\n value: jsonValueSchema,\n }),\n z.object({\n type: z.literal('content'),\n value: z.array(\n z.union([\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('media'),\n data: z.string(),\n mediaType: z.string(),\n }),\n ]),\n ),\n }),\n ]);\n\n/**\n@internal\n */\nexport const toolResultPartSchema: z.ZodType<ToolResultPart> = z.object({\n type: z.literal('tool-result'),\n toolCallId: z.string(),\n toolName: z.string(),\n output: outputSchema,\n providerOptions: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolResultPart>; // necessary bc result is optional on Zod type\n","import {\n AssistantModelMessage,\n ModelMessage,\n SystemModelMessage,\n ToolModelMessage,\n UserModelMessage,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport {\n filePartSchema,\n imagePartSchema,\n reasoningPartSchema,\n textPartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n} from './content-part';\n\n/**\n@deprecated Use `SystemModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreSystemMessage = SystemModelMessage;\n\nexport const systemModelMessageSchema: z.ZodType<SystemModelMessage> = z.object(\n {\n role: z.literal('system'),\n content: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n },\n);\n\n/**\n@deprecated Use `systemModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreSystemMessageSchema = systemModelMessageSchema;\n\n/**\n@deprecated Use `UserModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreUserMessage = UserModelMessage;\n\nexport const userModelMessageSchema: z.ZodType<UserModelMessage> = z.object({\n role: z.literal('user'),\n content: z.union([\n z.string(),\n z.array(z.union([textPartSchema, imagePartSchema, filePartSchema])),\n ]),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@deprecated Use `userModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreUserMessageSchema = userModelMessageSchema;\n\n/**\n@deprecated Use `AssistantModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreAssistantMessage = AssistantModelMessage;\n\nexport const assistantModelMessageSchema: z.ZodType<AssistantModelMessage> =\n z.object({\n role: z.literal('assistant'),\n content: z.union([\n z.string(),\n z.array(\n z.union([\n textPartSchema,\n filePartSchema,\n reasoningPartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n ]),\n ),\n ]),\n providerOptions: providerMetadataSchema.optional(),\n });\n\n/**\n@deprecated Use `assistantModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreAssistantMessageSchema = assistantModelMessageSchema;\n\n/**\n@deprecated Use `ToolModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreToolMessage = ToolModelMessage;\n\nexport const toolModelMessageSchema: z.ZodType<ToolModelMessage> = z.object({\n role: z.literal('tool'),\n content: z.array(toolResultPartSchema),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@deprecated Use `toolModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreToolMessageSchema = toolModelMessageSchema;\n\n/**\n@deprecated Use `ModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreMessage = ModelMessage;\n\nexport const modelMessageSchema: z.ZodType<ModelMessage> = z.union([\n systemModelMessageSchema,\n userModelMessageSchema,\n assistantModelMessageSchema,\n toolModelMessageSchema,\n]);\n\n/**\n@deprecated Use `modelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreMessageSchema: z.ZodType<CoreMessage> = modelMessageSchema;\n","import { StepResult } from './step-result';\nimport { ToolSet } from './tool-set';\n\nexport type StopCondition<TOOLS extends ToolSet> = (options: {\n steps: Array<StepResult<TOOLS>>;\n}) => PromiseLike<boolean> | boolean;\n\nexport function stepCountIs(stepCount: number): StopCondition<any> {\n return ({ steps }) => steps.length === stepCount;\n}\n\nexport function hasToolCall(toolName: string): StopCondition<any> {\n return ({ steps }) =>\n steps[steps.length - 1]?.toolCalls?.some(\n toolCall => toolCall.toolName === toolName,\n ) ?? false;\n}\n\nexport async function isStopConditionMet<TOOLS extends ToolSet>({\n stopConditions,\n steps,\n}: {\n stopConditions: Array<StopCondition<TOOLS>>;\n steps: Array<StepResult<TOOLS>>;\n}): Promise<boolean> {\n return (\n await Promise.all(stopConditions.map(condition => condition({ steps })))\n ).some(result => result);\n}\n","import {\n LanguageModelV2,\n LanguageModelV2Content,\n LanguageModelV2ToolCall,\n} from '@ai-sdk/provider';\nimport {\n createIdGenerator,\n executeTool,\n getErrorMessage,\n IdGenerator,\n ProviderOptions,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { Tracer } from '@opentelemetry/api';\nimport { NoOutputSpecifiedError } from '../error/no-output-specified-error';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { ModelMessage } from '../prompt';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareToolsAndToolChoice } from '../prompt/prepare-tools-and-tool-choice';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordErrorOnSpan, recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { LanguageModel, ToolChoice } from '../types';\nimport { addLanguageModelUsage, LanguageModelUsage } from '../types/usage';\nimport { asArray } from '../util/as-array';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { ContentPart } from './content-part';\nimport { extractTextContent } from './extract-text-content';\nimport { GenerateTextResult } from './generate-text-result';\nimport { DefaultGeneratedFile } from './generated-file';\nimport { Output } from './output';\nimport { parseToolCall } from './parse-tool-call';\nimport { PrepareStepFunction } from './prepare-step';\nimport { ResponseMessage } from './response-message';\nimport { DefaultStepResult, StepResult } from './step-result';\nimport {\n isStopConditionMet,\n stepCountIs,\n StopCondition,\n} from './stop-condition';\nimport { toResponseMessages } from './to-response-messages';\nimport { TypedToolCall } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair-function';\nimport { TypedToolError } from './tool-error';\nimport { ToolOutput } from './tool-output';\nimport { TypedToolResult } from './tool-result';\nimport { ToolSet } from './tool-set';\nimport { VERSION } from '../version';\n\nconst originalGenerateId = createIdGenerator({\n prefix: 'aitxt',\n size: 24,\n});\n\n/**\nCallback that is set using the `onStepFinish` option.\n\n@param stepResult - The result of the step.\n */\nexport type GenerateTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n stepResult: StepResult<TOOLS>,\n) => Promise<void> | void;\n\n/**\nGenerate a text and call tools for a given prompt using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamText` instead.\n\n@param model - The language model to use.\n\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n@param toolChoice - The tool choice strategy. Default: 'auto'.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxOutputTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param experimental_generateMessageId - Generate a unique ID for each message.\n\n@param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n\n@returns\nA result object that contains the generated text, the results of the tool calls, and additional information.\n */\nexport async function generateText<\n TOOLS extends ToolSet,\n OUTPUT = never,\n OUTPUT_PARTIAL = never,\n>({\n model: modelArg,\n tools,\n toolChoice,\n system,\n prompt,\n messages,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n stopWhen = stepCountIs(1),\n experimental_output: output,\n experimental_telemetry: telemetry,\n providerOptions,\n experimental_activeTools,\n activeTools = experimental_activeTools,\n experimental_prepareStep,\n prepareStep = experimental_prepareStep,\n experimental_repairToolCall: repairToolCall,\n experimental_download: download,\n experimental_context,\n _internal: {\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n } = {},\n onStepFinish,\n ...settings\n}: CallSettings &\n Prompt & {\n /**\nThe language model to use.\n */\n model: LanguageModel;\n\n /**\nThe tools that the model can call. The model needs to support calling tools.\n*/\n tools?: TOOLS;\n\n /**\nThe tool choice strategy. Default: 'auto'.\n */\n toolChoice?: ToolChoice<NoInfer<TOOLS>>;\n\n /**\nCondition for stopping the generation when there are tool results in the last step.\nWhen the condition is an array, any of the conditions can be met to stop the generation.\n\n@default stepCountIs(1)\n */\n stopWhen?:\n | StopCondition<NoInfer<TOOLS>>\n | Array<StopCondition<NoInfer<TOOLS>>>;\n\n /**\nOptional telemetry configuration (experimental).\n */\n experimental_telemetry?: TelemetrySettings;\n\n /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * @deprecated Use `activeTools` instead.\n */\n experimental_activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n /**\nLimits the tools that are available for the model to call without\nchanging the tool call and result types in the result.\n */\n activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n /**\nOptional specification for parsing structured outputs from the LLM response.\n */\n experimental_output?: Output<OUTPUT, OUTPUT_PARTIAL>;\n\n /**\nCustom download function to use for URLs.\n\nBy default, files are downloaded if the model does not support the URL for the given media type.\n */\n experimental_download?: DownloadFunction | undefined;\n\n /**\n * @deprecated Use `prepareStep` instead.\n */\n experimental_prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n /**\nOptional function that you can use to provide different settings for a step.\n */\n prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n /**\nA function that attempts to repair a tool call that failed to parse.\n */\n experimental_repairToolCall?: ToolCallRepairFunction<NoInfer<TOOLS>>;\n\n /**\n Callback that is called when each step (LLM call) is finished, including intermediate steps.\n */\n onStepFinish?: GenerateTextOnStepFinishCallback<NoInfer<TOOLS>>;\n\n /**\n * Context that is passed into tool execution.\n *\n * Experimental (can break in patch releases).\n *\n * @default undefined\n */\n experimental_context?: unknown;\n\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n generateId?: IdGenerator;\n currentDate?: () => Date;\n };\n }): Promise<GenerateTextResult<TOOLS, OUTPUT>> {\n const model = resolveLanguageModel(modelArg);\n const stopConditions = asArray(stopWhen);\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal,\n });\n\n const callSettings = prepareCallSettings(settings);\n\n const headersWithUserAgent = withUserAgentSuffix(\n headers ?? {},\n `ai/${VERSION}`,\n );\n\n const baseTelemetryAttributes = getBaseTelemetryAttributes({\n model,\n telemetry,\n headers: headersWithUserAgent,\n settings: { ...callSettings, maxRetries },\n });\n\n const initialPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n } as Prompt);\n\n const tracer = getTracer(telemetry);\n\n try {\n return await recordSpan({\n name: 'ai.generateText',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateText',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // model:\n 'ai.model.provider': model.provider,\n 'ai.model.id': model.modelId,\n // specific settings that only make sense on the outer level:\n 'ai.prompt': {\n input: () => JSON.stringify({ system, prompt, messages }),\n },\n },\n }),\n tracer,\n fn: async span => {\n const callSettings = prepareCallSettings(settings);\n\n let currentModelResponse: Awaited<\n ReturnType<LanguageModelV2['doGenerate']>\n > & { response: { id: string; timestamp: Date; modelId: string } };\n let clientToolCalls: Array<TypedToolCall<TOOLS>> = [];\n let clientToolOutputs: Array<ToolOutput<TOOLS>> = [];\n const responseMessages: Array<ResponseMessage> = [];\n const steps: GenerateTextResult<TOOLS, OUTPUT>['steps'] = [];\n\n do {\n const stepInputMessages = [\n ...initialPrompt.messages,\n ...responseMessages,\n ];\n\n const prepareStepResult = await prepareStep?.({\n model,\n steps,\n stepNumber: steps.length,\n messages: stepInputMessages,\n });\n\n const stepModel = resolveLanguageModel(\n prepareStepResult?.model ?? model,\n );\n\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: {\n system: prepareStepResult?.system ?? initialPrompt.system,\n messages: prepareStepResult?.messages ?? stepInputMessages,\n },\n supportedUrls: await stepModel.supportedUrls,\n download,\n });\n\n const { toolChoice: stepToolChoice, tools: stepTools } =\n prepareToolsAndToolChoice({\n tools,\n toolChoice: prepareStepResult?.toolChoice ?? toolChoice,\n activeTools: prepareStepResult?.activeTools ?? activeTools,\n });\n\n currentModelResponse = await retry(() =>\n recordSpan({\n name: 'ai.generateText.doGenerate',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateText.doGenerate',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // model:\n 'ai.model.provider': stepModel.provider,\n 'ai.model.id': stepModel.modelId,\n // prompt:\n 'ai.prompt.messages': {\n input: () => stringifyForTelemetry(promptMessages),\n },\n 'ai.prompt.tools': {\n // convert the language model level tools:\n input: () => stepTools?.map(tool => JSON.stringify(tool)),\n },\n 'ai.prompt.toolChoice': {\n input: () =>\n stepToolChoice != null\n ? JSON.stringify(stepToolChoice)\n : undefined,\n },\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.system': stepModel.provider,\n 'gen_ai.request.model': stepModel.modelId,\n 'gen_ai.request.frequency_penalty': settings.frequencyPenalty,\n 'gen_ai.request.max_tokens': settings.maxOutputTokens,\n 'gen_ai.request.presence_penalty': settings.presencePenalty,\n 'gen_ai.request.stop_sequences': settings.stopSequences,\n 'gen_ai.request.temperature':\n settings.temperature ?? undefined,\n 'gen_ai.request.top_k': settings.topK,\n 'gen_ai.request.top_p': settings.topP,\n },\n }),\n tracer,\n fn: async span => {\n const result = await stepModel.doGenerate({\n ...callSettings,\n tools: stepTools,\n toolChoice: stepToolChoice,\n responseFormat: output?.responseFormat,\n prompt: promptMessages,\n providerOptions,\n abortSignal,\n headers: headersWithUserAgent,\n });\n\n // Fill in default values:\n const responseData = {\n id: result.response?.id ?? generateId(),\n timestamp: result.response?.timestamp ?? currentDate(),\n modelId: result.response?.modelId ?? stepModel.modelId,\n headers: result.response?.headers,\n body: result.response?.body,\n };\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': result.finishReason,\n 'ai.response.text': {\n output: () => extractTextContent(result.content),\n },\n 'ai.response.toolCalls': {\n output: () => {\n const toolCalls = asToolCalls(result.content);\n return toolCalls == null\n ? undefined\n : JSON.stringify(toolCalls);\n },\n },\n 'ai.response.id': responseData.id,\n 'ai.response.model': responseData.modelId,\n 'ai.response.timestamp':\n responseData.timestamp.toISOString(),\n 'ai.response.providerMetadata': JSON.stringify(\n result.providerMetadata,\n ),\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': result.usage.inputTokens,\n 'ai.usage.completionTokens': result.usage.outputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [result.finishReason],\n 'gen_ai.response.id': responseData.id,\n 'gen_ai.response.model': responseData.modelId,\n 'gen_ai.usage.input_tokens': result.usage.inputTokens,\n 'gen_ai.usage.output_tokens': result.usage.outputTokens,\n },\n }),\n );\n\n return { ...result, response: responseData };\n },\n }),\n );\n\n // parse tool calls:\n const stepToolCalls: TypedToolCall<TOOLS>[] = await Promise.all(\n currentModelResponse.content\n .filter(\n (part): part is LanguageModelV2ToolCall =>\n part.type === 'tool-call',\n )\n .map(toolCall =>\n parseToolCall({\n toolCall,\n tools,\n repairToolCall,\n system,\n messages: stepInputMessages,\n }),\n ),\n );\n\n // notify the tools that the tool calls are available:\n for (const toolCall of stepToolCalls) {\n if (toolCall.invalid) {\n continue; // ignore invalid tool calls\n }\n\n const tool = tools![toolCall.toolName];\n if (tool?.onInputAvailable != null) {\n await tool.onInputAvailable({\n input: toolCall.input,\n toolCallId: toolCall.toolCallId,\n messages: stepInputMessages,\n abortSignal,\n experimental_context,\n });\n }\n }\n\n // insert error tool outputs for invalid tool calls:\n // TODO AI SDK 6: invalid inputs should not require output parts\n const invalidToolCalls = stepToolCalls.filter(\n toolCall => toolCall.invalid && toolCall.dynamic,\n );\n\n clientToolOutputs = [];\n\n for (const toolCall of invalidToolCalls) {\n clientToolOutputs.push({\n type: 'tool-error',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: toolCall.input,\n error: getErrorMessage(toolCall.error!),\n dynamic: true,\n });\n }\n\n // execute client tool calls:\n clientToolCalls = stepToolCalls.filter(\n toolCall => !toolCall.providerExecuted,\n );\n\n if (tools != null) {\n clientToolOutputs.push(\n ...(await executeTools({\n toolCalls: clientToolCalls.filter(\n toolCall => !toolCall.invalid,\n ),\n tools,\n tracer,\n telemetry,\n messages: stepInputMessages,\n abortSignal,\n experimental_context,\n })),\n );\n }\n\n // content:\n const stepContent = asContent({\n content: currentModelResponse.content,\n toolCalls: stepToolCalls,\n toolOutputs: clientToolOutputs,\n });\n\n // append to messages for potential next step:\n responseMessages.push(\n ...toResponseMessages({\n content: stepContent,\n tools,\n }),\n );\n\n // Add step information (after response messages are updated):\n const currentStepResult: StepResult<TOOLS> = new DefaultStepResult({\n content: stepContent,\n finishReason: currentModelResponse.finishReason,\n usage: currentModelResponse.usage,\n warnings: currentModelResponse.warnings,\n providerMetadata: currentModelResponse.providerMetadata,\n request: currentModelResponse.request ?? {},\n response: {\n ...currentModelResponse.response,\n // deep clone msgs to avoid mutating past messages in multi-step:\n messages: structuredClone(responseMessages),\n },\n });\n\n logWarnings(currentModelResponse.warnings ?? []);\n\n steps.push(currentStepResult);\n await onStepFinish?.(currentStepResult);\n } while (\n // there are tool calls:\n clientToolCalls.length > 0 &&\n // all current tool calls have outputs (incl. execution errors):\n clientToolOutputs.length === clientToolCalls.length &&\n // continue until a stop condition is met:\n !(await isStopConditionMet({ stopConditions, steps }))\n );\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': currentModelResponse.finishReason,\n 'ai.response.text': {\n output: () => extractTextContent(currentModelResponse.content),\n },\n 'ai.response.toolCalls': {\n output: () => {\n const toolCalls = asToolCalls(currentModelResponse.content);\n return toolCalls == null\n ? undefined\n : JSON.stringify(toolCalls);\n },\n },\n 'ai.response.providerMetadata': JSON.stringify(\n currentModelResponse.providerMetadata,\n ),\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': currentModelResponse.usage.inputTokens,\n 'ai.usage.completionTokens':\n currentModelResponse.usage.outputTokens,\n },\n }),\n );\n\n const lastStep = steps[steps.length - 1];\n\n // parse output only if the last step was finished with \"stop\":\n let resolvedOutput;\n if (lastStep.finishReason === 'stop') {\n resolvedOutput = await output?.parseOutput(\n { text: lastStep.text },\n {\n response: lastStep.response,\n usage: lastStep.usage,\n finishReason: lastStep.finishReason,\n },\n );\n }\n\n return new DefaultGenerateTextResult({\n steps,\n resolvedOutput,\n });\n },\n });\n } catch (error) {\n throw wrapGatewayError(error);\n }\n}\n\nasync function executeTools<TOOLS extends ToolSet>({\n toolCalls,\n tools,\n tracer,\n telemetry,\n messages,\n abortSignal,\n experimental_context,\n}: {\n toolCalls: Array<TypedToolCall<TOOLS>>;\n tools: TOOLS;\n tracer: Tracer;\n telemetry: TelemetrySettings | undefined;\n messages: ModelMessage[];\n abortSignal: AbortSignal | undefined;\n experimental_context: unknown;\n}): Promise<Array<ToolOutput<TOOLS>>> {\n const toolOutputs = await Promise.all(\n toolCalls.map(async ({ toolCallId, toolName, input }) => {\n const tool = tools[toolName];\n\n if (tool?.execute == null) {\n return undefined;\n }\n\n return recordSpan({\n name: 'ai.toolCall',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.toolCall',\n telemetry,\n }),\n 'ai.toolCall.name': toolName,\n 'ai.toolCall.id': toolCallId,\n 'ai.toolCall.args': {\n output: () => JSON.stringify(input),\n },\n },\n }),\n tracer,\n fn: async span => {\n try {\n const stream = executeTool({\n execute: tool.execute!.bind(tool),\n input,\n options: {\n toolCallId,\n messages,\n abortSignal,\n experimental_context,\n },\n });\n\n let output: unknown;\n for await (const part of stream) {\n if (part.type === 'final') {\n output = part.output;\n }\n }\n try {\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.toolCall.result': {\n output: () => JSON.stringify(output),\n },\n },\n }),\n );\n } catch (ignored) {\n // JSON stringify might fail if the result is not serializable,\n // in which case we just ignore it. In the future we might want to\n // add an optional serialize method to the tool interface and warn\n // if the result is not serializable.\n }\n\n return {\n type: 'tool-result',\n toolCallId,\n toolName,\n input,\n output,\n dynamic: tool.type === 'dynamic',\n } as TypedToolResult<TOOLS>;\n } catch (error) {\n recordErrorOnSpan(span, error);\n return {\n type: 'tool-error',\n toolCallId,\n toolName,\n input,\n error,\n dynamic: tool.type === 'dynamic',\n } as TypedToolError<TOOLS>;\n }\n },\n });\n }),\n );\n\n return toolOutputs.filter(\n (output): output is NonNullable<typeof output> => output != null,\n );\n}\n\nclass DefaultGenerateTextResult<TOOLS extends ToolSet, OUTPUT>\n implements GenerateTextResult<TOOLS, OUTPUT>\n{\n readonly steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n\n private readonly resolvedOutput: OUTPUT;\n\n constructor(options: {\n steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n resolvedOutput: OUTPUT;\n }) {\n this.steps = options.steps;\n this.resolvedOutput = options.resolvedOutput;\n }\n\n private get finalStep() {\n return this.steps[this.steps.length - 1];\n }\n\n get content() {\n return this.finalStep.content;\n }\n\n get text() {\n return this.finalStep.text;\n }\n\n get files() {\n return this.finalStep.files;\n }\n\n get reasoningText() {\n return this.finalStep.reasoningText;\n }\n\n get reasoning() {\n return this.finalStep.reasoning;\n }\n\n get toolCalls() {\n return this.finalStep.toolCalls;\n }\n\n get staticToolCalls() {\n return this.finalStep.staticToolCalls;\n }\n\n get dynamicToolCalls() {\n return this.finalStep.dynamicToolCalls;\n }\n\n get toolResults() {\n return this.finalStep.toolResults;\n }\n\n get staticToolResults() {\n return this.finalStep.staticToolResults;\n }\n\n get dynamicToolResults() {\n return this.finalStep.dynamicToolResults;\n }\n\n get sources() {\n return this.finalStep.sources;\n }\n\n get finishReason() {\n return this.finalStep.finishReason;\n }\n\n get warnings() {\n return this.finalStep.warnings;\n }\n\n get providerMetadata() {\n return this.finalStep.providerMetadata;\n }\n\n get response() {\n return this.finalStep.response;\n }\n\n get request() {\n return this.finalStep.request;\n }\n\n get usage() {\n return this.finalStep.usage;\n }\n\n get totalUsage() {\n return this.steps.reduce(\n (totalUsage, step) => {\n return addLanguageModelUsage(totalUsage, step.usage);\n },\n {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n reasoningTokens: undefined,\n cachedInputTokens: undefined,\n } as LanguageModelUsage,\n );\n }\n\n get experimental_output() {\n if (this.resolvedOutput == null) {\n throw new NoOutputSpecifiedError();\n }\n\n return this.resolvedOutput;\n }\n}\n\nfunction asToolCalls(content: Array<LanguageModelV2Content>) {\n const parts = content.filter(\n (part): part is LanguageModelV2ToolCall => part.type === 'tool-call',\n );\n\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.map(toolCall => ({\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: toolCall.input,\n }));\n}\n\nfunction asContent<TOOLS extends ToolSet>({\n content,\n toolCalls,\n toolOutputs,\n}: {\n content: Array<LanguageModelV2Content>;\n toolCalls: Array<TypedToolCall<TOOLS>>;\n toolOutputs: Array<ToolOutput<TOOLS>>;\n}): Array<ContentPart<TOOLS>> {\n return [\n ...content.map(part => {\n switch (part.type) {\n case 'text':\n case 'reasoning':\n case 'source':\n return part;\n\n case 'file': {\n return {\n type: 'file' as const,\n file: new DefaultGeneratedFile(part),\n };\n }\n\n case 'tool-call': {\n return toolCalls.find(\n toolCall => toolCall.toolCallId === part.toolCallId,\n )!;\n }\n\n case 'tool-result': {\n const toolCall = toolCalls.find(\n toolCall => toolCall.toolCallId === part.toolCallId,\n )!;\n\n if (toolCall == null) {\n throw new Error(`Tool call ${part.toolCallId} not found.`);\n }\n\n if (part.isError) {\n return {\n type: 'tool-error' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName as keyof TOOLS & string,\n input: toolCall.input,\n error: part.result,\n providerExecuted: true,\n dynamic: toolCall.dynamic,\n } as TypedToolError<TOOLS>;\n }\n\n return {\n type: 'tool-result' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName as keyof TOOLS & string,\n input: toolCall.input,\n output: part.result,\n providerExecuted: true,\n dynamic: toolCall.dynamic,\n } as TypedToolResult<TOOLS>;\n }\n }\n }),\n ...toolOutputs,\n ];\n}\n","export class JsonToSseTransformStream extends TransformStream<unknown, string> {\n constructor() {\n super({\n transform(part, controller) {\n controller.enqueue(`data: ${JSON.stringify(part)}\\n\\n`);\n },\n flush(controller) {\n controller.enqueue('data: [DONE]\\n\\n');\n },\n });\n }\n}\n","type State =\n | 'ROOT'\n | 'FINISH'\n | 'INSIDE_STRING'\n | 'INSIDE_STRING_ESCAPE'\n | 'INSIDE_LITERAL'\n | 'INSIDE_NUMBER'\n | 'INSIDE_OBJECT_START'\n | 'INSIDE_OBJECT_KEY'\n | 'INSIDE_OBJECT_AFTER_KEY'\n | 'INSIDE_OBJECT_BEFORE_VALUE'\n | 'INSIDE_OBJECT_AFTER_VALUE'\n | 'INSIDE_OBJECT_AFTER_COMMA'\n | 'INSIDE_ARRAY_START'\n | 'INSIDE_ARRAY_AFTER_VALUE'\n | 'INSIDE_ARRAY_AFTER_COMMA';\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n const stack: State[] = ['ROOT'];\n let lastValidIndex = -1;\n let literalStart: number | null = null;\n\n function processValueStart(char: string, i: number, swapState: State) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_STRING');\n break;\n }\n\n case 'f':\n case 't':\n case 'n': {\n lastValidIndex = i;\n literalStart = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_LITERAL');\n break;\n }\n\n case '-': {\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_NUMBER');\n break;\n }\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_NUMBER');\n break;\n }\n\n case '{': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_OBJECT_START');\n break;\n }\n\n case '[': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_ARRAY_START');\n break;\n }\n }\n }\n }\n\n function processAfterObjectValue(char: string, i: number) {\n switch (char) {\n case ',': {\n stack.pop();\n stack.push('INSIDE_OBJECT_AFTER_COMMA');\n break;\n }\n case '}': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n function processAfterArrayValue(char: string, i: number) {\n switch (char) {\n case ',': {\n stack.pop();\n stack.push('INSIDE_ARRAY_AFTER_COMMA');\n break;\n }\n case ']': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n const currentState = stack[stack.length - 1];\n\n switch (currentState) {\n case 'ROOT':\n processValueStart(char, i, 'FINISH');\n break;\n\n case 'INSIDE_OBJECT_START': {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push('INSIDE_OBJECT_KEY');\n break;\n }\n case '}': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_AFTER_COMMA': {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push('INSIDE_OBJECT_KEY');\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_KEY': {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push('INSIDE_OBJECT_AFTER_KEY');\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_AFTER_KEY': {\n switch (char) {\n case ':': {\n stack.pop();\n stack.push('INSIDE_OBJECT_BEFORE_VALUE');\n\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_BEFORE_VALUE': {\n processValueStart(char, i, 'INSIDE_OBJECT_AFTER_VALUE');\n break;\n }\n\n case 'INSIDE_OBJECT_AFTER_VALUE': {\n processAfterObjectValue(char, i);\n break;\n }\n\n case 'INSIDE_STRING': {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n\n case '\\\\': {\n stack.push('INSIDE_STRING_ESCAPE');\n break;\n }\n\n default: {\n lastValidIndex = i;\n }\n }\n\n break;\n }\n\n case 'INSIDE_ARRAY_START': {\n switch (char) {\n case ']': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_ARRAY_AFTER_VALUE': {\n switch (char) {\n case ',': {\n stack.pop();\n stack.push('INSIDE_ARRAY_AFTER_COMMA');\n break;\n }\n\n case ']': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n break;\n }\n }\n\n break;\n }\n\n case 'INSIDE_ARRAY_AFTER_COMMA': {\n processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n break;\n }\n\n case 'INSIDE_STRING_ESCAPE': {\n stack.pop();\n lastValidIndex = i;\n\n break;\n }\n\n case 'INSIDE_NUMBER': {\n switch (char) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n lastValidIndex = i;\n break;\n }\n\n case 'e':\n case 'E':\n case '-':\n case '.': {\n break;\n }\n\n case ',': {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i);\n }\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case '}': {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case ']': {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i);\n }\n\n break;\n }\n\n default: {\n stack.pop();\n break;\n }\n }\n\n break;\n }\n\n case 'INSIDE_LITERAL': {\n const partialLiteral = input.substring(literalStart!, i + 1);\n\n if (\n !'false'.startsWith(partialLiteral) &&\n !'true'.startsWith(partialLiteral) &&\n !'null'.startsWith(partialLiteral)\n ) {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i);\n } else if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i);\n }\n } else {\n lastValidIndex = i;\n }\n\n break;\n }\n }\n }\n\n let result = input.slice(0, lastValidIndex + 1);\n\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n\n switch (state) {\n case 'INSIDE_STRING': {\n result += '\"';\n break;\n }\n\n case 'INSIDE_OBJECT_KEY':\n case 'INSIDE_OBJECT_AFTER_KEY':\n case 'INSIDE_OBJECT_AFTER_COMMA':\n case 'INSIDE_OBJECT_START':\n case 'INSIDE_OBJECT_BEFORE_VALUE':\n case 'INSIDE_OBJECT_AFTER_VALUE': {\n result += '}';\n break;\n }\n\n case 'INSIDE_ARRAY_START':\n case 'INSIDE_ARRAY_AFTER_COMMA':\n case 'INSIDE_ARRAY_AFTER_VALUE': {\n result += ']';\n break;\n }\n\n case 'INSIDE_LITERAL': {\n const partialLiteral = input.substring(literalStart!, input.length);\n\n if ('true'.startsWith(partialLiteral)) {\n result += 'true'.slice(partialLiteral.length);\n } else if ('false'.startsWith(partialLiteral)) {\n result += 'false'.slice(partialLiteral.length);\n } else if ('null'.startsWith(partialLiteral)) {\n result += 'null'.slice(partialLiteral.length);\n }\n }\n }\n }\n\n return result;\n}\n","import { JSONValue } from '@ai-sdk/provider';\nimport { safeParseJSON } from '@ai-sdk/provider-utils';\nimport { fixJson } from './fix-json';\n\nexport async function parsePartialJson(jsonText: string | undefined): Promise<{\n value: JSONValue | undefined;\n state:\n | 'undefined-input'\n | 'successful-parse'\n | 'repaired-parse'\n | 'failed-parse';\n}> {\n if (jsonText === undefined) {\n return { value: undefined, state: 'undefined-input' };\n }\n\n let result = await safeParseJSON({ text: jsonText });\n\n if (result.success) {\n return { value: result.value, state: 'successful-parse' };\n }\n\n result = await safeParseJSON({ text: fixJson(jsonText) });\n\n if (result.success) {\n return { value: result.value, state: 'repaired-parse' };\n }\n\n return { value: undefined, state: 'failed-parse' };\n}\n","import {\n getErrorMessage,\n LanguageModelV2,\n LanguageModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport {\n createIdGenerator,\n IdGenerator,\n isAbortError,\n ProviderOptions,\n} from '@ai-sdk/provider-utils';\nimport { Span } from '@opentelemetry/api';\nimport { ServerResponse } from 'node:http';\nimport { NoOutputGeneratedError } from '../error';\nimport { NoOutputSpecifiedError } from '../error/no-output-specified-error';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareToolsAndToolChoice } from '../prompt/prepare-tools-and-tool-choice';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { createTextStreamResponse } from '../text-stream/create-text-stream-response';\nimport { pipeTextStreamToResponse } from '../text-stream/pipe-text-stream-to-response';\nimport { LanguageModelRequestMetadata } from '../types';\nimport {\n CallWarning,\n FinishReason,\n LanguageModel,\n ToolChoice,\n} from '../types/language-model';\nimport { ProviderMetadata } from '../types/provider-metadata';\nimport { addLanguageModelUsage, LanguageModelUsage } from '../types/usage';\nimport { UIMessage } from '../ui';\nimport { createUIMessageStreamResponse } from '../ui-message-stream/create-ui-message-stream-response';\nimport { getResponseUIMessageId } from '../ui-message-stream/get-response-ui-message-id';\nimport { handleUIMessageStreamFinish } from '../ui-message-stream/handle-ui-message-stream-finish';\nimport { pipeUIMessageStreamToResponse } from '../ui-message-stream/pipe-ui-message-stream-to-response';\nimport {\n InferUIMessageChunk,\n UIMessageChunk,\n} from '../ui-message-stream/ui-message-chunks';\nimport { UIMessageStreamResponseInit } from '../ui-message-stream/ui-message-stream-response-init';\nimport { InferUIMessageData, InferUIMessageMetadata } from '../ui/ui-messages';\nimport { asArray } from '../util/as-array';\nimport {\n AsyncIterableStream,\n createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { consumeStream } from '../util/consume-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport { DelayedPromise } from '../util/delayed-promise';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { now as originalNow } from '../util/now';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { ContentPart } from './content-part';\nimport { Output } from './output';\nimport { PrepareStepFunction } from './prepare-step';\nimport { ResponseMessage } from './response-message';\nimport {\n runToolsTransformation,\n SingleRequestTextStreamPart,\n} from './run-tools-transformation';\nimport { DefaultStepResult, StepResult } from './step-result';\nimport {\n isStopConditionMet,\n stepCountIs,\n StopCondition,\n} from './stop-condition';\nimport {\n ConsumeStreamOptions,\n StreamTextResult,\n TextStreamPart,\n UIMessageStreamOptions,\n} from './stream-text-result';\nimport { toResponseMessages } from './to-response-messages';\nimport { TypedToolCall } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair-function';\nimport { ToolOutput } from './tool-output';\nimport { ToolSet } from './tool-set';\n\nconst originalGenerateId = createIdGenerator({\n prefix: 'aitxt',\n size: 24,\n});\n\n/**\nA transformation that is applied to the stream.\n\n@param stopStream - A function that stops the source stream.\n@param tools - The tools that are accessible to and can be called by the model. The model needs to support calling tools.\n */\nexport type StreamTextTransform<TOOLS extends ToolSet> = (options: {\n tools: TOOLS; // for type inference\n stopStream: () => void;\n}) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;\n\n/**\nCallback that is set using the `onError` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnErrorCallback = (event: {\n error: unknown;\n}) => PromiseLike<void> | void;\n\n/**\nCallback that is set using the `onStepFinish` option.\n\n@param stepResult - The result of the step.\n */\nexport type StreamTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n stepResult: StepResult<TOOLS>,\n) => PromiseLike<void> | void;\n\n/**\nCallback that is set using the `onChunk` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnChunkCallback<TOOLS extends ToolSet> = (event: {\n chunk: Extract<\n TextStreamPart<TOOLS>,\n {\n type:\n | 'text-delta'\n | 'reasoning-delta'\n | 'source'\n | 'tool-call'\n | 'tool-input-start'\n | 'tool-input-delta'\n | 'tool-result'\n | 'raw';\n }\n >;\n}) => PromiseLike<void> | void;\n\n/**\nCallback that is set using the `onFinish` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnFinishCallback<TOOLS extends ToolSet> = (\n event: StepResult<TOOLS> & {\n /**\nDetails for all steps.\n */\n readonly steps: StepResult<TOOLS>[];\n\n /**\nTotal usage for all steps. This is the sum of the usage of all steps.\n */\n readonly totalUsage: LanguageModelUsage;\n },\n) => PromiseLike<void> | void;\n\n/**\nCallback that is set using the `onAbort` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnAbortCallback<TOOLS extends ToolSet> = (event: {\n /**\nDetails for all previously finished steps.\n */\n readonly steps: StepResult<TOOLS>[];\n}) => PromiseLike<void> | void;\n\n/**\nGenerate a text and call tools for a given prompt using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateText` instead.\n\n@param model - The language model to use.\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxOutputTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param maxSteps - Maximum number of sequential LLM calls (steps), e.g. when you use tool calls.\n\n@param onChunk - Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.\n@param onError - Callback that is called when an error occurs during streaming. You can use it to log errors.\n@param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n@param onFinish - Callback that is called when the LLM response and all request tool executions\n(for tools that have an `execute` function) are finished.\n\n@return\nA result object for accessing different stream types and additional information.\n */\nexport function streamText<\n TOOLS extends ToolSet,\n OUTPUT = never,\n PARTIAL_OUTPUT = never,\n>({\n model,\n tools,\n toolChoice,\n system,\n prompt,\n messages,\n maxRetries,\n abortSignal,\n headers,\n stopWhen = stepCountIs(1),\n experimental_output: output,\n experimental_telemetry: telemetry,\n prepareStep,\n providerOptions,\n experimental_activeTools,\n activeTools = experimental_activeTools,\n experimental_repairToolCall: repairToolCall,\n experimental_transform: transform,\n experimental_download: download,\n includeRawChunks = false,\n onChunk,\n onError = ({ error }) => {\n console.error(error);\n },\n onFinish,\n onAbort,\n onStepFinish,\n experimental_context,\n _internal: {\n now = originalNow,\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n } = {},\n ...settings\n}: CallSettings &\n Prompt & {\n /**\nThe language model to use.\n */\n model: LanguageModel;\n\n /**\nThe tools that the model can call. The model needs to support calling tools.\n */\n tools?: TOOLS;\n\n /**\nThe tool choice strategy. Default: 'auto'.\n */\n toolChoice?: ToolChoice<TOOLS>;\n\n /**\nCondition for stopping the generation when there are tool results in the last step.\nWhen the condition is an array, any of the conditions can be met to stop the generation.\n\n@default stepCountIs(1)\n */\n stopWhen?:\n | StopCondition<NoInfer<TOOLS>>\n | Array<StopCondition<NoInfer<TOOLS>>>;\n\n /**\nOptional telemetry configuration (experimental).\n */\n experimental_telemetry?: TelemetrySettings;\n\n /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * @deprecated Use `activeTools` instead.\n */\n experimental_activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n /**\n Limits the tools that are available for the model to call without\n changing the tool call and result types in the result.\n */\n activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n /**\nOptional specification for parsing structured outputs from the LLM response.\n */\n experimental_output?: Output<OUTPUT, PARTIAL_OUTPUT>;\n\n /**\nOptional function that you can use to provide different settings for a step.\n\n@param options - The options for the step.\n@param options.steps - The steps that have been executed so far.\n@param options.stepNumber - The number of the step that is being executed.\n@param options.model - The model that is being used.\n\n@returns An object that contains the settings for the step.\nIf you return undefined (or for undefined settings), the settings from the outer level will be used.\n */\n prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n /**\nA function that attempts to repair a tool call that failed to parse.\n */\n experimental_repairToolCall?: ToolCallRepairFunction<TOOLS>;\n\n /**\nOptional stream transformations.\nThey are applied in the order they are provided.\nThe stream transformations must maintain the stream structure for streamText to work correctly.\n */\n experimental_transform?:\n | StreamTextTransform<TOOLS>\n | Array<StreamTextTransform<TOOLS>>;\n\n /**\nCustom download function to use for URLs.\n\nBy default, files are downloaded if the model does not support the URL for the given media type.\n */\n experimental_download?: DownloadFunction | undefined;\n\n /**\nWhether to include raw chunks from the provider in the stream.\nWhen enabled, you will receive raw chunks with type 'raw' that contain the unprocessed data from the provider.\nThis allows access to cutting-edge provider features not yet wrapped by the AI SDK.\nDefaults to false.\n */\n includeRawChunks?: boolean;\n\n /**\nCallback that is called for each chunk of the stream.\nThe stream processing will pause until the callback promise is resolved.\n */\n onChunk?: StreamTextOnChunkCallback<TOOLS>;\n\n /**\nCallback that is invoked when an error occurs during streaming.\nYou can use it to log errors.\nThe stream processing will pause until the callback promise is resolved.\n */\n onError?: StreamTextOnErrorCallback;\n\n /**\nCallback that is called when the LLM response and all request tool executions\n(for tools that have an `execute` function) are finished.\n\nThe usage is the combined usage of all steps.\n */\n onFinish?: StreamTextOnFinishCallback<TOOLS>;\n\n onAbort?: StreamTextOnAbortCallback<TOOLS>;\n\n /**\nCallback that is called when each step (LLM call) is finished, including intermediate steps.\n */\n onStepFinish?: StreamTextOnStepFinishCallback<TOOLS>;\n\n /**\n * Context that is passed into tool execution.\n *\n * Experimental (can break in patch releases).\n *\n * @default undefined\n */\n experimental_context?: unknown;\n\n /**\nInternal. For test use only. May change without notice.\n */\n _internal?: {\n now?: () => number;\n generateId?: IdGenerator;\n currentDate?: () => Date;\n };\n }): StreamTextResult<TOOLS, PARTIAL_OUTPUT> {\n return new DefaultStreamTextResult<TOOLS, OUTPUT, PARTIAL_OUTPUT>({\n model: resolveLanguageModel(model),\n telemetry,\n headers,\n settings,\n maxRetries,\n abortSignal,\n system,\n prompt,\n messages,\n tools,\n toolChoice,\n transforms: asArray(transform),\n activeTools,\n repairToolCall,\n stopConditions: asArray(stopWhen),\n output,\n providerOptions,\n prepareStep,\n includeRawChunks,\n onChunk,\n onError,\n onFinish,\n onAbort,\n onStepFinish,\n now,\n currentDate,\n generateId,\n experimental_context,\n download,\n });\n}\n\ntype EnrichedStreamPart<TOOLS extends ToolSet, PARTIAL_OUTPUT> = {\n part: TextStreamPart<TOOLS>;\n partialOutput: PARTIAL_OUTPUT | undefined;\n};\n\nfunction createOutputTransformStream<\n TOOLS extends ToolSet,\n OUTPUT,\n PARTIAL_OUTPUT,\n>(\n output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined,\n): TransformStream<\n TextStreamPart<TOOLS>,\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n> {\n if (!output) {\n return new TransformStream<\n TextStreamPart<TOOLS>,\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n >({\n transform(chunk, controller) {\n controller.enqueue({ part: chunk, partialOutput: undefined });\n },\n });\n }\n\n let firstTextChunkId: string | undefined = undefined;\n let text = '';\n let textChunk = '';\n let lastPublishedJson = '';\n\n function publishTextChunk({\n controller,\n partialOutput = undefined,\n }: {\n controller: TransformStreamDefaultController<\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n >;\n partialOutput?: PARTIAL_OUTPUT;\n }) {\n controller.enqueue({\n part: {\n type: 'text-delta',\n id: firstTextChunkId!,\n text: textChunk,\n },\n partialOutput,\n });\n textChunk = '';\n }\n\n return new TransformStream<\n TextStreamPart<TOOLS>,\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n >({\n async transform(chunk, controller) {\n // ensure that we publish the last text chunk before the step finish:\n if (chunk.type === 'finish-step' && textChunk.length > 0) {\n publishTextChunk({ controller });\n }\n\n if (\n chunk.type !== 'text-delta' &&\n chunk.type !== 'text-start' &&\n chunk.type !== 'text-end'\n ) {\n controller.enqueue({ part: chunk, partialOutput: undefined });\n return;\n }\n\n // we have to pick a text chunk which contains the json text\n // since we are streaming, we have to pick the first text chunk\n if (firstTextChunkId == null) {\n firstTextChunkId = chunk.id;\n } else if (chunk.id !== firstTextChunkId) {\n controller.enqueue({ part: chunk, partialOutput: undefined });\n return;\n }\n\n if (chunk.type === 'text-start') {\n controller.enqueue({ part: chunk, partialOutput: undefined });\n return;\n }\n\n if (chunk.type === 'text-end') {\n if (textChunk.length > 0) {\n publishTextChunk({ controller });\n }\n controller.enqueue({ part: chunk, partialOutput: undefined });\n return;\n }\n\n text += chunk.text;\n textChunk += chunk.text;\n\n // only publish if partial json can be parsed:\n const result = await output.parsePartial({ text });\n if (result != null) {\n // only send new json if it has changed:\n const currentJson = JSON.stringify(result.partial);\n if (currentJson !== lastPublishedJson) {\n publishTextChunk({ controller, partialOutput: result.partial });\n lastPublishedJson = currentJson;\n }\n }\n },\n });\n}\n\nclass DefaultStreamTextResult<TOOLS extends ToolSet, OUTPUT, PARTIAL_OUTPUT>\n implements StreamTextResult<TOOLS, PARTIAL_OUTPUT>\n{\n private readonly _totalUsage = new DelayedPromise<\n Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['usage']>\n >();\n private readonly _finishReason = new DelayedPromise<\n Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['finishReason']>\n >();\n private readonly _steps = new DelayedPromise<\n Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['steps']>\n >();\n\n private readonly addStream: (\n stream: ReadableStream<TextStreamPart<TOOLS>>,\n ) => void;\n\n private readonly closeStream: () => void;\n\n private baseStream: ReadableStream<EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>>;\n\n private output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined;\n\n private includeRawChunks: boolean;\n\n private tools: TOOLS | undefined;\n\n constructor({\n model,\n telemetry,\n headers,\n settings,\n maxRetries: maxRetriesArg,\n abortSignal,\n system,\n prompt,\n messages,\n tools,\n toolChoice,\n transforms,\n activeTools,\n repairToolCall,\n stopConditions,\n output,\n providerOptions,\n prepareStep,\n includeRawChunks,\n now,\n currentDate,\n generateId,\n onChunk,\n onError,\n onFinish,\n onAbort,\n onStepFinish,\n experimental_context,\n download,\n }: {\n model: LanguageModelV2;\n telemetry: TelemetrySettings | undefined;\n headers: Record<string, string | undefined> | undefined;\n settings: Omit<CallSettings, 'abortSignal' | 'headers'>;\n maxRetries: number | undefined;\n abortSignal: AbortSignal | undefined;\n system: Prompt['system'];\n prompt: Prompt['prompt'];\n messages: Prompt['messages'];\n tools: TOOLS | undefined;\n toolChoice: ToolChoice<TOOLS> | undefined;\n transforms: Array<StreamTextTransform<TOOLS>>;\n activeTools: Array<keyof TOOLS> | undefined;\n repairToolCall: ToolCallRepairFunction<TOOLS> | undefined;\n stopConditions: Array<StopCondition<NoInfer<TOOLS>>>;\n output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined;\n providerOptions: ProviderOptions | undefined;\n prepareStep: PrepareStepFunction<NoInfer<TOOLS>> | undefined;\n includeRawChunks: boolean;\n now: () => number;\n currentDate: () => Date;\n generateId: () => string;\n experimental_context: unknown;\n download: DownloadFunction | undefined;\n\n // callbacks:\n onChunk: undefined | StreamTextOnChunkCallback<TOOLS>;\n onError: StreamTextOnErrorCallback;\n onFinish: undefined | StreamTextOnFinishCallback<TOOLS>;\n onAbort: undefined | StreamTextOnAbortCallback<TOOLS>;\n onStepFinish: undefined | StreamTextOnStepFinishCallback<TOOLS>;\n }) {\n this.output = output;\n this.includeRawChunks = includeRawChunks;\n this.tools = tools;\n\n // promise to ensure that the step has been fully processed by the event processor\n // before a new step is started. This is required because the continuation condition\n // needs the updated steps to determine if another step is needed.\n let stepFinish!: DelayedPromise<void>;\n\n let recordedContent: Array<ContentPart<TOOLS>> = [];\n const recordedResponseMessages: Array<ResponseMessage> = [];\n let recordedFinishReason: FinishReason | undefined = undefined;\n let recordedTotalUsage: LanguageModelUsage | undefined = undefined;\n let recordedRequest: LanguageModelRequestMetadata = {};\n let recordedWarnings: Array<CallWarning> = [];\n const recordedSteps: StepResult<TOOLS>[] = [];\n\n let rootSpan!: Span;\n\n let activeTextContent: Record<\n string,\n {\n type: 'text';\n text: string;\n providerMetadata: ProviderMetadata | undefined;\n }\n > = {};\n\n let activeReasoningContent: Record<\n string,\n {\n type: 'reasoning';\n text: string;\n providerMetadata: ProviderMetadata | undefined;\n }\n > = {};\n\n const eventProcessor = new TransformStream<\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n >({\n async transform(chunk, controller) {\n controller.enqueue(chunk); // forward the chunk to the next stream\n\n const { part } = chunk;\n\n if (\n part.type === 'text-delta' ||\n part.type === 'reasoning-delta' ||\n part.type === 'source' ||\n part.type === 'tool-call' ||\n part.type === 'tool-result' ||\n part.type === 'tool-input-start' ||\n part.type === 'tool-input-delta' ||\n part.type === 'raw'\n ) {\n await onChunk?.({ chunk: part });\n }\n\n if (part.type === 'error') {\n await onError({ error: wrapGatewayError(part.error) });\n }\n\n if (part.type === 'text-start') {\n activeTextContent[part.id] = {\n type: 'text',\n text: '',\n providerMetadata: part.providerMetadata,\n };\n\n recordedContent.push(activeTextContent[part.id]);\n }\n\n if (part.type === 'text-delta') {\n const activeText = activeTextContent[part.id];\n\n if (activeText == null) {\n controller.enqueue({\n part: {\n type: 'error',\n error: `text part ${part.id} not found`,\n },\n partialOutput: undefined,\n });\n return;\n }\n\n activeText.text += part.text;\n activeText.providerMetadata =\n part.providerMetadata ?? activeText.providerMetadata;\n }\n\n if (part.type === 'text-end') {\n const activeText = activeTextContent[part.id];\n\n if (activeText == null) {\n controller.enqueue({\n part: {\n type: 'error',\n error: `text part ${part.id} not found`,\n },\n partialOutput: undefined,\n });\n return;\n }\n\n activeText.providerMetadata =\n part.providerMetadata ?? activeText.providerMetadata;\n\n delete activeTextContent[part.id];\n }\n\n if (part.type === 'reasoning-start') {\n activeReasoningContent[part.id] = {\n type: 'reasoning',\n text: '',\n providerMetadata: part.providerMetadata,\n };\n\n recordedContent.push(activeReasoningContent[part.id]);\n }\n\n if (part.type === 'reasoning-delta') {\n const activeReasoning = activeReasoningContent[part.id];\n\n if (activeReasoning == null) {\n controller.enqueue({\n part: {\n type: 'error',\n error: `reasoning part ${part.id} not found`,\n },\n partialOutput: undefined,\n });\n return;\n }\n\n activeReasoning.text += part.text;\n activeReasoning.providerMetadata =\n part.providerMetadata ?? activeReasoning.providerMetadata;\n }\n\n if (part.type === 'reasoning-end') {\n const activeReasoning = activeReasoningContent[part.id];\n\n if (activeReasoning == null) {\n controller.enqueue({\n part: {\n type: 'error',\n error: `reasoning part ${part.id} not found`,\n },\n partialOutput: undefined,\n });\n return;\n }\n\n activeReasoning.providerMetadata =\n part.providerMetadata ?? activeReasoning.providerMetadata;\n\n delete activeReasoningContent[part.id];\n }\n\n if (part.type === 'file') {\n recordedContent.push({ type: 'file', file: part.file });\n }\n\n if (part.type === 'source') {\n recordedContent.push(part);\n }\n\n if (part.type === 'tool-call') {\n recordedContent.push(part);\n }\n\n if (part.type === 'tool-result' && !part.preliminary) {\n recordedContent.push(part);\n }\n\n if (part.type === 'tool-error') {\n recordedContent.push(part);\n }\n\n if (part.type === 'start-step') {\n recordedRequest = part.request;\n recordedWarnings = part.warnings;\n }\n\n if (part.type === 'finish-step') {\n const stepMessages = toResponseMessages({\n content: recordedContent,\n tools,\n });\n\n // Add step information (after response messages are updated):\n const currentStepResult: StepResult<TOOLS> = new DefaultStepResult({\n content: recordedContent,\n finishReason: part.finishReason,\n usage: part.usage,\n warnings: recordedWarnings,\n request: recordedRequest,\n response: {\n ...part.response,\n messages: [...recordedResponseMessages, ...stepMessages],\n },\n providerMetadata: part.providerMetadata,\n });\n\n await onStepFinish?.(currentStepResult);\n\n logWarnings(recordedWarnings);\n\n recordedSteps.push(currentStepResult);\n\n recordedContent = [];\n activeReasoningContent = {};\n activeTextContent = {};\n\n recordedResponseMessages.push(...stepMessages);\n\n // resolve the promise to signal that the step has been fully processed\n // by the event processor:\n stepFinish.resolve();\n }\n\n if (part.type === 'finish') {\n recordedTotalUsage = part.totalUsage;\n recordedFinishReason = part.finishReason;\n }\n },\n\n async flush(controller) {\n try {\n if (recordedSteps.length === 0) {\n const error = new NoOutputGeneratedError({\n message: 'No output generated. Check the stream for errors.',\n });\n\n self._finishReason.reject(error);\n self._totalUsage.reject(error);\n self._steps.reject(error);\n\n return; // no steps recorded (e.g. in error scenario)\n }\n\n // derived:\n const finishReason = recordedFinishReason ?? 'unknown';\n const totalUsage = recordedTotalUsage ?? {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n };\n\n // from finish:\n self._finishReason.resolve(finishReason);\n self._totalUsage.resolve(totalUsage);\n\n // aggregate results:\n self._steps.resolve(recordedSteps);\n\n // call onFinish callback:\n const finalStep = recordedSteps[recordedSteps.length - 1];\n await onFinish?.({\n finishReason,\n totalUsage,\n usage: finalStep.usage,\n content: finalStep.content,\n text: finalStep.text,\n reasoningText: finalStep.reasoningText,\n reasoning: finalStep.reasoning,\n files: finalStep.files,\n sources: finalStep.sources,\n toolCalls: finalStep.toolCalls,\n staticToolCalls: finalStep.staticToolCalls,\n dynamicToolCalls: finalStep.dynamicToolCalls,\n toolResults: finalStep.toolResults,\n staticToolResults: finalStep.staticToolResults,\n dynamicToolResults: finalStep.dynamicToolResults,\n request: finalStep.request,\n response: finalStep.response,\n warnings: finalStep.warnings,\n providerMetadata: finalStep.providerMetadata,\n steps: recordedSteps,\n });\n\n // Add response information to the root span:\n rootSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': finishReason,\n 'ai.response.text': { output: () => finalStep.text },\n 'ai.response.toolCalls': {\n output: () =>\n finalStep.toolCalls?.length\n ? JSON.stringify(finalStep.toolCalls)\n : undefined,\n },\n 'ai.response.providerMetadata': JSON.stringify(\n finalStep.providerMetadata,\n ),\n\n 'ai.usage.inputTokens': totalUsage.inputTokens,\n 'ai.usage.outputTokens': totalUsage.outputTokens,\n 'ai.usage.totalTokens': totalUsage.totalTokens,\n 'ai.usage.reasoningTokens': totalUsage.reasoningTokens,\n 'ai.usage.cachedInputTokens': totalUsage.cachedInputTokens,\n },\n }),\n );\n } catch (error) {\n controller.error(error);\n } finally {\n rootSpan.end();\n }\n },\n });\n\n // initialize the stitchable stream and the transformed stream:\n const stitchableStream = createStitchableStream<TextStreamPart<TOOLS>>();\n this.addStream = stitchableStream.addStream;\n this.closeStream = stitchableStream.close;\n\n // resilient stream that handles abort signals and errors:\n const reader = stitchableStream.stream.getReader();\n let stream = new ReadableStream<TextStreamPart<TOOLS>>({\n async start(controller) {\n // send start event:\n controller.enqueue({ type: 'start' });\n },\n\n async pull(controller) {\n // abort handling:\n function abort() {\n onAbort?.({ steps: recordedSteps });\n controller.enqueue({ type: 'abort' });\n controller.close();\n }\n\n try {\n const { done, value } = await reader.read();\n\n if (done) {\n controller.close();\n return;\n }\n\n if (abortSignal?.aborted) {\n abort();\n return;\n }\n\n controller.enqueue(value);\n } catch (error) {\n if (isAbortError(error) && abortSignal?.aborted) {\n abort();\n } else {\n controller.error(error);\n }\n }\n },\n\n cancel(reason) {\n return stitchableStream.stream.cancel(reason);\n },\n });\n\n // transform the stream before output parsing\n // to enable replacement of stream segments:\n for (const transform of transforms) {\n stream = stream.pipeThrough(\n transform({\n tools: tools as TOOLS,\n stopStream() {\n stitchableStream.terminate();\n },\n }),\n );\n }\n\n this.baseStream = stream\n .pipeThrough(createOutputTransformStream(output))\n .pipeThrough(eventProcessor);\n\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal,\n });\n\n const tracer = getTracer(telemetry);\n\n const callSettings = prepareCallSettings(settings);\n\n const baseTelemetryAttributes = getBaseTelemetryAttributes({\n model,\n telemetry,\n headers,\n settings: { ...callSettings, maxRetries },\n });\n\n const self = this;\n\n recordSpan({\n name: 'ai.streamText',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({ operationId: 'ai.streamText', telemetry }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.prompt': {\n input: () => JSON.stringify({ system, prompt, messages }),\n },\n },\n }),\n tracer,\n endWhenDone: false,\n fn: async rootSpanArg => {\n rootSpan = rootSpanArg;\n\n async function streamStep({\n currentStep,\n responseMessages,\n usage,\n }: {\n currentStep: number;\n responseMessages: Array<ResponseMessage>;\n usage: LanguageModelUsage;\n }) {\n const includeRawChunks = self.includeRawChunks;\n\n stepFinish = new DelayedPromise<void>();\n\n const initialPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n } as Prompt);\n\n const stepInputMessages = [\n ...initialPrompt.messages,\n ...responseMessages,\n ];\n\n const prepareStepResult = await prepareStep?.({\n model,\n steps: recordedSteps,\n stepNumber: recordedSteps.length,\n messages: stepInputMessages,\n });\n\n const stepModel = resolveLanguageModel(\n prepareStepResult?.model ?? model,\n );\n\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: {\n system: prepareStepResult?.system ?? initialPrompt.system,\n messages: prepareStepResult?.messages ?? stepInputMessages,\n },\n supportedUrls: await stepModel.supportedUrls,\n download,\n });\n\n const { toolChoice: stepToolChoice, tools: stepTools } =\n prepareToolsAndToolChoice({\n tools,\n toolChoice: prepareStepResult?.toolChoice ?? toolChoice,\n activeTools: prepareStepResult?.activeTools ?? activeTools,\n });\n\n const {\n result: { stream, response, request },\n doStreamSpan,\n startTimestampMs,\n } = await retry(() =>\n recordSpan({\n name: 'ai.streamText.doStream',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.streamText.doStream',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // model:\n 'ai.model.provider': stepModel.provider,\n 'ai.model.id': stepModel.modelId,\n // prompt:\n 'ai.prompt.messages': {\n input: () => stringifyForTelemetry(promptMessages),\n },\n 'ai.prompt.tools': {\n // convert the language model level tools:\n input: () => stepTools?.map(tool => JSON.stringify(tool)),\n },\n 'ai.prompt.toolChoice': {\n input: () =>\n stepToolChoice != null\n ? JSON.stringify(stepToolChoice)\n : undefined,\n },\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.system': stepModel.provider,\n 'gen_ai.request.model': stepModel.modelId,\n 'gen_ai.request.frequency_penalty':\n callSettings.frequencyPenalty,\n 'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n 'gen_ai.request.presence_penalty':\n callSettings.presencePenalty,\n 'gen_ai.request.stop_sequences': callSettings.stopSequences,\n 'gen_ai.request.temperature': callSettings.temperature,\n 'gen_ai.request.top_k': callSettings.topK,\n 'gen_ai.request.top_p': callSettings.topP,\n },\n }),\n tracer,\n endWhenDone: false,\n fn: async doStreamSpan => {\n return {\n startTimestampMs: now(), // get before the call\n doStreamSpan,\n result: await stepModel.doStream({\n ...callSettings,\n tools: stepTools,\n toolChoice: stepToolChoice,\n responseFormat: output?.responseFormat,\n prompt: promptMessages,\n providerOptions,\n abortSignal,\n headers,\n includeRawChunks,\n }),\n };\n },\n }),\n );\n\n const streamWithToolResults = runToolsTransformation({\n tools,\n generatorStream: stream,\n tracer,\n telemetry,\n system,\n messages: stepInputMessages,\n repairToolCall,\n abortSignal,\n experimental_context,\n });\n\n const stepRequest = request ?? {};\n const stepToolCalls: TypedToolCall<TOOLS>[] = [];\n const stepToolOutputs: ToolOutput<TOOLS>[] = [];\n let warnings: LanguageModelV2CallWarning[] | undefined;\n\n const activeToolCallToolNames: Record<string, string> = {};\n\n let stepFinishReason: FinishReason = 'unknown';\n let stepUsage: LanguageModelUsage = {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n };\n let stepProviderMetadata: ProviderMetadata | undefined;\n let stepFirstChunk = true;\n let stepResponse: { id: string; timestamp: Date; modelId: string } = {\n id: generateId(),\n timestamp: currentDate(),\n modelId: model.modelId,\n };\n\n // raw text as it comes from the provider. recorded for telemetry.\n let activeText = '';\n\n self.addStream(\n streamWithToolResults.pipeThrough(\n new TransformStream<\n SingleRequestTextStreamPart<TOOLS>,\n TextStreamPart<TOOLS>\n >({\n async transform(chunk, controller): Promise<void> {\n if (chunk.type === 'stream-start') {\n warnings = chunk.warnings;\n return; // stream start chunks are sent immediately and do not count as first chunk\n }\n\n if (stepFirstChunk) {\n // Telemetry for first chunk:\n const msToFirstChunk = now() - startTimestampMs;\n\n stepFirstChunk = false;\n\n doStreamSpan.addEvent('ai.stream.firstChunk', {\n 'ai.response.msToFirstChunk': msToFirstChunk,\n });\n\n doStreamSpan.setAttributes({\n 'ai.response.msToFirstChunk': msToFirstChunk,\n });\n\n // Step start:\n controller.enqueue({\n type: 'start-step',\n request: stepRequest,\n warnings: warnings ?? [],\n });\n }\n\n const chunkType = chunk.type;\n switch (chunkType) {\n case 'text-start':\n case 'text-end': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'text-delta': {\n if (chunk.delta.length > 0) {\n controller.enqueue({\n type: 'text-delta',\n id: chunk.id,\n text: chunk.delta,\n providerMetadata: chunk.providerMetadata,\n });\n activeText += chunk.delta;\n }\n break;\n }\n\n case 'reasoning-start':\n case 'reasoning-end': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'reasoning-delta': {\n controller.enqueue({\n type: 'reasoning-delta',\n id: chunk.id,\n text: chunk.delta,\n providerMetadata: chunk.providerMetadata,\n });\n break;\n }\n\n case 'tool-call': {\n controller.enqueue(chunk);\n // store tool calls for onFinish callback and toolCalls promise:\n stepToolCalls.push(chunk);\n break;\n }\n\n case 'tool-result': {\n controller.enqueue(chunk);\n\n if (!chunk.preliminary) {\n stepToolOutputs.push(chunk);\n }\n\n break;\n }\n\n case 'tool-error': {\n controller.enqueue(chunk);\n stepToolOutputs.push(chunk);\n break;\n }\n\n case 'response-metadata': {\n stepResponse = {\n id: chunk.id ?? stepResponse.id,\n timestamp: chunk.timestamp ?? stepResponse.timestamp,\n modelId: chunk.modelId ?? stepResponse.modelId,\n };\n break;\n }\n\n case 'finish': {\n // Note: tool executions might not be finished yet when the finish event is emitted.\n // store usage and finish reason for promises and onFinish callback:\n stepUsage = chunk.usage;\n stepFinishReason = chunk.finishReason;\n stepProviderMetadata = chunk.providerMetadata;\n\n // Telemetry for finish event timing\n // (since tool executions can take longer and distort calculations)\n const msToFinish = now() - startTimestampMs;\n doStreamSpan.addEvent('ai.stream.finish');\n doStreamSpan.setAttributes({\n 'ai.response.msToFinish': msToFinish,\n 'ai.response.avgOutputTokensPerSecond':\n (1000 * (stepUsage.outputTokens ?? 0)) / msToFinish,\n });\n\n break;\n }\n\n case 'file': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'source': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'tool-input-start': {\n activeToolCallToolNames[chunk.id] = chunk.toolName;\n\n const tool = tools?.[chunk.toolName];\n if (tool?.onInputStart != null) {\n await tool.onInputStart({\n toolCallId: chunk.id,\n messages: stepInputMessages,\n abortSignal,\n experimental_context,\n });\n }\n\n controller.enqueue({\n ...chunk,\n dynamic: tool?.type === 'dynamic',\n });\n break;\n }\n\n case 'tool-input-end': {\n delete activeToolCallToolNames[chunk.id];\n controller.enqueue(chunk);\n break;\n }\n\n case 'tool-input-delta': {\n const toolName = activeToolCallToolNames[chunk.id];\n const tool = tools?.[toolName];\n\n if (tool?.onInputDelta != null) {\n await tool.onInputDelta({\n inputTextDelta: chunk.delta,\n toolCallId: chunk.id,\n messages: stepInputMessages,\n abortSignal,\n experimental_context,\n });\n }\n\n controller.enqueue(chunk);\n break;\n }\n\n case 'error': {\n controller.enqueue(chunk);\n stepFinishReason = 'error';\n break;\n }\n\n case 'raw': {\n if (includeRawChunks) {\n controller.enqueue(chunk);\n }\n break;\n }\n\n default: {\n const exhaustiveCheck: never = chunkType;\n throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n\n // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n async flush(controller) {\n const stepToolCallsJson =\n stepToolCalls.length > 0\n ? JSON.stringify(stepToolCalls)\n : undefined;\n\n // record telemetry information first to ensure best effort timing\n try {\n doStreamSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': stepFinishReason,\n 'ai.response.text': {\n output: () => activeText,\n },\n 'ai.response.toolCalls': {\n output: () => stepToolCallsJson,\n },\n 'ai.response.id': stepResponse.id,\n 'ai.response.model': stepResponse.modelId,\n 'ai.response.timestamp':\n stepResponse.timestamp.toISOString(),\n 'ai.response.providerMetadata':\n JSON.stringify(stepProviderMetadata),\n\n 'ai.usage.inputTokens': stepUsage.inputTokens,\n 'ai.usage.outputTokens': stepUsage.outputTokens,\n 'ai.usage.totalTokens': stepUsage.totalTokens,\n 'ai.usage.reasoningTokens': stepUsage.reasoningTokens,\n 'ai.usage.cachedInputTokens':\n stepUsage.cachedInputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [stepFinishReason],\n 'gen_ai.response.id': stepResponse.id,\n 'gen_ai.response.model': stepResponse.modelId,\n 'gen_ai.usage.input_tokens': stepUsage.inputTokens,\n 'gen_ai.usage.output_tokens': stepUsage.outputTokens,\n },\n }),\n );\n } catch (error) {\n // ignore error setting telemetry attributes\n } finally {\n // finish doStreamSpan before other operations for correct timing:\n doStreamSpan.end();\n }\n\n controller.enqueue({\n type: 'finish-step',\n finishReason: stepFinishReason,\n usage: stepUsage,\n providerMetadata: stepProviderMetadata,\n response: {\n ...stepResponse,\n headers: response?.headers,\n },\n });\n\n const combinedUsage = addLanguageModelUsage(usage, stepUsage);\n\n // wait for the step to be fully processed by the event processor\n // to ensure that the recorded steps are complete:\n await stepFinish.promise;\n\n const clientToolCalls = stepToolCalls.filter(\n toolCall => toolCall.providerExecuted !== true,\n );\n const clientToolOutputs = stepToolOutputs.filter(\n toolOutput => toolOutput.providerExecuted !== true,\n );\n\n if (\n clientToolCalls.length > 0 &&\n // all current tool calls have outputs (incl. execution errors):\n clientToolOutputs.length === clientToolCalls.length &&\n // continue until a stop condition is met:\n !(await isStopConditionMet({\n stopConditions,\n steps: recordedSteps,\n }))\n ) {\n // append to messages for the next step:\n responseMessages.push(\n ...toResponseMessages({\n content:\n // use transformed content to create the messages for the next step:\n recordedSteps[recordedSteps.length - 1].content,\n tools,\n }),\n );\n\n try {\n await streamStep({\n currentStep: currentStep + 1,\n responseMessages,\n usage: combinedUsage,\n });\n } catch (error) {\n controller.enqueue({\n type: 'error',\n error,\n });\n\n self.closeStream();\n }\n } else {\n controller.enqueue({\n type: 'finish',\n finishReason: stepFinishReason,\n totalUsage: combinedUsage,\n });\n\n self.closeStream(); // close the stitchable stream\n }\n },\n }),\n ),\n );\n }\n\n // add the initial stream to the stitchable stream\n await streamStep({\n currentStep: 0,\n responseMessages: [],\n usage: {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n },\n });\n },\n }).catch(error => {\n // add an error stream part and close the streams:\n self.addStream(\n new ReadableStream({\n start(controller) {\n controller.enqueue({ type: 'error', error });\n controller.close();\n },\n }),\n );\n self.closeStream();\n });\n }\n\n get steps() {\n // when any of the promises are accessed, the stream is consumed\n // so it resolves without needing to consume the stream separately\n this.consumeStream();\n\n return this._steps.promise;\n }\n\n private get finalStep() {\n return this.steps.then(steps => steps[steps.length - 1]);\n }\n\n get content() {\n return this.finalStep.then(step => step.content);\n }\n\n get warnings() {\n return this.finalStep.then(step => step.warnings);\n }\n\n get providerMetadata() {\n return this.finalStep.then(step => step.providerMetadata);\n }\n\n get text() {\n return this.finalStep.then(step => step.text);\n }\n\n get reasoningText() {\n return this.finalStep.then(step => step.reasoningText);\n }\n\n get reasoning() {\n return this.finalStep.then(step => step.reasoning);\n }\n\n get sources() {\n return this.finalStep.then(step => step.sources);\n }\n\n get files() {\n return this.finalStep.then(step => step.files);\n }\n\n get toolCalls() {\n return this.finalStep.then(step => step.toolCalls);\n }\n\n get staticToolCalls() {\n return this.finalStep.then(step => step.staticToolCalls);\n }\n\n get dynamicToolCalls() {\n return this.finalStep.then(step => step.dynamicToolCalls);\n }\n\n get toolResults() {\n return this.finalStep.then(step => step.toolResults);\n }\n\n get staticToolResults() {\n return this.finalStep.then(step => step.staticToolResults);\n }\n\n get dynamicToolResults() {\n return this.finalStep.then(step => step.dynamicToolResults);\n }\n\n get usage() {\n return this.finalStep.then(step => step.usage);\n }\n\n get request() {\n return this.finalStep.then(step => step.request);\n }\n\n get response() {\n return this.finalStep.then(step => step.response);\n }\n\n get totalUsage() {\n // when any of the promises are accessed, the stream is consumed\n // so it resolves without needing to consume the stream separately\n this.consumeStream();\n\n return this._totalUsage.promise;\n }\n\n get finishReason() {\n // when any of the promises are accessed, the stream is consumed\n // so it resolves without needing to consume the stream separately\n this.consumeStream();\n\n return this._finishReason.promise;\n }\n\n /**\nSplit out a new stream from the original stream.\nThe original stream is replaced to allow for further splitting,\nsince we do not know how many times the stream will be split.\n\nNote: this leads to buffering the stream content on the server.\nHowever, the LLM results are expected to be small enough to not cause issues.\n */\n private teeStream() {\n const [stream1, stream2] = this.baseStream.tee();\n this.baseStream = stream2;\n return stream1;\n }\n\n get textStream(): AsyncIterableStream<string> {\n return createAsyncIterableStream(\n this.teeStream().pipeThrough(\n new TransformStream<EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>, string>({\n transform({ part }, controller) {\n if (part.type === 'text-delta') {\n controller.enqueue(part.text);\n }\n },\n }),\n ),\n );\n }\n\n get fullStream(): AsyncIterableStream<TextStreamPart<TOOLS>> {\n return createAsyncIterableStream(\n this.teeStream().pipeThrough(\n new TransformStream<\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n TextStreamPart<TOOLS>\n >({\n transform({ part }, controller) {\n controller.enqueue(part);\n },\n }),\n ),\n );\n }\n\n async consumeStream(options?: ConsumeStreamOptions): Promise<void> {\n try {\n await consumeStream({\n stream: this.fullStream,\n onError: options?.onError,\n });\n } catch (error) {\n options?.onError?.(error);\n }\n }\n\n get experimental_partialOutputStream(): AsyncIterableStream<PARTIAL_OUTPUT> {\n if (this.output == null) {\n throw new NoOutputSpecifiedError();\n }\n\n return createAsyncIterableStream(\n this.teeStream().pipeThrough(\n new TransformStream<\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n PARTIAL_OUTPUT\n >({\n transform({ partialOutput }, controller) {\n if (partialOutput != null) {\n controller.enqueue(partialOutput);\n }\n },\n }),\n ),\n );\n }\n\n toUIMessageStream<UI_MESSAGE extends UIMessage>({\n originalMessages,\n generateMessageId,\n onFinish,\n messageMetadata,\n sendReasoning = true,\n sendSources = false,\n sendStart = true,\n sendFinish = true,\n onError = getErrorMessage,\n }: UIMessageStreamOptions<UI_MESSAGE> = {}): AsyncIterableStream<\n InferUIMessageChunk<UI_MESSAGE>\n > {\n const responseMessageId =\n generateMessageId != null\n ? getResponseUIMessageId({\n originalMessages,\n responseMessageId: generateMessageId,\n })\n : undefined;\n\n const toolNamesByCallId: Record<string, string> = {};\n\n const isDynamic = (toolCallId: string) => {\n const toolName = toolNamesByCallId[toolCallId];\n const dynamic = this.tools?.[toolName]?.type === 'dynamic';\n return dynamic ? true : undefined; // only send when dynamic to reduce data transfer\n };\n\n const baseStream = this.fullStream.pipeThrough(\n new TransformStream<\n TextStreamPart<TOOLS>,\n UIMessageChunk<\n InferUIMessageMetadata<UI_MESSAGE>,\n InferUIMessageData<UI_MESSAGE>\n >\n >({\n transform: async (part, controller) => {\n const messageMetadataValue = messageMetadata?.({ part });\n\n const partType = part.type;\n switch (partType) {\n case 'text-start': {\n controller.enqueue({\n type: 'text-start',\n id: part.id,\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : {}),\n });\n break;\n }\n\n case 'text-delta': {\n controller.enqueue({\n type: 'text-delta',\n id: part.id,\n delta: part.text,\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : {}),\n });\n break;\n }\n\n case 'text-end': {\n controller.enqueue({\n type: 'text-end',\n id: part.id,\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : {}),\n });\n break;\n }\n\n case 'reasoning-start': {\n controller.enqueue({\n type: 'reasoning-start',\n id: part.id,\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : {}),\n });\n break;\n }\n\n case 'reasoning-delta': {\n if (sendReasoning) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: part.id,\n delta: part.text,\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : {}),\n });\n }\n break;\n }\n\n case 'reasoning-end': {\n controller.enqueue({\n type: 'reasoning-end',\n id: part.id,\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : {}),\n });\n break;\n }\n\n case 'file': {\n controller.enqueue({\n type: 'file',\n mediaType: part.file.mediaType,\n url: `data:${part.file.mediaType};base64,${part.file.base64}`,\n });\n break;\n }\n\n case 'source': {\n if (sendSources && part.sourceType === 'url') {\n controller.enqueue({\n type: 'source-url',\n sourceId: part.id,\n url: part.url,\n title: part.title,\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : {}),\n });\n }\n\n if (sendSources && part.sourceType === 'document') {\n controller.enqueue({\n type: 'source-document',\n sourceId: part.id,\n mediaType: part.mediaType,\n title: part.title,\n filename: part.filename,\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : {}),\n });\n }\n break;\n }\n\n case 'tool-input-start': {\n toolNamesByCallId[part.id] = part.toolName;\n const dynamic = isDynamic(part.id);\n\n controller.enqueue({\n type: 'tool-input-start',\n toolCallId: part.id,\n toolName: part.toolName,\n ...(part.providerExecuted != null\n ? { providerExecuted: part.providerExecuted }\n : {}),\n ...(dynamic != null ? { dynamic } : {}),\n });\n break;\n }\n\n case 'tool-input-delta': {\n controller.enqueue({\n type: 'tool-input-delta',\n toolCallId: part.id,\n inputTextDelta: part.delta,\n });\n break;\n }\n\n case 'tool-call': {\n toolNamesByCallId[part.toolCallId] = part.toolName;\n const dynamic = isDynamic(part.toolCallId);\n\n if (part.invalid) {\n controller.enqueue({\n type: 'tool-input-error',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n ...(part.providerExecuted != null\n ? { providerExecuted: part.providerExecuted }\n : {}),\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : {}),\n ...(dynamic != null ? { dynamic } : {}),\n errorText: onError(part.error),\n });\n } else {\n controller.enqueue({\n type: 'tool-input-available',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n ...(part.providerExecuted != null\n ? { providerExecuted: part.providerExecuted }\n : {}),\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : {}),\n ...(dynamic != null ? { dynamic } : {}),\n });\n }\n\n break;\n }\n\n case 'tool-result': {\n const dynamic = isDynamic(part.toolCallId);\n\n controller.enqueue({\n type: 'tool-output-available',\n toolCallId: part.toolCallId,\n output: part.output,\n ...(part.providerExecuted != null\n ? { providerExecuted: part.providerExecuted }\n : {}),\n ...(part.preliminary != null\n ? { preliminary: part.preliminary }\n : {}),\n ...(dynamic != null ? { dynamic } : {}),\n });\n break;\n }\n\n case 'tool-error': {\n const dynamic = isDynamic(part.toolCallId);\n\n controller.enqueue({\n type: 'tool-output-error',\n toolCallId: part.toolCallId,\n errorText: onError(part.error),\n ...(part.providerExecuted != null\n ? { providerExecuted: part.providerExecuted }\n : {}),\n ...(dynamic != null ? { dynamic } : {}),\n });\n break;\n }\n\n case 'error': {\n controller.enqueue({\n type: 'error',\n errorText: onError(part.error),\n });\n break;\n }\n\n case 'start-step': {\n controller.enqueue({ type: 'start-step' });\n break;\n }\n\n case 'finish-step': {\n controller.enqueue({ type: 'finish-step' });\n break;\n }\n\n case 'start': {\n if (sendStart) {\n controller.enqueue({\n type: 'start',\n ...(messageMetadataValue != null\n ? { messageMetadata: messageMetadataValue }\n : {}),\n ...(responseMessageId != null\n ? { messageId: responseMessageId }\n : {}),\n });\n }\n break;\n }\n\n case 'finish': {\n if (sendFinish) {\n controller.enqueue({\n type: 'finish',\n finishReason: part.finishReason,\n ...(messageMetadataValue != null\n ? { messageMetadata: messageMetadataValue }\n : {}),\n });\n }\n break;\n }\n\n case 'abort': {\n controller.enqueue(part);\n break;\n }\n\n case 'tool-input-end': {\n break;\n }\n\n case 'raw': {\n // Raw chunks are not included in UI message streams\n // as they contain provider-specific data for developer use\n break;\n }\n\n default: {\n const exhaustiveCheck: never = partType;\n throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n }\n }\n\n // start and finish events already have metadata\n // so we only need to send metadata for other parts\n if (\n messageMetadataValue != null &&\n partType !== 'start' &&\n partType !== 'finish'\n ) {\n controller.enqueue({\n type: 'message-metadata',\n messageMetadata: messageMetadataValue,\n });\n }\n },\n }),\n );\n\n return createAsyncIterableStream(\n handleUIMessageStreamFinish<UI_MESSAGE>({\n stream: baseStream,\n messageId: responseMessageId ?? generateMessageId?.(),\n originalMessages,\n onFinish,\n onError,\n }),\n );\n }\n\n pipeUIMessageStreamToResponse<UI_MESSAGE extends UIMessage>(\n response: ServerResponse,\n {\n originalMessages,\n generateMessageId,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n ...init\n }: UIMessageStreamResponseInit & UIMessageStreamOptions<UI_MESSAGE> = {},\n ) {\n pipeUIMessageStreamToResponse({\n response,\n stream: this.toUIMessageStream({\n originalMessages,\n generateMessageId,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n }),\n ...init,\n });\n }\n\n pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n pipeTextStreamToResponse({\n response,\n textStream: this.textStream,\n ...init,\n });\n }\n\n toUIMessageStreamResponse<UI_MESSAGE extends UIMessage>({\n originalMessages,\n generateMessageId,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n ...init\n }: UIMessageStreamResponseInit &\n UIMessageStreamOptions<UI_MESSAGE> = {}): Response {\n return createUIMessageStreamResponse({\n stream: this.toUIMessageStream({\n originalMessages,\n generateMessageId,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n }),\n ...init,\n });\n }\n\n toTextStreamResponse(init?: ResponseInit): Response {\n return createTextStreamResponse({\n textStream: this.textStream,\n ...init,\n });\n }\n}\n","import { JSONValue } from '@ai-sdk/provider';\nimport {\n createIdGenerator,\n FlexibleSchema,\n InferSchema,\n ProviderOptions,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { NoObjectGeneratedError } from '../error/no-object-generated-error';\nimport { extractReasoningContent } from '../generate-text/extract-reasoning-content';\nimport { extractTextContent } from '../generate-text/extract-text-content';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport {\n CallWarning,\n FinishReason,\n LanguageModel,\n} from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata } from '../types/provider-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { prepareHeaders } from '../util/prepare-headers';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { VERSION } from '../version';\nimport { GenerateObjectResult } from './generate-object-result';\nimport { getOutputStrategy } from './output-strategy';\nimport { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';\nimport { RepairTextFunction } from './repair-text';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\n\n/**\nGenerate a structured, typed object for a given prompt and schema using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamObject` instead.\n\n@param model - The language model to use.\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxOutputTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param schema - The schema of the object that the model should generate.\n@param schemaName - Optional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n@param schemaDescription - Optional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n\n@param output - The type of the output.\n\n- 'object': The output is an object.\n- 'array': The output is an array.\n- 'enum': The output is an enum.\n- 'no-schema': The output is not a schema.\n\n@param experimental_repairText - A function that attempts to repair the raw output of the model\nto enable JSON parsing.\n\n@param experimental_telemetry - Optional telemetry configuration (experimental).\n\n@param providerOptions - Additional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n\n@returns\nA result object that contains the generated object, the finish reason, the token usage, and additional information.\n */\nexport async function generateObject<\n SCHEMA extends FlexibleSchema<unknown> = FlexibleSchema<JSONValue>,\n OUTPUT extends\n | 'object'\n | 'array'\n | 'enum'\n | 'no-schema' = InferSchema<SCHEMA> extends string ? 'enum' : 'object',\n RESULT = OUTPUT extends 'array'\n ? Array<InferSchema<SCHEMA>>\n : InferSchema<SCHEMA>,\n>(\n options: Omit<CallSettings, 'stopSequences'> &\n Prompt &\n (OUTPUT extends 'enum'\n ? {\n /**\nThe enum values that the model should use.\n */\n enum: Array<RESULT>;\n mode?: 'json';\n output: 'enum';\n }\n : OUTPUT extends 'no-schema'\n ? {}\n : {\n /**\nThe schema of the object that the model should generate.\n */\n schema: SCHEMA;\n\n /**\nOptional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n */\n schemaName?: string;\n\n /**\nOptional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n */\n schemaDescription?: string;\n\n /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n */\n mode?: 'auto' | 'json' | 'tool';\n }) & {\n output?: OUTPUT;\n\n /**\n The language model to use.\n */\n model: LanguageModel;\n /**\n A function that attempts to repair the raw output of the model\n to enable JSON parsing.\n */\n experimental_repairText?: RepairTextFunction;\n\n /**\n Optional telemetry configuration (experimental).\n */\n\n experimental_telemetry?: TelemetrySettings;\n\n /**\n Custom download function to use for URLs.\n\n By default, files are downloaded if the model does not support the URL for the given media type.\n */\n experimental_download?: DownloadFunction | undefined;\n\n /**\n Additional provider-specific options. They are passed through\n to the provider from the AI SDK and enable provider-specific\n functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n generateId?: () => string;\n currentDate?: () => Date;\n };\n },\n): Promise<GenerateObjectResult<RESULT>> {\n const {\n model: modelArg,\n output = 'object',\n system,\n prompt,\n messages,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n experimental_repairText: repairText,\n experimental_telemetry: telemetry,\n experimental_download: download,\n providerOptions,\n _internal: {\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n } = {},\n ...settings\n } = options;\n\n const model = resolveLanguageModel(modelArg);\n\n const enumValues = 'enum' in options ? options.enum : undefined;\n const {\n schema: inputSchema,\n schemaDescription,\n schemaName,\n } = 'schema' in options ? options : {};\n\n validateObjectGenerationInput({\n output,\n schema: inputSchema,\n schemaName,\n schemaDescription,\n enumValues,\n });\n\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal,\n });\n\n const outputStrategy = getOutputStrategy({\n output,\n schema: inputSchema,\n enumValues,\n });\n\n const callSettings = prepareCallSettings(settings);\n\n const headersWithUserAgent = withUserAgentSuffix(\n headers ?? {},\n `ai/${VERSION}`,\n );\n\n const baseTelemetryAttributes = getBaseTelemetryAttributes({\n model,\n telemetry,\n headers: headersWithUserAgent,\n settings: { ...callSettings, maxRetries },\n });\n\n const tracer = getTracer(telemetry);\n\n try {\n return await recordSpan({\n name: 'ai.generateObject',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateObject',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.prompt': {\n input: () => JSON.stringify({ system, prompt, messages }),\n },\n 'ai.schema':\n outputStrategy.jsonSchema != null\n ? { input: () => JSON.stringify(outputStrategy.jsonSchema) }\n : undefined,\n 'ai.schema.name': schemaName,\n 'ai.schema.description': schemaDescription,\n 'ai.settings.output': outputStrategy.type,\n },\n }),\n tracer,\n fn: async span => {\n let result: string;\n let finishReason: FinishReason;\n let usage: LanguageModelUsage;\n let warnings: CallWarning[] | undefined;\n let response: LanguageModelResponseMetadata;\n let request: LanguageModelRequestMetadata;\n let resultProviderMetadata: ProviderMetadata | undefined;\n let reasoning: string | undefined;\n\n const standardizedPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n } as Prompt);\n\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: standardizedPrompt,\n supportedUrls: await model.supportedUrls,\n download,\n });\n\n const generateResult = await retry(() =>\n recordSpan({\n name: 'ai.generateObject.doGenerate',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateObject.doGenerate',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n 'ai.prompt.messages': {\n input: () => stringifyForTelemetry(promptMessages),\n },\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.system': model.provider,\n 'gen_ai.request.model': model.modelId,\n 'gen_ai.request.frequency_penalty':\n callSettings.frequencyPenalty,\n 'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n 'gen_ai.request.presence_penalty': callSettings.presencePenalty,\n 'gen_ai.request.temperature': callSettings.temperature,\n 'gen_ai.request.top_k': callSettings.topK,\n 'gen_ai.request.top_p': callSettings.topP,\n },\n }),\n tracer,\n fn: async span => {\n const result = await model.doGenerate({\n responseFormat: {\n type: 'json',\n schema: outputStrategy.jsonSchema,\n name: schemaName,\n description: schemaDescription,\n },\n ...prepareCallSettings(settings),\n prompt: promptMessages,\n providerOptions,\n abortSignal,\n headers: headersWithUserAgent,\n });\n\n const responseData = {\n id: result.response?.id ?? generateId(),\n timestamp: result.response?.timestamp ?? currentDate(),\n modelId: result.response?.modelId ?? model.modelId,\n headers: result.response?.headers,\n body: result.response?.body,\n };\n\n const text = extractTextContent(result.content);\n const reasoning = extractReasoningContent(result.content);\n\n if (text === undefined) {\n throw new NoObjectGeneratedError({\n message:\n 'No object generated: the model did not return a response.',\n response: responseData,\n usage: result.usage,\n finishReason: result.finishReason,\n });\n }\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': result.finishReason,\n 'ai.response.object': { output: () => text },\n 'ai.response.id': responseData.id,\n 'ai.response.model': responseData.modelId,\n 'ai.response.timestamp':\n responseData.timestamp.toISOString(),\n 'ai.response.providerMetadata': JSON.stringify(\n result.providerMetadata,\n ),\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': result.usage.inputTokens,\n 'ai.usage.completionTokens': result.usage.outputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [result.finishReason],\n 'gen_ai.response.id': responseData.id,\n 'gen_ai.response.model': responseData.modelId,\n 'gen_ai.usage.input_tokens': result.usage.inputTokens,\n 'gen_ai.usage.output_tokens': result.usage.outputTokens,\n },\n }),\n );\n\n return {\n ...result,\n objectText: text,\n reasoning,\n responseData,\n };\n },\n }),\n );\n\n result = generateResult.objectText;\n finishReason = generateResult.finishReason;\n usage = generateResult.usage;\n warnings = generateResult.warnings;\n resultProviderMetadata = generateResult.providerMetadata;\n request = generateResult.request ?? {};\n response = generateResult.responseData;\n reasoning = generateResult.reasoning;\n\n logWarnings(warnings);\n\n const object = await parseAndValidateObjectResultWithRepair(\n result,\n outputStrategy,\n repairText,\n {\n response,\n usage,\n finishReason,\n },\n );\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': finishReason,\n 'ai.response.object': {\n output: () => JSON.stringify(object),\n },\n 'ai.response.providerMetadata': JSON.stringify(\n resultProviderMetadata,\n ),\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': usage.inputTokens,\n 'ai.usage.completionTokens': usage.outputTokens,\n },\n }),\n );\n\n return new DefaultGenerateObjectResult({\n object,\n reasoning,\n finishReason,\n usage,\n warnings,\n request,\n response,\n providerMetadata: resultProviderMetadata,\n });\n },\n });\n } catch (error) {\n throw wrapGatewayError(error);\n }\n}\n\nclass DefaultGenerateObjectResult<T> implements GenerateObjectResult<T> {\n readonly object: GenerateObjectResult<T>['object'];\n readonly finishReason: GenerateObjectResult<T>['finishReason'];\n readonly usage: GenerateObjectResult<T>['usage'];\n readonly warnings: GenerateObjectResult<T>['warnings'];\n readonly providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n readonly response: GenerateObjectResult<T>['response'];\n readonly request: GenerateObjectResult<T>['request'];\n readonly reasoning: GenerateObjectResult<T>['reasoning'];\n\n constructor(options: {\n object: GenerateObjectResult<T>['object'];\n finishReason: GenerateObjectResult<T>['finishReason'];\n usage: GenerateObjectResult<T>['usage'];\n warnings: GenerateObjectResult<T>['warnings'];\n providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n response: GenerateObjectResult<T>['response'];\n request: GenerateObjectResult<T>['request'];\n reasoning: GenerateObjectResult<T>['reasoning'];\n }) {\n this.object = options.object;\n this.finishReason = options.finishReason;\n this.usage = options.usage;\n this.warnings = options.warnings;\n this.providerMetadata = options.providerMetadata;\n this.response = options.response;\n this.request = options.request;\n this.reasoning = options.reasoning;\n }\n\n toJsonResponse(init?: ResponseInit): Response {\n return new Response(JSON.stringify(this.object), {\n status: init?.status ?? 200,\n headers: prepareHeaders(init?.headers, {\n 'content-type': 'application/json; charset=utf-8',\n }),\n });\n }\n}\n","import {\n JSONValue,\n LanguageModelV2CallWarning,\n LanguageModelV2FinishReason,\n LanguageModelV2StreamPart,\n LanguageModelV2Usage,\n SharedV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n createIdGenerator,\n FlexibleSchema,\n ProviderOptions,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { ServerResponse } from 'http';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { createTextStreamResponse } from '../text-stream/create-text-stream-response';\nimport { pipeTextStreamToResponse } from '../text-stream/pipe-text-stream-to-response';\nimport {\n CallWarning,\n FinishReason,\n LanguageModel,\n} from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata } from '../types/provider-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { DeepPartial, isDeepEqualData, parsePartialJson } from '../util';\nimport {\n AsyncIterableStream,\n createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport { DelayedPromise } from '../util/delayed-promise';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { now as originalNow } from '../util/now';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { getOutputStrategy, OutputStrategy } from './output-strategy';\nimport { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';\nimport { RepairTextFunction } from './repair-text';\nimport { ObjectStreamPart, StreamObjectResult } from './stream-object-result';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\n\n/**\nCallback that is set using the `onError` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamObjectOnErrorCallback = (event: {\n error: unknown;\n}) => Promise<void> | void;\n\n/**\nCallback that is set using the `onFinish` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamObjectOnFinishCallback<RESULT> = (event: {\n /**\nThe token usage of the generated response.\n*/\n usage: LanguageModelUsage;\n\n /**\nThe generated object. Can be undefined if the final object does not match the schema.\n*/\n object: RESULT | undefined;\n\n /**\nOptional error object. This is e.g. a TypeValidationError when the final object does not match the schema.\n*/\n error: unknown | undefined;\n\n /**\nResponse metadata.\n */\n response: LanguageModelResponseMetadata;\n\n /**\nWarnings from the model provider (e.g. unsupported settings).\n*/\n warnings?: CallWarning[];\n\n /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n*/\n providerMetadata: ProviderMetadata | undefined;\n}) => Promise<void> | void;\n\n/**\nGenerate a structured, typed object for a given prompt and schema using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateObject` instead.\n\n@param model - The language model to use.\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxOutputTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param schema - The schema of the object that the model should generate.\n@param schemaName - Optional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n@param schemaDescription - Optional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n\n@param output - The type of the output.\n\n- 'object': The output is an object.\n- 'array': The output is an array.\n- 'enum': The output is an enum.\n- 'no-schema': The output is not a schema.\n\n@param experimental_telemetry - Optional telemetry configuration (experimental).\n\n@param providerOptions - Additional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n\n@returns\nA result object for accessing the partial object stream and additional information.\n */\nexport function streamObject<\n SCHEMA extends FlexibleSchema<unknown> = FlexibleSchema<JSONValue>,\n OUTPUT extends\n | 'object'\n | 'array'\n | 'enum'\n | 'no-schema' = InferSchema<SCHEMA> extends string ? 'enum' : 'object',\n RESULT = OUTPUT extends 'array'\n ? Array<InferSchema<SCHEMA>>\n : InferSchema<SCHEMA>,\n>(\n options: Omit<CallSettings, 'stopSequences'> &\n Prompt &\n (OUTPUT extends 'enum'\n ? {\n /**\nThe enum values that the model should use.\n */\n enum: Array<RESULT>;\n mode?: 'json';\n output: 'enum';\n }\n : OUTPUT extends 'no-schema'\n ? {}\n : {\n /**\nThe schema of the object that the model should generate.\n */\n schema: SCHEMA;\n\n /**\nOptional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n */\n schemaName?: string;\n\n /**\nOptional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n */\n schemaDescription?: string;\n\n /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n */\n mode?: 'auto' | 'json' | 'tool';\n }) & {\n output?: OUTPUT;\n\n /**\nThe language model to use.\n */\n model: LanguageModel;\n\n /**\nA function that attempts to repair the raw output of the model\nto enable JSON parsing.\n */\n experimental_repairText?: RepairTextFunction;\n\n /**\nOptional telemetry configuration (experimental).\n */\n\n experimental_telemetry?: TelemetrySettings;\n\n /**\n Custom download function to use for URLs.\n\n By default, files are downloaded if the model does not support the URL for the given media type.\n */\n experimental_download?: DownloadFunction | undefined;\n\n /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\nCallback that is invoked when an error occurs during streaming.\nYou can use it to log errors.\nThe stream processing will pause until the callback promise is resolved.\n */\n onError?: StreamObjectOnErrorCallback;\n\n /**\nCallback that is called when the LLM response and the final object validation are finished.\n*/\n onFinish?: StreamObjectOnFinishCallback<RESULT>;\n\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n generateId?: () => string;\n currentDate?: () => Date;\n now?: () => number;\n };\n },\n): StreamObjectResult<\n OUTPUT extends 'enum'\n ? string\n : OUTPUT extends 'array'\n ? RESULT\n : DeepPartial<RESULT>,\n OUTPUT extends 'array' ? RESULT : RESULT,\n OUTPUT extends 'array'\n ? RESULT extends Array<infer U>\n ? AsyncIterableStream<U>\n : never\n : never\n> {\n const {\n model,\n output = 'object',\n system,\n prompt,\n messages,\n maxRetries,\n abortSignal,\n headers,\n experimental_repairText: repairText,\n experimental_telemetry: telemetry,\n experimental_download: download,\n providerOptions,\n onError = ({ error }: { error: unknown }) => {\n console.error(error);\n },\n onFinish,\n _internal: {\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n now = originalNow,\n } = {},\n ...settings\n } = options;\n\n const enumValues =\n 'enum' in options && options.enum ? options.enum : undefined;\n\n const {\n schema: inputSchema,\n schemaDescription,\n schemaName,\n } = 'schema' in options ? options : {};\n\n validateObjectGenerationInput({\n output,\n schema: inputSchema,\n schemaName,\n schemaDescription,\n enumValues,\n });\n\n const outputStrategy = getOutputStrategy({\n output,\n schema: inputSchema,\n enumValues,\n });\n\n return new DefaultStreamObjectResult({\n model,\n telemetry,\n headers,\n settings,\n maxRetries,\n abortSignal,\n outputStrategy,\n system,\n prompt,\n messages,\n schemaName,\n schemaDescription,\n providerOptions,\n repairText,\n onError,\n onFinish,\n download,\n generateId,\n currentDate,\n now,\n });\n}\n\nclass DefaultStreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM>\n implements StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM>\n{\n private readonly _object = new DelayedPromise<RESULT>();\n private readonly _usage = new DelayedPromise<LanguageModelUsage>();\n private readonly _providerMetadata = new DelayedPromise<\n ProviderMetadata | undefined\n >();\n private readonly _warnings = new DelayedPromise<CallWarning[] | undefined>();\n private readonly _request =\n new DelayedPromise<LanguageModelRequestMetadata>();\n private readonly _response =\n new DelayedPromise<LanguageModelResponseMetadata>();\n private readonly _finishReason = new DelayedPromise<FinishReason>();\n\n private readonly baseStream: ReadableStream<ObjectStreamPart<PARTIAL>>;\n\n private readonly outputStrategy: OutputStrategy<\n PARTIAL,\n RESULT,\n ELEMENT_STREAM\n >;\n\n constructor({\n model: modelArg,\n headers,\n telemetry,\n settings,\n maxRetries: maxRetriesArg,\n abortSignal,\n outputStrategy,\n system,\n prompt,\n messages,\n schemaName,\n schemaDescription,\n providerOptions,\n repairText,\n onError,\n onFinish,\n download,\n generateId,\n currentDate,\n now,\n }: {\n model: LanguageModel;\n telemetry: TelemetrySettings | undefined;\n headers: Record<string, string | undefined> | undefined;\n settings: Omit<CallSettings, 'abortSignal' | 'headers'>;\n maxRetries: number | undefined;\n abortSignal: AbortSignal | undefined;\n outputStrategy: OutputStrategy<PARTIAL, RESULT, ELEMENT_STREAM>;\n system: Prompt['system'];\n prompt: Prompt['prompt'];\n messages: Prompt['messages'];\n schemaName: string | undefined;\n schemaDescription: string | undefined;\n providerOptions: ProviderOptions | undefined;\n repairText: RepairTextFunction | undefined;\n onError: StreamObjectOnErrorCallback;\n onFinish: StreamObjectOnFinishCallback<RESULT> | undefined;\n download: DownloadFunction | undefined;\n generateId: () => string;\n currentDate: () => Date;\n now: () => number;\n }) {\n const model = resolveLanguageModel(modelArg);\n\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal,\n });\n\n const callSettings = prepareCallSettings(settings);\n\n const baseTelemetryAttributes = getBaseTelemetryAttributes({\n model,\n telemetry,\n headers,\n settings: { ...callSettings, maxRetries },\n });\n\n const tracer = getTracer(telemetry);\n const self = this;\n\n const stitchableStream =\n createStitchableStream<ObjectStreamPart<PARTIAL>>();\n\n const eventProcessor = new TransformStream<\n ObjectStreamPart<PARTIAL>,\n ObjectStreamPart<PARTIAL>\n >({\n transform(chunk, controller) {\n controller.enqueue(chunk);\n\n if (chunk.type === 'error') {\n onError({ error: wrapGatewayError(chunk.error) });\n }\n },\n });\n\n this.baseStream = stitchableStream.stream.pipeThrough(eventProcessor);\n\n recordSpan({\n name: 'ai.streamObject',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.streamObject',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.prompt': {\n input: () => JSON.stringify({ system, prompt, messages }),\n },\n 'ai.schema':\n outputStrategy.jsonSchema != null\n ? { input: () => JSON.stringify(outputStrategy.jsonSchema) }\n : undefined,\n 'ai.schema.name': schemaName,\n 'ai.schema.description': schemaDescription,\n 'ai.settings.output': outputStrategy.type,\n },\n }),\n tracer,\n endWhenDone: false,\n fn: async rootSpan => {\n const standardizedPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n } as Prompt);\n\n const callOptions = {\n responseFormat: {\n type: 'json' as const,\n schema: outputStrategy.jsonSchema,\n name: schemaName,\n description: schemaDescription,\n },\n ...prepareCallSettings(settings),\n prompt: await convertToLanguageModelPrompt({\n prompt: standardizedPrompt,\n supportedUrls: await model.supportedUrls,\n download,\n }),\n providerOptions,\n abortSignal,\n headers,\n includeRawChunks: false,\n };\n\n const transformer: Transformer<\n LanguageModelV2StreamPart,\n ObjectStreamInputPart\n > = {\n transform: (chunk, controller) => {\n switch (chunk.type) {\n case 'text-delta':\n controller.enqueue(chunk.delta);\n break;\n case 'response-metadata':\n case 'finish':\n case 'error':\n case 'stream-start':\n controller.enqueue(chunk);\n break;\n }\n },\n };\n\n const {\n result: { stream, response, request },\n doStreamSpan,\n startTimestampMs,\n } = await retry(() =>\n recordSpan({\n name: 'ai.streamObject.doStream',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.streamObject.doStream',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n 'ai.prompt.messages': {\n input: () => stringifyForTelemetry(callOptions.prompt),\n },\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.system': model.provider,\n 'gen_ai.request.model': model.modelId,\n 'gen_ai.request.frequency_penalty':\n callSettings.frequencyPenalty,\n 'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n 'gen_ai.request.presence_penalty': callSettings.presencePenalty,\n 'gen_ai.request.temperature': callSettings.temperature,\n 'gen_ai.request.top_k': callSettings.topK,\n 'gen_ai.request.top_p': callSettings.topP,\n },\n }),\n tracer,\n endWhenDone: false,\n fn: async doStreamSpan => ({\n startTimestampMs: now(),\n doStreamSpan,\n result: await model.doStream(callOptions),\n }),\n }),\n );\n\n self._request.resolve(request ?? {});\n\n // store information for onFinish callback:\n let warnings: LanguageModelV2CallWarning[] | undefined;\n let usage: LanguageModelUsage = {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n };\n let finishReason: LanguageModelV2FinishReason | undefined;\n let providerMetadata: ProviderMetadata | undefined;\n let object: RESULT | undefined;\n let error: unknown | undefined;\n\n // pipe chunks through a transformation stream that extracts metadata:\n let accumulatedText = '';\n let textDelta = '';\n let fullResponse: {\n id: string;\n timestamp: Date;\n modelId: string;\n } = {\n id: generateId(),\n timestamp: currentDate(),\n modelId: model.modelId,\n };\n\n // Keep track of raw parse result before type validation, since e.g. Zod might\n // change the object by mapping properties.\n let latestObjectJson: JSONValue | undefined = undefined;\n let latestObject: PARTIAL | undefined = undefined;\n let isFirstChunk = true;\n let isFirstDelta = true;\n\n const transformedStream = stream\n .pipeThrough(new TransformStream(transformer))\n .pipeThrough(\n new TransformStream<\n string | ObjectStreamInputPart,\n ObjectStreamPart<PARTIAL>\n >({\n async transform(chunk, controller): Promise<void> {\n if (\n typeof chunk === 'object' &&\n chunk.type === 'stream-start'\n ) {\n warnings = chunk.warnings;\n return; // stream start chunks are sent immediately and do not count as first chunk\n }\n\n // Telemetry event for first chunk:\n if (isFirstChunk) {\n const msToFirstChunk = now() - startTimestampMs;\n\n isFirstChunk = false;\n\n doStreamSpan.addEvent('ai.stream.firstChunk', {\n 'ai.stream.msToFirstChunk': msToFirstChunk,\n });\n\n doStreamSpan.setAttributes({\n 'ai.stream.msToFirstChunk': msToFirstChunk,\n });\n }\n\n // process partial text chunks\n if (typeof chunk === 'string') {\n accumulatedText += chunk;\n textDelta += chunk;\n\n const { value: currentObjectJson, state: parseState } =\n await parsePartialJson(accumulatedText);\n\n if (\n currentObjectJson !== undefined &&\n !isDeepEqualData(latestObjectJson, currentObjectJson)\n ) {\n const validationResult =\n await outputStrategy.validatePartialResult({\n value: currentObjectJson,\n textDelta,\n latestObject,\n isFirstDelta,\n isFinalDelta: parseState === 'successful-parse',\n });\n\n if (\n validationResult.success &&\n !isDeepEqualData(\n latestObject,\n validationResult.value.partial,\n )\n ) {\n // inside inner check to correctly parse the final element in array mode:\n latestObjectJson = currentObjectJson;\n latestObject = validationResult.value.partial;\n\n controller.enqueue({\n type: 'object',\n object: latestObject,\n });\n\n controller.enqueue({\n type: 'text-delta',\n textDelta: validationResult.value.textDelta,\n });\n\n textDelta = '';\n isFirstDelta = false;\n }\n }\n\n return;\n }\n\n switch (chunk.type) {\n case 'response-metadata': {\n fullResponse = {\n id: chunk.id ?? fullResponse.id,\n timestamp: chunk.timestamp ?? fullResponse.timestamp,\n modelId: chunk.modelId ?? fullResponse.modelId,\n };\n break;\n }\n\n case 'finish': {\n // send final text delta:\n if (textDelta !== '') {\n controller.enqueue({ type: 'text-delta', textDelta });\n }\n\n // store finish reason for telemetry:\n finishReason = chunk.finishReason;\n\n // store usage and metadata for promises and onFinish callback:\n usage = chunk.usage;\n providerMetadata = chunk.providerMetadata;\n\n controller.enqueue({\n ...chunk,\n usage,\n response: fullResponse,\n });\n\n // log warnings:\n logWarnings(warnings ?? []);\n\n // resolve promises that can be resolved now:\n self._usage.resolve(usage);\n self._providerMetadata.resolve(providerMetadata);\n self._warnings.resolve(warnings);\n self._response.resolve({\n ...fullResponse,\n headers: response?.headers,\n });\n self._finishReason.resolve(finishReason ?? 'unknown');\n\n try {\n object = await parseAndValidateObjectResultWithRepair(\n accumulatedText,\n outputStrategy,\n repairText,\n {\n response: fullResponse,\n usage,\n finishReason,\n },\n );\n self._object.resolve(object);\n } catch (e) {\n error = e;\n self._object.reject(e);\n }\n break;\n }\n\n default: {\n controller.enqueue(chunk);\n break;\n }\n }\n },\n\n // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n async flush(controller) {\n try {\n const finalUsage = usage ?? {\n promptTokens: NaN,\n completionTokens: NaN,\n totalTokens: NaN,\n };\n\n doStreamSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': finishReason,\n 'ai.response.object': {\n output: () => JSON.stringify(object),\n },\n 'ai.response.id': fullResponse.id,\n 'ai.response.model': fullResponse.modelId,\n 'ai.response.timestamp':\n fullResponse.timestamp.toISOString(),\n 'ai.response.providerMetadata':\n JSON.stringify(providerMetadata),\n\n 'ai.usage.inputTokens': finalUsage.inputTokens,\n 'ai.usage.outputTokens': finalUsage.outputTokens,\n 'ai.usage.totalTokens': finalUsage.totalTokens,\n 'ai.usage.reasoningTokens': finalUsage.reasoningTokens,\n 'ai.usage.cachedInputTokens':\n finalUsage.cachedInputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [finishReason],\n 'gen_ai.response.id': fullResponse.id,\n 'gen_ai.response.model': fullResponse.modelId,\n 'gen_ai.usage.input_tokens': finalUsage.inputTokens,\n 'gen_ai.usage.output_tokens': finalUsage.outputTokens,\n },\n }),\n );\n\n // finish doStreamSpan before other operations for correct timing:\n doStreamSpan.end();\n\n // Add response information to the root span:\n rootSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.usage.inputTokens': finalUsage.inputTokens,\n 'ai.usage.outputTokens': finalUsage.outputTokens,\n 'ai.usage.totalTokens': finalUsage.totalTokens,\n 'ai.usage.reasoningTokens': finalUsage.reasoningTokens,\n 'ai.usage.cachedInputTokens':\n finalUsage.cachedInputTokens,\n 'ai.response.object': {\n output: () => JSON.stringify(object),\n },\n 'ai.response.providerMetadata':\n JSON.stringify(providerMetadata),\n },\n }),\n );\n\n // call onFinish callback:\n await onFinish?.({\n usage: finalUsage,\n object,\n error,\n response: {\n ...fullResponse,\n headers: response?.headers,\n },\n warnings,\n providerMetadata,\n });\n } catch (error) {\n controller.enqueue({ type: 'error', error });\n } finally {\n rootSpan.end();\n }\n },\n }),\n );\n\n stitchableStream.addStream(transformedStream);\n },\n })\n .catch(error => {\n // add an empty stream with an error to break the stream:\n stitchableStream.addStream(\n new ReadableStream({\n start(controller) {\n controller.enqueue({ type: 'error', error });\n controller.close();\n },\n }),\n );\n })\n .finally(() => {\n stitchableStream.close();\n });\n\n this.outputStrategy = outputStrategy;\n }\n\n get object() {\n return this._object.promise;\n }\n\n get usage() {\n return this._usage.promise;\n }\n\n get providerMetadata() {\n return this._providerMetadata.promise;\n }\n\n get warnings() {\n return this._warnings.promise;\n }\n\n get request() {\n return this._request.promise;\n }\n\n get response() {\n return this._response.promise;\n }\n\n get finishReason() {\n return this._finishReason.promise;\n }\n\n get partialObjectStream(): AsyncIterableStream<PARTIAL> {\n return createAsyncIterableStream(\n this.baseStream.pipeThrough(\n new TransformStream<ObjectStreamPart<PARTIAL>, PARTIAL>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'object':\n controller.enqueue(chunk.object);\n break;\n\n case 'text-delta':\n case 'finish':\n case 'error': // suppress error (use onError instead)\n break;\n\n default: {\n const _exhaustiveCheck: never = chunk;\n throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n }),\n ),\n );\n }\n\n get elementStream(): ELEMENT_STREAM {\n return this.outputStrategy.createElementStream(this.baseStream);\n }\n\n get textStream(): AsyncIterableStream<string> {\n return createAsyncIterableStream(\n this.baseStream.pipeThrough(\n new TransformStream<ObjectStreamPart<PARTIAL>, string>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'text-delta':\n controller.enqueue(chunk.textDelta);\n break;\n\n case 'object':\n case 'finish':\n case 'error': // suppress error (use onError instead)\n break;\n\n default: {\n const _exhaustiveCheck: never = chunk;\n throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n }),\n ),\n );\n }\n\n get fullStream(): AsyncIterableStream<ObjectStreamPart<PARTIAL>> {\n return createAsyncIterableStream(this.baseStream);\n }\n\n pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n pipeTextStreamToResponse({\n response,\n textStream: this.textStream,\n ...init,\n });\n }\n\n toTextStreamResponse(init?: ResponseInit): Response {\n return createTextStreamResponse({\n textStream: this.textStream,\n ...init,\n });\n }\n}\n\nexport type ObjectStreamInputPart =\n | string\n | {\n type: 'stream-start';\n warnings: LanguageModelV2CallWarning[];\n }\n | {\n type: 'error';\n error: unknown;\n }\n | {\n type: 'response-metadata';\n id?: string;\n timestamp?: Date;\n modelId?: string;\n }\n | {\n type: 'finish';\n finishReason: LanguageModelV2FinishReason;\n usage: LanguageModelV2Usage;\n providerMetadata?: SharedV2ProviderMetadata;\n };\n","import { LanguageModelV2CallOptions } from '@ai-sdk/provider';\nimport {\n asSchema,\n FlexibleSchema,\n safeParseJSON,\n safeValidateTypes,\n} from '@ai-sdk/provider-utils';\nimport { NoObjectGeneratedError } from '../error/no-object-generated-error';\nimport { FinishReason } from '../types/language-model';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { DeepPartial } from '../util/deep-partial';\nimport { parsePartialJson } from '../util/parse-partial-json';\n\nexport interface Output<OUTPUT, PARTIAL> {\n readonly type: 'object' | 'text';\n\n responseFormat: LanguageModelV2CallOptions['responseFormat'];\n\n parsePartial(options: {\n text: string;\n }): Promise<{ partial: PARTIAL } | undefined>;\n\n parseOutput(\n options: { text: string },\n context: {\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n ): Promise<OUTPUT>;\n}\n\nexport const text = (): Output<string, string> => ({\n type: 'text',\n\n responseFormat: { type: 'text' },\n\n async parsePartial({ text }: { text: string }) {\n return { partial: text };\n },\n\n async parseOutput({ text }: { text: string }) {\n return text;\n },\n});\n\nexport const object = <OUTPUT>({\n schema: inputSchema,\n}: {\n schema: FlexibleSchema<OUTPUT>;\n}): Output<OUTPUT, DeepPartial<OUTPUT>> => {\n const schema = asSchema(inputSchema);\n\n return {\n type: 'object',\n\n responseFormat: {\n type: 'json',\n schema: schema.jsonSchema,\n },\n\n async parsePartial({ text }: { text: string }) {\n const result = await parsePartialJson(text);\n\n switch (result.state) {\n case 'failed-parse':\n case 'undefined-input':\n return undefined;\n\n case 'repaired-parse':\n case 'successful-parse':\n return {\n // Note: currently no validation of partial results:\n partial: result.value as DeepPartial<OUTPUT>,\n };\n\n default: {\n const _exhaustiveCheck: never = result.state;\n throw new Error(`Unsupported parse state: ${_exhaustiveCheck}`);\n }\n }\n },\n\n async parseOutput(\n { text }: { text: string },\n context: {\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n ) {\n const parseResult = await safeParseJSON({ text });\n\n if (!parseResult.success) {\n throw new NoObjectGeneratedError({\n message: 'No object generated: could not parse the response.',\n cause: parseResult.error,\n text,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason,\n });\n }\n\n const validationResult = await safeValidateTypes({\n value: parseResult.value,\n schema,\n });\n\n if (!validationResult.success) {\n throw new NoObjectGeneratedError({\n message: 'No object generated: response did not match schema.',\n cause: validationResult.error,\n text,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason,\n });\n }\n\n return validationResult.value;\n },\n };\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 { stepCountIs } from '@internal/ai-sdk-v5';\nimport { Agent } from '@mastra/core/agent';\nimport { createWorkflow, createStep } from '@mastra/core/workflows';\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"]}
|