@powerformer/refly-cli 0.1.24 → 0.1.25
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/dist/bin/refly.js +5 -2
- package/dist/bin/refly.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/skill/SKILL.md +2 -0
- package/skill/references/execution.md +218 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_@swc+core@1.12.14_@swc+helpers@0.5.17__jiti@2.6.1_postcss@8.5.6_tsx@4.20.6_typescript@5.8.3_yaml@2.8.0/node_modules/tsup/assets/cjs_shims.js","../src/config/paths.ts","../src/utils/logger.ts","../src/platform/registry.ts","../src/platform/symlink-adapter.ts","../src/platform/format-converter.ts","../src/platform/manager.ts","../src/skill/symlink.ts","../src/index.ts","../src/utils/output.ts","../src/utils/formatter.ts","../src/utils/ui.ts","../src/utils/errors.ts","../src/config/config.ts","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js","../src/api/client.ts","../src/skill/installer.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","/**\n * Path utilities for CLI configuration and data storage.\n */\n\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\n\n/**\n * Get CLI version from package.json\n */\nexport function getCliVersion(): string {\n try {\n const pkgPath = path.join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n return pkg.version || '0.1.0';\n } catch {\n return '0.1.0';\n }\n}\n\n/**\n * Get the Refly configuration directory (~/.refly)\n */\nexport function getReflyDir(): string {\n const dir = path.join(os.homedir(), '.refly');\n ensureDir(dir);\n return dir;\n}\n\n/**\n * Get the legacy builder data directory (~/.refly/builder)\n * @deprecated Builder functionality has been removed. This is only used for cleanup.\n */\nexport function getLegacyBuilderDir(): string {\n return path.join(getReflyDir(), 'builder');\n}\n\n/**\n * Get the cache directory (~/.refly/cache)\n */\nexport function getCacheDir(): string {\n const dir = path.join(getReflyDir(), 'cache');\n ensureDir(dir);\n return dir;\n}\n\n/**\n * Get the Claude skills directory (~/.claude/skills/refly)\n */\nexport function getClaudeSkillDir(): string {\n return path.join(os.homedir(), '.claude', 'skills', 'refly');\n}\n\n/**\n * Get the Claude commands directory (~/.claude/commands)\n */\nexport function getClaudeCommandsDir(): string {\n return path.join(os.homedir(), '.claude', 'commands');\n}\n\n/**\n * Check if Claude directories exist\n */\nexport function claudeDirectoriesExist(): { skills: boolean; commands: boolean } {\n const skillsDir = path.join(os.homedir(), '.claude', 'skills');\n const commandsDir = getClaudeCommandsDir();\n\n return {\n skills: fs.existsSync(skillsDir),\n commands: fs.existsSync(commandsDir),\n };\n}\n\n/**\n * Ensure a directory exists with proper permissions\n */\nexport function ensureDir(dir: string): void {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n}\n\n/**\n * Get the config file path\n */\nexport function getConfigPath(): string {\n return path.join(getReflyDir(), 'config.json');\n}\n\n/**\n * Get the skills directory (~/.refly/skills)\n * @deprecated Use getReflySkillDir() instead\n */\nexport function getSkillsDir(): string {\n return path.join(getReflyDir(), 'skills');\n}\n\n/**\n * Ensure the skills directory exists\n * @deprecated Use ensureReflySkillDir() instead\n */\nexport async function ensureSkillsDir(): Promise<void> {\n const dir = getSkillsDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n}\n\n// ============================================================================\n// New Symlink-based Skill Architecture\n// ============================================================================\n\n/**\n * Get the Refly skills storage directory (~/.refly/skills)\n * This is where actual skill files are stored.\n */\nexport function getReflySkillsDir(): string {\n return path.join(getReflyDir(), 'skills');\n}\n\n/**\n * Get the base skill directory (~/.refly/skills/base)\n * Contains the main SKILL.md and rules for CLI routing.\n */\nexport function getReflyBaseSkillDir(): string {\n return path.join(getReflySkillsDir(), 'base');\n}\n\n/**\n * Get a domain skill directory (~/.refly/skills/<name>)\n */\nexport function getReflyDomainSkillDir(skillName: string): string {\n return path.join(getReflySkillsDir(), skillName);\n}\n\n/**\n * Get the Claude skills directory (~/.claude/skills)\n * Symlinks are created here pointing to ~/.refly/skill/<name>\n */\nexport function getClaudeSkillsDir(): string {\n return path.join(os.homedir(), '.claude', 'skills');\n}\n\n/**\n * Get a Claude skill symlink path (~/.claude/skills/<name>)\n */\nexport function getClaudeSkillSymlinkPath(skillName: string): string {\n return path.join(getClaudeSkillsDir(), skillName);\n}\n\n/**\n * Ensure the Refly skills directory exists\n */\nexport function ensureReflySkillsDir(): void {\n const dir = getReflySkillsDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n}\n\n/**\n * Ensure the Claude skills directory exists\n */\nexport function ensureClaudeSkillsDir(): void {\n const dir = getClaudeSkillsDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o755 });\n }\n}\n","/**\n * Logger utility that NEVER outputs tokens or sensitive data.\n * Used for internal debugging only - not for user output.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { getReflyDir } from '../config/paths.js';\n\nconst LOG_FILE = 'cli.log';\nconst MAX_LOG_SIZE = 5 * 1024 * 1024; // 5MB\n\ntype LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\n// Sensitive patterns to redact\nconst SENSITIVE_PATTERNS = [\n /Bearer\\s+[A-Za-z0-9\\-_]+\\.[A-Za-z0-9\\-_]+\\.[A-Za-z0-9\\-_]+/gi,\n /[A-Za-z0-9]{32,}/g, // API keys\n /\"(access_?token|refresh_?token|api_?key|secret|password)\":\\s*\"[^\"]+\"/gi,\n];\n\nfunction redact(message: string): string {\n let result = message;\n for (const pattern of SENSITIVE_PATTERNS) {\n result = result.replace(pattern, '[REDACTED]');\n }\n return result;\n}\n\nclass Logger {\n private level: LogLevel = 'info';\n private logToFile = false;\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n enableFileLogging(): void {\n this.logToFile = true;\n }\n\n private shouldLog(level: LogLevel): boolean {\n return LOG_LEVELS[level] >= LOG_LEVELS[this.level];\n }\n\n private formatMessage(level: LogLevel, message: string): string {\n const timestamp = new Date().toISOString();\n const safeMessage = redact(message);\n return `[${timestamp}] [${level.toUpperCase()}] ${safeMessage}`;\n }\n\n private writeToFile(formatted: string): void {\n if (!this.logToFile) return;\n\n try {\n const logPath = path.join(getReflyDir(), LOG_FILE);\n\n // Rotate if too large\n try {\n const stats = fs.statSync(logPath);\n if (stats.size > MAX_LOG_SIZE) {\n fs.renameSync(logPath, `${logPath}.old`);\n }\n } catch {\n // File doesn't exist yet\n }\n\n fs.appendFileSync(logPath, `${formatted}\\n`);\n } catch {\n // Silently fail - logging should never break the CLI\n }\n }\n\n debug(message: string, ...args: unknown[]): void {\n if (!this.shouldLog('debug')) return;\n const formatted = this.formatMessage('debug', this.interpolate(message, args));\n this.writeToFile(formatted);\n }\n\n info(message: string, ...args: unknown[]): void {\n if (!this.shouldLog('info')) return;\n const formatted = this.formatMessage('info', this.interpolate(message, args));\n this.writeToFile(formatted);\n }\n\n warn(message: string, ...args: unknown[]): void {\n if (!this.shouldLog('warn')) return;\n const formatted = this.formatMessage('warn', this.interpolate(message, args));\n this.writeToFile(formatted);\n }\n\n error(message: string, ...args: unknown[]): void {\n if (!this.shouldLog('error')) return;\n const formatted = this.formatMessage('error', this.interpolate(message, args));\n this.writeToFile(formatted);\n }\n\n private interpolate(message: string, args: unknown[]): string {\n if (args.length === 0) return message;\n return `${message} ${args.map((a) => JSON.stringify(a)).join(' ')}`;\n }\n}\n\nexport const logger = new Logger();\n","/**\n * Platform registry - Agent definitions with verified paths for multi-platform skill deployment.\n *\n * Supported platforms (11 total):\n * - SKILL.md format (7 agents): Claude Code, Codex, Antigravity, GitHub Copilot, Windsurf, OpenCode, Moltbot\n * - Different formats (3 agents): Cursor (.mdc), Continue (rules), Trae (rules)\n * - Unverified (1 agent): Qoder\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { homedir } from 'node:os';\n\n/**\n * Supported agent types\n */\nexport type AgentType =\n // SKILL.md format (symlink compatible)\n | 'claude-code'\n | 'codex'\n | 'antigravity'\n | 'github-copilot'\n | 'windsurf'\n | 'opencode'\n | 'moltbot'\n // Different formats (require conversion)\n | 'cursor'\n | 'continue'\n | 'trae'\n // Unverified\n | 'qoder';\n\n/**\n * Skill format types\n */\nexport type SkillFormat = 'skill-md' | 'cursor-mdc' | 'rules-md' | 'unknown';\n\n/**\n * Agent configuration\n */\nexport interface AgentConfig {\n /** Agent identifier */\n name: AgentType;\n /** Human-readable display name */\n displayName: string;\n /** Skill format used by this agent */\n format: SkillFormat;\n /** Project-level skills directory (relative to project root) */\n skillsDir: string | null;\n /** Global skills directory (absolute path) */\n globalSkillsDir: string | null;\n /** Detection function to check if agent is installed */\n detectInstalled: () => Promise<boolean>;\n /** File extension for skills (default: none for directories, or .mdc/.md for files) */\n fileExtension?: string;\n /** Whether skills are stored as files (true) or directories (false, default) */\n skillsAsFiles?: boolean;\n}\n\nconst home = homedir();\n\n/**\n * Check if a path exists (sync for simplicity)\n */\nfunction pathExists(p: string): boolean {\n try {\n return fs.existsSync(p);\n } catch {\n return false;\n }\n}\n\n/**\n * Agent registry with verified paths from official documentation\n */\nexport const agents: Record<AgentType, AgentConfig> = {\n // === SKILL.md Format (Symlink Compatible) ===\n\n 'claude-code': {\n name: 'claude-code',\n displayName: 'Claude Code',\n format: 'skill-md',\n skillsDir: '.claude/skills',\n globalSkillsDir: path.join(home, '.claude', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.claude')),\n },\n\n codex: {\n name: 'codex',\n displayName: 'Codex',\n format: 'skill-md',\n skillsDir: '.codex/skills',\n globalSkillsDir: process.env.CODEX_HOME\n ? path.join(process.env.CODEX_HOME, 'skills')\n : path.join(home, '.codex', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.codex')),\n },\n\n antigravity: {\n name: 'antigravity',\n displayName: 'Antigravity',\n format: 'skill-md',\n skillsDir: '.agent/skills',\n globalSkillsDir: path.join(home, '.gemini', 'antigravity', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.gemini', 'antigravity')),\n },\n\n 'github-copilot': {\n name: 'github-copilot',\n displayName: 'GitHub Copilot',\n format: 'skill-md',\n skillsDir: '.github/skills',\n globalSkillsDir: path.join(home, '.copilot', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.copilot')),\n },\n\n windsurf: {\n name: 'windsurf',\n displayName: 'Windsurf',\n format: 'skill-md',\n skillsDir: '.windsurf/skills',\n globalSkillsDir: path.join(home, '.codeium', 'windsurf', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.codeium', 'windsurf')),\n },\n\n opencode: {\n name: 'opencode',\n displayName: 'OpenCode',\n format: 'skill-md',\n skillsDir: '.opencode/skill',\n globalSkillsDir: path.join(home, '.config', 'opencode', 'skill'),\n detectInstalled: async () => pathExists(path.join(home, '.config', 'opencode')),\n },\n\n moltbot: {\n name: 'moltbot',\n displayName: 'Moltbot',\n format: 'skill-md',\n skillsDir: 'skills', // <workspace>/skills\n globalSkillsDir: path.join(home, '.clawdbot', 'skills'), // Note: .clawdbot not .moltbot\n detectInstalled: async () => pathExists(path.join(home, '.clawdbot')),\n },\n\n // === Different Formats (Require Conversion) ===\n\n cursor: {\n name: 'cursor',\n displayName: 'Cursor',\n format: 'cursor-mdc',\n skillsDir: '.cursor/rules',\n globalSkillsDir: null, // Cursor has no global rules directory\n detectInstalled: async () => pathExists(path.join(home, '.cursor')),\n fileExtension: '.mdc',\n skillsAsFiles: true,\n },\n\n continue: {\n name: 'continue',\n displayName: 'Continue',\n format: 'rules-md',\n skillsDir: '.continue/rules',\n globalSkillsDir: path.join(home, '.continue', 'rules'),\n detectInstalled: async () => pathExists(path.join(home, '.continue')),\n fileExtension: '.md',\n skillsAsFiles: true,\n },\n\n trae: {\n name: 'trae',\n displayName: 'Trae',\n format: 'rules-md',\n skillsDir: '.trae/rules',\n globalSkillsDir: path.join(home, '.trae', 'rules'),\n detectInstalled: async () => pathExists(path.join(home, '.trae')),\n fileExtension: '.md',\n skillsAsFiles: true,\n },\n\n // === Unverified ===\n\n qoder: {\n name: 'qoder',\n displayName: 'Qoder',\n format: 'unknown',\n skillsDir: '.qoder/skills', // Assumed, not verified\n globalSkillsDir: path.join(home, '.qoder', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.qoder')),\n },\n};\n\n/**\n * Get all agents using SKILL.md format (symlink compatible)\n */\nexport function getSkillMdAgents(): AgentConfig[] {\n return Object.values(agents).filter((a) => a.format === 'skill-md');\n}\n\n/**\n * Get all agents requiring format conversion\n */\nexport function getConversionAgents(): AgentConfig[] {\n return Object.values(agents).filter((a) => a.format === 'cursor-mdc' || a.format === 'rules-md');\n}\n\n/**\n * Get agent by name\n */\nexport function getAgent(name: AgentType): AgentConfig | undefined {\n return agents[name];\n}\n\n/**\n * Get all agent names\n */\nexport function getAllAgentNames(): AgentType[] {\n return Object.keys(agents) as AgentType[];\n}\n\n/**\n * Check if agent type is valid\n */\nexport function isValidAgentType(name: string): name is AgentType {\n return name in agents;\n}\n","/**\n * Symlink adapter - handles skill deployment for agents using SKILL.md format.\n *\n * For agents that use the standard SKILL.md format (Claude Code, Codex, Antigravity,\n * GitHub Copilot, Windsurf, OpenCode, Moltbot), we create symlinks from the agent's\n * skills directory to the canonical Refly skills location.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { platform } from 'node:os';\nimport type { AgentConfig } from './registry.js';\nimport type { PlatformAdapter, DeployResult, RemoveResult, DeployedSkillInfo } from './adapter.js';\nimport { logger } from '../utils/logger.js';\nimport { ensureDir } from '../config/paths.js';\n\n/**\n * Create a symlink with platform-specific handling\n * Windows uses junction, Unix uses symlink\n */\nasync function createSymlinkSafe(\n target: string,\n linkPath: string,\n): Promise<{ success: boolean; error?: string }> {\n try {\n // Ensure parent directory exists\n const linkDir = path.dirname(linkPath);\n ensureDir(linkDir);\n\n // Remove existing symlink or directory if present\n if (fs.existsSync(linkPath)) {\n const stat = fs.lstatSync(linkPath);\n if (stat.isSymbolicLink()) {\n fs.unlinkSync(linkPath);\n logger.debug(`Removed existing symlink: ${linkPath}`);\n } else if (stat.isDirectory()) {\n // If it's a real directory (not a symlink), warn and fail\n return {\n success: false,\n error: `Target path is a directory, not a symlink: ${linkPath}`,\n };\n }\n }\n\n // Create symlink\n // Windows uses junction for directory symlinks (doesn't require admin)\n const symlinkType = platform() === 'win32' ? 'junction' : 'dir';\n fs.symlinkSync(target, linkPath, symlinkType);\n logger.debug(`Created symlink: ${linkPath} -> ${target}`);\n\n return { success: true };\n } catch (err) {\n // Handle ENOENT for non-existent path (try creating anyway)\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n try {\n const symlinkType = platform() === 'win32' ? 'junction' : 'dir';\n fs.symlinkSync(target, linkPath, symlinkType);\n logger.debug(`Created symlink: ${linkPath} -> ${target}`);\n return { success: true };\n } catch (innerErr) {\n return {\n success: false,\n error: (innerErr as Error).message,\n };\n }\n }\n\n return {\n success: false,\n error: (err as Error).message,\n };\n }\n}\n\n/**\n * Symlink adapter for SKILL.md format agents\n */\nexport class SymlinkAdapter implements PlatformAdapter {\n async deploy(\n skillName: string,\n sourcePath: string,\n agent: AgentConfig,\n options?: { force?: boolean; projectPath?: string },\n ): Promise<DeployResult> {\n const result: DeployResult = {\n success: false,\n agent: agent.name,\n skillName,\n deployedPath: null,\n sourcePath,\n isSymlink: true,\n };\n\n // Determine target directory (global or project)\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir) {\n result.error = `Agent ${agent.displayName} has no skills directory configured`;\n return result;\n }\n\n // Check if source exists\n if (!fs.existsSync(sourcePath)) {\n result.error = `Source skill directory does not exist: ${sourcePath}`;\n return result;\n }\n\n // Target symlink path\n const linkPath = path.join(targetDir, skillName);\n result.deployedPath = linkPath;\n\n // Check if already exists\n if (fs.existsSync(linkPath) && !options?.force) {\n const stat = fs.lstatSync(linkPath);\n if (stat.isSymbolicLink()) {\n const existingTarget = fs.readlinkSync(linkPath);\n const resolvedTarget = path.resolve(path.dirname(linkPath), existingTarget);\n if (resolvedTarget === sourcePath) {\n // Already correctly linked\n result.success = true;\n return result;\n }\n }\n result.error = `Skill already exists at ${linkPath}. Use --force to overwrite.`;\n return result;\n }\n\n // Create the symlink\n const symlinkResult = await createSymlinkSafe(sourcePath, linkPath);\n if (!symlinkResult.success) {\n result.error = symlinkResult.error;\n return result;\n }\n\n result.success = true;\n logger.info(`Deployed ${skillName} to ${agent.displayName}: ${linkPath} -> ${sourcePath}`);\n return result;\n }\n\n async remove(\n skillName: string,\n agent: AgentConfig,\n options?: { projectPath?: string },\n ): Promise<RemoveResult> {\n const result: RemoveResult = {\n success: false,\n agent: agent.name,\n skillName,\n removedPath: null,\n };\n\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir) {\n result.error = `Agent ${agent.displayName} has no skills directory configured`;\n return result;\n }\n\n const linkPath = path.join(targetDir, skillName);\n result.removedPath = linkPath;\n\n try {\n if (!fs.existsSync(linkPath)) {\n // Not an error - skill just doesn't exist\n result.success = true;\n return result;\n }\n\n const stat = fs.lstatSync(linkPath);\n if (!stat.isSymbolicLink()) {\n result.error = `Path is not a symlink: ${linkPath}`;\n return result;\n }\n\n fs.unlinkSync(linkPath);\n result.success = true;\n logger.info(`Removed ${skillName} from ${agent.displayName}: ${linkPath}`);\n } catch (err) {\n result.error = (err as Error).message;\n }\n\n return result;\n }\n\n async list(agent: AgentConfig, options?: { projectPath?: string }): Promise<DeployedSkillInfo[]> {\n const results: DeployedSkillInfo[] = [];\n\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir || !fs.existsSync(targetDir)) {\n return results;\n }\n\n try {\n const entries = fs.readdirSync(targetDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(targetDir, entry.name);\n\n try {\n const stat = fs.lstatSync(fullPath);\n if (stat.isSymbolicLink()) {\n const target = fs.readlinkSync(fullPath);\n const resolvedTarget = path.resolve(path.dirname(fullPath), target);\n const isValid = fs.existsSync(resolvedTarget);\n\n results.push({\n name: entry.name,\n agent: agent.name,\n path: fullPath,\n isValid,\n target: resolvedTarget,\n isSymlink: true,\n });\n } else if (stat.isDirectory()) {\n // Regular directory (not a symlink)\n const skillMdPath = path.join(fullPath, 'SKILL.md');\n results.push({\n name: entry.name,\n agent: agent.name,\n path: fullPath,\n isValid: fs.existsSync(skillMdPath),\n isSymlink: false,\n });\n }\n } catch {\n // Skip entries that can't be read\n }\n }\n } catch {\n // Return empty results if directory can't be read\n }\n\n return results;\n }\n\n async isDeployed(\n skillName: string,\n agent: AgentConfig,\n options?: { projectPath?: string },\n ): Promise<{ deployed: boolean; valid: boolean; path?: string }> {\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir) {\n return { deployed: false, valid: false };\n }\n\n const linkPath = path.join(targetDir, skillName);\n\n try {\n if (!fs.existsSync(linkPath)) {\n return { deployed: false, valid: false };\n }\n\n const stat = fs.lstatSync(linkPath);\n if (!stat.isSymbolicLink()) {\n // It's a directory, not a symlink\n const skillMdPath = path.join(linkPath, 'SKILL.md');\n return {\n deployed: true,\n valid: fs.existsSync(skillMdPath),\n path: linkPath,\n };\n }\n\n const target = fs.readlinkSync(linkPath);\n const resolvedTarget = path.resolve(path.dirname(linkPath), target);\n const isValid = fs.existsSync(resolvedTarget);\n\n return {\n deployed: true,\n valid: isValid,\n path: linkPath,\n };\n } catch {\n return { deployed: false, valid: false };\n }\n }\n}\n\n/**\n * Singleton instance\n */\nexport const symlinkAdapter = new SymlinkAdapter();\n","/**\n * Format converter - converts SKILL.md to different formats for agents that\n * don't use the standard SKILL.md format.\n *\n * Supported conversions:\n * - Cursor: SKILL.md -> .mdc format (with globs, alwaysApply)\n * - Continue: SKILL.md -> rules .md format\n * - Trae: SKILL.md -> rules .md format\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { AgentConfig } from './registry.js';\nimport type { PlatformAdapter, DeployResult, RemoveResult, DeployedSkillInfo } from './adapter.js';\nimport { logger } from '../utils/logger.js';\nimport { ensureDir } from '../config/paths.js';\n\n/**\n * Parsed skill data for conversion (lenient - doesn't require skillId/workflowId)\n */\ninterface ParsedSkillLenient {\n name: string;\n displayName?: string;\n description: string;\n skillId?: string;\n workflowId?: string;\n installationId?: string;\n triggers?: string[];\n tags?: string[];\n version?: string;\n body: string;\n}\n\n/**\n * Convert SKILL.md to Cursor .mdc format\n *\n * Cursor rules format:\n * ---\n * description: \"...\"\n * globs:\n * alwaysApply: false\n * ---\n * Content...\n */\nfunction convertToMdc(skill: ParsedSkillLenient): string {\n const lines: string[] = [];\n\n lines.push('---');\n lines.push(`description: \"${skill.description.replace(/\"/g, '\\\\\"')}\"`);\n lines.push('globs:'); // Empty globs - apply to all files\n lines.push('alwaysApply: false');\n lines.push('---');\n lines.push('');\n lines.push(`# ${skill.displayName || formatSkillName(skill.name)}`);\n lines.push('');\n lines.push(skill.description);\n lines.push('');\n lines.push(skill.body);\n\n // Only add Refly section if we have skill metadata\n if (skill.skillId || skill.workflowId) {\n lines.push('');\n lines.push('---');\n lines.push('');\n lines.push('## Refly Skill');\n lines.push('');\n if (skill.skillId) {\n lines.push(`- **Skill ID**: ${skill.skillId}`);\n }\n if (skill.workflowId) {\n lines.push(`- **Workflow ID**: ${skill.workflowId}`);\n }\n if (skill.installationId) {\n lines.push(`- **Installation ID**: ${skill.installationId}`);\n }\n const runId = skill.installationId || skill.workflowId || skill.name;\n lines.push(`- **Run**: \\`refly skill run ${runId}\\``);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Convert SKILL.md to Continue/Trae rules format\n *\n * Rules are simple markdown files with skill content\n */\nfunction convertToRules(skill: ParsedSkillLenient): string {\n const lines: string[] = [];\n\n lines.push(`# ${skill.displayName || formatSkillName(skill.name)}`);\n lines.push('');\n lines.push(`> ${skill.description}`);\n lines.push('');\n\n if (skill.triggers && skill.triggers.length > 0) {\n lines.push('## Triggers');\n lines.push('');\n for (const trigger of skill.triggers) {\n lines.push(`- ${trigger}`);\n }\n lines.push('');\n }\n\n lines.push(skill.body);\n\n // Only add Refly section if we have skill metadata\n if (skill.skillId || skill.workflowId) {\n lines.push('');\n lines.push('---');\n lines.push('');\n lines.push('## Refly Skill');\n lines.push('');\n if (skill.skillId) {\n lines.push(`- **Skill ID**: ${skill.skillId}`);\n }\n if (skill.workflowId) {\n lines.push(`- **Workflow ID**: ${skill.workflowId}`);\n }\n if (skill.installationId) {\n lines.push(`- **Installation ID**: ${skill.installationId}`);\n }\n const runId = skill.installationId || skill.workflowId || skill.name;\n lines.push(`- **Run**: \\`refly skill run ${runId}\\``);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format skill name to display name\n * e.g., \"my-skill\" -> \"My Skill\"\n */\nfunction formatSkillName(name: string): string {\n return name\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n}\n\n/**\n * Parse SKILL.md content leniently (doesn't require skillId/workflowId)\n */\nfunction parseSkillMdLenient(content: string): ParsedSkillLenient | null {\n const frontmatterRegex = /^---\\n([\\s\\S]*?)\\n---\\n?([\\s\\S]*)$/;\n const match = content.match(frontmatterRegex);\n\n if (!match) {\n return null;\n }\n\n const [, frontmatterStr, body] = match;\n const meta: Record<string, unknown> = {};\n\n // Parse YAML-like frontmatter\n const lines = frontmatterStr.split('\\n');\n let currentKey: string | null = null;\n let currentArray: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Check for array item (starts with \"- \")\n if (trimmed.startsWith('- ')) {\n if (currentKey) {\n currentArray.push(trimmed.slice(2).trim());\n }\n continue;\n }\n\n // If we were collecting an array, save it\n if (currentKey && currentArray.length > 0) {\n meta[currentKey] = currentArray;\n currentArray = [];\n currentKey = null;\n }\n\n // Parse key: value pairs\n const colonIndex = trimmed.indexOf(':');\n if (colonIndex > 0) {\n const key = trimmed.slice(0, colonIndex).trim();\n const value = trimmed.slice(colonIndex + 1).trim();\n\n if (value === '') {\n // This is an array key\n currentKey = key;\n currentArray = [];\n } else {\n meta[key] = value;\n }\n }\n }\n\n // Save any remaining array\n if (currentKey && currentArray.length > 0) {\n meta[currentKey] = currentArray;\n }\n\n // Only require name and description\n if (!meta.name || !meta.description) {\n return null;\n }\n\n return {\n name: meta.name as string,\n displayName: meta.displayName as string | undefined,\n description: meta.description as string,\n skillId: meta.skillId as string | undefined,\n workflowId: meta.workflowId as string | undefined,\n installationId: meta.installationId as string | undefined,\n triggers: meta.triggers as string[] | undefined,\n tags: meta.tags as string[] | undefined,\n version: meta.version as string | undefined,\n body: body.trim(),\n };\n}\n\n/**\n * Read and parse SKILL.md from source directory (lenient parsing)\n */\nfunction readSkillMd(sourcePath: string): ParsedSkillLenient | null {\n const skillMdPath = path.join(sourcePath, 'SKILL.md');\n\n if (!fs.existsSync(skillMdPath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(skillMdPath, 'utf-8');\n return parseSkillMdLenient(content);\n } catch {\n return null;\n }\n}\n\n/**\n * Format converter adapter for agents using different formats\n */\nexport class FormatConverterAdapter implements PlatformAdapter {\n async deploy(\n skillName: string,\n sourcePath: string,\n agent: AgentConfig,\n options?: { force?: boolean; projectPath?: string },\n ): Promise<DeployResult> {\n const result: DeployResult = {\n success: false,\n agent: agent.name,\n skillName,\n deployedPath: null,\n sourcePath,\n isSymlink: false, // We generate files, not symlinks\n };\n\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n // If no target directory (e.g., Cursor has no global rules), skip gracefully\n if (!targetDir) {\n result.success = true; // Not an error, just not applicable\n logger.debug(`Skipping ${skillName} for ${agent.displayName}: no global skills directory`);\n return result;\n }\n\n // Read source SKILL.md\n const skill = readSkillMd(sourcePath);\n if (!skill) {\n result.error = `Failed to read SKILL.md from ${sourcePath}`;\n return result;\n }\n\n // Determine file path\n const extension = agent.fileExtension || '.md';\n const filePath = path.join(targetDir, `${skillName}${extension}`);\n result.deployedPath = filePath;\n\n // Check if already exists\n if (fs.existsSync(filePath) && !options?.force) {\n result.error = `Skill already exists at ${filePath}. Use --force to overwrite.`;\n return result;\n }\n\n // Convert to appropriate format\n let content: string;\n switch (agent.format) {\n case 'cursor-mdc':\n content = convertToMdc(skill);\n break;\n case 'rules-md':\n content = convertToRules(skill);\n break;\n default:\n result.error = `Unsupported format: ${agent.format}`;\n return result;\n }\n\n // Write the converted file\n try {\n ensureDir(targetDir);\n fs.writeFileSync(filePath, content, { encoding: 'utf-8', mode: 0o644 });\n result.success = true;\n logger.info(`Deployed ${skillName} to ${agent.displayName}: ${filePath}`);\n } catch (err) {\n result.error = (err as Error).message;\n }\n\n return result;\n }\n\n async remove(\n skillName: string,\n agent: AgentConfig,\n options?: { projectPath?: string },\n ): Promise<RemoveResult> {\n const result: RemoveResult = {\n success: false,\n agent: agent.name,\n skillName,\n removedPath: null,\n };\n\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n // If no target directory (e.g., Cursor has no global rules), skip gracefully\n if (!targetDir) {\n result.success = true; // Not an error, just not applicable\n logger.debug(\n `Skipping ${skillName} removal for ${agent.displayName}: no global skills directory`,\n );\n return result;\n }\n\n const extension = agent.fileExtension || '.md';\n const filePath = path.join(targetDir, `${skillName}${extension}`);\n result.removedPath = filePath;\n\n try {\n if (!fs.existsSync(filePath)) {\n // Not an error - file just doesn't exist\n result.success = true;\n return result;\n }\n\n fs.unlinkSync(filePath);\n result.success = true;\n logger.info(`Removed ${skillName} from ${agent.displayName}: ${filePath}`);\n } catch (err) {\n result.error = (err as Error).message;\n }\n\n return result;\n }\n\n async list(agent: AgentConfig, options?: { projectPath?: string }): Promise<DeployedSkillInfo[]> {\n const results: DeployedSkillInfo[] = [];\n\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir || !fs.existsSync(targetDir)) {\n return results;\n }\n\n const extension = agent.fileExtension || '.md';\n\n try {\n const entries = fs.readdirSync(targetDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(extension)) {\n const fullPath = path.join(targetDir, entry.name);\n const skillName = entry.name.slice(0, -extension.length);\n\n // Check if file contains Refly skill marker\n let isReflySkill = false;\n try {\n const content = fs.readFileSync(fullPath, 'utf-8');\n isReflySkill = content.includes('## Refly Skill') || content.includes('Skill ID:');\n } catch {\n // Ignore read errors\n }\n\n results.push({\n name: skillName,\n agent: agent.name,\n path: fullPath,\n isValid: isReflySkill,\n isSymlink: false,\n });\n }\n }\n } catch {\n // Return empty results if directory can't be read\n }\n\n return results;\n }\n\n async isDeployed(\n skillName: string,\n agent: AgentConfig,\n options?: { projectPath?: string },\n ): Promise<{ deployed: boolean; valid: boolean; path?: string }> {\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir) {\n return { deployed: false, valid: false };\n }\n\n const extension = agent.fileExtension || '.md';\n const filePath = path.join(targetDir, `${skillName}${extension}`);\n\n if (!fs.existsSync(filePath)) {\n return { deployed: false, valid: false };\n }\n\n // Check if file contains Refly skill marker\n let isValid = false;\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n isValid = content.includes('## Refly Skill') || content.includes('Skill ID:');\n } catch {\n // Treat read errors as invalid\n }\n\n return {\n deployed: true,\n valid: isValid,\n path: filePath,\n };\n }\n}\n\n/**\n * Singleton instance\n */\nexport const formatConverterAdapter = new FormatConverterAdapter();\n\n/**\n * Export conversion functions for testing\n */\nexport { convertToMdc, convertToRules };\n","/**\n * Platform manager - orchestrates skill deployment across all enabled platforms.\n *\n * This module provides high-level functions for:\n * - Detecting installed agents\n * - Deploying skills to all enabled platforms\n * - Removing skills from all platforms\n * - Syncing skills across platforms\n */\n\nimport * as fs from 'node:fs';\nimport type { AgentConfig, AgentType } from './registry.js';\nimport { agents, getSkillMdAgents, getConversionAgents } from './registry.js';\nimport type {\n PlatformAdapter,\n DeployResult,\n MultiPlatformDeployResult,\n MultiPlatformRemoveResult,\n DeployedSkillInfo,\n} from './adapter.js';\nimport { symlinkAdapter } from './symlink-adapter.js';\nimport { formatConverterAdapter } from './format-converter.js';\nimport { getReflyDomainSkillDir, getReflyBaseSkillDir } from '../config/paths.js';\nimport { logger } from '../utils/logger.js';\n\n/**\n * Get the appropriate adapter for an agent\n */\nfunction getAdapter(agent: AgentConfig): PlatformAdapter {\n switch (agent.format) {\n case 'skill-md':\n return symlinkAdapter;\n case 'cursor-mdc':\n case 'rules-md':\n return formatConverterAdapter;\n default:\n // For unknown formats, try symlink adapter\n return symlinkAdapter;\n }\n}\n\n/**\n * Detect all installed agents on the system\n */\nexport async function detectInstalledAgents(): Promise<AgentConfig[]> {\n const installed: AgentConfig[] = [];\n\n for (const agent of Object.values(agents)) {\n try {\n const isInstalled = await agent.detectInstalled();\n if (isInstalled) {\n installed.push(agent);\n }\n } catch (err) {\n logger.debug(`Error detecting ${agent.displayName}: ${(err as Error).message}`);\n }\n }\n\n return installed;\n}\n\n/**\n * Get agents that should receive skill deployments\n * (installed agents, excluding those with unknown format unless forced)\n */\nexport async function getDeployableAgents(options?: { includeUnknown?: boolean }): Promise<\n AgentConfig[]\n> {\n const installed = await detectInstalledAgents();\n\n if (options?.includeUnknown) {\n return installed;\n }\n\n return installed.filter((agent) => agent.format !== 'unknown');\n}\n\n/**\n * Deploy a skill to all enabled platforms\n */\nexport async function deploySkillToAllPlatforms(\n skillName: string,\n options?: {\n force?: boolean;\n projectPath?: string;\n agents?: AgentType[];\n },\n): Promise<MultiPlatformDeployResult> {\n // Determine source path\n const sourcePath =\n skillName === 'refly' ? getReflyBaseSkillDir() : getReflyDomainSkillDir(skillName);\n\n const result: MultiPlatformDeployResult = {\n skillName,\n sourcePath,\n results: new Map(),\n successCount: 0,\n failureCount: 0,\n };\n\n // Check source exists\n if (!fs.existsSync(sourcePath)) {\n logger.error(`Source skill directory does not exist: ${sourcePath}`);\n return result;\n }\n\n // Get target agents\n let targetAgents: AgentConfig[];\n if (options?.agents && options.agents.length > 0) {\n targetAgents = options.agents.map((name) => agents[name]).filter(Boolean);\n } else {\n targetAgents = await getDeployableAgents();\n }\n\n // Deploy to each agent\n for (const agent of targetAgents) {\n const adapter = getAdapter(agent);\n try {\n const deployResult = await adapter.deploy(skillName, sourcePath, agent, {\n force: options?.force,\n projectPath: options?.projectPath,\n });\n result.results.set(agent.name, deployResult);\n if (deployResult.success) {\n result.successCount++;\n } else {\n result.failureCount++;\n }\n } catch (err) {\n result.results.set(agent.name, {\n success: false,\n agent: agent.name,\n skillName,\n deployedPath: null,\n sourcePath,\n isSymlink: false,\n error: (err as Error).message,\n });\n result.failureCount++;\n }\n }\n\n return result;\n}\n\n/**\n * Remove a skill from all platforms\n */\nexport async function removeSkillFromAllPlatforms(\n skillName: string,\n options?: {\n projectPath?: string;\n agents?: AgentType[];\n },\n): Promise<MultiPlatformRemoveResult> {\n const result: MultiPlatformRemoveResult = {\n skillName,\n results: new Map(),\n successCount: 0,\n failureCount: 0,\n };\n\n // Get target agents\n let targetAgents: AgentConfig[];\n if (options?.agents && options.agents.length > 0) {\n targetAgents = options.agents.map((name) => agents[name]).filter(Boolean);\n } else {\n targetAgents = await getDeployableAgents();\n }\n\n // Remove from each agent\n for (const agent of targetAgents) {\n const adapter = getAdapter(agent);\n try {\n const removeResult = await adapter.remove(skillName, agent, {\n projectPath: options?.projectPath,\n });\n result.results.set(agent.name, removeResult);\n if (removeResult.success) {\n result.successCount++;\n } else {\n result.failureCount++;\n }\n } catch (err) {\n result.results.set(agent.name, {\n success: false,\n agent: agent.name,\n skillName,\n removedPath: null,\n error: (err as Error).message,\n });\n result.failureCount++;\n }\n }\n\n return result;\n}\n\n/**\n * List all deployed skills across all platforms\n */\nexport async function listAllDeployedSkills(options?: {\n projectPath?: string;\n agents?: AgentType[];\n}): Promise<Map<AgentType, DeployedSkillInfo[]>> {\n const result = new Map<AgentType, DeployedSkillInfo[]>();\n\n // Get target agents\n let targetAgents: AgentConfig[];\n if (options?.agents && options.agents.length > 0) {\n targetAgents = options.agents.map((name) => agents[name]).filter(Boolean);\n } else {\n targetAgents = await getDeployableAgents();\n }\n\n // List from each agent\n for (const agent of targetAgents) {\n const adapter = getAdapter(agent);\n try {\n const skills = await adapter.list(agent, {\n projectPath: options?.projectPath,\n });\n result.set(agent.name, skills);\n } catch (err) {\n logger.debug(`Error listing skills for ${agent.displayName}: ${(err as Error).message}`);\n result.set(agent.name, []);\n }\n }\n\n return result;\n}\n\n/**\n * Sync a skill to all platforms (repair/recreate deployments)\n */\nexport async function syncSkillToAllPlatforms(\n skillName: string,\n options?: {\n projectPath?: string;\n agents?: AgentType[];\n dryRun?: boolean;\n },\n): Promise<{\n needsSync: Map<AgentType, { deployed: boolean; valid: boolean; path?: string }>;\n synced: Map<AgentType, DeployResult>;\n}> {\n const needsSync = new Map<AgentType, { deployed: boolean; valid: boolean; path?: string }>();\n const synced = new Map<AgentType, DeployResult>();\n\n // Determine source path\n const sourcePath =\n skillName === 'refly' ? getReflyBaseSkillDir() : getReflyDomainSkillDir(skillName);\n\n // Get target agents\n let targetAgents: AgentConfig[];\n if (options?.agents && options.agents.length > 0) {\n targetAgents = options.agents.map((name) => agents[name]).filter(Boolean);\n } else {\n targetAgents = await getDeployableAgents();\n }\n\n // Check status for each agent\n for (const agent of targetAgents) {\n const adapter = getAdapter(agent);\n try {\n const status = await adapter.isDeployed(skillName, agent, {\n projectPath: options?.projectPath,\n });\n needsSync.set(agent.name, status);\n\n // If not deployed or invalid, sync it\n if ((!status.deployed || !status.valid) && !options?.dryRun) {\n const deployResult = await adapter.deploy(skillName, sourcePath, agent, {\n force: true, // Force to repair\n projectPath: options?.projectPath,\n });\n synced.set(agent.name, deployResult);\n }\n } catch (err) {\n logger.debug(\n `Error checking/syncing ${skillName} for ${agent.displayName}: ${(err as Error).message}`,\n );\n }\n }\n\n return { needsSync, synced };\n}\n\n/**\n * Get summary of platform support\n */\nexport function getPlatformSummary(): {\n skillMdAgents: AgentConfig[];\n conversionAgents: AgentConfig[];\n totalAgents: number;\n} {\n return {\n skillMdAgents: getSkillMdAgents(),\n conversionAgents: getConversionAgents(),\n totalAgents: Object.keys(agents).length,\n };\n}\n\n/**\n * Export individual adapters for direct use\n */\nexport { symlinkAdapter, formatConverterAdapter };\n","/**\n * Skill symlink management - creates and manages symlinks between\n * ~/.refly/skills/<name> and ~/.claude/skills/<name>\n *\n * Architecture:\n * - Actual skill files stored in: ~/.refly/skills/<name>/SKILL.md\n * - Symlinks created at: ~/.claude/skills/<name> -> ~/.refly/skills/<name>\n * - Base skill: ~/.claude/skills/refly -> ~/.refly/skills/base\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getReflyBaseSkillDir,\n getReflyDomainSkillDir,\n getClaudeSkillsDir,\n getClaudeSkillSymlinkPath,\n ensureReflySkillsDir,\n ensureClaudeSkillsDir,\n ensureDir,\n} from '../config/paths.js';\nimport { logger } from '../utils/logger.js';\n\nexport interface SkillSymlinkResult {\n success: boolean;\n skillName: string;\n reflyPath: string;\n claudePath: string;\n error?: string;\n}\n\n/**\n * Create a symlink for a skill from Claude skills dir to Refly skill dir\n * ~/.claude/skills/<name> -> ~/.refly/skill/<name>\n */\nexport function createSkillSymlink(skillName: string): SkillSymlinkResult {\n const reflyPath =\n skillName === 'refly' ? getReflyBaseSkillDir() : getReflyDomainSkillDir(skillName);\n const claudePath = getClaudeSkillSymlinkPath(skillName);\n\n try {\n // Ensure directories exist\n ensureReflySkillsDir();\n ensureClaudeSkillsDir();\n\n // Check if source directory exists\n if (!fs.existsSync(reflyPath)) {\n return {\n success: false,\n skillName,\n reflyPath,\n claudePath,\n error: `Source skill directory does not exist: ${reflyPath}`,\n };\n }\n\n // Remove existing symlink or directory if present\n if (fs.existsSync(claudePath) || fs.lstatSync(claudePath).isSymbolicLink()) {\n const stat = fs.lstatSync(claudePath);\n if (stat.isSymbolicLink()) {\n fs.unlinkSync(claudePath);\n logger.debug(`Removed existing symlink: ${claudePath}`);\n } else if (stat.isDirectory()) {\n // If it's a real directory (not a symlink), warn and skip\n logger.warn(`Cannot create symlink: ${claudePath} is a directory, not a symlink`);\n return {\n success: false,\n skillName,\n reflyPath,\n claudePath,\n error: `Target path is a directory, not a symlink: ${claudePath}`,\n };\n }\n }\n\n // Create symlink\n fs.symlinkSync(reflyPath, claudePath, 'dir');\n logger.info(`Created symlink: ${claudePath} -> ${reflyPath}`);\n\n return {\n success: true,\n skillName,\n reflyPath,\n claudePath,\n };\n } catch (err) {\n // Handle ENOENT for lstat on non-existent path\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n try {\n fs.symlinkSync(reflyPath, claudePath, 'dir');\n logger.info(`Created symlink: ${claudePath} -> ${reflyPath}`);\n return {\n success: true,\n skillName,\n reflyPath,\n claudePath,\n };\n } catch (innerErr) {\n return {\n success: false,\n skillName,\n reflyPath,\n claudePath,\n error: (innerErr as Error).message,\n };\n }\n }\n\n return {\n success: false,\n skillName,\n reflyPath,\n claudePath,\n error: (err as Error).message,\n };\n }\n}\n\n/**\n * Remove a skill symlink from Claude skills directory\n */\nexport function removeSkillSymlink(skillName: string): boolean {\n const claudePath = getClaudeSkillSymlinkPath(skillName);\n\n try {\n if (!fs.existsSync(claudePath)) {\n logger.debug(`Symlink not found: ${claudePath}`);\n return false;\n }\n\n const stat = fs.lstatSync(claudePath);\n if (!stat.isSymbolicLink()) {\n logger.warn(`Not a symlink: ${claudePath}`);\n return false;\n }\n\n fs.unlinkSync(claudePath);\n logger.info(`Removed symlink: ${claudePath}`);\n return true;\n } catch (err) {\n logger.error(`Failed to remove symlink ${claudePath}:`, err);\n return false;\n }\n}\n\n/**\n * Check if a skill symlink exists and is valid\n */\nexport function isSkillSymlinkValid(skillName: string): {\n exists: boolean;\n isSymlink: boolean;\n isValid: boolean;\n target?: string;\n} {\n const claudePath = getClaudeSkillSymlinkPath(skillName);\n const expectedTarget =\n skillName === 'refly' ? getReflyBaseSkillDir() : getReflyDomainSkillDir(skillName);\n\n try {\n if (!fs.existsSync(claudePath)) {\n return { exists: false, isSymlink: false, isValid: false };\n }\n\n const stat = fs.lstatSync(claudePath);\n if (!stat.isSymbolicLink()) {\n return { exists: true, isSymlink: false, isValid: false };\n }\n\n const target = fs.readlinkSync(claudePath);\n const resolvedTarget = path.resolve(path.dirname(claudePath), target);\n const isValid = resolvedTarget === expectedTarget && fs.existsSync(resolvedTarget);\n\n return {\n exists: true,\n isSymlink: true,\n isValid,\n target: resolvedTarget,\n };\n } catch {\n return { exists: false, isSymlink: false, isValid: false };\n }\n}\n\n/**\n * Create or ensure the base skill directory and symlink\n */\nexport function initializeBaseSkillSymlink(): SkillSymlinkResult {\n const baseDir = getReflyBaseSkillDir();\n\n // Ensure base skill directory exists\n ensureDir(baseDir);\n ensureDir(path.join(baseDir, 'rules'));\n\n // Create symlink\n return createSkillSymlink('refly');\n}\n\n/**\n * Create a Refly skill directory with SKILL.md and symlink\n */\nexport function createReflySkillWithSymlink(\n skillName: string,\n skillMdContent: string,\n options?: { force?: boolean },\n): SkillSymlinkResult {\n const skillDir = getReflyDomainSkillDir(skillName);\n\n try {\n // Ensure skill directory exists\n ensureReflySkillsDir();\n\n if (fs.existsSync(skillDir)) {\n if (options?.force) {\n // Force mode: update existing SKILL.md\n const skillMdPath = path.join(skillDir, 'SKILL.md');\n fs.writeFileSync(skillMdPath, skillMdContent, { encoding: 'utf-8', mode: 0o644 });\n logger.debug(`Updated SKILL.md (force): ${skillMdPath}`);\n // Ensure symlink exists\n return createSkillSymlink(skillName);\n }\n return {\n success: false,\n skillName,\n reflyPath: skillDir,\n claudePath: getClaudeSkillSymlinkPath(skillName),\n error: `Skill directory already exists: ${skillDir}`,\n };\n }\n\n // Create skill directory\n fs.mkdirSync(skillDir, { recursive: true, mode: 0o755 });\n\n // Write SKILL.md\n const skillMdPath = path.join(skillDir, 'SKILL.md');\n fs.writeFileSync(skillMdPath, skillMdContent, { encoding: 'utf-8', mode: 0o644 });\n logger.debug(`Created SKILL.md: ${skillMdPath}`);\n\n // Create symlink\n return createSkillSymlink(skillName);\n } catch (err) {\n return {\n success: false,\n skillName,\n reflyPath: skillDir,\n claudePath: getClaudeSkillSymlinkPath(skillName),\n error: (err as Error).message,\n };\n }\n}\n\n/**\n * Delete a domain skill directory and its symlink\n */\nexport function deleteDomainSkillWithSymlink(skillName: string): {\n symlinkRemoved: boolean;\n directoryRemoved: boolean;\n} {\n // Remove symlink first\n const symlinkRemoved = removeSkillSymlink(skillName);\n\n // Remove skill directory\n const skillDir = getReflyDomainSkillDir(skillName);\n let directoryRemoved = false;\n\n try {\n if (fs.existsSync(skillDir)) {\n fs.rmSync(skillDir, { recursive: true, force: true });\n directoryRemoved = true;\n logger.info(`Removed skill directory: ${skillDir}`);\n }\n } catch (err) {\n logger.error(`Failed to remove skill directory ${skillDir}:`, err);\n }\n\n return { symlinkRemoved, directoryRemoved };\n}\n\n/**\n * List all skill symlinks in Claude skills directory\n */\nexport function listSkillSymlinks(): Array<{\n name: string;\n claudePath: string;\n target: string;\n isValid: boolean;\n}> {\n const claudeSkillsDir = getClaudeSkillsDir();\n const results: Array<{\n name: string;\n claudePath: string;\n target: string;\n isValid: boolean;\n }> = [];\n\n if (!fs.existsSync(claudeSkillsDir)) {\n return results;\n }\n\n try {\n const entries = fs.readdirSync(claudeSkillsDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(claudeSkillsDir, entry.name);\n\n try {\n const stat = fs.lstatSync(fullPath);\n if (stat.isSymbolicLink()) {\n const target = fs.readlinkSync(fullPath);\n const resolvedTarget = path.resolve(path.dirname(fullPath), target);\n const isValid = fs.existsSync(resolvedTarget);\n\n results.push({\n name: entry.name,\n claudePath: fullPath,\n target: resolvedTarget,\n isValid,\n });\n }\n } catch {\n // Skip entries that can't be read\n }\n }\n } catch {\n // Return empty results if directory can't be read\n }\n\n return results;\n}\n\n/**\n * Escape a string for safe use as a YAML value.\n * Quotes the string if it contains special characters.\n */\nfunction escapeYamlValue(value: string): string {\n // If the value contains special YAML characters, wrap in quotes and escape inner quotes\n if (\n value.includes(':') ||\n value.includes('#') ||\n value.includes(\"'\") ||\n value.includes('\"') ||\n value.includes('\\n') ||\n value.startsWith(' ') ||\n value.endsWith(' ') ||\n value.startsWith('[') ||\n value.startsWith('{')\n ) {\n // Use double quotes and escape any double quotes inside\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n }\n return value;\n}\n\n/**\n * Generate SKILL.md content for a Refly skill\n */\nexport function generateReflySkillMd(options: {\n name: string;\n displayName?: string;\n description: string;\n skillId: string;\n workflowId: string;\n installationId?: string;\n triggers?: string[];\n tags?: string[];\n version?: string;\n inputSchema?: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n}): string {\n const {\n name,\n displayName,\n description,\n skillId,\n workflowId,\n installationId,\n triggers = [],\n tags = [],\n version = '1.0.0',\n inputSchema,\n outputSchema,\n } = options;\n\n // Build frontmatter - Claude Code compatible format\n // description is the primary trigger mechanism for Claude Code skill discovery\n const frontmatterLines = ['---', `name: ${escapeYamlValue(name)}`];\n frontmatterLines.push(`description: ${escapeYamlValue(description)}`);\n\n // Standard Claude Code optional fields\n if (tags.length > 0) {\n frontmatterLines.push('tags:');\n frontmatterLines.push(...tags.map((t) => ` - ${escapeYamlValue(t)}`));\n }\n\n frontmatterLines.push(`version: ${escapeYamlValue(version)}`);\n\n // Refly-specific metadata (kept for Refly CLI compatibility)\n frontmatterLines.push(`skillId: ${escapeYamlValue(skillId)}`);\n frontmatterLines.push(`workflowId: ${escapeYamlValue(workflowId)}`);\n\n if (installationId) {\n frontmatterLines.push(`installationId: ${escapeYamlValue(installationId)}`);\n }\n\n if (triggers.length > 0) {\n frontmatterLines.push('triggers:');\n frontmatterLines.push(...triggers.map((t) => ` - ${escapeYamlValue(t)}`));\n }\n\n frontmatterLines.push('---');\n\n // Build content\n const title =\n displayName ||\n name\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n\n // Format input example\n const inputExample = inputSchema\n ? JSON.stringify(inputSchema, null, 2)\n : `{\n \"query\": \"your input here\"\n}`;\n\n const runCommand = installationId\n ? `refly skill run ${installationId} --input '${inputSchema ? JSON.stringify(inputSchema) : '{}'}'`\n : `refly workflow run ${workflowId} --input '${inputSchema ? JSON.stringify(inputSchema) : '{}'}'`;\n\n // Format output section\n const outputSection = outputSchema\n ? `The skill returns:\n\n\\`\\`\\`json\n${JSON.stringify(outputSchema, null, 2)}\n\\`\\`\\``\n : 'The skill returns the workflow execution result.';\n\n const content = `\n\n# ${title}\n\n${description}\n\n## Input\n\nProvide input as JSON:\n\n\\`\\`\\`json\n${inputExample}\n\\`\\`\\`\n\n## Execution\n\n**Follow this exact 4-step pattern:**\n\n\\`\\`\\`bash\n# Step 1: Run and capture RUN_ID (we-xxx format)\nRESULT=$(${runCommand})\nRUN_ID=$(echo \"$RESULT\" | jq -r '.payload.workflowExecutions[0].id')\n# RUN_ID is we-xxx format, use this for workflow commands below\n\n# Step 2: Wait for completion (use RUN_ID, not installationId)\nrefly workflow status \"$RUN_ID\" --watch --interval 30000\n\n# Step 3: Get files from this run (use RUN_ID)\nFILES=$(refly workflow toolcalls \"$RUN_ID\" --files --latest | jq -r '.payload.files[]')\n\n# Step 4: Download and open each file\necho \"$FILES\" | jq -c '.' | while read -r file; do\n FILE_ID=$(echo \"$file\" | jq -r '.fileId')\n FILE_NAME=$(echo \"$file\" | jq -r '.name')\n if [ -n \"$FILE_ID\" ] && [ \"$FILE_ID\" != \"null\" ]; then\n OUTPUT_PATH=\"$HOME/Desktop/$FILE_NAME\"\n refly file download \"$FILE_ID\" -o \"$OUTPUT_PATH\"\n open \"$OUTPUT_PATH\"\n fi\ndone\n\\`\\`\\`\n\n## Output\n\n${outputSection}\n\n## Rules\n\nFor workflow operations, refer to the base skill:\n- Base skill: \\`~/.claude/skills/refly/SKILL.md\\`\n`;\n\n return frontmatterLines.join('\\n') + content;\n}\n\n/**\n * Metadata parsed from SKILL.md frontmatter\n */\nexport interface ReflySkillMeta {\n name: string;\n displayName?: string;\n description: string;\n skillId: string;\n workflowId: string;\n installationId?: string;\n triggers?: string[];\n tags?: string[];\n version?: string;\n}\n\n/**\n * Parse SKILL.md content and extract metadata and body\n */\nexport function parseReflySkillMd(content: string): {\n meta: ReflySkillMeta;\n body: string;\n raw: string;\n} {\n const frontmatterRegex = /^---\\n([\\s\\S]*?)\\n---\\n?([\\s\\S]*)$/;\n const match = content.match(frontmatterRegex);\n\n if (!match) {\n throw new Error('Invalid SKILL.md format: missing frontmatter');\n }\n\n const [, frontmatterStr, body] = match;\n const meta: Partial<ReflySkillMeta> = {};\n\n // Parse YAML-like frontmatter\n const lines = frontmatterStr.split('\\n');\n let currentKey: string | null = null;\n let currentArray: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Check for array item (starts with \" - \")\n if (trimmed.startsWith('- ')) {\n if (currentKey) {\n currentArray.push(trimmed.slice(2).trim());\n }\n continue;\n }\n\n // If we were collecting an array, save it\n if (currentKey && currentArray.length > 0) {\n (meta as Record<string, unknown>)[currentKey] = currentArray;\n currentArray = [];\n currentKey = null;\n }\n\n // Parse key: value pairs\n const colonIndex = trimmed.indexOf(':');\n if (colonIndex > 0) {\n const key = trimmed.slice(0, colonIndex).trim();\n const value = trimmed.slice(colonIndex + 1).trim();\n\n if (value === '') {\n // This is an array key\n currentKey = key;\n currentArray = [];\n } else {\n (meta as Record<string, unknown>)[key] = value;\n }\n }\n }\n\n // Save any remaining array\n if (currentKey && currentArray.length > 0) {\n (meta as Record<string, unknown>)[currentKey] = currentArray;\n }\n\n // Validate required fields\n if (!meta.name) {\n throw new Error('Invalid SKILL.md: missing required field \"name\"');\n }\n if (!meta.description) {\n throw new Error('Invalid SKILL.md: missing required field \"description\"');\n }\n if (!meta.skillId) {\n throw new Error('Invalid SKILL.md: missing required field \"skillId\"');\n }\n if (!meta.workflowId) {\n throw new Error('Invalid SKILL.md: missing required field \"workflowId\"');\n }\n\n return {\n meta: meta as ReflySkillMeta,\n body: body.trim(),\n raw: content,\n };\n}\n\n// ============================================================================\n// Multi-Platform Support\n// ============================================================================\n\nimport type { AgentType } from '../platform/registry.js';\nimport type { MultiPlatformDeployResult, MultiPlatformRemoveResult } from '../platform/adapter.js';\nimport {\n deploySkillToAllPlatforms,\n removeSkillFromAllPlatforms,\n listAllDeployedSkills,\n} from '../platform/manager.js';\n\n/**\n * Create a skill in Refly directory and deploy to all enabled platforms\n */\nexport async function createMultiPlatformSkill(\n skillName: string,\n skillMdContent: string,\n options?: { force?: boolean; agents?: AgentType[] },\n): Promise<MultiPlatformDeployResult> {\n const skillDir = getReflyDomainSkillDir(skillName);\n\n // Ensure skill directory exists\n ensureReflySkillsDir();\n\n if (fs.existsSync(skillDir)) {\n if (options?.force) {\n // Force mode: update existing SKILL.md\n const skillMdPath = path.join(skillDir, 'SKILL.md');\n fs.writeFileSync(skillMdPath, skillMdContent, { encoding: 'utf-8', mode: 0o644 });\n logger.debug(`Updated SKILL.md (force): ${skillMdPath}`);\n } else {\n // Return error result\n return {\n skillName,\n sourcePath: skillDir,\n results: new Map(),\n successCount: 0,\n failureCount: 1,\n };\n }\n } else {\n // Create skill directory and SKILL.md\n fs.mkdirSync(skillDir, { recursive: true, mode: 0o755 });\n const skillMdPath = path.join(skillDir, 'SKILL.md');\n fs.writeFileSync(skillMdPath, skillMdContent, { encoding: 'utf-8', mode: 0o644 });\n logger.debug(`Created SKILL.md: ${skillMdPath}`);\n }\n\n // Deploy to all platforms\n return deploySkillToAllPlatforms(skillName, {\n force: options?.force,\n agents: options?.agents,\n });\n}\n\n/**\n * Remove a skill from all platforms and delete Refly directory\n */\nexport async function removeMultiPlatformSkill(\n skillName: string,\n options?: { agents?: AgentType[]; keepLocal?: boolean },\n): Promise<{\n platformResults: MultiPlatformRemoveResult;\n directoryRemoved: boolean;\n}> {\n // Remove from all platforms first\n const platformResults = await removeSkillFromAllPlatforms(skillName, {\n agents: options?.agents,\n });\n\n // Remove skill directory unless keepLocal is true\n let directoryRemoved = false;\n if (!options?.keepLocal) {\n const skillDir = getReflyDomainSkillDir(skillName);\n try {\n if (fs.existsSync(skillDir)) {\n fs.rmSync(skillDir, { recursive: true, force: true });\n directoryRemoved = true;\n logger.info(`Removed skill directory: ${skillDir}`);\n }\n } catch (err) {\n logger.error(`Failed to remove skill directory ${skillDir}:`, err);\n }\n }\n\n return { platformResults, directoryRemoved };\n}\n\n/**\n * List skills deployed across all platforms\n */\nexport async function listMultiPlatformSkills(options?: {\n agents?: AgentType[];\n}): Promise<\n Map<AgentType, Array<{ name: string; path: string; isValid: boolean; isSymlink: boolean }>>\n> {\n const allDeployed = await listAllDeployedSkills({ agents: options?.agents });\n\n // Transform to simplified format\n const result = new Map<\n AgentType,\n Array<{ name: string; path: string; isValid: boolean; isSymlink: boolean }>\n >();\n\n for (const [agent, skills] of allDeployed) {\n result.set(\n agent,\n skills.map((s) => ({\n name: s.name,\n path: s.path,\n isValid: s.isValid,\n isSymlink: s.isSymlink,\n })),\n );\n }\n\n return result;\n}\n","/**\n * @refly/cli - Refly CLI for workflow orchestration\n *\n * This package provides:\n * - CLI commands for workflow management\n * - Skill files for Claude Code integration\n */\n\n// Re-export types\nexport type {\n SuccessResponse,\n ErrorResponse,\n ErrorDetail,\n CLIResponse,\n} from './utils/output.js';\n\n// Re-export utilities\nexport { ErrorCodes } from './utils/output.js';\nexport { CLIError, AuthError, ValidationError } from './utils/errors.js';\n\n// Re-export config functions\nexport {\n loadConfig,\n saveConfig,\n getApiEndpoint,\n isAuthenticated,\n} from './config/config.js';\n\n// Re-export API client\nexport { apiRequest, verifyConnection } from './api/client.js';\n\n// Re-export skill installer\nexport { installSkill, isSkillInstalled } from './skill/installer.js';\n","/**\n * Unified output helpers for CLI commands.\n * Supports multiple output formats: json, pretty, compact, plain.\n * All CLI output MUST go through these functions.\n */\n\nimport {\n OutputFormatter,\n OutputFormat,\n resolveFormat,\n initFormatter,\n getFormatter,\n type FormatterOptions,\n type SuccessPayload,\n type SuggestedFix,\n} from './formatter.js';\n\nexport type { OutputFormat, FormatterOptions, SuccessPayload, SuggestedFix };\nexport { OutputFormatter, resolveFormat, initFormatter, getFormatter };\n\nexport interface SuccessResponse<T = unknown> {\n ok: true;\n type: string;\n version: string;\n payload: T;\n}\n\nexport interface ErrorDetail {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n hint?: string;\n suggestedFix?: SuggestedFix;\n /**\n * Indicates if the error can be fixed by adjusting parameters.\n * - true: Fix the parameters (see suggestedFix) and retry the SAME command\n * - false: The approach may not work, consider alternatives\n */\n recoverable?: boolean;\n}\n\nexport interface ErrorResponse {\n ok: false;\n type: 'error';\n version: string;\n error: ErrorDetail;\n}\n\nexport type CLIResponse<T = unknown> = SuccessResponse<T> | ErrorResponse;\n\nconst VERSION = '1.0';\n\n/**\n * Global output configuration\n */\nlet outputConfig: {\n format: OutputFormat;\n noColor: boolean;\n verbose: boolean;\n} = {\n format: 'pretty', // Default to pretty for better human readability\n noColor: false,\n verbose: false,\n};\n\n/**\n * Configure global output settings.\n * Call this early in CLI initialization.\n */\nexport function configureOutput(options: {\n format?: OutputFormat;\n noColor?: boolean;\n verbose?: boolean;\n autoDetect?: boolean;\n}): void {\n outputConfig = {\n format: options.format || resolveFormat(undefined, options.autoDetect ?? true),\n noColor: options.noColor ?? false,\n verbose: options.verbose ?? false,\n };\n\n // Initialize the global formatter\n initFormatter(outputConfig);\n}\n\n/**\n * Get current output format\n */\nexport function getOutputFormat(): OutputFormat {\n return outputConfig.format;\n}\n\n/**\n * Check if using pretty output (non-JSON)\n */\nexport function isPrettyOutput(): boolean {\n return outputConfig.format !== 'json';\n}\n\n/**\n * Output a success response and exit with code 0\n */\nexport function ok<T>(type: string, payload: T): never {\n const formatter = getFormatter();\n formatter.success(type, payload as unknown as SuccessPayload);\n process.exit(0);\n}\n\n/**\n * Output a success response without exiting (for streaming/multiple outputs)\n */\nexport function print<T>(type: string, payload: T): void {\n const formatter = getFormatter();\n formatter.success(type, payload as unknown as SuccessPayload);\n}\n\n/**\n * Determine if an error is recoverable (can be fixed by adjusting parameters)\n */\nfunction isRecoverableError(code: string, hasSuggestedFix: boolean): boolean {\n // Errors that are recoverable (fix parameters and retry)\n const recoverableCodes = [\n 'INVALID_INPUT',\n 'VALIDATION_ERROR',\n 'INVALID_NODE_INPUT',\n 'TIMEOUT', // Can retry\n 'RATE_LIMIT', // Can retry after waiting\n ];\n\n // If there's a suggestedFix, it's likely recoverable\n if (hasSuggestedFix) return true;\n\n return recoverableCodes.includes(code);\n}\n\n/**\n * Output an error response and exit with appropriate code\n */\nexport function fail(\n code: string,\n message: string,\n options?: {\n details?: Record<string, unknown>;\n hint?: string;\n exitCode?: number;\n suggestedFix?: SuggestedFix;\n recoverable?: boolean;\n },\n): never {\n const formatter = getFormatter();\n const recoverable = options?.recoverable ?? isRecoverableError(code, !!options?.suggestedFix);\n\n formatter.error({\n code,\n message,\n details: options?.details,\n hint: options?.hint,\n suggestedFix: options?.suggestedFix,\n recoverable,\n });\n process.exit(options?.exitCode ?? getExitCode(code));\n}\n\n/**\n * Output an error without exiting\n */\nexport function printError(\n code: string,\n message: string,\n options?: {\n details?: Record<string, unknown>;\n hint?: string;\n suggestedFix?: SuggestedFix;\n },\n): void {\n const formatter = getFormatter();\n formatter.error({\n code,\n message,\n details: options?.details,\n hint: options?.hint,\n suggestedFix: options?.suggestedFix,\n });\n}\n\n/**\n * Legacy JSON output (for backward compatibility in scripts)\n */\nexport function okJson<T>(type: string, payload: T): never {\n const response: SuccessResponse<T> = {\n ok: true,\n type,\n version: VERSION,\n payload,\n };\n console.log(JSON.stringify(response, null, 2));\n process.exit(0);\n}\n\n/**\n * Legacy JSON error output (for backward compatibility in scripts)\n */\nexport function failJson(\n code: string,\n message: string,\n options?: {\n details?: Record<string, unknown>;\n hint?: string;\n exitCode?: number;\n suggestedFix?: SuggestedFix;\n },\n): never {\n const response: ErrorResponse = {\n ok: false,\n type: 'error',\n version: VERSION,\n error: {\n code,\n message,\n ...(options?.details && { details: options.details }),\n ...(options?.hint && { hint: options.hint }),\n ...(options?.suggestedFix && { suggestedFix: options.suggestedFix }),\n },\n };\n console.log(JSON.stringify(response, null, 2));\n process.exit(options?.exitCode ?? getExitCode(code));\n}\n\n/**\n * Map error codes to exit codes\n */\nfunction getExitCode(code: string): number {\n if (code.startsWith('AUTH_')) return 2;\n if (code.startsWith('VALIDATION_') || code === 'INVALID_INPUT') return 3;\n if (code.startsWith('NETWORK_') || code === 'TIMEOUT') return 4;\n if (code.endsWith('_NOT_FOUND') || code === 'NOT_FOUND') return 5;\n return 1;\n}\n\n/**\n * Error codes used throughout the CLI\n */\nexport const ErrorCodes = {\n // Authentication\n AUTH_REQUIRED: 'AUTH_REQUIRED',\n AUTH_INVALID: 'AUTH_INVALID',\n AUTH_EXPIRED: 'AUTH_EXPIRED',\n\n // CLI\n CLI_NOT_FOUND: 'CLI_NOT_FOUND',\n CONFIG_ERROR: 'CONFIG_ERROR',\n\n // Builder\n BUILDER_NOT_STARTED: 'BUILDER_NOT_STARTED',\n BUILDER_ALREADY_STARTED: 'BUILDER_ALREADY_STARTED',\n VALIDATION_REQUIRED: 'VALIDATION_REQUIRED',\n VALIDATION_ERROR: 'VALIDATION_ERROR',\n DUPLICATE_NODE_ID: 'DUPLICATE_NODE_ID',\n NODE_NOT_FOUND: 'NODE_NOT_FOUND',\n CYCLE_DETECTED: 'CYCLE_DETECTED',\n INVALID_STATE: 'INVALID_STATE',\n\n // Workflow\n WORKFLOW_NOT_FOUND: 'WORKFLOW_NOT_FOUND',\n WORKFLOW_EXISTS: 'WORKFLOW_EXISTS',\n RUN_NOT_FOUND: 'RUN_NOT_FOUND',\n\n // Node\n INVALID_NODE_TYPE: 'INVALID_NODE_TYPE',\n INVALID_NODE_INPUT: 'INVALID_NODE_INPUT',\n EXECUTION_FAILED: 'EXECUTION_FAILED',\n\n // Network\n NETWORK_ERROR: 'NETWORK_ERROR',\n TIMEOUT: 'TIMEOUT',\n API_ERROR: 'API_ERROR',\n\n // General\n NOT_FOUND: 'NOT_FOUND',\n CONFLICT: 'CONFLICT',\n PERMISSION_DENIED: 'PERMISSION_DENIED',\n INVALID_INPUT: 'INVALID_INPUT',\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n\n // Variables\n MISSING_VARIABLES: 'MISSING_VARIABLES',\n} as const;\n\nexport type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];\n","/**\n * Multi-format output formatter for CLI.\n * Supports: pretty, json, compact, plain\n */\n\nimport { Style, Symbols, AsciiSymbol, UI, shouldUseColor, isTTY, styled } from './ui.js';\n\nexport type OutputFormat = 'pretty' | 'json' | 'compact' | 'plain';\n\nexport interface FormatterOptions {\n format: OutputFormat;\n noColor?: boolean;\n verbose?: boolean;\n}\n\nexport interface SuccessPayload {\n message?: string;\n [key: string]: unknown;\n}\n\nexport interface SuggestedFix {\n field?: string;\n format?: string;\n example?: string;\n}\n\nexport interface ErrorPayload {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n hint?: string;\n suggestedFix?: SuggestedFix;\n /**\n * Indicates if the error can be fixed by adjusting parameters.\n * - true: Fix the parameters (see suggestedFix) and retry the SAME command\n * - false: The approach may not work, consider alternatives\n */\n recoverable?: boolean;\n}\n\nconst VERSION = '1.0';\n\n/**\n * Determine the effective output format\n * Priority: explicit flag > REFLY_FORMAT env > auto-detect (TTY=pretty, pipe=json)\n */\nexport function resolveFormat(explicitFormat?: OutputFormat, autoDetect = true): OutputFormat {\n // 1. Explicit format from CLI flag\n if (explicitFormat) {\n return explicitFormat;\n }\n\n // 2. Environment variable override (always respected)\n const envFormat = process.env.REFLY_FORMAT as OutputFormat | undefined;\n if (envFormat && ['pretty', 'json', 'compact', 'plain'].includes(envFormat)) {\n return envFormat;\n }\n\n // 3. Auto-detect based on TTY\n if (autoDetect) {\n // When piped (not a TTY), use JSON for machine parsing\n // When interactive (TTY), use pretty for human readability\n return isTTY() ? 'pretty' : 'json';\n }\n\n return 'pretty';\n}\n\n/**\n * Output formatter class\n */\nexport class OutputFormatter {\n private options: FormatterOptions;\n private useColor: boolean;\n private useUnicode: boolean;\n\n constructor(options: Partial<FormatterOptions> = {}) {\n this.options = {\n format: options.format || 'pretty',\n noColor: options.noColor ?? false,\n verbose: options.verbose ?? false,\n };\n\n this.useColor = !this.options.noColor && this.options.format !== 'plain' && shouldUseColor();\n\n // Use Unicode symbols for pretty/compact formats, ASCII only for plain\n this.useUnicode = this.options.format !== 'plain';\n }\n\n /**\n * Output a success response\n */\n success(type: string, payload: SuccessPayload): void {\n switch (this.options.format) {\n case 'json':\n this.outputJson({ ok: true, type, version: VERSION, payload });\n break;\n case 'pretty':\n this.outputPretty(type, payload);\n break;\n case 'compact':\n this.outputCompact(type, payload);\n break;\n case 'plain':\n this.outputPlain(type, payload);\n break;\n }\n }\n\n /**\n * Output an error response\n */\n error(error: ErrorPayload): void {\n switch (this.options.format) {\n case 'json':\n this.outputJson({\n ok: false,\n type: 'error',\n version: VERSION,\n error,\n });\n break;\n case 'pretty':\n this.outputErrorPretty(error);\n break;\n case 'compact':\n this.outputErrorCompact(error);\n break;\n case 'plain':\n this.outputErrorPlain(error);\n break;\n }\n }\n\n /**\n * Output progress message (non-blocking, for TTY only)\n */\n progress(message: string): void {\n if (this.options.format === 'json') {\n return; // No progress in JSON mode\n }\n\n if (!isTTY()) {\n console.log(message);\n return;\n }\n\n const icon = this.useColor ? styled(Symbols.RUNNING, Style.TEXT_INFO) : AsciiSymbol.RUNNING;\n process.stdout.write(`\\r${icon} ${message}`);\n }\n\n /**\n * Clear progress line\n */\n clearProgress(): void {\n if (isTTY()) {\n process.stdout.write('\\r\\x1b[K');\n }\n }\n\n // === JSON Format ===\n\n private outputJson(data: unknown): void {\n console.log(JSON.stringify(data, this.sanitizeJsonReplacer, 2));\n }\n\n /**\n * JSON replacer that sanitizes control characters in strings.\n * Control characters (U+0000 to U+001F) can break jq parsing.\n */\n private sanitizeJsonReplacer = (_key: string, value: unknown): unknown => {\n if (typeof value === 'string') {\n // Remove or escape control characters (except \\n, \\r, \\t which are common)\n return value.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/g, '');\n }\n return value;\n };\n\n // === Pretty Format ===\n\n private outputPretty(type: string, payload: SuccessPayload): void {\n // Special handling for workflow status\n if (type === 'workflow.status' || type === 'workflow.progress') {\n this.outputWorkflowStatus(payload);\n return;\n }\n\n // Special handling for CLI status (Phase 1: Charm-style cards)\n if (type === 'status') {\n this.outputStatusPretty(payload);\n return;\n }\n\n // Phase 2: Workflow list with Docker-style table\n if (type === 'workflow.list') {\n this.outputWorkflowListPretty(payload);\n return;\n }\n\n const { message, ...rest } = payload;\n\n // Success icon and message\n if (message) {\n console.log(UI.successMsg(message));\n } else {\n console.log(UI.successMsg(this.humanizeType(type)));\n }\n\n // Check if this is a node-related output (has node data)\n if (rest.node && typeof rest.node === 'object') {\n console.log();\n this.outputNodeInfo(rest.node as Record<string, unknown>);\n } else {\n // Additional fields (using labeled values for better visual)\n const fields = this.extractDisplayFields(rest);\n if (fields.length > 0) {\n console.log();\n for (const [key, value] of fields) {\n console.log(UI.labeledValue(this.humanizeKey(key), this.formatValue(value)));\n }\n }\n }\n\n // Nested objects (like diff, builder) - but skip 'node' as it's handled above\n const nested = this.extractNestedObjects(rest);\n for (const [key, obj] of nested) {\n if (key === 'node') continue; // Already handled\n console.log();\n this.outputNestedObject(key, obj as Record<string, unknown>);\n }\n\n // Workflow stats summary (if available)\n if (rest.nodesCount !== undefined || rest.edgesCount !== undefined) {\n console.log();\n const stats: Array<{\n label: string;\n value: string | number;\n type?: 'success' | 'error' | 'warning' | 'info';\n }> = [];\n if (rest.nodesCount !== undefined)\n stats.push({ label: 'Nodes', value: rest.nodesCount as number });\n if (rest.edgesCount !== undefined)\n stats.push({ label: 'Edges', value: rest.edgesCount as number });\n if (rest.valid !== undefined) {\n stats.push({\n label: 'Valid',\n value: rest.valid ? '✓' : '✗',\n type: rest.valid ? 'success' : 'error',\n });\n }\n console.log(UI.stats(stats));\n }\n\n // Hint/next step\n if (rest.nextStep) {\n console.log();\n console.log(UI.dim(` 💡 ${rest.nextStep}`));\n }\n\n console.log();\n }\n\n /**\n * Output node information in a visual format\n */\n private outputNodeInfo(node: Record<string, unknown>): void {\n const id = (node.id as string) || (node.nodeId as string) || 'unknown';\n const type = (node.type as string) || (node.nodeType as string) || 'unknown';\n const dependsOn = (node.dependsOn as string[]) || (node.dependencies as string[]) || [];\n\n // Node card display\n console.log(UI.nodeCard({ id, type, dependsOn }));\n\n // Additional node properties (config, etc.)\n const skipKeys = [\n 'id',\n 'nodeId',\n 'type',\n 'nodeType',\n 'dependsOn',\n 'dependencies',\n 'config',\n 'data',\n ];\n const extraFields = Object.entries(node).filter(\n ([k, v]) => !skipKeys.includes(k) && v !== null && v !== undefined && typeof v !== 'object',\n );\n\n if (extraFields.length > 0) {\n for (const [key, value] of extraFields) {\n console.log(UI.labeledValue(this.humanizeKey(key), this.formatValue(value)));\n }\n }\n }\n\n private outputNestedObject(label: string, obj: Record<string, unknown>): void {\n const humanLabel = this.humanizeKey(label);\n const fields = Object.entries(obj).filter(\n ([, v]) => v !== null && v !== undefined && typeof v !== 'object',\n );\n\n if (fields.length === 0) return;\n\n // Compact display for small objects\n if (fields.length <= 3) {\n const parts = fields.map(([k, v]) => `${this.humanizeKey(k)}: ${this.formatValue(v)}`);\n console.log(UI.indent(UI.dim(`${humanLabel}: `) + parts.join(' ')));\n } else {\n console.log(UI.indent(UI.dim(`${humanLabel}:`)));\n for (const [k, v] of fields) {\n console.log(UI.keyValue(this.humanizeKey(k), this.formatValue(v), 14));\n }\n }\n }\n\n private outputErrorPretty(error: ErrorPayload): void {\n console.log(UI.errorMsg(error.message));\n\n if (error.code) {\n console.log(UI.keyValue('Code', UI.dim(error.code)));\n }\n\n // Show recoverable status prominently\n if (error.recoverable !== undefined) {\n const recoverableText = error.recoverable\n ? '🔄 Recoverable: Fix the parameter and retry the SAME command'\n : '❌ Not recoverable: Consider a different approach';\n console.log(UI.dim(` ${recoverableText}`));\n }\n\n if (error.details && Object.keys(error.details).length > 0) {\n console.log();\n console.log(UI.indent(UI.dim('Details:')));\n for (const [key, value] of Object.entries(error.details)) {\n const humanKey = this.humanizeKey(key);\n // For objects, show key on its own line then formatted object below\n if (typeof value === 'object' && value !== null) {\n console.log(UI.indent(`${UI.dim(`${humanKey}:`)}`));\n console.log(UI.indent(this.formatObject(value as Record<string, unknown>, 2), 4));\n } else {\n console.log(UI.keyValue(humanKey, this.formatValue(value), 14));\n }\n }\n }\n\n if (error.hint) {\n console.log();\n console.log(UI.dim(` 💡 Hint: ${error.hint}`));\n }\n\n if (error.suggestedFix && Object.keys(error.suggestedFix).length > 0) {\n console.log();\n console.log(UI.dim(' ✅ Suggested fix:'));\n console.log(\n UI.indent(this.formatObject(error.suggestedFix as Record<string, unknown>, 2), 4),\n );\n }\n\n console.log();\n }\n\n // === Workflow List Format (Phase 2: Docker-style table) ===\n\n private outputWorkflowListPretty(payload: SuccessPayload): void {\n const { workflows, total } = payload as { workflows: unknown[]; total: number };\n const workflowList = workflows as Array<Record<string, unknown>>;\n\n if (!workflowList || workflowList.length === 0) {\n console.log(UI.dim(' No workflows found'));\n console.log();\n return;\n }\n\n // Format status for each workflow\n const rows = workflowList.map((w) => ({\n name: String(w.name || '—').slice(0, 40),\n nodes: w.nodeCount ?? 0,\n updated: w.updatedAt ? UI.relativeTime(w.updatedAt as string) : '—',\n }));\n\n console.log(\n UI.table({\n title: 'WORKFLOWS',\n columns: [\n { key: 'name', label: 'Name', width: 45 },\n { key: 'nodes', label: 'Nodes', width: 6, align: 'right' },\n { key: 'updated', label: 'Updated', width: 12 },\n ],\n rows,\n }),\n );\n\n if (total > workflowList.length) {\n console.log();\n console.log(UI.dim(` Showing ${workflowList.length} of ${total} workflows`));\n }\n console.log();\n }\n\n // === CLI Status Format (Phase 1: Charm-style cards) ===\n\n private outputStatusPretty(payload: SuccessPayload): void {\n const { cli_version, auth_status, user, skill, api_endpoint } = payload as Record<\n string,\n unknown\n >;\n\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n\n // Header\n console.log(`${sym.DIAMOND} ${UI.bold('Refly CLI')} v${cli_version || '?'}`);\n console.log();\n\n // Auth status\n const authOk = auth_status === 'valid';\n const userObj = user as Record<string, unknown> | null;\n let authText = '';\n if (authOk && userObj?.email) {\n authText = String(userObj.email);\n } else if (auth_status === 'expired') {\n authText = 'Token expired';\n } else {\n authText = 'Not authenticated';\n }\n\n // Skill status\n const skillObj = skill as Record<string, unknown> | null;\n const skillInstalled = skillObj?.installed === true;\n const skillVersion = skillObj?.version ? `v${skillObj.version}` : '';\n const skillUpToDate = skillObj?.up_to_date === true;\n let skillText = '';\n if (skillInstalled) {\n skillText = skillVersion + (skillUpToDate ? ' (up to date)' : ' (update available)');\n } else {\n skillText = 'Not installed';\n }\n\n // Build combined status card\n const authIcon = authOk\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.FAILURE, Style.TEXT_DANGER);\n const connIcon = authOk\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.PENDING, Style.TEXT_DIM);\n const skillIcon = skillInstalled\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.PENDING, Style.TEXT_DIM);\n\n const displayEndpoint = api_endpoint ? String(api_endpoint) : 'https://refly.ai';\n const lines: Array<{ text: string; indent?: boolean; muted?: boolean }> = [\n { text: `${authIcon} Account ${authOk ? authText : authText}`, muted: !authOk },\n { text: `${connIcon} Link ${displayEndpoint}` },\n { text: `${skillIcon} Version ${skillText}`, muted: !skillInstalled },\n ];\n\n console.log(\n UI.card({\n title: 'Status',\n lines,\n width: 45,\n }),\n );\n console.log();\n }\n\n // === Workflow Status Format ===\n\n private outputWorkflowStatus(payload: SuccessPayload): void {\n const {\n runId,\n status,\n title,\n totalNodes,\n executedNodes,\n failedNodes,\n nodeStatuses,\n createdAt,\n updatedAt,\n watching,\n isInitial,\n completed,\n // For progress updates\n summary,\n changedNodes,\n } = payload as Record<string, unknown>;\n\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n\n // Header with status\n const statusStr = (status as string) || 'unknown';\n const statusIcon = UI.statusIcon(statusStr);\n const statusLabel = this.formatWorkflowStatus(statusStr);\n\n // For progress updates (delta mode), show compact output\n if (changedNodes && !isInitial) {\n const progressStr = UI.progressBar(\n (executedNodes as number) || 0,\n (totalNodes as number) || 1,\n { width: 25 },\n );\n console.log(` ${progressStr} ${statusIcon} ${statusLabel}`);\n\n // Show changed nodes\n const nodes = changedNodes as Array<Record<string, unknown>>;\n if (nodes && nodes.length > 0) {\n for (const node of nodes) {\n const nodeIcon = UI.statusIcon(node.status as string);\n const nodeTitle = (node.title as string) || (node.nodeId as string);\n console.log(` ${nodeIcon} ${nodeTitle}`);\n }\n }\n\n if (summary) {\n console.log(UI.dim(` ${summary}`));\n }\n return;\n }\n\n // Full status output\n console.log(`${statusIcon} ${UI.bold('Workflow')} ${statusLabel}`);\n console.log();\n\n // Progress bar\n const total = (totalNodes as number) || 0;\n const executed = (executedNodes as number) || 0;\n const failed = (failedNodes as number) || 0;\n\n if (total > 0) {\n const progressStr = UI.progressBar(executed, total, { width: 30 });\n console.log(` ${progressStr}`);\n console.log();\n }\n\n // Run info\n console.log(UI.labeledValue('Run ID', (runId as string) || '—'));\n if (title) {\n console.log(UI.labeledValue('Title', title as string));\n }\n\n // Time info\n if (createdAt) {\n const duration = UI.formatDuration(createdAt as string, updatedAt as string);\n console.log(\n UI.labeledValue(\n 'Started',\n UI.formatTime(createdAt as string) + (duration ? ` (${duration})` : ''),\n ),\n );\n }\n\n // Node statuses\n const nodes = nodeStatuses as Array<Record<string, unknown>>;\n if (nodes && nodes.length > 0) {\n console.log();\n console.log(UI.dim(' Nodes:'));\n\n nodes.forEach((node, idx) => {\n const isLast = idx === nodes.length - 1;\n const prefix = isLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n const nodeIcon = UI.statusIcon(node.status as string);\n const nodeTitle = (node.title as string) || (node.nodeId as string);\n const nodeType = (node.nodeType as string) || '';\n const nodeProgress = node.progress as number;\n\n let line = ` ${prefix}${sym.BOX_HORIZONTAL} ${nodeIcon} ${nodeTitle}`;\n if (nodeType) {\n line += ` ${UI.dim(`(${nodeType})`)}`;\n }\n if (nodeProgress !== undefined && nodeProgress < 100 && node.status === 'executing') {\n line += ` ${UI.dim(`${nodeProgress}%`)}`;\n }\n console.log(line);\n\n // Show error message if failed\n if (node.status === 'failed' && node.errorMessage) {\n const errorPrefix = isLast ? ' ' : ` ${sym.BOX_VERTICAL}`;\n // Clean up error message (remove JSON array brackets if present)\n let errorMsg = node.errorMessage as string;\n if (errorMsg.startsWith('[') && errorMsg.endsWith(']')) {\n try {\n const parsed = JSON.parse(errorMsg);\n errorMsg = Array.isArray(parsed) ? parsed.join(', ') : errorMsg;\n } catch {\n // Keep original if not valid JSON\n }\n }\n if (errorMsg && errorMsg !== '[]') {\n console.log(`${errorPrefix} ${UI.error(errorMsg)}`);\n }\n }\n });\n }\n\n // Summary stats\n if (failed > 0) {\n console.log();\n console.log(\n UI.stats([\n { label: 'Completed', value: executed, type: 'success' },\n { label: 'Failed', value: failed, type: 'error' },\n { label: 'Total', value: total },\n ]),\n );\n }\n\n // Watch mode indicator\n if (watching) {\n console.log();\n console.log(UI.dim(` ${sym.RUNNING} Watching for updates...`));\n }\n\n // Completion message\n if (completed) {\n console.log();\n if (statusStr === 'finish') {\n console.log(UI.successMsg('Workflow completed successfully'));\n } else if (statusStr === 'failed') {\n console.log(UI.errorMsg('Workflow failed'));\n }\n }\n\n console.log();\n }\n\n private formatWorkflowStatus(status: string): string {\n const statusMap: Record<string, string> = {\n init: 'Initializing',\n executing: 'Executing',\n finish: 'Completed',\n failed: 'Failed',\n };\n return statusMap[status] || status;\n }\n\n // === Compact Format ===\n\n private outputCompact(type: string, payload: SuccessPayload): void {\n const { message, ...rest } = payload;\n const icon = this.useColor ? styled(Symbols.SUCCESS, Style.TEXT_SUCCESS) : AsciiSymbol.SUCCESS;\n\n const mainMsg = message || this.humanizeType(type);\n const extras = this.extractDisplayFields(rest)\n .slice(0, 3)\n .map(([k, v]) => `${k}=${this.formatValue(v)}`)\n .join(' ');\n\n console.log(`${icon} ${mainMsg}${extras ? ` ${UI.dim(extras)}` : ''}`);\n }\n\n private outputErrorCompact(error: ErrorPayload): void {\n const icon = this.useColor ? styled(Symbols.FAILURE, Style.TEXT_DANGER) : AsciiSymbol.FAILURE;\n\n console.log(`${icon} ${error.message} ${UI.dim(`[${error.code}]`)}`);\n if (error.hint) {\n console.log(UI.dim(` ${error.hint}`));\n }\n if (error.suggestedFix) {\n console.log(UI.dim(` fix: ${this.formatValue(error.suggestedFix)}`));\n }\n }\n\n // === Plain Format ===\n\n private outputPlain(type: string, payload: SuccessPayload): void {\n const { message, ...rest } = payload;\n const mainMsg = message || this.humanizeType(type);\n\n console.log(`[ok] ${mainMsg}`);\n\n const fields = this.extractDisplayFields(rest);\n for (const [key, value] of fields) {\n console.log(` ${this.humanizeKey(key)}: ${this.formatValue(value)}`);\n }\n }\n\n private outputErrorPlain(error: ErrorPayload): void {\n console.log(`[err] ${error.message}`);\n console.log(` code: ${error.code}`);\n if (error.hint) {\n console.log(` hint: ${error.hint}`);\n }\n if (error.suggestedFix) {\n console.log(` suggestedFix: ${this.formatValue(error.suggestedFix)}`);\n }\n }\n\n // === Helper Methods ===\n\n private humanizeType(type: string): string {\n // builder.add-node -> Add Node\n return type\n .split('.')\n .pop()!\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n }\n\n private humanizeKey(key: string): string {\n // nodeCount -> Node Count, runId -> Run ID\n return key\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (s) => s.toUpperCase())\n .replace(/Id$/, 'ID')\n .trim();\n }\n\n private formatValue(value: unknown, indent = 0): string {\n if (value === null || value === undefined) {\n return UI.dim('—');\n }\n if (typeof value === 'boolean') {\n return this.formatBooleanValue(value);\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return value;\n }\n if (Array.isArray(value)) {\n // For simple arrays, join with comma\n if (value.every((v) => typeof v !== 'object' || v === null)) {\n return value.map((v) => this.formatValue(v)).join(', ');\n }\n // For arrays of objects, format each on new line\n return value.map((v) => this.formatValue(v, indent)).join(', ');\n }\n // For objects, format as key-value pairs\n if (typeof value === 'object') {\n return this.formatObject(value as Record<string, unknown>, indent);\n }\n return JSON.stringify(value);\n }\n\n private formatBooleanValue(value: boolean): string {\n if (value) {\n return this.useColor ? styled(Symbols.SUCCESS, Style.TEXT_SUCCESS) : 'yes';\n }\n return this.useColor ? styled(Symbols.FAILURE, Style.TEXT_DANGER) : 'no';\n }\n\n /**\n * Format an object as readable key-value pairs\n */\n private formatObject(obj: Record<string, unknown>, indent = 0): string {\n const entries = Object.entries(obj).filter(([, v]) => v !== null && v !== undefined);\n\n if (entries.length === 0) {\n return UI.dim('{}');\n }\n\n // For compact display (3 or fewer simple fields), show inline\n const simpleEntries = entries.filter(([, v]) => typeof v !== 'object');\n if (simpleEntries.length === entries.length && entries.length <= 3) {\n const parts = entries.map(([k, v]) => `${this.humanizeKey(k)}: ${this.formatValue(v)}`);\n return parts.join(', ');\n }\n\n // For larger objects, show as tree structure\n const lines: string[] = [];\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n const padding = ' '.repeat(indent);\n\n entries.forEach(([key, val], idx) => {\n const isLast = idx === entries.length - 1;\n const prefix = isLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n const humanKey = this.humanizeKey(key);\n\n if (typeof val === 'object' && val !== null && !Array.isArray(val)) {\n // Nested object - show header then recurse\n lines.push(`${padding}${prefix}${sym.BOX_HORIZONTAL} ${UI.dim(humanKey)}:`);\n const nestedStr = this.formatObject(val as Record<string, unknown>, indent + 3);\n lines.push(nestedStr);\n } else {\n lines.push(\n `${padding}${prefix}${sym.BOX_HORIZONTAL} ${UI.dim(humanKey)}: ${this.formatValue(val)}`,\n );\n }\n });\n\n return lines.join('\\n');\n }\n\n private extractDisplayFields(obj: Record<string, unknown>): Array<[string, unknown]> {\n return Object.entries(obj).filter(\n ([key, value]) =>\n value !== null && value !== undefined && typeof value !== 'object' && key !== 'nextStep',\n );\n }\n\n private extractNestedObjects(obj: Record<string, unknown>): Array<[string, unknown]> {\n return Object.entries(obj).filter(\n ([key, value]) =>\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n key !== 'node' && // Skip raw node data in pretty mode\n key !== 'diff',\n );\n }\n}\n\n/**\n * Global formatter instance\n */\nlet globalFormatter: OutputFormatter | null = null;\n\n/**\n * Initialize the global formatter\n */\nexport function initFormatter(options: Partial<FormatterOptions> = {}): OutputFormatter {\n globalFormatter = new OutputFormatter(options);\n return globalFormatter;\n}\n\n/**\n * Get the global formatter (initializes with defaults if not set)\n */\nexport function getFormatter(): OutputFormatter {\n if (!globalFormatter) {\n globalFormatter = new OutputFormatter({ format: resolveFormat() });\n }\n return globalFormatter;\n}\n\nexport default OutputFormatter;\n","/**\n * UI utilities for CLI output styling.\n * Reference: OpenCode CLI ui.ts\n */\n\n/**\n * ANSI color and style codes\n */\nexport const Style = {\n // Reset\n RESET: '\\x1b[0m',\n\n // Text styles\n BOLD: '\\x1b[1m',\n DIM: '\\x1b[2m',\n ITALIC: '\\x1b[3m',\n UNDERLINE: '\\x1b[4m',\n\n // Text colors\n TEXT_HIGHLIGHT: '\\x1b[96m', // Bright Cyan\n TEXT_HIGHLIGHT_BOLD: '\\x1b[96m\\x1b[1m',\n TEXT_DIM: '\\x1b[90m', // Gray\n TEXT_DIM_BOLD: '\\x1b[90m\\x1b[1m',\n TEXT_NORMAL: '\\x1b[0m',\n TEXT_NORMAL_BOLD: '\\x1b[1m',\n\n // Status colors\n TEXT_SUCCESS: '\\x1b[92m', // Bright Green\n TEXT_SUCCESS_BOLD: '\\x1b[92m\\x1b[1m',\n TEXT_WARNING: '\\x1b[93m', // Bright Yellow\n TEXT_WARNING_BOLD: '\\x1b[93m\\x1b[1m',\n TEXT_DANGER: '\\x1b[91m', // Bright Red\n TEXT_DANGER_BOLD: '\\x1b[91m\\x1b[1m',\n TEXT_INFO: '\\x1b[94m', // Bright Blue\n TEXT_INFO_BOLD: '\\x1b[94m\\x1b[1m',\n\n // Additional colors\n TEXT_MAGENTA: '\\x1b[95m',\n TEXT_MAGENTA_BOLD: '\\x1b[95m\\x1b[1m',\n TEXT_WHITE: '\\x1b[97m',\n TEXT_WHITE_BOLD: '\\x1b[97m\\x1b[1m',\n} as const;\n\n/**\n * Unicode symbols for pretty output\n */\nexport const Symbols = {\n // Status\n SUCCESS: '✓',\n FAILURE: '✗',\n WARNING: '⚠',\n INFO: 'ℹ',\n PENDING: '○',\n RUNNING: '◐',\n ARROW_RIGHT: '→',\n ARROW_DOWN: '↓',\n PLAY: '▶',\n STOP: '■',\n\n // Box drawing\n BOX_TOP_LEFT: '┌',\n BOX_TOP_RIGHT: '┐',\n BOX_BOTTOM_LEFT: '└',\n BOX_BOTTOM_RIGHT: '┘',\n BOX_HORIZONTAL: '─',\n BOX_VERTICAL: '│',\n BOX_VERTICAL_RIGHT: '├',\n BOX_VERTICAL_LEFT: '┤',\n\n // Bullets\n BULLET: '•',\n DIAMOND: '◆',\n} as const;\n\n/**\n * ASCII fallback symbols for plain/no-color mode\n */\nexport const AsciiSymbol = {\n SUCCESS: '[ok]',\n FAILURE: '[err]',\n WARNING: '[warn]',\n INFO: '[info]',\n PENDING: '[ ]',\n RUNNING: '[..]',\n ARROW_RIGHT: '->',\n ARROW_DOWN: 'v',\n PLAY: '>',\n STOP: 'x',\n\n BOX_TOP_LEFT: '+',\n BOX_TOP_RIGHT: '+',\n BOX_BOTTOM_LEFT: '+',\n BOX_BOTTOM_RIGHT: '+',\n BOX_HORIZONTAL: '-',\n BOX_VERTICAL: '|',\n BOX_VERTICAL_RIGHT: '+',\n BOX_VERTICAL_LEFT: '+',\n\n BULLET: '*',\n DIAMOND: '*',\n} as const;\n\n/**\n * Tool display styles mapping\n * Format: [displayLabel, colorStyle]\n */\nexport const TOOL_STYLES: Record<string, [string, string]> = {\n // Workflow node types\n 'knowledge.search': ['Search', Style.TEXT_INFO_BOLD],\n 'llm.generate': ['Generate', Style.TEXT_SUCCESS_BOLD],\n 'notification.email': ['Email', Style.TEXT_WARNING_BOLD],\n 'code.executor': ['Code', Style.TEXT_DANGER_BOLD],\n 'web.search': ['Web', Style.TEXT_HIGHLIGHT_BOLD],\n 'document.read': ['Read', Style.TEXT_HIGHLIGHT_BOLD],\n 'document.write': ['Write', Style.TEXT_SUCCESS_BOLD],\n\n // Builder operations\n 'builder.start': ['Builder', Style.TEXT_INFO_BOLD],\n 'builder.add-node': ['AddNode', Style.TEXT_SUCCESS_BOLD],\n 'builder.remove-node': ['RemoveNode', Style.TEXT_WARNING_BOLD],\n 'builder.connect': ['Connect', Style.TEXT_INFO_BOLD],\n 'builder.validate': ['Validate', Style.TEXT_HIGHLIGHT_BOLD],\n 'builder.commit': ['Commit', Style.TEXT_SUCCESS_BOLD],\n\n // Workflow operations\n 'workflow.create': ['Create', Style.TEXT_SUCCESS_BOLD],\n 'workflow.run': ['Run', Style.TEXT_INFO_BOLD],\n 'workflow.list': ['List', Style.TEXT_DIM_BOLD],\n 'workflow.get': ['Get', Style.TEXT_DIM_BOLD],\n 'workflow.delete': ['Delete', Style.TEXT_DANGER_BOLD],\n};\n\n/**\n * Check if colors should be enabled\n */\nexport function shouldUseColor(): boolean {\n // Check NO_COLOR environment variable (https://no-color.org/)\n if (process.env.NO_COLOR !== undefined) {\n return false;\n }\n\n // Check REFLY_NO_COLOR\n if (process.env.REFLY_NO_COLOR === '1') {\n return false;\n }\n\n // Check FORCE_COLOR\n if (process.env.FORCE_COLOR !== undefined) {\n return true;\n }\n\n // Check if stdout is a TTY\n return process.stdout.isTTY === true;\n}\n\n/**\n * Check if output is going to a TTY\n */\nexport function isTTY(): boolean {\n return process.stdout.isTTY === true;\n}\n\n/**\n * Get the appropriate symbol based on color mode\n */\nexport function getSymbol(key: keyof typeof Symbols, useColor: boolean = shouldUseColor()): string {\n return useColor ? Symbols[key] : AsciiSymbol[key];\n}\n\n/**\n * Apply style to text if colors are enabled\n */\nexport function styled(text: string, style: string, useColor: boolean = shouldUseColor()): string {\n if (!useColor) {\n return text;\n }\n return `${style}${text}${Style.RESET}`;\n}\n\n/**\n * Format a stat value with the appropriate style based on type.\n */\nfunction formatStatValue(value: string, type?: 'success' | 'error' | 'warning' | 'info'): string {\n if (!type) {\n return UI.bold(value);\n }\n\n switch (type) {\n case 'success':\n return UI.success(value);\n case 'error':\n return UI.error(value);\n case 'warning':\n return UI.warning(value);\n case 'info':\n return UI.info(value);\n }\n}\n\n/**\n * Helper functions for common styles\n */\nexport const UI = {\n // Styled text helpers\n success: (text: string) => styled(text, Style.TEXT_SUCCESS),\n error: (text: string) => styled(text, Style.TEXT_DANGER),\n warning: (text: string) => styled(text, Style.TEXT_WARNING),\n info: (text: string) => styled(text, Style.TEXT_INFO),\n highlight: (text: string) => styled(text, Style.TEXT_HIGHLIGHT),\n dim: (text: string) => styled(text, Style.TEXT_DIM),\n bold: (text: string) => styled(text, Style.BOLD),\n\n // Success/error icons with text\n successIcon: () => styled(getSymbol('SUCCESS'), Style.TEXT_SUCCESS),\n errorIcon: () => styled(getSymbol('FAILURE'), Style.TEXT_DANGER),\n warningIcon: () => styled(getSymbol('WARNING'), Style.TEXT_WARNING),\n infoIcon: () => styled(getSymbol('INFO'), Style.TEXT_INFO),\n\n // Formatted messages\n successMsg: (msg: string) => `${UI.successIcon()} ${msg}`,\n errorMsg: (msg: string) => `${UI.errorIcon()} ${msg}`,\n warningMsg: (msg: string) => `${UI.warningIcon()} ${msg}`,\n infoMsg: (msg: string) => `${UI.infoIcon()} ${msg}`,\n\n // Box drawing\n box: (title: string, content: string, width = 40) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const titlePart = title ? `${sym.BOX_HORIZONTAL} ${title} ` : '';\n const remainingWidth = Math.max(0, width - titlePart.length - 2);\n\n const lines = [\n ` ${sym.BOX_TOP_LEFT}${titlePart}${sym.BOX_HORIZONTAL.repeat(remainingWidth)}${sym.BOX_TOP_RIGHT}`,\n ...content\n .split('\\n')\n .map((line) => ` ${sym.BOX_VERTICAL} ${line.padEnd(width - 4)}${sym.BOX_VERTICAL}`),\n ` ${sym.BOX_BOTTOM_LEFT}${sym.BOX_HORIZONTAL.repeat(width - 2)}${sym.BOX_BOTTOM_RIGHT}`,\n ];\n\n return lines.join('\\n');\n },\n\n // Indentation\n indent: (text: string, spaces = 2) => {\n const pad = ' '.repeat(spaces);\n return text\n .split('\\n')\n .map((line) => `${pad}${line}`)\n .join('\\n');\n },\n\n // Key-value display\n keyValue: (key: string, value: string, keyWidth = 12) => {\n return ` ${UI.dim(key.padEnd(keyWidth))} ${value}`;\n },\n\n // Labeled value with icon (more visual than keyValue)\n labeledValue: (label: string, value: string, icon?: string) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const displayIcon = icon || sym.BULLET;\n return ` ${displayIcon} ${UI.dim(`${label}:`)} ${value}`;\n },\n\n // Flow diagram for dependencies (e.g., input → search → generate)\n flowDiagram: (nodes: string[], highlight?: string) => {\n const useColor = shouldUseColor();\n const arrow = useColor ? ` ${Symbols.ARROW_RIGHT} ` : ' -> ';\n\n return nodes\n .map((node, idx) => {\n if (highlight && node === highlight) {\n return UI.highlight(UI.bold(node));\n }\n // First node is dimmed (usually input), last highlighted (output)\n if (idx === 0) {\n return UI.dim(node);\n }\n return node;\n })\n .join(arrow);\n },\n\n // Dependency display with visual arrow\n dependency: (from: string, to: string) => {\n const useColor = shouldUseColor();\n const arrow = useColor ? Symbols.ARROW_RIGHT : '->';\n return ` ${UI.dim(from)} ${arrow} ${UI.bold(to)}`;\n },\n\n // Multiple dependencies display\n dependencies: (deps: string[], nodeName: string) => {\n if (deps.length === 0) {\n return ` ${UI.dim('(no dependencies)')}`;\n }\n const useColor = shouldUseColor();\n const arrow = useColor ? Symbols.ARROW_RIGHT : '->';\n const depList = deps.map((d) => UI.dim(d)).join(', ');\n return ` ${depList} ${arrow} ${UI.bold(nodeName)}`;\n },\n\n // Tree structure for hierarchical data\n tree: (items: Array<{ label: string; children?: string[] }>) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const lines: string[] = [];\n\n items.forEach((item, idx) => {\n const isLast = idx === items.length - 1;\n const prefix = isLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n lines.push(` ${prefix}${sym.BOX_HORIZONTAL} ${item.label}`);\n\n if (item.children) {\n const childPrefix = isLast ? ' ' : ` ${sym.BOX_VERTICAL}`;\n item.children.forEach((child, childIdx) => {\n const childIsLast = childIdx === item.children!.length - 1;\n const childBranch = childIsLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n lines.push(`${childPrefix} ${childBranch}${sym.BOX_HORIZONTAL} ${UI.dim(child)}`);\n });\n }\n });\n\n return lines.join('\\n');\n },\n\n // Node card display (compact visual representation)\n nodeCard: (node: { id: string; type: string; dependsOn?: string[] }) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const [label, colorStyle] = TOOL_STYLES[node.type] || [node.type, Style.TEXT_INFO];\n const styledType = useColor ? `${colorStyle}${label}${Style.RESET}` : label;\n\n const lines: string[] = [];\n lines.push(` ${sym.DIAMOND} ${UI.bold(node.id)} ${UI.dim('(')}${styledType}${UI.dim(')')}`);\n\n if (node.dependsOn && node.dependsOn.length > 0) {\n const arrow = useColor ? Symbols.ARROW_RIGHT : '->';\n const deps = node.dependsOn.join(', ');\n lines.push(` ${UI.dim(deps)} ${arrow} ${node.id}`);\n }\n\n return lines.join('\\n');\n },\n\n // Status badge\n badge: (text: string, type: 'success' | 'error' | 'warning' | 'info' | 'dim' = 'info') => {\n const useColor = shouldUseColor();\n if (!useColor) {\n return `[${text}]`;\n }\n\n const styles: Record<string, string> = {\n success: Style.TEXT_SUCCESS,\n error: Style.TEXT_DANGER,\n warning: Style.TEXT_WARNING,\n info: Style.TEXT_INFO,\n dim: Style.TEXT_DIM,\n };\n\n return `${styles[type]}[${text}]${Style.RESET}`;\n },\n\n // Summary stats line\n stats: (\n items: Array<{\n label: string;\n value: string | number;\n type?: 'success' | 'error' | 'warning' | 'info';\n }>,\n ) => {\n const parts = items.map((item) => {\n const value = String(item.value);\n const styledValue = formatStatValue(value, item.type);\n return `${UI.dim(`${item.label}:`)} ${styledValue}`;\n });\n return ` ${parts.join(' ')}`;\n },\n\n // Progress bar\n progressBar: (\n current: number,\n total: number,\n options?: {\n width?: number;\n showPercent?: boolean;\n showCount?: boolean;\n filledChar?: string;\n emptyChar?: string;\n },\n ) => {\n const useColor = shouldUseColor();\n const width = options?.width ?? 20;\n const showPercent = options?.showPercent ?? true;\n const showCount = options?.showCount ?? true;\n const filledChar = options?.filledChar ?? (useColor ? '█' : '#');\n const emptyChar = options?.emptyChar ?? (useColor ? '░' : '-');\n\n const percent = total > 0 ? Math.round((current / total) * 100) : 0;\n const filled = total > 0 ? Math.round((current / total) * width) : 0;\n const empty = width - filled;\n\n const bar = filledChar.repeat(filled) + emptyChar.repeat(empty);\n const coloredBar = useColor\n ? styled(bar, percent === 100 ? Style.TEXT_SUCCESS : Style.TEXT_INFO)\n : bar;\n\n const parts: string[] = [`[${coloredBar}]`];\n if (showPercent) {\n parts.push(`${percent.toString().padStart(3)}%`);\n }\n if (showCount) {\n parts.push(UI.dim(`${current}/${total}`));\n }\n\n return parts.join(' ');\n },\n\n // Status icon based on status string\n statusIcon: (status: string) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n\n switch (status) {\n case 'finish':\n case 'completed':\n case 'success':\n return styled(sym.SUCCESS, Style.TEXT_SUCCESS);\n case 'failed':\n case 'error':\n return styled(sym.FAILURE, Style.TEXT_DANGER);\n case 'executing':\n case 'running':\n case 'in_progress':\n return styled(sym.RUNNING, Style.TEXT_INFO);\n case 'init':\n case 'pending':\n case 'waiting':\n return styled(sym.PENDING, Style.TEXT_DIM);\n default:\n return styled(sym.INFO, Style.TEXT_DIM);\n }\n },\n\n // Format duration in human readable form\n formatDuration: (startTime?: string, endTime?: string) => {\n if (!startTime) return '';\n const start = new Date(startTime).getTime();\n const end = endTime ? new Date(endTime).getTime() : Date.now();\n const durationMs = end - start;\n\n if (durationMs < 1000) return `${durationMs}ms`;\n if (durationMs < 60000) return `${(durationMs / 1000).toFixed(1)}s`;\n const minutes = Math.floor(durationMs / 60000);\n const seconds = Math.round((durationMs % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n },\n\n // Format timestamp\n formatTime: (timestamp?: string) => {\n if (!timestamp) return UI.dim('—');\n const date = new Date(timestamp);\n return date.toLocaleTimeString('en-US', { hour12: false });\n },\n\n // Tool execution line\n toolLine: (toolType: string, message: string, duration?: number): string => {\n const useColor = shouldUseColor();\n const [label, colorStyle] = TOOL_STYLES[toolType] || [toolType, Style.TEXT_INFO_BOLD];\n const sym = useColor ? Symbols : AsciiSymbol;\n const styledLabel = useColor\n ? `${colorStyle}${label.padEnd(8)}${Style.RESET}`\n : label.padEnd(8);\n const durationStr = duration !== undefined ? UI.dim(` [${duration.toFixed(1)}s]`) : '';\n\n return `${sym.BOX_VERTICAL} ${styledLabel} ${message}${durationStr}`;\n },\n\n // ============================================================\n // Phase 1: Charm-style Card Component\n // ============================================================\n\n /**\n * Charm-style card with box border\n * @param options Card configuration\n * @returns Formatted card string\n */\n card: (options: {\n icon?: string;\n title: string;\n status?: 'success' | 'error' | 'warning' | 'info' | 'pending';\n lines: Array<{ text: string; indent?: boolean; muted?: boolean }>;\n width?: number;\n }): string => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const maxWidth = Math.min(options.width ?? 50, 100);\n const innerWidth = maxWidth - 4; // Account for borders and padding\n\n // Determine status icon\n let statusIcon = options.icon ?? '';\n if (!statusIcon && options.status) {\n const iconMap: Record<string, string> = {\n success: sym.SUCCESS,\n error: sym.FAILURE,\n warning: sym.PENDING,\n info: sym.RUNNING,\n pending: sym.PENDING,\n };\n statusIcon = iconMap[options.status] || '';\n if (useColor && options.status) {\n const styleMap: Record<string, string> = {\n success: Style.TEXT_SUCCESS,\n error: Style.TEXT_DANGER,\n warning: Style.TEXT_WARNING,\n info: Style.TEXT_INFO,\n pending: Style.TEXT_DIM,\n };\n statusIcon = styled(statusIcon, styleMap[options.status]);\n }\n }\n\n // Build title line\n const titleText = statusIcon ? `${statusIcon} ${options.title}` : options.title;\n\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape codes need control characters\n const ansiRegex = /\\x1b\\[[0-9;]*m/g;\n\n // Truncate or wrap text to fit within card\n const truncate = (text: string, maxLen: number): string => {\n // Strip ANSI codes for length calculation\n const stripped = text.replace(ansiRegex, '');\n if (stripped.length <= maxLen) return text;\n // Find where to cut (accounting for ANSI codes)\n let visibleLen = 0;\n let cutIndex = 0;\n for (let i = 0; i < text.length; i++) {\n if (text[i] === '\\x1b') {\n // Skip ANSI sequence\n const end = text.indexOf('m', i);\n if (end !== -1) {\n i = end;\n continue;\n }\n }\n visibleLen++;\n if (visibleLen >= maxLen - 1) {\n cutIndex = i + 1;\n break;\n }\n }\n return `${text.slice(0, cutIndex)}…`;\n };\n\n const padRight = (text: string, width: number): string => {\n const stripped = text.replace(ansiRegex, '');\n const padding = Math.max(0, width - stripped.length);\n return text + ' '.repeat(padding);\n };\n\n const lines: string[] = [];\n\n // Top border\n lines.push(`${sym.BOX_TOP_LEFT}${sym.BOX_HORIZONTAL.repeat(maxWidth - 2)}${sym.BOX_TOP_RIGHT}`);\n\n // Title line\n const titleDisplay = truncate(titleText, innerWidth);\n lines.push(`${sym.BOX_VERTICAL} ${padRight(titleDisplay, innerWidth)} ${sym.BOX_VERTICAL}`);\n\n // Content lines\n for (const line of options.lines) {\n const prefix = line.indent ? ' ' : '';\n let content = prefix + line.text;\n if (line.muted && useColor) {\n content = prefix + UI.dim(line.text);\n }\n const displayContent = truncate(content, innerWidth);\n lines.push(`${sym.BOX_VERTICAL} ${padRight(displayContent, innerWidth)} ${sym.BOX_VERTICAL}`);\n }\n\n // Bottom border\n lines.push(\n `${sym.BOX_BOTTOM_LEFT}${sym.BOX_HORIZONTAL.repeat(maxWidth - 2)}${sym.BOX_BOTTOM_RIGHT}`,\n );\n\n return lines.join('\\n');\n },\n\n // ============================================================\n // Phase 1: Docker-style Table Component\n // ============================================================\n\n /**\n * Docker-style table with header and rows\n * @param options Table configuration\n * @returns Formatted table string\n */\n table: (options: {\n title?: string;\n columns: Array<{\n key: string;\n label: string;\n width?: number;\n align?: 'left' | 'right';\n }>;\n rows: Array<Record<string, unknown>>;\n maxWidth?: number;\n }): string => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const maxTotalWidth = options.maxWidth ?? 100;\n\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape codes need control characters\n const ansiStripRegex = /\\x1b\\[[0-9;]*m/g;\n\n // Calculate column widths\n const columns = options.columns.map((col) => {\n // Find max content width for this column\n let maxContentWidth = col.label.length;\n for (const row of options.rows) {\n const value = String(row[col.key] ?? '');\n // Strip ANSI codes and status icons for width calculation\n const stripped = value.replace(ansiStripRegex, '').replace(/^[✓✗◐○] /, '');\n maxContentWidth = Math.max(maxContentWidth, stripped.length);\n }\n return {\n ...col,\n calculatedWidth: col.width ?? Math.min(maxContentWidth, 40),\n };\n });\n\n // Adjust widths if total exceeds maxWidth\n const totalWidth = columns.reduce((sum, col) => sum + col.calculatedWidth + 2, 0);\n if (totalWidth > maxTotalWidth) {\n const scale = maxTotalWidth / totalWidth;\n for (const col of columns) {\n col.calculatedWidth = Math.max(5, Math.floor(col.calculatedWidth * scale));\n }\n }\n\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape codes need control characters\n const ansiRegex = /\\x1b\\[[0-9;]*m/g;\n\n const truncate = (text: string, maxLen: number): string => {\n const stripped = text.replace(ansiRegex, '');\n if (stripped.length <= maxLen) return text;\n let visibleLen = 0;\n let cutIndex = 0;\n for (let i = 0; i < text.length; i++) {\n if (text[i] === '\\x1b') {\n const end = text.indexOf('m', i);\n if (end !== -1) {\n i = end;\n continue;\n }\n }\n visibleLen++;\n if (visibleLen >= maxLen - 1) {\n cutIndex = i + 1;\n break;\n }\n }\n return `${text.slice(0, cutIndex)}…`;\n };\n\n const pad = (text: string, width: number, align: 'left' | 'right' = 'left'): string => {\n const stripped = text.replace(ansiRegex, '');\n const padding = Math.max(0, width - stripped.length);\n return align === 'right' ? ' '.repeat(padding) + text : text + ' '.repeat(padding);\n };\n\n const lines: string[] = [];\n\n // Title (if provided)\n if (options.title) {\n lines.push(`${sym.DIAMOND} ${useColor ? UI.bold(options.title) : options.title}`);\n }\n\n // Header row\n const headerCells = columns.map((col) => {\n const label = useColor ? col.label.toUpperCase() : col.label.toUpperCase();\n return pad(label, col.calculatedWidth, col.align);\n });\n lines.push(headerCells.join(' '));\n\n // Divider\n const dividerCells = columns.map((col) => '─'.repeat(col.calculatedWidth));\n lines.push(useColor ? UI.dim(dividerCells.join(' ')) : dividerCells.join(' '));\n\n // Data rows\n for (const row of options.rows) {\n const cells = columns.map((col) => {\n let value = String(row[col.key] ?? '—');\n value = truncate(value, col.calculatedWidth);\n return pad(value, col.calculatedWidth, col.align);\n });\n lines.push(cells.join(' '));\n }\n\n return lines.join('\\n');\n },\n\n // ============================================================\n // Phase 2/3 Extension Points (interfaces only)\n // ============================================================\n\n /**\n * Wizard step indicator (Phase 3)\n * Placeholder for future wizard-style login flow\n */\n wizardStep: (current: number, total: number, label: string): string => {\n const useColor = shouldUseColor();\n const stepText = `(${current}/${total})`;\n return useColor ? `${UI.dim(stepText)} ${label}` : `${stepText} ${label}`;\n },\n\n /**\n * Format relative time (e.g., \"2h ago\", \"5m ago\")\n */\n relativeTime: (date: Date | string): string => {\n const now = Date.now();\n const then = typeof date === 'string' ? new Date(date).getTime() : date.getTime();\n const diffMs = now - then;\n\n if (diffMs < 60000) return 'just now';\n if (diffMs < 3600000) return `${Math.floor(diffMs / 60000)}m ago`;\n if (diffMs < 86400000) return `${Math.floor(diffMs / 3600000)}h ago`;\n return `${Math.floor(diffMs / 86400000)}d ago`;\n },\n\n /**\n * Format time remaining (e.g., \"23h left\", \"5m left\")\n */\n timeRemaining: (expiresAt: Date | string | number): string => {\n const now = Date.now();\n const expiry = parseExpiryTimestamp(expiresAt);\n const diffMs = expiry - now;\n\n if (diffMs <= 0) return 'expired';\n if (diffMs < 60000) return `${Math.floor(diffMs / 1000)}s left`;\n if (diffMs < 3600000) return `${Math.floor(diffMs / 60000)}m left`;\n if (diffMs < 86400000) return `${Math.floor(diffMs / 3600000)}h left`;\n return `${Math.floor(diffMs / 86400000)}d left`;\n },\n};\n\n/**\n * Parse expiry timestamp from various formats to milliseconds.\n */\nfunction parseExpiryTimestamp(expiresAt: Date | string | number): number {\n if (typeof expiresAt === 'number') {\n return expiresAt * 1000; // Assume Unix timestamp in seconds\n }\n if (typeof expiresAt === 'string') {\n return new Date(expiresAt).getTime();\n }\n return expiresAt.getTime();\n}\n\nexport default UI;\n","/**\n * Custom error classes for CLI operations\n */\n\nimport { ErrorCode, ErrorCodes, type SuggestedFix } from './output.js';\n\nexport class CLIError extends Error {\n constructor(\n public readonly code: ErrorCode,\n message: string,\n public readonly details?: Record<string, unknown>,\n public readonly hint?: string,\n public readonly suggestedFix?: SuggestedFix,\n ) {\n super(message);\n this.name = 'CLIError';\n }\n}\n\nexport class AuthError extends CLIError {\n constructor(message: string, hint?: string) {\n super(ErrorCodes.AUTH_REQUIRED, message, undefined, hint ?? 'refly login');\n }\n}\n\nexport class ValidationError extends CLIError {\n constructor(message: string, details?: Record<string, unknown>) {\n super(ErrorCodes.VALIDATION_ERROR, message, details, 'Fix validation errors and retry');\n }\n}\n\nexport class NetworkError extends CLIError {\n constructor(message: string) {\n super(ErrorCodes.NETWORK_ERROR, message, undefined, 'Check your internet connection');\n }\n}\n\nexport class NotFoundError extends CLIError {\n constructor(resource: string, id: string) {\n super(\n ErrorCodes.NOT_FOUND,\n `${resource} not found: ${id}`,\n { resource, id },\n `Verify the ${resource.toLowerCase()} ID`,\n );\n }\n}\n","/**\n * Configuration management with atomic writes and secure permissions.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport * as crypto from 'node:crypto';\nimport { z } from 'zod';\nimport { getConfigPath, getReflyDir } from './paths.js';\n\n// Platform agent types for config schema\nconst AgentTypeEnum = z.enum([\n 'claude-code',\n 'codex',\n 'antigravity',\n 'github-copilot',\n 'windsurf',\n 'opencode',\n 'moltbot',\n 'cursor',\n 'continue',\n 'trae',\n 'qoder',\n]);\n\n// Platform config schema\nconst PlatformConfigSchema = z.object({\n enabled: z.boolean().default(true),\n globalPath: z.string().optional(),\n});\n\n// Config schema\nconst ConfigSchema = z.object({\n version: z.number().default(1),\n auth: z\n .object({\n // Authentication method: 'oauth' or 'apikey'\n method: z.enum(['oauth', 'apikey']).optional(),\n // OAuth tokens (used when method = 'oauth')\n accessToken: z.string().optional(),\n refreshToken: z.string().optional(),\n expiresAt: z.string().optional(),\n provider: z.enum(['google', 'github']).optional(),\n // API Key (used when method = 'apikey')\n apiKey: z.string().optional(),\n apiKeyId: z.string().optional(),\n apiKeyName: z.string().optional(),\n // User info (shared by both methods)\n user: z\n .object({\n uid: z.string(),\n email: z.string(),\n name: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n api: z\n .object({\n endpoint: z.string().default('https://refly.ai'),\n })\n .optional(),\n skill: z\n .object({\n installedVersion: z.string().optional(),\n installedAt: z.string().optional(),\n })\n .optional(),\n // Multi-platform configuration\n platforms: z.record(AgentTypeEnum, PlatformConfigSchema).optional(),\n});\n\nexport type Config = z.infer<typeof ConfigSchema>;\n\n// Default API endpoint and Web URL - injected at build time by tsup\n// Build with different environments:\n// - Production: pnpm build (or REFLY_BUILD_ENV=production pnpm build)\n// - Test/Dev: REFLY_BUILD_ENV=test pnpm build\n// - Staging: REFLY_BUILD_ENV=staging pnpm build\n// - Custom: REFLY_BUILD_ENDPOINT=https://custom.api.com REFLY_BUILD_WEB_URL=https://custom.web.com pnpm build\n// Can be overridden at runtime by REFLY_API_ENDPOINT / REFLY_WEB_URL env vars\nconst DEFAULT_API_ENDPOINT = process.env.REFLY_BUILD_DEFAULT_ENDPOINT || 'https://refly.ai';\nconst DEFAULT_WEB_URL = process.env.REFLY_BUILD_DEFAULT_WEB_URL || 'https://refly.ai';\n\nconst DEFAULT_CONFIG: Config = {\n version: 1,\n api: {\n endpoint: DEFAULT_API_ENDPOINT,\n },\n};\n\n/**\n * Load configuration from file\n */\nexport function loadConfig(): Config {\n const configPath = getConfigPath();\n\n try {\n if (!fs.existsSync(configPath)) {\n return DEFAULT_CONFIG;\n }\n\n const content = fs.readFileSync(configPath, 'utf-8');\n const parsed = JSON.parse(content);\n return ConfigSchema.parse(parsed);\n } catch {\n // Return default config if parsing fails\n return DEFAULT_CONFIG;\n }\n}\n\n/**\n * Save configuration atomically with secure permissions\n */\nexport function saveConfig(config: Config): void {\n const configPath = getConfigPath();\n const tempPath = path.join(getReflyDir(), `.config-${crypto.randomUUID()}.tmp`);\n\n // Validate before saving\n const validated = ConfigSchema.parse(config);\n\n // Write to temp file first\n fs.writeFileSync(tempPath, JSON.stringify(validated, null, 2), {\n mode: 0o600, // Owner read/write only\n });\n\n // Atomic rename\n fs.renameSync(tempPath, configPath);\n\n // Ensure permissions on final file (for existing files)\n if (os.platform() !== 'win32') {\n fs.chmodSync(configPath, 0o600);\n }\n}\n\n/**\n * Get the API endpoint (with override support)\n */\nexport function getApiEndpoint(override?: string): string {\n if (override) return override;\n\n // Check environment variable\n const envEndpoint = process.env.REFLY_API_ENDPOINT;\n if (envEndpoint) return envEndpoint;\n\n // Load from config\n const config = loadConfig();\n return config.api?.endpoint ?? DEFAULT_CONFIG.api!.endpoint;\n}\n\n/**\n * Get the Web URL for browser links (with override support)\n * Used to generate workflow URLs, canvas links, etc.\n */\nexport function getWebUrl(override?: string): string {\n if (override) return override;\n\n // Check environment variable\n const envWebUrl = process.env.REFLY_WEB_URL;\n if (envWebUrl) return envWebUrl;\n\n // Default to build-time injected value\n return DEFAULT_WEB_URL;\n}\n\n/**\n * Check if authenticated (OAuth or API Key)\n */\nexport function isAuthenticated(): boolean {\n const config = loadConfig();\n const method = config.auth?.method;\n\n if (method === 'apikey') {\n return !!config.auth?.apiKey;\n }\n\n // Default to OAuth check\n return !!config.auth?.accessToken;\n}\n\n/**\n * Get authentication method\n */\nexport function getAuthMethod(): 'oauth' | 'apikey' | undefined {\n const config = loadConfig();\n return config.auth?.method;\n}\n\n/**\n * Clear authentication\n */\nexport function clearAuth(): void {\n const config = loadConfig();\n config.auth = undefined;\n saveConfig(config);\n}\n\n/**\n * Update skill installation info\n */\nexport function updateSkillInfo(version: string): void {\n const config = loadConfig();\n config.skill = {\n installedVersion: version,\n installedAt: new Date().toISOString(),\n };\n saveConfig(config);\n}\n\n/**\n * Set OAuth tokens\n */\nexport function setOAuthTokens(tokens: {\n accessToken: string;\n refreshToken: string;\n expiresAt: string;\n provider: 'google' | 'github';\n user: { uid: string; email: string; name?: string };\n}): void {\n const config = loadConfig();\n config.auth = {\n method: 'oauth',\n accessToken: tokens.accessToken,\n refreshToken: tokens.refreshToken,\n expiresAt: tokens.expiresAt,\n provider: tokens.provider,\n user: tokens.user,\n };\n saveConfig(config);\n}\n\n/**\n * Get OAuth access token\n */\nexport function getAccessToken(): string | undefined {\n const config = loadConfig();\n return config.auth?.accessToken;\n}\n\n/**\n * Get OAuth refresh token\n */\nexport function getRefreshToken(): string | undefined {\n const config = loadConfig();\n return config.auth?.refreshToken;\n}\n\n/**\n * Get token expiry time\n */\nexport function getTokenExpiresAt(): string | undefined {\n const config = loadConfig();\n return config.auth?.expiresAt;\n}\n\n/**\n * Get OAuth provider\n */\nexport function getOAuthProvider(): 'google' | 'github' | undefined {\n const config = loadConfig();\n return config.auth?.provider;\n}\n\n/**\n * Get authenticated user info\n */\nexport function getAuthUser(): { uid: string; email: string; name?: string } | undefined {\n const config = loadConfig();\n return config.auth?.user;\n}\n\n/**\n * Set API Key authentication\n */\nexport function setApiKey(apiKeyData: {\n apiKey: string;\n apiKeyId: string;\n apiKeyName: string;\n user: { uid: string; email: string; name?: string };\n}): void {\n const config = loadConfig();\n config.auth = {\n method: 'apikey',\n apiKey: apiKeyData.apiKey,\n apiKeyId: apiKeyData.apiKeyId,\n apiKeyName: apiKeyData.apiKeyName,\n user: apiKeyData.user,\n };\n saveConfig(config);\n}\n\n/**\n * Get API Key\n */\nexport function getApiKey(): string | undefined {\n const config = loadConfig();\n return config.auth?.apiKey;\n}\n\n/**\n * Get API Key info\n */\nexport function getApiKeyInfo(): { keyId: string; name: string } | undefined {\n const config = loadConfig();\n if (config.auth?.apiKeyId && config.auth?.apiKeyName) {\n return {\n keyId: config.auth.apiKeyId,\n name: config.auth.apiKeyName,\n };\n }\n return undefined;\n}\n","import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[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}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((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}))\\])|(\\[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})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?: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])$/;\nconst ipv4CidrRegex = /^(?:(?: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// const ipv6Regex =\n// /^(([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})))$/;\nconst ipv6Regex = /^(([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]))$/;\nconst ipv6CidrRegex = /^(([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// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","/**\n * API client for Refly backend communication.\n * Handles authentication, retries, and error mapping.\n * Supports both OAuth tokens and API Keys for authentication.\n */\n\nimport * as fs from 'node:fs';\nimport { statSync } from 'node:fs';\nimport * as path from 'node:path';\nimport mime from 'mime';\nimport {\n getApiEndpoint,\n getAccessToken,\n getRefreshToken,\n getTokenExpiresAt,\n setOAuthTokens,\n getOAuthProvider,\n getAuthUser,\n getAuthMethod,\n getApiKey,\n} from '../config/config.js';\nimport { ErrorCodes, type ErrorCode } from '../utils/output.js';\nimport { CLIError, AuthError, NetworkError } from '../utils/errors.js';\nimport { logger } from '../utils/logger.js';\n\nexport interface APIResponse<T = unknown> {\n success: boolean;\n data?: T;\n errCode?: string;\n errMsg?: string;\n // Alternative error format used by some API responses\n error?: string;\n message?: string;\n}\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n body?: unknown;\n query?: Record<string, string>;\n timeout?: number;\n requireAuth?: boolean;\n}\n\nconst DEFAULT_TIMEOUT = 30000; // 30 seconds\n\n/**\n * Make an authenticated API request with automatic token refresh (for OAuth)\n * or API Key authentication\n */\nexport async function apiRequest<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = 'GET', body, query, timeout = DEFAULT_TIMEOUT, requireAuth = true } = options;\n\n const endpoint = getApiEndpoint();\n let url = `${endpoint}${path}`;\n\n // Add query parameters\n if (query && Object.keys(query).length > 0) {\n const params = new URLSearchParams(query);\n url = `${url}?${params.toString()}`;\n }\n\n // Build headers\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'User-Agent': 'refly-cli/0.1.0',\n };\n\n // Handle authentication based on method\n if (requireAuth) {\n const authMethod = getAuthMethod();\n\n if (authMethod === 'apikey') {\n // Use API Key authentication\n const apiKey = getApiKey();\n if (!apiKey) {\n throw new AuthError('Not authenticated');\n }\n headers['X-API-Key'] = apiKey;\n } else {\n // Use OAuth authentication (default)\n let accessToken = getAccessToken();\n\n if (!accessToken) {\n throw new AuthError('Not authenticated');\n }\n\n // Check if OAuth token is expired and refresh if needed\n const expiresAt = getTokenExpiresAt();\n if (expiresAt && new Date(expiresAt) < new Date()) {\n logger.debug('Access token expired, refreshing...');\n try {\n accessToken = await refreshAccessToken();\n } catch (error) {\n logger.error('Failed to refresh token:', error);\n throw new AuthError('Session expired, please login again');\n }\n }\n\n headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n logger.debug(`API Request: ${method} ${path}`);\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n // Handle empty responses (e.g., 204 No Content for DELETE)\n const contentLength = response.headers.get('content-length');\n const contentType = response.headers.get('content-type');\n if (\n response.status === 204 ||\n contentLength === '0' ||\n (!contentType?.includes('application/json') &&\n response.status >= 200 &&\n response.status < 300)\n ) {\n if (!response.ok) {\n throw new CLIError(ErrorCodes.API_ERROR, `HTTP ${response.status}: ${response.statusText}`);\n }\n return undefined as T;\n }\n\n // Parse response\n const data = (await response.json()) as APIResponse<T>;\n const hasSuccessFlag = typeof data === 'object' && data !== null && 'success' in data;\n\n // Handle API-level errors\n if (!response.ok) {\n throw mapAPIError(response.status, data);\n }\n\n if (hasSuccessFlag) {\n if (data.success) {\n return data.data as T;\n }\n throw mapAPIError(response.status, data);\n }\n\n // Non-wrapped responses (raw DTOs)\n return data as T;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof CLIError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CLIError(ErrorCodes.TIMEOUT, 'Request timed out', undefined, 'Try again later');\n }\n\n if (error.message.includes('fetch')) {\n throw new NetworkError('Cannot connect to API');\n }\n }\n\n throw new CLIError(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Unknown error',\n );\n }\n}\n\n/**\n * Refresh access token using refresh token (OAuth only)\n */\nasync function refreshAccessToken(): Promise<string> {\n const refreshToken = getRefreshToken();\n if (!refreshToken) {\n throw new AuthError('No refresh token available');\n }\n\n const provider = getOAuthProvider();\n const user = getAuthUser();\n\n if (!provider || !user) {\n throw new AuthError('Invalid OAuth state');\n }\n\n const endpoint = getApiEndpoint();\n const url = `${endpoint}/v1/auth/cli/oauth/refresh`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'refly-cli/0.1.0',\n },\n body: JSON.stringify({ refreshToken }),\n });\n\n if (!response.ok) {\n throw new AuthError('Failed to refresh token');\n }\n\n const data = (await response.json()) as APIResponse<{\n accessToken: string;\n refreshToken: string;\n }>;\n\n if (!data.success || !data.data) {\n throw new AuthError('Failed to refresh token');\n }\n\n // Update stored tokens\n setOAuthTokens({\n accessToken: data.data.accessToken,\n refreshToken: data.data.refreshToken,\n expiresAt: new Date(Date.now() + 3600000).toISOString(), // 1 hour\n provider,\n user,\n });\n\n logger.debug('Access token refreshed successfully');\n return data.data.accessToken;\n}\n\n/**\n * Map API error response to CLIError\n */\nfunction mapAPIError(status: number, response: APIResponse): CLIError {\n // Handle CLI error format: { ok: false, type: 'error', error: { code, message, hint } }\n if (response.error && typeof response.error === 'object') {\n const cliError = response.error as {\n code?: string;\n message?: string;\n hint?: string;\n suggestedFix?: { field?: string; format?: string; example?: string };\n };\n return new CLIError(\n (cliError.code || 'UNKNOWN') as ErrorCode,\n cliError.message || 'Unknown error',\n undefined,\n cliError.hint,\n cliError.suggestedFix,\n );\n }\n\n // Handle legacy format\n const errCode = response.errCode ?? response.error ?? 'UNKNOWN';\n const errMsg = response.errMsg ?? response.message ?? 'Unknown error';\n\n // Map HTTP status codes\n if (status === 401 || status === 403) {\n return new AuthError(errMsg);\n }\n\n if (status === 404) {\n return new CLIError(ErrorCodes.NOT_FOUND, errMsg, undefined, 'Check the resource ID');\n }\n\n if (status === 409) {\n return new CLIError(ErrorCodes.CONFLICT, errMsg, undefined, 'Refresh and try again');\n }\n\n if (status === 422) {\n return new CLIError(ErrorCodes.INVALID_INPUT, errMsg, undefined, 'Check input format');\n }\n\n if (status >= 500) {\n return new CLIError(ErrorCodes.API_ERROR, errMsg, undefined, 'Try again later');\n }\n\n // Map API error codes to ErrorCode type\n return new CLIError(errCode as ErrorCode, errMsg);\n}\n\n/**\n * Stream response interface for file downloads\n */\nexport interface StreamResponse {\n data: Buffer;\n filename: string;\n contentType: string;\n size: number;\n}\n\n/**\n * Make an authenticated streaming API request for file downloads.\n * Reuses the same auth logic as apiRequest() for OAuth/API Key support.\n */\nexport async function apiRequestStream(\n path: string,\n options: { timeout?: number } = {},\n): Promise<StreamResponse> {\n const { timeout = 300000 } = options; // 5 min default for downloads\n\n const endpoint = getApiEndpoint();\n const url = `${endpoint}${path}`;\n\n // Build headers with authentication (same logic as apiRequest)\n const headers: Record<string, string> = {\n 'User-Agent': 'refly-cli/0.1.0',\n };\n\n const authMethod = getAuthMethod();\n\n if (authMethod === 'apikey') {\n // Use API Key authentication\n const apiKey = getApiKey();\n if (!apiKey) {\n throw new AuthError('Not authenticated');\n }\n headers['X-API-Key'] = apiKey;\n } else {\n // Use OAuth authentication (default)\n let accessToken = getAccessToken();\n\n if (!accessToken) {\n throw new AuthError('Not authenticated');\n }\n\n // Check if OAuth token is expired and refresh if needed\n const expiresAt = getTokenExpiresAt();\n if (expiresAt && new Date(expiresAt) < new Date()) {\n logger.debug('Access token expired, refreshing...');\n try {\n accessToken = await refreshAccessToken();\n } catch (error) {\n logger.error('Failed to refresh token:', error);\n throw new AuthError('Session expired, please login again');\n }\n }\n\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n logger.debug(`API Stream Request: GET ${path}`);\n\n const response = await fetch(url, {\n method: 'GET',\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n // Try to parse error response\n try {\n const errorData = (await response.json()) as APIResponse;\n throw mapAPIError(response.status, errorData);\n } catch (e) {\n if (e instanceof CLIError) throw e;\n throw new CLIError(ErrorCodes.API_ERROR, `HTTP ${response.status}: ${response.statusText}`);\n }\n }\n\n // Parse filename from Content-Disposition header\n const contentDisposition = response.headers.get('content-disposition');\n let filename = 'download';\n if (contentDisposition) {\n // Handle both: filename=\"name.ext\" and filename*=UTF-8''name.ext\n const match = contentDisposition.match(/filename\\*?=(?:UTF-8'')?[\"']?([^\"';\\n]+)[\"']?/i);\n if (match) {\n filename = decodeURIComponent(match[1]);\n }\n }\n\n // Get the response as ArrayBuffer and convert to Buffer\n const arrayBuffer = await response.arrayBuffer();\n const data = Buffer.from(arrayBuffer);\n\n return {\n data,\n filename,\n contentType: response.headers.get('content-type') || 'application/octet-stream',\n size: data.length,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof CLIError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CLIError(ErrorCodes.TIMEOUT, 'Download timed out', undefined, 'Try again later');\n }\n\n if (error.message.includes('fetch')) {\n throw new NetworkError('Cannot connect to API');\n }\n }\n\n throw new CLIError(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Unknown error',\n );\n }\n}\n\n/**\n * Verify API connection and authentication\n */\nexport async function verifyConnection(): Promise<{\n connected: boolean;\n authenticated: boolean;\n authMethod?: 'oauth' | 'apikey';\n user?: { uid: string; name?: string; email?: string };\n}> {\n try {\n const authMethod = getAuthMethod();\n\n // Check if we have any credentials\n if (authMethod === 'apikey') {\n const apiKey = getApiKey();\n if (!apiKey) {\n return { connected: true, authenticated: false };\n }\n } else {\n const accessToken = getAccessToken();\n if (!accessToken) {\n return { connected: true, authenticated: false };\n }\n }\n\n const user = await apiRequest<{ uid: string; name?: string; email?: string }>('/v1/user/me', {\n requireAuth: true,\n });\n\n return { connected: true, authenticated: true, authMethod, user };\n } catch (error) {\n if (error instanceof AuthError) {\n return { connected: true, authenticated: false };\n }\n if (error instanceof NetworkError) {\n return { connected: false, authenticated: false };\n }\n // For other errors, assume connection works but auth failed\n return { connected: true, authenticated: false };\n }\n}\n\n/**\n * Result of a drive file upload\n */\nexport interface DriveFileUploadResult {\n fileId: string;\n name: string;\n type: string;\n size: number;\n storageKey: string;\n url?: string;\n}\n\n/**\n * Presigned upload URL response\n */\ninterface PresignedUploadResponse {\n uploadId: string;\n presignedUrl: string;\n expiresIn: number;\n}\n\n/**\n * Get MIME type for a file path\n */\nfunction getMimeType(filePath: string): string {\n return mime.getType(filePath) || 'application/octet-stream';\n}\n\n/**\n * Step 1: Get a presigned URL for file upload\n */\nasync function getPresignedUploadUrl(\n canvasId: string,\n filename: string,\n size: number,\n contentType: string,\n): Promise<PresignedUploadResponse> {\n return apiRequest<PresignedUploadResponse>('/v1/cli/drive/file/upload/presign', {\n method: 'POST',\n body: { canvasId, filename, size, contentType },\n });\n}\n\n/**\n * Step 2: Upload file to presigned URL with retry\n */\nasync function uploadToPresignedUrl(\n presignedUrl: string,\n filePath: string,\n contentType: string,\n retryCount = 1,\n): Promise<void> {\n const fileStats = statSync(filePath);\n const timeout = 300000; // 5 min timeout for upload\n\n for (let attempt = 0; attempt <= retryCount; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n // Read file as buffer for presigned PUT\n const fileBuffer = await fs.promises.readFile(filePath);\n\n const response = await fetch(presignedUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': contentType,\n 'Content-Length': fileStats.size.toString(),\n },\n body: fileBuffer,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => '');\n throw new CLIError(\n ErrorCodes.API_ERROR,\n `Upload to storage failed: HTTP ${response.status} ${response.statusText}${errorText ? ` - ${errorText}` : ''}`,\n );\n }\n\n return; // Success\n } catch (error) {\n clearTimeout(timeoutId);\n\n // Don't retry on auth or validation errors\n if (error instanceof CLIError) {\n throw error;\n }\n\n // Retry on network errors\n if (attempt < retryCount) {\n logger.debug(`Upload attempt ${attempt + 1} failed, retrying...`);\n continue;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CLIError(\n ErrorCodes.TIMEOUT,\n 'Upload timed out',\n undefined,\n 'Try a smaller file or check network',\n );\n }\n\n if (error.message.includes('fetch')) {\n throw new NetworkError('Cannot connect to storage');\n }\n }\n\n throw new CLIError(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Unknown upload error',\n );\n }\n }\n}\n\n/**\n * Step 3: Confirm upload completion\n */\nasync function confirmUpload(uploadId: string): Promise<DriveFileUploadResult> {\n return apiRequest<DriveFileUploadResult>('/v1/cli/drive/file/upload/confirm', {\n method: 'POST',\n body: { uploadId },\n });\n}\n\n/**\n * Upload a file to a canvas using presigned URL flow.\n * 3-step process: presign -> PUT to OSS -> confirm\n * @param filePath - Absolute path to the file to upload\n * @param canvasId - Canvas ID to associate the file with\n * @param options - Optional configuration including progress callback\n * @returns Upload result with file metadata\n */\n/**\n * Workflow variable definition\n */\nexport interface WorkflowVariable {\n variableId?: string;\n name: string;\n variableType?: string;\n value?: unknown[];\n required?: boolean;\n isSingle?: boolean;\n resourceTypes?: string[];\n default?: unknown;\n description?: string;\n}\n\n/**\n * Workflow info returned from GET /v1/cli/workflow/:id\n */\nexport interface WorkflowInfo {\n workflowId: string;\n name: string;\n nodes: unknown[];\n edges: unknown[];\n variables: WorkflowVariable[];\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Fetch workflow details by ID\n * @param workflowId - The workflow ID to fetch\n * @returns Workflow details including variables\n */\nexport async function apiGetWorkflow(workflowId: string): Promise<WorkflowInfo> {\n return apiRequest<WorkflowInfo>(`/v1/cli/workflow/${workflowId}`);\n}\n\nexport async function apiUploadDriveFile(\n filePath: string,\n canvasId: string,\n options?: {\n timeout?: number;\n onProgress?: (stage: 'presign' | 'upload' | 'confirm') => void;\n },\n): Promise<DriveFileUploadResult> {\n const filename = path.basename(filePath);\n const mimeType = getMimeType(filePath);\n const fileStats = statSync(filePath);\n\n logger.debug(`Starting presigned upload: ${filename} (${fileStats.size} bytes)`);\n\n // Step 1: Get presigned URL\n options?.onProgress?.('presign');\n let presignResponse: PresignedUploadResponse;\n try {\n presignResponse = await getPresignedUploadUrl(canvasId, filename, fileStats.size, mimeType);\n logger.debug(`Got presigned URL, uploadId: ${presignResponse.uploadId}`);\n } catch (error) {\n logger.error('Failed to get presigned URL:', error);\n throw error;\n }\n\n // Step 2: Upload to presigned URL\n options?.onProgress?.('upload');\n try {\n await uploadToPresignedUrl(presignResponse.presignedUrl, filePath, mimeType);\n logger.debug('File uploaded to presigned URL');\n } catch (error) {\n logger.error('Failed to upload to presigned URL:', error);\n throw error;\n }\n\n // Step 3: Confirm upload\n options?.onProgress?.('confirm');\n try {\n const result = await confirmUpload(presignResponse.uploadId);\n logger.debug(`Upload confirmed, fileId: ${result.fileId}`);\n return result;\n } catch (error) {\n logger.error('Failed to confirm upload:', error);\n throw error;\n }\n}\n\n/**\n * Get workflow variables with current values\n * @param canvasId - The canvas/workflow ID\n * @returns Array of workflow variables with values\n */\nexport async function apiGetWorkflowVariables(canvasId: string): Promise<WorkflowVariable[]> {\n return apiRequest<WorkflowVariable[]>('/v1/canvas/workflow/variables', {\n query: { canvasId },\n });\n}\n\n/**\n * Update workflow variables (set values)\n * @param canvasId - The canvas/workflow ID\n * @param variables - Variables with values to set\n * @returns Updated variables\n */\nexport async function apiUpdateWorkflowVariables(\n canvasId: string,\n variables: WorkflowVariable[],\n): Promise<WorkflowVariable[]> {\n return apiRequest<WorkflowVariable[]>('/v1/canvas/workflow/variables', {\n method: 'POST',\n body: { canvasId, variables },\n });\n}\n\n/**\n * Action result response from the API\n */\nexport interface ActionResultResponse {\n resultId: string;\n version?: number;\n title?: string;\n type?: string;\n status?: string;\n targetId?: string;\n targetType?: string;\n workflowExecutionId?: string;\n workflowNodeExecutionId?: string;\n input?: Record<string, unknown>;\n actionMeta?: Record<string, unknown>;\n context?: Record<string, unknown>;\n errors?: Array<{ type: string; message: string }>;\n errorType?: string;\n outputUrl?: string;\n storageKey?: string;\n createdAt?: string;\n updatedAt?: string;\n steps?: Array<{\n name?: string;\n content?: string;\n reasoningContent?: string;\n logs?: unknown[];\n artifacts?: unknown[];\n structuredData?: Record<string, unknown>;\n tokenUsage?: unknown[];\n toolCalls?: Array<{\n callId: string;\n toolsetId: string;\n toolName: string;\n input?: Record<string, unknown>;\n output?: Record<string, unknown>;\n error?: string;\n status: 'executing' | 'completed' | 'failed';\n createdAt?: number;\n updatedAt?: number;\n }>;\n }>;\n messages?: Array<{\n messageId: string;\n type: string;\n content?: string;\n reasoningContent?: string;\n toolCallId?: string;\n createdAt?: string;\n updatedAt?: string;\n }>;\n files?: Array<{\n fileId: string;\n name: string;\n type: string;\n size: number;\n }>;\n modelInfo?: {\n provider?: string;\n modelId?: string;\n };\n}\n\n/**\n * Get action result by resultId\n * @param resultId - The action result ID (ar-xxx)\n * @returns Action result details\n */\nexport async function apiGetActionResult(resultId: string): Promise<ActionResultResponse> {\n return apiRequest<ActionResultResponse>('/v1/cli/action/result', {\n query: { resultId },\n });\n}\n","/**\n * Skill installer - copies SKILL.md and rules to Refly skill directory,\n * then creates symlink from Claude Code directory.\n *\n * Target structure:\n * ~/.refly/skills/base/\n * ├── SKILL.md\n * └── rules/\n * ├── workflow.md\n * ├── node.md\n * ├── file.md\n * └── skill.md\n *\n * Symlink:\n * ~/.claude/skills/refly → ~/.refly/skills/base/\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getReflyBaseSkillDir,\n getClaudeCommandsDir,\n getClaudeSkillSymlinkPath,\n ensureDir,\n ensureReflySkillsDir,\n} from '../config/paths.js';\nimport { updateSkillInfo } from '../config/config.js';\nimport { logger } from '../utils/logger.js';\nimport { createSkillSymlink } from './symlink.js';\n\n/**\n * Remove old skill directory if it exists (not a symlink)\n */\nfunction removeOldSkillDirectory(): void {\n const claudeSkillPath = getClaudeSkillSymlinkPath('refly');\n\n if (!fs.existsSync(claudeSkillPath)) {\n return;\n }\n\n try {\n const stat = fs.lstatSync(claudeSkillPath);\n if (stat.isSymbolicLink()) {\n // Already a symlink, remove it so we can recreate\n fs.unlinkSync(claudeSkillPath);\n } else if (stat.isDirectory()) {\n // Old directory structure, remove it\n fs.rmSync(claudeSkillPath, { recursive: true, force: true });\n logger.info('Removed old skill directory');\n }\n } catch (err) {\n logger.warn('Failed to remove old directory:', err);\n }\n}\n\n// Get the skill files from the package\nfunction getPackageSkillDir(): string {\n // When installed globally, skill files are in the package's skill directory\n // During development, they're relative to the source\n const possiblePaths = [\n path.join(__dirname, '..', '..', 'skill'), // Built package: dist/bin/../../skill\n path.join(__dirname, '..', '..', '..', 'skill'), // Development: dist/bin/../../../skill\n path.join(__dirname, '..', 'skill'), // Alternative: dist/../skill\n ];\n\n logger.debug('Looking for skill files, __dirname:', __dirname);\n\n for (const p of possiblePaths) {\n const resolved = path.resolve(p);\n const exists = fs.existsSync(resolved);\n logger.debug(` Checking path: ${resolved} - exists: ${exists}`);\n if (exists) {\n return resolved;\n }\n }\n\n throw new Error(`Skill files not found in package. Searched paths from __dirname=${__dirname}`);\n}\n\nexport interface InstallResult {\n skillInstalled: boolean;\n skillPath: string | null;\n symlinkPath: string | null;\n commandsInstalled: boolean;\n commandsPath: string | null;\n version: string;\n}\n\n/**\n * Install skill files to Refly directory and create symlink to Claude Code\n */\nexport function installSkill(): InstallResult {\n const result: InstallResult = {\n skillInstalled: false,\n skillPath: null,\n symlinkPath: null,\n commandsInstalled: false,\n commandsPath: null,\n version: getSkillVersion(),\n };\n\n const sourceDir = getPackageSkillDir();\n logger.debug('Source skill directory:', sourceDir);\n\n // Install SKILL.md and rules to ~/.refly/skills/base/\n ensureReflySkillsDir();\n const targetDir = getReflyBaseSkillDir();\n logger.debug('Target skill directory:', targetDir);\n\n try {\n ensureDir(targetDir);\n ensureDir(path.join(targetDir, 'rules'));\n logger.debug('Created target directories');\n } catch (err) {\n logger.error('Failed to create target directories:', err);\n throw err;\n }\n\n // Copy SKILL.md\n const skillSource = path.join(sourceDir, 'SKILL.md');\n const skillTarget = path.join(targetDir, 'SKILL.md');\n logger.debug(`Copying SKILL.md: ${skillSource} -> ${skillTarget}`);\n if (fs.existsSync(skillSource)) {\n fs.copyFileSync(skillSource, skillTarget);\n result.skillInstalled = true;\n result.skillPath = targetDir;\n logger.debug('SKILL.md copied successfully');\n } else {\n logger.warn('SKILL.md source not found:', skillSource);\n }\n\n // Copy references to rules folder\n const refsSource = path.join(sourceDir, 'references');\n const rulesTarget = path.join(targetDir, 'rules');\n if (fs.existsSync(refsSource)) {\n const files = fs.readdirSync(refsSource);\n logger.debug(`Copying ${files.length} rule files`);\n for (const file of files) {\n fs.copyFileSync(path.join(refsSource, file), path.join(rulesTarget, file));\n }\n }\n\n // Remove old directory if exists, then create symlink\n removeOldSkillDirectory();\n const symlinkResult = createSkillSymlink('refly');\n if (symlinkResult.success) {\n result.symlinkPath = symlinkResult.claudePath;\n logger.info(`Created symlink: ${symlinkResult.claudePath} -> ${symlinkResult.reflyPath}`);\n } else {\n logger.warn(`Failed to create symlink: ${symlinkResult.error}`);\n }\n\n // Install slash commands\n const commandsDir = getClaudeCommandsDir();\n logger.debug('Commands directory:', commandsDir);\n ensureDir(commandsDir);\n result.commandsInstalled = installSlashCommands(sourceDir, commandsDir);\n if (result.commandsInstalled) {\n result.commandsPath = commandsDir;\n }\n logger.debug('Commands installed:', result.commandsInstalled);\n\n // Update config with installation info\n updateSkillInfo(result.version);\n\n logger.info('Skill installation complete:', {\n skillInstalled: result.skillInstalled,\n symlinkPath: result.symlinkPath,\n commandsInstalled: result.commandsInstalled,\n });\n\n return result;\n}\n\n/**\n * Install slash command files\n */\nfunction installSlashCommands(sourceDir: string, targetDir: string): boolean {\n const commandsSource = path.join(sourceDir, '..', 'commands');\n if (!fs.existsSync(commandsSource)) {\n return false;\n }\n\n try {\n const files = fs.readdirSync(commandsSource);\n for (const file of files) {\n if (file.endsWith('.md')) {\n fs.copyFileSync(path.join(commandsSource, file), path.join(targetDir, file));\n }\n }\n return files.length > 0;\n } catch {\n return false;\n }\n}\n\n/**\n * Get skill version from SKILL.md\n */\nfunction getSkillVersion(): string {\n try {\n const skillPath = path.join(getPackageSkillDir(), 'SKILL.md');\n const content = fs.readFileSync(skillPath, 'utf-8');\n // Extract version from frontmatter if present, otherwise use package version\n const versionMatch = content.match(/version:\\s*(\\d+\\.\\d+\\.\\d+)/);\n if (versionMatch) {\n return versionMatch[1];\n }\n } catch {\n // Fall through to package version\n }\n\n // Use CLI package version\n try {\n const pkgPath = path.join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n return pkg.version;\n } catch {\n return '0.1.0';\n }\n}\n\n/**\n * Check if skill is installed and up to date\n */\nexport function isSkillInstalled(): {\n installed: boolean;\n upToDate: boolean;\n currentVersion?: string;\n symlinkValid?: boolean;\n} {\n const skillPath = path.join(getReflyBaseSkillDir(), 'SKILL.md');\n\n if (!fs.existsSync(skillPath)) {\n return { installed: false, upToDate: false };\n }\n\n const currentVersion = getSkillVersion();\n\n // Check if symlink is valid\n const { isSkillSymlinkValid } = require('./symlink.js');\n const symlinkStatus = isSkillSymlinkValid('refly');\n\n return {\n installed: true,\n upToDate: true,\n currentVersion,\n symlinkValid: symlinkStatus.isValid,\n };\n}\n"],"mappings":"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","names":["fs","path","fs","path","fs","path","import_node_os","isValid","fs","path","isValid","fs","isValid","skillMdPath","fs","path","fs","path","os","util","objectUtil","path","errorUtil","path","errorMap","ctx","result","issues","elements","processed","result","r","ZodFirstPartyTypeKind","fs","path","path","fs","path","isSkillSymlinkValid"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_@swc+core@1.12.14_@swc+helpers@0.5.17__jiti@2.6.1_postcss@8.5.6_tsx@4.20.6_typescript@5.8.3_yaml@2.8.0/node_modules/tsup/assets/cjs_shims.js","../src/config/paths.ts","../src/utils/logger.ts","../src/platform/registry.ts","../src/platform/symlink-adapter.ts","../src/platform/format-converter.ts","../src/platform/manager.ts","../src/skill/symlink.ts","../src/index.ts","../src/utils/output.ts","../src/utils/formatter.ts","../src/utils/ui.ts","../src/utils/errors.ts","../src/config/config.ts","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js","../src/api/client.ts","../src/skill/installer.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","/**\n * Path utilities for CLI configuration and data storage.\n */\n\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\n\n/**\n * Get CLI version from package.json\n */\nexport function getCliVersion(): string {\n try {\n const pkgPath = path.join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n return pkg.version || '0.1.0';\n } catch {\n return '0.1.0';\n }\n}\n\n/**\n * Get the Refly configuration directory (~/.refly)\n */\nexport function getReflyDir(): string {\n const dir = path.join(os.homedir(), '.refly');\n ensureDir(dir);\n return dir;\n}\n\n/**\n * Get the legacy builder data directory (~/.refly/builder)\n * @deprecated Builder functionality has been removed. This is only used for cleanup.\n */\nexport function getLegacyBuilderDir(): string {\n return path.join(getReflyDir(), 'builder');\n}\n\n/**\n * Get the cache directory (~/.refly/cache)\n */\nexport function getCacheDir(): string {\n const dir = path.join(getReflyDir(), 'cache');\n ensureDir(dir);\n return dir;\n}\n\n/**\n * Get the Claude skills directory (~/.claude/skills/refly)\n */\nexport function getClaudeSkillDir(): string {\n return path.join(os.homedir(), '.claude', 'skills', 'refly');\n}\n\n/**\n * Get the Claude commands directory (~/.claude/commands)\n */\nexport function getClaudeCommandsDir(): string {\n return path.join(os.homedir(), '.claude', 'commands');\n}\n\n/**\n * Check if Claude directories exist\n */\nexport function claudeDirectoriesExist(): { skills: boolean; commands: boolean } {\n const skillsDir = path.join(os.homedir(), '.claude', 'skills');\n const commandsDir = getClaudeCommandsDir();\n\n return {\n skills: fs.existsSync(skillsDir),\n commands: fs.existsSync(commandsDir),\n };\n}\n\n/**\n * Ensure a directory exists with proper permissions\n */\nexport function ensureDir(dir: string): void {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n}\n\n/**\n * Get the config file path\n */\nexport function getConfigPath(): string {\n return path.join(getReflyDir(), 'config.json');\n}\n\n/**\n * Get the skills directory (~/.refly/skills)\n * @deprecated Use getReflySkillDir() instead\n */\nexport function getSkillsDir(): string {\n return path.join(getReflyDir(), 'skills');\n}\n\n/**\n * Ensure the skills directory exists\n * @deprecated Use ensureReflySkillDir() instead\n */\nexport async function ensureSkillsDir(): Promise<void> {\n const dir = getSkillsDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n}\n\n// ============================================================================\n// New Symlink-based Skill Architecture\n// ============================================================================\n\n/**\n * Get the Refly skills storage directory (~/.refly/skills)\n * This is where actual skill files are stored.\n */\nexport function getReflySkillsDir(): string {\n return path.join(getReflyDir(), 'skills');\n}\n\n/**\n * Get the base skill directory (~/.refly/skills/base)\n * Contains the main SKILL.md and rules for CLI routing.\n */\nexport function getReflyBaseSkillDir(): string {\n return path.join(getReflySkillsDir(), 'base');\n}\n\n/**\n * Get a domain skill directory (~/.refly/skills/<name>)\n */\nexport function getReflyDomainSkillDir(skillName: string): string {\n return path.join(getReflySkillsDir(), skillName);\n}\n\n/**\n * Get the Claude skills directory (~/.claude/skills)\n * Symlinks are created here pointing to ~/.refly/skill/<name>\n */\nexport function getClaudeSkillsDir(): string {\n return path.join(os.homedir(), '.claude', 'skills');\n}\n\n/**\n * Get a Claude skill symlink path (~/.claude/skills/<name>)\n */\nexport function getClaudeSkillSymlinkPath(skillName: string): string {\n return path.join(getClaudeSkillsDir(), skillName);\n}\n\n/**\n * Ensure the Refly skills directory exists\n */\nexport function ensureReflySkillsDir(): void {\n const dir = getReflySkillsDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n}\n\n/**\n * Ensure the Claude skills directory exists\n */\nexport function ensureClaudeSkillsDir(): void {\n const dir = getClaudeSkillsDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o755 });\n }\n}\n","/**\n * Logger utility that NEVER outputs tokens or sensitive data.\n * Used for internal debugging only - not for user output.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { getReflyDir } from '../config/paths.js';\n\nconst LOG_FILE = 'cli.log';\nconst MAX_LOG_SIZE = 5 * 1024 * 1024; // 5MB\n\ntype LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\n// Sensitive patterns to redact\nconst SENSITIVE_PATTERNS = [\n /Bearer\\s+[A-Za-z0-9\\-_]+\\.[A-Za-z0-9\\-_]+\\.[A-Za-z0-9\\-_]+/gi,\n /[A-Za-z0-9]{32,}/g, // API keys\n /\"(access_?token|refresh_?token|api_?key|secret|password)\":\\s*\"[^\"]+\"/gi,\n];\n\nfunction redact(message: string): string {\n let result = message;\n for (const pattern of SENSITIVE_PATTERNS) {\n result = result.replace(pattern, '[REDACTED]');\n }\n return result;\n}\n\nclass Logger {\n private level: LogLevel = 'info';\n private logToFile = false;\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n enableFileLogging(): void {\n this.logToFile = true;\n }\n\n private shouldLog(level: LogLevel): boolean {\n return LOG_LEVELS[level] >= LOG_LEVELS[this.level];\n }\n\n private formatMessage(level: LogLevel, message: string): string {\n const timestamp = new Date().toISOString();\n const safeMessage = redact(message);\n return `[${timestamp}] [${level.toUpperCase()}] ${safeMessage}`;\n }\n\n private writeToFile(formatted: string): void {\n if (!this.logToFile) return;\n\n try {\n const logPath = path.join(getReflyDir(), LOG_FILE);\n\n // Rotate if too large\n try {\n const stats = fs.statSync(logPath);\n if (stats.size > MAX_LOG_SIZE) {\n fs.renameSync(logPath, `${logPath}.old`);\n }\n } catch {\n // File doesn't exist yet\n }\n\n fs.appendFileSync(logPath, `${formatted}\\n`);\n } catch {\n // Silently fail - logging should never break the CLI\n }\n }\n\n debug(message: string, ...args: unknown[]): void {\n if (!this.shouldLog('debug')) return;\n const formatted = this.formatMessage('debug', this.interpolate(message, args));\n this.writeToFile(formatted);\n }\n\n info(message: string, ...args: unknown[]): void {\n if (!this.shouldLog('info')) return;\n const formatted = this.formatMessage('info', this.interpolate(message, args));\n this.writeToFile(formatted);\n }\n\n warn(message: string, ...args: unknown[]): void {\n if (!this.shouldLog('warn')) return;\n const formatted = this.formatMessage('warn', this.interpolate(message, args));\n this.writeToFile(formatted);\n }\n\n error(message: string, ...args: unknown[]): void {\n if (!this.shouldLog('error')) return;\n const formatted = this.formatMessage('error', this.interpolate(message, args));\n this.writeToFile(formatted);\n }\n\n private interpolate(message: string, args: unknown[]): string {\n if (args.length === 0) return message;\n return `${message} ${args.map((a) => JSON.stringify(a)).join(' ')}`;\n }\n}\n\nexport const logger = new Logger();\n","/**\n * Platform registry - Agent definitions with verified paths for multi-platform skill deployment.\n *\n * Supported platforms (11 total):\n * - SKILL.md format (7 agents): Claude Code, Codex, Antigravity, GitHub Copilot, Windsurf, OpenCode, Moltbot\n * - Different formats (3 agents): Cursor (.mdc), Continue (rules), Trae (rules)\n * - Unverified (1 agent): Qoder\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { homedir } from 'node:os';\n\n/**\n * Supported agent types\n */\nexport type AgentType =\n // SKILL.md format (symlink compatible)\n | 'claude-code'\n | 'codex'\n | 'antigravity'\n | 'github-copilot'\n | 'windsurf'\n | 'opencode'\n | 'moltbot'\n // Different formats (require conversion)\n | 'cursor'\n | 'continue'\n | 'trae'\n // Unverified\n | 'qoder';\n\n/**\n * Skill format types\n */\nexport type SkillFormat = 'skill-md' | 'cursor-mdc' | 'rules-md' | 'unknown';\n\n/**\n * Agent configuration\n */\nexport interface AgentConfig {\n /** Agent identifier */\n name: AgentType;\n /** Human-readable display name */\n displayName: string;\n /** Skill format used by this agent */\n format: SkillFormat;\n /** Project-level skills directory (relative to project root) */\n skillsDir: string | null;\n /** Global skills directory (absolute path) */\n globalSkillsDir: string | null;\n /** Detection function to check if agent is installed */\n detectInstalled: () => Promise<boolean>;\n /** File extension for skills (default: none for directories, or .mdc/.md for files) */\n fileExtension?: string;\n /** Whether skills are stored as files (true) or directories (false, default) */\n skillsAsFiles?: boolean;\n}\n\nconst home = homedir();\n\n/**\n * Check if a path exists (sync for simplicity)\n */\nfunction pathExists(p: string): boolean {\n try {\n return fs.existsSync(p);\n } catch {\n return false;\n }\n}\n\n/**\n * Agent registry with verified paths from official documentation\n */\nexport const agents: Record<AgentType, AgentConfig> = {\n // === SKILL.md Format (Symlink Compatible) ===\n\n 'claude-code': {\n name: 'claude-code',\n displayName: 'Claude Code',\n format: 'skill-md',\n skillsDir: '.claude/skills',\n globalSkillsDir: path.join(home, '.claude', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.claude')),\n },\n\n codex: {\n name: 'codex',\n displayName: 'Codex',\n format: 'skill-md',\n skillsDir: '.codex/skills',\n globalSkillsDir: process.env.CODEX_HOME\n ? path.join(process.env.CODEX_HOME, 'skills')\n : path.join(home, '.codex', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.codex')),\n },\n\n antigravity: {\n name: 'antigravity',\n displayName: 'Antigravity',\n format: 'skill-md',\n skillsDir: '.agent/skills',\n globalSkillsDir: path.join(home, '.gemini', 'antigravity', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.gemini', 'antigravity')),\n },\n\n 'github-copilot': {\n name: 'github-copilot',\n displayName: 'GitHub Copilot',\n format: 'skill-md',\n skillsDir: '.github/skills',\n globalSkillsDir: path.join(home, '.copilot', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.copilot')),\n },\n\n windsurf: {\n name: 'windsurf',\n displayName: 'Windsurf',\n format: 'skill-md',\n skillsDir: '.windsurf/skills',\n globalSkillsDir: path.join(home, '.codeium', 'windsurf', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.codeium', 'windsurf')),\n },\n\n opencode: {\n name: 'opencode',\n displayName: 'OpenCode',\n format: 'skill-md',\n skillsDir: '.opencode/skill',\n globalSkillsDir: path.join(home, '.config', 'opencode', 'skill'),\n detectInstalled: async () => pathExists(path.join(home, '.config', 'opencode')),\n },\n\n moltbot: {\n name: 'moltbot',\n displayName: 'Moltbot',\n format: 'skill-md',\n skillsDir: 'skills', // <workspace>/skills\n globalSkillsDir: path.join(home, '.clawdbot', 'skills'), // Note: .clawdbot not .moltbot\n detectInstalled: async () => pathExists(path.join(home, '.clawdbot')),\n },\n\n // === Different Formats (Require Conversion) ===\n\n cursor: {\n name: 'cursor',\n displayName: 'Cursor',\n format: 'cursor-mdc',\n skillsDir: '.cursor/rules',\n globalSkillsDir: null, // Cursor has no global rules directory\n detectInstalled: async () => pathExists(path.join(home, '.cursor')),\n fileExtension: '.mdc',\n skillsAsFiles: true,\n },\n\n continue: {\n name: 'continue',\n displayName: 'Continue',\n format: 'rules-md',\n skillsDir: '.continue/rules',\n globalSkillsDir: path.join(home, '.continue', 'rules'),\n detectInstalled: async () => pathExists(path.join(home, '.continue')),\n fileExtension: '.md',\n skillsAsFiles: true,\n },\n\n trae: {\n name: 'trae',\n displayName: 'Trae',\n format: 'rules-md',\n skillsDir: '.trae/rules',\n globalSkillsDir: path.join(home, '.trae', 'rules'),\n detectInstalled: async () => pathExists(path.join(home, '.trae')),\n fileExtension: '.md',\n skillsAsFiles: true,\n },\n\n // === Unverified ===\n\n qoder: {\n name: 'qoder',\n displayName: 'Qoder',\n format: 'unknown',\n skillsDir: '.qoder/skills', // Assumed, not verified\n globalSkillsDir: path.join(home, '.qoder', 'skills'),\n detectInstalled: async () => pathExists(path.join(home, '.qoder')),\n },\n};\n\n/**\n * Get all agents using SKILL.md format (symlink compatible)\n */\nexport function getSkillMdAgents(): AgentConfig[] {\n return Object.values(agents).filter((a) => a.format === 'skill-md');\n}\n\n/**\n * Get all agents requiring format conversion\n */\nexport function getConversionAgents(): AgentConfig[] {\n return Object.values(agents).filter((a) => a.format === 'cursor-mdc' || a.format === 'rules-md');\n}\n\n/**\n * Get agent by name\n */\nexport function getAgent(name: AgentType): AgentConfig | undefined {\n return agents[name];\n}\n\n/**\n * Get all agent names\n */\nexport function getAllAgentNames(): AgentType[] {\n return Object.keys(agents) as AgentType[];\n}\n\n/**\n * Check if agent type is valid\n */\nexport function isValidAgentType(name: string): name is AgentType {\n return name in agents;\n}\n","/**\n * Symlink adapter - handles skill deployment for agents using SKILL.md format.\n *\n * For agents that use the standard SKILL.md format (Claude Code, Codex, Antigravity,\n * GitHub Copilot, Windsurf, OpenCode, Moltbot), we create symlinks from the agent's\n * skills directory to the canonical Refly skills location.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { platform } from 'node:os';\nimport type { AgentConfig } from './registry.js';\nimport type { PlatformAdapter, DeployResult, RemoveResult, DeployedSkillInfo } from './adapter.js';\nimport { logger } from '../utils/logger.js';\nimport { ensureDir } from '../config/paths.js';\n\n/**\n * Create a symlink with platform-specific handling\n * Windows uses junction, Unix uses symlink\n */\nasync function createSymlinkSafe(\n target: string,\n linkPath: string,\n): Promise<{ success: boolean; error?: string }> {\n try {\n // Ensure parent directory exists\n const linkDir = path.dirname(linkPath);\n ensureDir(linkDir);\n\n // Remove existing symlink or directory if present\n if (fs.existsSync(linkPath)) {\n const stat = fs.lstatSync(linkPath);\n if (stat.isSymbolicLink()) {\n fs.unlinkSync(linkPath);\n logger.debug(`Removed existing symlink: ${linkPath}`);\n } else if (stat.isDirectory()) {\n // If it's a real directory (not a symlink), warn and fail\n return {\n success: false,\n error: `Target path is a directory, not a symlink: ${linkPath}`,\n };\n }\n }\n\n // Create symlink\n // Windows uses junction for directory symlinks (doesn't require admin)\n const symlinkType = platform() === 'win32' ? 'junction' : 'dir';\n fs.symlinkSync(target, linkPath, symlinkType);\n logger.debug(`Created symlink: ${linkPath} -> ${target}`);\n\n return { success: true };\n } catch (err) {\n // Handle ENOENT for non-existent path (try creating anyway)\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n try {\n const symlinkType = platform() === 'win32' ? 'junction' : 'dir';\n fs.symlinkSync(target, linkPath, symlinkType);\n logger.debug(`Created symlink: ${linkPath} -> ${target}`);\n return { success: true };\n } catch (innerErr) {\n return {\n success: false,\n error: (innerErr as Error).message,\n };\n }\n }\n\n return {\n success: false,\n error: (err as Error).message,\n };\n }\n}\n\n/**\n * Symlink adapter for SKILL.md format agents\n */\nexport class SymlinkAdapter implements PlatformAdapter {\n async deploy(\n skillName: string,\n sourcePath: string,\n agent: AgentConfig,\n options?: { force?: boolean; projectPath?: string },\n ): Promise<DeployResult> {\n const result: DeployResult = {\n success: false,\n agent: agent.name,\n skillName,\n deployedPath: null,\n sourcePath,\n isSymlink: true,\n };\n\n // Determine target directory (global or project)\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir) {\n result.error = `Agent ${agent.displayName} has no skills directory configured`;\n return result;\n }\n\n // Check if source exists\n if (!fs.existsSync(sourcePath)) {\n result.error = `Source skill directory does not exist: ${sourcePath}`;\n return result;\n }\n\n // Target symlink path\n const linkPath = path.join(targetDir, skillName);\n result.deployedPath = linkPath;\n\n // Check if already exists\n if (fs.existsSync(linkPath) && !options?.force) {\n const stat = fs.lstatSync(linkPath);\n if (stat.isSymbolicLink()) {\n const existingTarget = fs.readlinkSync(linkPath);\n const resolvedTarget = path.resolve(path.dirname(linkPath), existingTarget);\n if (resolvedTarget === sourcePath) {\n // Already correctly linked\n result.success = true;\n return result;\n }\n }\n result.error = `Skill already exists at ${linkPath}. Use --force to overwrite.`;\n return result;\n }\n\n // Create the symlink\n const symlinkResult = await createSymlinkSafe(sourcePath, linkPath);\n if (!symlinkResult.success) {\n result.error = symlinkResult.error;\n return result;\n }\n\n result.success = true;\n logger.info(`Deployed ${skillName} to ${agent.displayName}: ${linkPath} -> ${sourcePath}`);\n return result;\n }\n\n async remove(\n skillName: string,\n agent: AgentConfig,\n options?: { projectPath?: string },\n ): Promise<RemoveResult> {\n const result: RemoveResult = {\n success: false,\n agent: agent.name,\n skillName,\n removedPath: null,\n };\n\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir) {\n result.error = `Agent ${agent.displayName} has no skills directory configured`;\n return result;\n }\n\n const linkPath = path.join(targetDir, skillName);\n result.removedPath = linkPath;\n\n try {\n if (!fs.existsSync(linkPath)) {\n // Not an error - skill just doesn't exist\n result.success = true;\n return result;\n }\n\n const stat = fs.lstatSync(linkPath);\n if (!stat.isSymbolicLink()) {\n result.error = `Path is not a symlink: ${linkPath}`;\n return result;\n }\n\n fs.unlinkSync(linkPath);\n result.success = true;\n logger.info(`Removed ${skillName} from ${agent.displayName}: ${linkPath}`);\n } catch (err) {\n result.error = (err as Error).message;\n }\n\n return result;\n }\n\n async list(agent: AgentConfig, options?: { projectPath?: string }): Promise<DeployedSkillInfo[]> {\n const results: DeployedSkillInfo[] = [];\n\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir || !fs.existsSync(targetDir)) {\n return results;\n }\n\n try {\n const entries = fs.readdirSync(targetDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(targetDir, entry.name);\n\n try {\n const stat = fs.lstatSync(fullPath);\n if (stat.isSymbolicLink()) {\n const target = fs.readlinkSync(fullPath);\n const resolvedTarget = path.resolve(path.dirname(fullPath), target);\n const isValid = fs.existsSync(resolvedTarget);\n\n results.push({\n name: entry.name,\n agent: agent.name,\n path: fullPath,\n isValid,\n target: resolvedTarget,\n isSymlink: true,\n });\n } else if (stat.isDirectory()) {\n // Regular directory (not a symlink)\n const skillMdPath = path.join(fullPath, 'SKILL.md');\n results.push({\n name: entry.name,\n agent: agent.name,\n path: fullPath,\n isValid: fs.existsSync(skillMdPath),\n isSymlink: false,\n });\n }\n } catch {\n // Skip entries that can't be read\n }\n }\n } catch {\n // Return empty results if directory can't be read\n }\n\n return results;\n }\n\n async isDeployed(\n skillName: string,\n agent: AgentConfig,\n options?: { projectPath?: string },\n ): Promise<{ deployed: boolean; valid: boolean; path?: string }> {\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir) {\n return { deployed: false, valid: false };\n }\n\n const linkPath = path.join(targetDir, skillName);\n\n try {\n if (!fs.existsSync(linkPath)) {\n return { deployed: false, valid: false };\n }\n\n const stat = fs.lstatSync(linkPath);\n if (!stat.isSymbolicLink()) {\n // It's a directory, not a symlink\n const skillMdPath = path.join(linkPath, 'SKILL.md');\n return {\n deployed: true,\n valid: fs.existsSync(skillMdPath),\n path: linkPath,\n };\n }\n\n const target = fs.readlinkSync(linkPath);\n const resolvedTarget = path.resolve(path.dirname(linkPath), target);\n const isValid = fs.existsSync(resolvedTarget);\n\n return {\n deployed: true,\n valid: isValid,\n path: linkPath,\n };\n } catch {\n return { deployed: false, valid: false };\n }\n }\n}\n\n/**\n * Singleton instance\n */\nexport const symlinkAdapter = new SymlinkAdapter();\n","/**\n * Format converter - converts SKILL.md to different formats for agents that\n * don't use the standard SKILL.md format.\n *\n * Supported conversions:\n * - Cursor: SKILL.md -> .mdc format (with globs, alwaysApply)\n * - Continue: SKILL.md -> rules .md format\n * - Trae: SKILL.md -> rules .md format\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { AgentConfig } from './registry.js';\nimport type { PlatformAdapter, DeployResult, RemoveResult, DeployedSkillInfo } from './adapter.js';\nimport { logger } from '../utils/logger.js';\nimport { ensureDir } from '../config/paths.js';\n\n/**\n * Parsed skill data for conversion (lenient - doesn't require skillId/workflowId)\n */\ninterface ParsedSkillLenient {\n name: string;\n displayName?: string;\n description: string;\n skillId?: string;\n workflowId?: string;\n installationId?: string;\n triggers?: string[];\n tags?: string[];\n version?: string;\n body: string;\n}\n\n/**\n * Convert SKILL.md to Cursor .mdc format\n *\n * Cursor rules format:\n * ---\n * description: \"...\"\n * globs:\n * alwaysApply: false\n * ---\n * Content...\n */\nfunction convertToMdc(skill: ParsedSkillLenient): string {\n const lines: string[] = [];\n\n lines.push('---');\n lines.push(`description: \"${skill.description.replace(/\"/g, '\\\\\"')}\"`);\n lines.push('globs:'); // Empty globs - apply to all files\n lines.push('alwaysApply: false');\n lines.push('---');\n lines.push('');\n lines.push(`# ${skill.displayName || formatSkillName(skill.name)}`);\n lines.push('');\n lines.push(skill.description);\n lines.push('');\n lines.push(skill.body);\n\n // Only add Refly section if we have skill metadata\n if (skill.skillId || skill.workflowId) {\n lines.push('');\n lines.push('---');\n lines.push('');\n lines.push('## Refly Skill');\n lines.push('');\n if (skill.skillId) {\n lines.push(`- **Skill ID**: ${skill.skillId}`);\n }\n if (skill.workflowId) {\n lines.push(`- **Workflow ID**: ${skill.workflowId}`);\n }\n if (skill.installationId) {\n lines.push(`- **Installation ID**: ${skill.installationId}`);\n }\n const runId = skill.installationId || skill.workflowId || skill.name;\n lines.push(`- **Run**: \\`refly skill run ${runId}\\``);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Convert SKILL.md to Continue/Trae rules format\n *\n * Rules are simple markdown files with skill content\n */\nfunction convertToRules(skill: ParsedSkillLenient): string {\n const lines: string[] = [];\n\n lines.push(`# ${skill.displayName || formatSkillName(skill.name)}`);\n lines.push('');\n lines.push(`> ${skill.description}`);\n lines.push('');\n\n if (skill.triggers && skill.triggers.length > 0) {\n lines.push('## Triggers');\n lines.push('');\n for (const trigger of skill.triggers) {\n lines.push(`- ${trigger}`);\n }\n lines.push('');\n }\n\n lines.push(skill.body);\n\n // Only add Refly section if we have skill metadata\n if (skill.skillId || skill.workflowId) {\n lines.push('');\n lines.push('---');\n lines.push('');\n lines.push('## Refly Skill');\n lines.push('');\n if (skill.skillId) {\n lines.push(`- **Skill ID**: ${skill.skillId}`);\n }\n if (skill.workflowId) {\n lines.push(`- **Workflow ID**: ${skill.workflowId}`);\n }\n if (skill.installationId) {\n lines.push(`- **Installation ID**: ${skill.installationId}`);\n }\n const runId = skill.installationId || skill.workflowId || skill.name;\n lines.push(`- **Run**: \\`refly skill run ${runId}\\``);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format skill name to display name\n * e.g., \"my-skill\" -> \"My Skill\"\n */\nfunction formatSkillName(name: string): string {\n return name\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n}\n\n/**\n * Parse SKILL.md content leniently (doesn't require skillId/workflowId)\n */\nfunction parseSkillMdLenient(content: string): ParsedSkillLenient | null {\n const frontmatterRegex = /^---\\n([\\s\\S]*?)\\n---\\n?([\\s\\S]*)$/;\n const match = content.match(frontmatterRegex);\n\n if (!match) {\n return null;\n }\n\n const [, frontmatterStr, body] = match;\n const meta: Record<string, unknown> = {};\n\n // Parse YAML-like frontmatter\n const lines = frontmatterStr.split('\\n');\n let currentKey: string | null = null;\n let currentArray: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Check for array item (starts with \"- \")\n if (trimmed.startsWith('- ')) {\n if (currentKey) {\n currentArray.push(trimmed.slice(2).trim());\n }\n continue;\n }\n\n // If we were collecting an array, save it\n if (currentKey && currentArray.length > 0) {\n meta[currentKey] = currentArray;\n currentArray = [];\n currentKey = null;\n }\n\n // Parse key: value pairs\n const colonIndex = trimmed.indexOf(':');\n if (colonIndex > 0) {\n const key = trimmed.slice(0, colonIndex).trim();\n const value = trimmed.slice(colonIndex + 1).trim();\n\n if (value === '') {\n // This is an array key\n currentKey = key;\n currentArray = [];\n } else {\n meta[key] = value;\n }\n }\n }\n\n // Save any remaining array\n if (currentKey && currentArray.length > 0) {\n meta[currentKey] = currentArray;\n }\n\n // Only require name and description\n if (!meta.name || !meta.description) {\n return null;\n }\n\n return {\n name: meta.name as string,\n displayName: meta.displayName as string | undefined,\n description: meta.description as string,\n skillId: meta.skillId as string | undefined,\n workflowId: meta.workflowId as string | undefined,\n installationId: meta.installationId as string | undefined,\n triggers: meta.triggers as string[] | undefined,\n tags: meta.tags as string[] | undefined,\n version: meta.version as string | undefined,\n body: body.trim(),\n };\n}\n\n/**\n * Read and parse SKILL.md from source directory (lenient parsing)\n */\nfunction readSkillMd(sourcePath: string): ParsedSkillLenient | null {\n const skillMdPath = path.join(sourcePath, 'SKILL.md');\n\n if (!fs.existsSync(skillMdPath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(skillMdPath, 'utf-8');\n return parseSkillMdLenient(content);\n } catch {\n return null;\n }\n}\n\n/**\n * Format converter adapter for agents using different formats\n */\nexport class FormatConverterAdapter implements PlatformAdapter {\n async deploy(\n skillName: string,\n sourcePath: string,\n agent: AgentConfig,\n options?: { force?: boolean; projectPath?: string },\n ): Promise<DeployResult> {\n const result: DeployResult = {\n success: false,\n agent: agent.name,\n skillName,\n deployedPath: null,\n sourcePath,\n isSymlink: false, // We generate files, not symlinks\n };\n\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n // If no target directory (e.g., Cursor has no global rules), skip gracefully\n if (!targetDir) {\n result.success = true; // Not an error, just not applicable\n logger.debug(`Skipping ${skillName} for ${agent.displayName}: no global skills directory`);\n return result;\n }\n\n // Read source SKILL.md\n const skill = readSkillMd(sourcePath);\n if (!skill) {\n result.error = `Failed to read SKILL.md from ${sourcePath}`;\n return result;\n }\n\n // Determine file path\n const extension = agent.fileExtension || '.md';\n const filePath = path.join(targetDir, `${skillName}${extension}`);\n result.deployedPath = filePath;\n\n // Check if already exists\n if (fs.existsSync(filePath) && !options?.force) {\n result.error = `Skill already exists at ${filePath}. Use --force to overwrite.`;\n return result;\n }\n\n // Convert to appropriate format\n let content: string;\n switch (agent.format) {\n case 'cursor-mdc':\n content = convertToMdc(skill);\n break;\n case 'rules-md':\n content = convertToRules(skill);\n break;\n default:\n result.error = `Unsupported format: ${agent.format}`;\n return result;\n }\n\n // Write the converted file\n try {\n ensureDir(targetDir);\n fs.writeFileSync(filePath, content, { encoding: 'utf-8', mode: 0o644 });\n result.success = true;\n logger.info(`Deployed ${skillName} to ${agent.displayName}: ${filePath}`);\n } catch (err) {\n result.error = (err as Error).message;\n }\n\n return result;\n }\n\n async remove(\n skillName: string,\n agent: AgentConfig,\n options?: { projectPath?: string },\n ): Promise<RemoveResult> {\n const result: RemoveResult = {\n success: false,\n agent: agent.name,\n skillName,\n removedPath: null,\n };\n\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n // If no target directory (e.g., Cursor has no global rules), skip gracefully\n if (!targetDir) {\n result.success = true; // Not an error, just not applicable\n logger.debug(\n `Skipping ${skillName} removal for ${agent.displayName}: no global skills directory`,\n );\n return result;\n }\n\n const extension = agent.fileExtension || '.md';\n const filePath = path.join(targetDir, `${skillName}${extension}`);\n result.removedPath = filePath;\n\n try {\n if (!fs.existsSync(filePath)) {\n // Not an error - file just doesn't exist\n result.success = true;\n return result;\n }\n\n fs.unlinkSync(filePath);\n result.success = true;\n logger.info(`Removed ${skillName} from ${agent.displayName}: ${filePath}`);\n } catch (err) {\n result.error = (err as Error).message;\n }\n\n return result;\n }\n\n async list(agent: AgentConfig, options?: { projectPath?: string }): Promise<DeployedSkillInfo[]> {\n const results: DeployedSkillInfo[] = [];\n\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir || !fs.existsSync(targetDir)) {\n return results;\n }\n\n const extension = agent.fileExtension || '.md';\n\n try {\n const entries = fs.readdirSync(targetDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(extension)) {\n const fullPath = path.join(targetDir, entry.name);\n const skillName = entry.name.slice(0, -extension.length);\n\n // Check if file contains Refly skill marker\n let isReflySkill = false;\n try {\n const content = fs.readFileSync(fullPath, 'utf-8');\n isReflySkill = content.includes('## Refly Skill') || content.includes('Skill ID:');\n } catch {\n // Ignore read errors\n }\n\n results.push({\n name: skillName,\n agent: agent.name,\n path: fullPath,\n isValid: isReflySkill,\n isSymlink: false,\n });\n }\n }\n } catch {\n // Return empty results if directory can't be read\n }\n\n return results;\n }\n\n async isDeployed(\n skillName: string,\n agent: AgentConfig,\n options?: { projectPath?: string },\n ): Promise<{ deployed: boolean; valid: boolean; path?: string }> {\n // Determine target directory\n let targetDir: string | null = null;\n if (options?.projectPath && agent.skillsDir) {\n targetDir = path.join(options.projectPath, agent.skillsDir);\n } else {\n targetDir = agent.globalSkillsDir;\n }\n\n if (!targetDir) {\n return { deployed: false, valid: false };\n }\n\n const extension = agent.fileExtension || '.md';\n const filePath = path.join(targetDir, `${skillName}${extension}`);\n\n if (!fs.existsSync(filePath)) {\n return { deployed: false, valid: false };\n }\n\n // Check if file contains Refly skill marker\n let isValid = false;\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n isValid = content.includes('## Refly Skill') || content.includes('Skill ID:');\n } catch {\n // Treat read errors as invalid\n }\n\n return {\n deployed: true,\n valid: isValid,\n path: filePath,\n };\n }\n}\n\n/**\n * Singleton instance\n */\nexport const formatConverterAdapter = new FormatConverterAdapter();\n\n/**\n * Export conversion functions for testing\n */\nexport { convertToMdc, convertToRules };\n","/**\n * Platform manager - orchestrates skill deployment across all enabled platforms.\n *\n * This module provides high-level functions for:\n * - Detecting installed agents\n * - Deploying skills to all enabled platforms\n * - Removing skills from all platforms\n * - Syncing skills across platforms\n */\n\nimport * as fs from 'node:fs';\nimport type { AgentConfig, AgentType } from './registry.js';\nimport { agents, getSkillMdAgents, getConversionAgents } from './registry.js';\nimport type {\n PlatformAdapter,\n DeployResult,\n MultiPlatformDeployResult,\n MultiPlatformRemoveResult,\n DeployedSkillInfo,\n} from './adapter.js';\nimport { symlinkAdapter } from './symlink-adapter.js';\nimport { formatConverterAdapter } from './format-converter.js';\nimport { getReflyDomainSkillDir, getReflyBaseSkillDir } from '../config/paths.js';\nimport { logger } from '../utils/logger.js';\n\n/**\n * Get the appropriate adapter for an agent\n */\nfunction getAdapter(agent: AgentConfig): PlatformAdapter {\n switch (agent.format) {\n case 'skill-md':\n return symlinkAdapter;\n case 'cursor-mdc':\n case 'rules-md':\n return formatConverterAdapter;\n default:\n // For unknown formats, try symlink adapter\n return symlinkAdapter;\n }\n}\n\n/**\n * Detect all installed agents on the system\n */\nexport async function detectInstalledAgents(): Promise<AgentConfig[]> {\n const installed: AgentConfig[] = [];\n\n for (const agent of Object.values(agents)) {\n try {\n const isInstalled = await agent.detectInstalled();\n if (isInstalled) {\n installed.push(agent);\n }\n } catch (err) {\n logger.debug(`Error detecting ${agent.displayName}: ${(err as Error).message}`);\n }\n }\n\n return installed;\n}\n\n/**\n * Get agents that should receive skill deployments\n * (installed agents, excluding those with unknown format unless forced)\n */\nexport async function getDeployableAgents(options?: { includeUnknown?: boolean }): Promise<\n AgentConfig[]\n> {\n const installed = await detectInstalledAgents();\n\n if (options?.includeUnknown) {\n return installed;\n }\n\n return installed.filter((agent) => agent.format !== 'unknown');\n}\n\n/**\n * Deploy a skill to all enabled platforms\n */\nexport async function deploySkillToAllPlatforms(\n skillName: string,\n options?: {\n force?: boolean;\n projectPath?: string;\n agents?: AgentType[];\n },\n): Promise<MultiPlatformDeployResult> {\n // Determine source path\n const sourcePath =\n skillName === 'refly' ? getReflyBaseSkillDir() : getReflyDomainSkillDir(skillName);\n\n const result: MultiPlatformDeployResult = {\n skillName,\n sourcePath,\n results: new Map(),\n successCount: 0,\n failureCount: 0,\n };\n\n // Check source exists\n if (!fs.existsSync(sourcePath)) {\n logger.error(`Source skill directory does not exist: ${sourcePath}`);\n return result;\n }\n\n // Get target agents\n let targetAgents: AgentConfig[];\n if (options?.agents && options.agents.length > 0) {\n targetAgents = options.agents.map((name) => agents[name]).filter(Boolean);\n } else {\n targetAgents = await getDeployableAgents();\n }\n\n // Deploy to each agent\n for (const agent of targetAgents) {\n const adapter = getAdapter(agent);\n try {\n const deployResult = await adapter.deploy(skillName, sourcePath, agent, {\n force: options?.force,\n projectPath: options?.projectPath,\n });\n result.results.set(agent.name, deployResult);\n if (deployResult.success) {\n result.successCount++;\n } else {\n result.failureCount++;\n }\n } catch (err) {\n result.results.set(agent.name, {\n success: false,\n agent: agent.name,\n skillName,\n deployedPath: null,\n sourcePath,\n isSymlink: false,\n error: (err as Error).message,\n });\n result.failureCount++;\n }\n }\n\n return result;\n}\n\n/**\n * Remove a skill from all platforms\n */\nexport async function removeSkillFromAllPlatforms(\n skillName: string,\n options?: {\n projectPath?: string;\n agents?: AgentType[];\n },\n): Promise<MultiPlatformRemoveResult> {\n const result: MultiPlatformRemoveResult = {\n skillName,\n results: new Map(),\n successCount: 0,\n failureCount: 0,\n };\n\n // Get target agents\n let targetAgents: AgentConfig[];\n if (options?.agents && options.agents.length > 0) {\n targetAgents = options.agents.map((name) => agents[name]).filter(Boolean);\n } else {\n targetAgents = await getDeployableAgents();\n }\n\n // Remove from each agent\n for (const agent of targetAgents) {\n const adapter = getAdapter(agent);\n try {\n const removeResult = await adapter.remove(skillName, agent, {\n projectPath: options?.projectPath,\n });\n result.results.set(agent.name, removeResult);\n if (removeResult.success) {\n result.successCount++;\n } else {\n result.failureCount++;\n }\n } catch (err) {\n result.results.set(agent.name, {\n success: false,\n agent: agent.name,\n skillName,\n removedPath: null,\n error: (err as Error).message,\n });\n result.failureCount++;\n }\n }\n\n return result;\n}\n\n/**\n * List all deployed skills across all platforms\n */\nexport async function listAllDeployedSkills(options?: {\n projectPath?: string;\n agents?: AgentType[];\n}): Promise<Map<AgentType, DeployedSkillInfo[]>> {\n const result = new Map<AgentType, DeployedSkillInfo[]>();\n\n // Get target agents\n let targetAgents: AgentConfig[];\n if (options?.agents && options.agents.length > 0) {\n targetAgents = options.agents.map((name) => agents[name]).filter(Boolean);\n } else {\n targetAgents = await getDeployableAgents();\n }\n\n // List from each agent\n for (const agent of targetAgents) {\n const adapter = getAdapter(agent);\n try {\n const skills = await adapter.list(agent, {\n projectPath: options?.projectPath,\n });\n result.set(agent.name, skills);\n } catch (err) {\n logger.debug(`Error listing skills for ${agent.displayName}: ${(err as Error).message}`);\n result.set(agent.name, []);\n }\n }\n\n return result;\n}\n\n/**\n * Sync a skill to all platforms (repair/recreate deployments)\n */\nexport async function syncSkillToAllPlatforms(\n skillName: string,\n options?: {\n projectPath?: string;\n agents?: AgentType[];\n dryRun?: boolean;\n },\n): Promise<{\n needsSync: Map<AgentType, { deployed: boolean; valid: boolean; path?: string }>;\n synced: Map<AgentType, DeployResult>;\n}> {\n const needsSync = new Map<AgentType, { deployed: boolean; valid: boolean; path?: string }>();\n const synced = new Map<AgentType, DeployResult>();\n\n // Determine source path\n const sourcePath =\n skillName === 'refly' ? getReflyBaseSkillDir() : getReflyDomainSkillDir(skillName);\n\n // Get target agents\n let targetAgents: AgentConfig[];\n if (options?.agents && options.agents.length > 0) {\n targetAgents = options.agents.map((name) => agents[name]).filter(Boolean);\n } else {\n targetAgents = await getDeployableAgents();\n }\n\n // Check status for each agent\n for (const agent of targetAgents) {\n const adapter = getAdapter(agent);\n try {\n const status = await adapter.isDeployed(skillName, agent, {\n projectPath: options?.projectPath,\n });\n needsSync.set(agent.name, status);\n\n // If not deployed or invalid, sync it\n if ((!status.deployed || !status.valid) && !options?.dryRun) {\n const deployResult = await adapter.deploy(skillName, sourcePath, agent, {\n force: true, // Force to repair\n projectPath: options?.projectPath,\n });\n synced.set(agent.name, deployResult);\n }\n } catch (err) {\n logger.debug(\n `Error checking/syncing ${skillName} for ${agent.displayName}: ${(err as Error).message}`,\n );\n }\n }\n\n return { needsSync, synced };\n}\n\n/**\n * Get summary of platform support\n */\nexport function getPlatformSummary(): {\n skillMdAgents: AgentConfig[];\n conversionAgents: AgentConfig[];\n totalAgents: number;\n} {\n return {\n skillMdAgents: getSkillMdAgents(),\n conversionAgents: getConversionAgents(),\n totalAgents: Object.keys(agents).length,\n };\n}\n\n/**\n * Export individual adapters for direct use\n */\nexport { symlinkAdapter, formatConverterAdapter };\n","/**\n * Skill symlink management - creates and manages symlinks between\n * ~/.refly/skills/<name> and ~/.claude/skills/<name>\n *\n * Architecture:\n * - Actual skill files stored in: ~/.refly/skills/<name>/SKILL.md\n * - Symlinks created at: ~/.claude/skills/<name> -> ~/.refly/skills/<name>\n * - Base skill: ~/.claude/skills/refly -> ~/.refly/skills/base\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getReflyBaseSkillDir,\n getReflyDomainSkillDir,\n getClaudeSkillsDir,\n getClaudeSkillSymlinkPath,\n ensureReflySkillsDir,\n ensureClaudeSkillsDir,\n ensureDir,\n} from '../config/paths.js';\nimport { logger } from '../utils/logger.js';\n\nexport interface SkillSymlinkResult {\n success: boolean;\n skillName: string;\n reflyPath: string;\n claudePath: string;\n error?: string;\n}\n\n/**\n * Create a symlink for a skill from Claude skills dir to Refly skill dir\n * ~/.claude/skills/<name> -> ~/.refly/skill/<name>\n */\nexport function createSkillSymlink(skillName: string): SkillSymlinkResult {\n const reflyPath =\n skillName === 'refly' ? getReflyBaseSkillDir() : getReflyDomainSkillDir(skillName);\n const claudePath = getClaudeSkillSymlinkPath(skillName);\n\n try {\n // Ensure directories exist\n ensureReflySkillsDir();\n ensureClaudeSkillsDir();\n\n // Check if source directory exists\n if (!fs.existsSync(reflyPath)) {\n return {\n success: false,\n skillName,\n reflyPath,\n claudePath,\n error: `Source skill directory does not exist: ${reflyPath}`,\n };\n }\n\n // Remove existing symlink or directory if present\n if (fs.existsSync(claudePath) || fs.lstatSync(claudePath).isSymbolicLink()) {\n const stat = fs.lstatSync(claudePath);\n if (stat.isSymbolicLink()) {\n fs.unlinkSync(claudePath);\n logger.debug(`Removed existing symlink: ${claudePath}`);\n } else if (stat.isDirectory()) {\n // If it's a real directory (not a symlink), warn and skip\n logger.warn(`Cannot create symlink: ${claudePath} is a directory, not a symlink`);\n return {\n success: false,\n skillName,\n reflyPath,\n claudePath,\n error: `Target path is a directory, not a symlink: ${claudePath}`,\n };\n }\n }\n\n // Create symlink\n fs.symlinkSync(reflyPath, claudePath, 'dir');\n logger.info(`Created symlink: ${claudePath} -> ${reflyPath}`);\n\n return {\n success: true,\n skillName,\n reflyPath,\n claudePath,\n };\n } catch (err) {\n // Handle ENOENT for lstat on non-existent path\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n try {\n fs.symlinkSync(reflyPath, claudePath, 'dir');\n logger.info(`Created symlink: ${claudePath} -> ${reflyPath}`);\n return {\n success: true,\n skillName,\n reflyPath,\n claudePath,\n };\n } catch (innerErr) {\n return {\n success: false,\n skillName,\n reflyPath,\n claudePath,\n error: (innerErr as Error).message,\n };\n }\n }\n\n return {\n success: false,\n skillName,\n reflyPath,\n claudePath,\n error: (err as Error).message,\n };\n }\n}\n\n/**\n * Remove a skill symlink from Claude skills directory\n */\nexport function removeSkillSymlink(skillName: string): boolean {\n const claudePath = getClaudeSkillSymlinkPath(skillName);\n\n try {\n if (!fs.existsSync(claudePath)) {\n logger.debug(`Symlink not found: ${claudePath}`);\n return false;\n }\n\n const stat = fs.lstatSync(claudePath);\n if (!stat.isSymbolicLink()) {\n logger.warn(`Not a symlink: ${claudePath}`);\n return false;\n }\n\n fs.unlinkSync(claudePath);\n logger.info(`Removed symlink: ${claudePath}`);\n return true;\n } catch (err) {\n logger.error(`Failed to remove symlink ${claudePath}:`, err);\n return false;\n }\n}\n\n/**\n * Check if a skill symlink exists and is valid\n */\nexport function isSkillSymlinkValid(skillName: string): {\n exists: boolean;\n isSymlink: boolean;\n isValid: boolean;\n target?: string;\n} {\n const claudePath = getClaudeSkillSymlinkPath(skillName);\n const expectedTarget =\n skillName === 'refly' ? getReflyBaseSkillDir() : getReflyDomainSkillDir(skillName);\n\n try {\n if (!fs.existsSync(claudePath)) {\n return { exists: false, isSymlink: false, isValid: false };\n }\n\n const stat = fs.lstatSync(claudePath);\n if (!stat.isSymbolicLink()) {\n return { exists: true, isSymlink: false, isValid: false };\n }\n\n const target = fs.readlinkSync(claudePath);\n const resolvedTarget = path.resolve(path.dirname(claudePath), target);\n const isValid = resolvedTarget === expectedTarget && fs.existsSync(resolvedTarget);\n\n return {\n exists: true,\n isSymlink: true,\n isValid,\n target: resolvedTarget,\n };\n } catch {\n return { exists: false, isSymlink: false, isValid: false };\n }\n}\n\n/**\n * Create or ensure the base skill directory and symlink\n */\nexport function initializeBaseSkillSymlink(): SkillSymlinkResult {\n const baseDir = getReflyBaseSkillDir();\n\n // Ensure base skill directory exists\n ensureDir(baseDir);\n ensureDir(path.join(baseDir, 'rules'));\n\n // Create symlink\n return createSkillSymlink('refly');\n}\n\n/**\n * Create a Refly skill directory with SKILL.md and symlink\n */\nexport function createReflySkillWithSymlink(\n skillName: string,\n skillMdContent: string,\n options?: { force?: boolean },\n): SkillSymlinkResult {\n const skillDir = getReflyDomainSkillDir(skillName);\n\n try {\n // Ensure skill directory exists\n ensureReflySkillsDir();\n\n if (fs.existsSync(skillDir)) {\n if (options?.force) {\n // Force mode: update existing SKILL.md\n const skillMdPath = path.join(skillDir, 'SKILL.md');\n fs.writeFileSync(skillMdPath, skillMdContent, { encoding: 'utf-8', mode: 0o644 });\n logger.debug(`Updated SKILL.md (force): ${skillMdPath}`);\n // Ensure symlink exists\n return createSkillSymlink(skillName);\n }\n return {\n success: false,\n skillName,\n reflyPath: skillDir,\n claudePath: getClaudeSkillSymlinkPath(skillName),\n error: `Skill directory already exists: ${skillDir}`,\n };\n }\n\n // Create skill directory\n fs.mkdirSync(skillDir, { recursive: true, mode: 0o755 });\n\n // Write SKILL.md\n const skillMdPath = path.join(skillDir, 'SKILL.md');\n fs.writeFileSync(skillMdPath, skillMdContent, { encoding: 'utf-8', mode: 0o644 });\n logger.debug(`Created SKILL.md: ${skillMdPath}`);\n\n // Create symlink\n return createSkillSymlink(skillName);\n } catch (err) {\n return {\n success: false,\n skillName,\n reflyPath: skillDir,\n claudePath: getClaudeSkillSymlinkPath(skillName),\n error: (err as Error).message,\n };\n }\n}\n\n/**\n * Delete a domain skill directory and its symlink\n */\nexport function deleteDomainSkillWithSymlink(skillName: string): {\n symlinkRemoved: boolean;\n directoryRemoved: boolean;\n} {\n // Remove symlink first\n const symlinkRemoved = removeSkillSymlink(skillName);\n\n // Remove skill directory\n const skillDir = getReflyDomainSkillDir(skillName);\n let directoryRemoved = false;\n\n try {\n if (fs.existsSync(skillDir)) {\n fs.rmSync(skillDir, { recursive: true, force: true });\n directoryRemoved = true;\n logger.info(`Removed skill directory: ${skillDir}`);\n }\n } catch (err) {\n logger.error(`Failed to remove skill directory ${skillDir}:`, err);\n }\n\n return { symlinkRemoved, directoryRemoved };\n}\n\n/**\n * List all skill symlinks in Claude skills directory\n */\nexport function listSkillSymlinks(): Array<{\n name: string;\n claudePath: string;\n target: string;\n isValid: boolean;\n}> {\n const claudeSkillsDir = getClaudeSkillsDir();\n const results: Array<{\n name: string;\n claudePath: string;\n target: string;\n isValid: boolean;\n }> = [];\n\n if (!fs.existsSync(claudeSkillsDir)) {\n return results;\n }\n\n try {\n const entries = fs.readdirSync(claudeSkillsDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(claudeSkillsDir, entry.name);\n\n try {\n const stat = fs.lstatSync(fullPath);\n if (stat.isSymbolicLink()) {\n const target = fs.readlinkSync(fullPath);\n const resolvedTarget = path.resolve(path.dirname(fullPath), target);\n const isValid = fs.existsSync(resolvedTarget);\n\n results.push({\n name: entry.name,\n claudePath: fullPath,\n target: resolvedTarget,\n isValid,\n });\n }\n } catch {\n // Skip entries that can't be read\n }\n }\n } catch {\n // Return empty results if directory can't be read\n }\n\n return results;\n}\n\n/**\n * Escape a string for safe use as a YAML value.\n * Quotes the string if it contains special characters.\n */\nfunction escapeYamlValue(value: string): string {\n // If the value contains special YAML characters, wrap in quotes and escape inner quotes\n if (\n value.includes(':') ||\n value.includes('#') ||\n value.includes(\"'\") ||\n value.includes('\"') ||\n value.includes('\\n') ||\n value.startsWith(' ') ||\n value.endsWith(' ') ||\n value.startsWith('[') ||\n value.startsWith('{')\n ) {\n // Use double quotes and escape any double quotes inside\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n }\n return value;\n}\n\n/**\n * Generate SKILL.md content for a Refly skill\n */\nexport function generateReflySkillMd(options: {\n name: string;\n displayName?: string;\n description: string;\n skillId: string;\n workflowId: string;\n installationId?: string;\n triggers?: string[];\n tags?: string[];\n version?: string;\n inputSchema?: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n}): string {\n const {\n name,\n displayName,\n description,\n skillId,\n workflowId,\n installationId,\n triggers = [],\n tags = [],\n version = '1.0.0',\n inputSchema,\n outputSchema,\n } = options;\n\n // Build frontmatter - Claude Code compatible format\n // description is the primary trigger mechanism for Claude Code skill discovery\n const frontmatterLines = ['---', `name: ${escapeYamlValue(name)}`];\n frontmatterLines.push(`description: ${escapeYamlValue(description)}`);\n\n // Standard Claude Code optional fields\n if (tags.length > 0) {\n frontmatterLines.push('tags:');\n frontmatterLines.push(...tags.map((t) => ` - ${escapeYamlValue(t)}`));\n }\n\n frontmatterLines.push(`version: ${escapeYamlValue(version)}`);\n\n // Refly-specific metadata (kept for Refly CLI compatibility)\n frontmatterLines.push(`skillId: ${escapeYamlValue(skillId)}`);\n frontmatterLines.push(`workflowId: ${escapeYamlValue(workflowId)}`);\n\n if (installationId) {\n frontmatterLines.push(`installationId: ${escapeYamlValue(installationId)}`);\n }\n\n if (triggers.length > 0) {\n frontmatterLines.push('triggers:');\n frontmatterLines.push(...triggers.map((t) => ` - ${escapeYamlValue(t)}`));\n }\n\n frontmatterLines.push('---');\n\n // Build content\n const title =\n displayName ||\n name\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n\n // Format input example\n const inputExample = inputSchema\n ? JSON.stringify(inputSchema, null, 2)\n : `{\n \"query\": \"your input here\"\n}`;\n\n const runCommand = installationId\n ? `refly skill run ${installationId} --input '${inputSchema ? JSON.stringify(inputSchema) : '{}'}'`\n : `refly workflow run ${workflowId} --input '${inputSchema ? JSON.stringify(inputSchema) : '{}'}'`;\n\n // Format output section\n const outputSection = outputSchema\n ? `The skill returns:\n\n\\`\\`\\`json\n${JSON.stringify(outputSchema, null, 2)}\n\\`\\`\\``\n : 'The skill returns the workflow execution result.';\n\n const content = `\n\n# ${title}\n\n${description}\n\n## Input\n\nProvide input as JSON:\n\n\\`\\`\\`json\n${inputExample}\n\\`\\`\\`\n\n## Execution\n\n**Follow this exact 4-step pattern:**\n\n\\`\\`\\`bash\n# Step 1: Run and capture RUN_ID (we-xxx format)\nRESULT=$(${runCommand})\nRUN_ID=$(echo \"$RESULT\" | jq -r '.payload.workflowExecutions[0].id')\n# RUN_ID is we-xxx format, use this for workflow commands below\n\n# Step 2: Wait for completion (use RUN_ID, not installationId)\nrefly workflow status \"$RUN_ID\" --watch --interval 30000\n\n# Step 3: Get files from this run (use RUN_ID)\nFILES=$(refly workflow toolcalls \"$RUN_ID\" --files --latest | jq -r '.payload.files[]')\n\n# Step 4: Download and open each file\necho \"$FILES\" | jq -c '.' | while read -r file; do\n FILE_ID=$(echo \"$file\" | jq -r '.fileId')\n FILE_NAME=$(echo \"$file\" | jq -r '.name')\n if [ -n \"$FILE_ID\" ] && [ \"$FILE_ID\" != \"null\" ]; then\n OUTPUT_PATH=\"$HOME/Desktop/$FILE_NAME\"\n refly file download \"$FILE_ID\" -o \"$OUTPUT_PATH\"\n open \"$OUTPUT_PATH\"\n fi\ndone\n\\`\\`\\`\n\n## Output\n\n${outputSection}\n\n## Rules\n\nFor workflow operations, refer to the base skill:\n- Base skill: \\`~/.claude/skills/refly/SKILL.md\\`\n`;\n\n return frontmatterLines.join('\\n') + content;\n}\n\n/**\n * Metadata parsed from SKILL.md frontmatter\n */\nexport interface ReflySkillMeta {\n name: string;\n displayName?: string;\n description: string;\n skillId: string;\n workflowId: string;\n installationId?: string;\n triggers?: string[];\n tags?: string[];\n version?: string;\n}\n\n/**\n * Parse SKILL.md content and extract metadata and body\n */\nexport function parseReflySkillMd(content: string): {\n meta: ReflySkillMeta;\n body: string;\n raw: string;\n} {\n const frontmatterRegex = /^---\\n([\\s\\S]*?)\\n---\\n?([\\s\\S]*)$/;\n const match = content.match(frontmatterRegex);\n\n if (!match) {\n throw new Error('Invalid SKILL.md format: missing frontmatter');\n }\n\n const [, frontmatterStr, body] = match;\n const meta: Partial<ReflySkillMeta> = {};\n\n // Parse YAML-like frontmatter\n const lines = frontmatterStr.split('\\n');\n let currentKey: string | null = null;\n let currentArray: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Check for array item (starts with \" - \")\n if (trimmed.startsWith('- ')) {\n if (currentKey) {\n currentArray.push(trimmed.slice(2).trim());\n }\n continue;\n }\n\n // If we were collecting an array, save it\n if (currentKey && currentArray.length > 0) {\n (meta as Record<string, unknown>)[currentKey] = currentArray;\n currentArray = [];\n currentKey = null;\n }\n\n // Parse key: value pairs\n const colonIndex = trimmed.indexOf(':');\n if (colonIndex > 0) {\n const key = trimmed.slice(0, colonIndex).trim();\n const value = trimmed.slice(colonIndex + 1).trim();\n\n if (value === '') {\n // This is an array key\n currentKey = key;\n currentArray = [];\n } else {\n (meta as Record<string, unknown>)[key] = value;\n }\n }\n }\n\n // Save any remaining array\n if (currentKey && currentArray.length > 0) {\n (meta as Record<string, unknown>)[currentKey] = currentArray;\n }\n\n // Validate required fields\n if (!meta.name) {\n throw new Error('Invalid SKILL.md: missing required field \"name\"');\n }\n if (!meta.description) {\n throw new Error('Invalid SKILL.md: missing required field \"description\"');\n }\n if (!meta.skillId) {\n throw new Error('Invalid SKILL.md: missing required field \"skillId\"');\n }\n if (!meta.workflowId) {\n throw new Error('Invalid SKILL.md: missing required field \"workflowId\"');\n }\n\n return {\n meta: meta as ReflySkillMeta,\n body: body.trim(),\n raw: content,\n };\n}\n\n// ============================================================================\n// Multi-Platform Support\n// ============================================================================\n\nimport type { AgentType } from '../platform/registry.js';\nimport type { MultiPlatformDeployResult, MultiPlatformRemoveResult } from '../platform/adapter.js';\nimport {\n deploySkillToAllPlatforms,\n removeSkillFromAllPlatforms,\n listAllDeployedSkills,\n} from '../platform/manager.js';\n\n/**\n * Create a skill in Refly directory and deploy to all enabled platforms\n */\nexport async function createMultiPlatformSkill(\n skillName: string,\n skillMdContent: string,\n options?: { force?: boolean; agents?: AgentType[] },\n): Promise<MultiPlatformDeployResult> {\n const skillDir = getReflyDomainSkillDir(skillName);\n\n // Ensure skill directory exists\n ensureReflySkillsDir();\n\n if (fs.existsSync(skillDir)) {\n if (options?.force) {\n // Force mode: update existing SKILL.md\n const skillMdPath = path.join(skillDir, 'SKILL.md');\n fs.writeFileSync(skillMdPath, skillMdContent, { encoding: 'utf-8', mode: 0o644 });\n logger.debug(`Updated SKILL.md (force): ${skillMdPath}`);\n } else {\n // Return error result\n return {\n skillName,\n sourcePath: skillDir,\n results: new Map(),\n successCount: 0,\n failureCount: 1,\n };\n }\n } else {\n // Create skill directory and SKILL.md\n fs.mkdirSync(skillDir, { recursive: true, mode: 0o755 });\n const skillMdPath = path.join(skillDir, 'SKILL.md');\n fs.writeFileSync(skillMdPath, skillMdContent, { encoding: 'utf-8', mode: 0o644 });\n logger.debug(`Created SKILL.md: ${skillMdPath}`);\n }\n\n // Deploy to all platforms\n return deploySkillToAllPlatforms(skillName, {\n force: options?.force,\n agents: options?.agents,\n });\n}\n\n/**\n * Remove a skill from all platforms and delete Refly directory\n */\nexport async function removeMultiPlatformSkill(\n skillName: string,\n options?: { agents?: AgentType[]; keepLocal?: boolean },\n): Promise<{\n platformResults: MultiPlatformRemoveResult;\n directoryRemoved: boolean;\n}> {\n // Remove from all platforms first\n const platformResults = await removeSkillFromAllPlatforms(skillName, {\n agents: options?.agents,\n });\n\n // Remove skill directory unless keepLocal is true\n let directoryRemoved = false;\n if (!options?.keepLocal) {\n const skillDir = getReflyDomainSkillDir(skillName);\n try {\n if (fs.existsSync(skillDir)) {\n fs.rmSync(skillDir, { recursive: true, force: true });\n directoryRemoved = true;\n logger.info(`Removed skill directory: ${skillDir}`);\n }\n } catch (err) {\n logger.error(`Failed to remove skill directory ${skillDir}:`, err);\n }\n }\n\n return { platformResults, directoryRemoved };\n}\n\n/**\n * List skills deployed across all platforms\n */\nexport async function listMultiPlatformSkills(options?: {\n agents?: AgentType[];\n}): Promise<\n Map<AgentType, Array<{ name: string; path: string; isValid: boolean; isSymlink: boolean }>>\n> {\n const allDeployed = await listAllDeployedSkills({ agents: options?.agents });\n\n // Transform to simplified format\n const result = new Map<\n AgentType,\n Array<{ name: string; path: string; isValid: boolean; isSymlink: boolean }>\n >();\n\n for (const [agent, skills] of allDeployed) {\n result.set(\n agent,\n skills.map((s) => ({\n name: s.name,\n path: s.path,\n isValid: s.isValid,\n isSymlink: s.isSymlink,\n })),\n );\n }\n\n return result;\n}\n","/**\n * @refly/cli - Refly CLI for workflow orchestration\n *\n * This package provides:\n * - CLI commands for workflow management\n * - Skill files for Claude Code integration\n */\n\n// Re-export types\nexport type {\n SuccessResponse,\n ErrorResponse,\n ErrorDetail,\n CLIResponse,\n} from './utils/output.js';\n\n// Re-export utilities\nexport { ErrorCodes } from './utils/output.js';\nexport { CLIError, AuthError, ValidationError } from './utils/errors.js';\n\n// Re-export config functions\nexport {\n loadConfig,\n saveConfig,\n getApiEndpoint,\n isAuthenticated,\n} from './config/config.js';\n\n// Re-export API client\nexport { apiRequest, verifyConnection } from './api/client.js';\n\n// Re-export skill installer\nexport { installSkill, isSkillInstalled } from './skill/installer.js';\n","/**\n * Unified output helpers for CLI commands.\n * Supports multiple output formats: json, pretty, compact, plain.\n * All CLI output MUST go through these functions.\n */\n\nimport {\n OutputFormatter,\n OutputFormat,\n resolveFormat,\n initFormatter,\n getFormatter,\n type FormatterOptions,\n type SuccessPayload,\n type SuggestedFix,\n} from './formatter.js';\n\nexport type { OutputFormat, FormatterOptions, SuccessPayload, SuggestedFix };\nexport { OutputFormatter, resolveFormat, initFormatter, getFormatter };\n\nexport interface SuccessResponse<T = unknown> {\n ok: true;\n type: string;\n version: string;\n payload: T;\n}\n\nexport interface ErrorDetail {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n hint?: string;\n suggestedFix?: SuggestedFix;\n /**\n * Indicates if the error can be fixed by adjusting parameters.\n * - true: Fix the parameters (see suggestedFix) and retry the SAME command\n * - false: The approach may not work, consider alternatives\n */\n recoverable?: boolean;\n}\n\nexport interface ErrorResponse {\n ok: false;\n type: 'error';\n version: string;\n error: ErrorDetail;\n}\n\nexport type CLIResponse<T = unknown> = SuccessResponse<T> | ErrorResponse;\n\nconst VERSION = '1.0';\n\n/**\n * Global output configuration\n */\nlet outputConfig: {\n format: OutputFormat;\n noColor: boolean;\n verbose: boolean;\n} = {\n format: 'pretty', // Default to pretty for better human readability\n noColor: false,\n verbose: false,\n};\n\n/**\n * Configure global output settings.\n * Call this early in CLI initialization.\n */\nexport function configureOutput(options: {\n format?: OutputFormat;\n noColor?: boolean;\n verbose?: boolean;\n autoDetect?: boolean;\n}): void {\n outputConfig = {\n format: options.format || resolveFormat(undefined, options.autoDetect ?? true),\n noColor: options.noColor ?? false,\n verbose: options.verbose ?? false,\n };\n\n // Initialize the global formatter\n initFormatter(outputConfig);\n}\n\n/**\n * Get current output format\n */\nexport function getOutputFormat(): OutputFormat {\n return outputConfig.format;\n}\n\n/**\n * Check if using pretty output (non-JSON)\n */\nexport function isPrettyOutput(): boolean {\n return outputConfig.format !== 'json';\n}\n\n/**\n * Output a success response and exit with code 0\n */\nexport function ok<T>(type: string, payload: T): never {\n const formatter = getFormatter();\n formatter.success(type, payload as unknown as SuccessPayload);\n process.exit(0);\n}\n\n/**\n * Output a success response without exiting (for streaming/multiple outputs)\n */\nexport function print<T>(type: string, payload: T): void {\n const formatter = getFormatter();\n formatter.success(type, payload as unknown as SuccessPayload);\n}\n\n/**\n * Determine if an error is recoverable (can be fixed by adjusting parameters)\n */\nfunction isRecoverableError(code: string, hasSuggestedFix: boolean): boolean {\n // Errors that are recoverable (fix parameters and retry)\n const recoverableCodes = [\n 'INVALID_INPUT',\n 'VALIDATION_ERROR',\n 'INVALID_NODE_INPUT',\n 'TIMEOUT', // Can retry\n 'RATE_LIMIT', // Can retry after waiting\n ];\n\n // If there's a suggestedFix, it's likely recoverable\n if (hasSuggestedFix) return true;\n\n return recoverableCodes.includes(code);\n}\n\n/**\n * Output an error response and exit with appropriate code\n */\nexport function fail(\n code: string,\n message: string,\n options?: {\n details?: Record<string, unknown>;\n hint?: string;\n exitCode?: number;\n suggestedFix?: SuggestedFix;\n recoverable?: boolean;\n },\n): never {\n const formatter = getFormatter();\n const recoverable = options?.recoverable ?? isRecoverableError(code, !!options?.suggestedFix);\n\n formatter.error({\n code,\n message,\n details: options?.details,\n hint: options?.hint,\n suggestedFix: options?.suggestedFix,\n recoverable,\n });\n process.exit(options?.exitCode ?? getExitCode(code));\n}\n\n/**\n * Output an error without exiting\n */\nexport function printError(\n code: string,\n message: string,\n options?: {\n details?: Record<string, unknown>;\n hint?: string;\n suggestedFix?: SuggestedFix;\n },\n): void {\n const formatter = getFormatter();\n formatter.error({\n code,\n message,\n details: options?.details,\n hint: options?.hint,\n suggestedFix: options?.suggestedFix,\n });\n}\n\n/**\n * Legacy JSON output (for backward compatibility in scripts)\n */\nexport function okJson<T>(type: string, payload: T): never {\n const response: SuccessResponse<T> = {\n ok: true,\n type,\n version: VERSION,\n payload,\n };\n console.log(JSON.stringify(response, null, 2));\n process.exit(0);\n}\n\n/**\n * Legacy JSON error output (for backward compatibility in scripts)\n */\nexport function failJson(\n code: string,\n message: string,\n options?: {\n details?: Record<string, unknown>;\n hint?: string;\n exitCode?: number;\n suggestedFix?: SuggestedFix;\n },\n): never {\n const response: ErrorResponse = {\n ok: false,\n type: 'error',\n version: VERSION,\n error: {\n code,\n message,\n ...(options?.details && { details: options.details }),\n ...(options?.hint && { hint: options.hint }),\n ...(options?.suggestedFix && { suggestedFix: options.suggestedFix }),\n },\n };\n console.log(JSON.stringify(response, null, 2));\n process.exit(options?.exitCode ?? getExitCode(code));\n}\n\n/**\n * Map error codes to exit codes\n */\nfunction getExitCode(code: string): number {\n if (code.startsWith('AUTH_')) return 2;\n if (code.startsWith('VALIDATION_') || code === 'INVALID_INPUT') return 3;\n if (code.startsWith('NETWORK_') || code === 'TIMEOUT') return 4;\n if (code.endsWith('_NOT_FOUND') || code === 'NOT_FOUND') return 5;\n return 1;\n}\n\n/**\n * Error codes used throughout the CLI\n */\nexport const ErrorCodes = {\n // Authentication\n AUTH_REQUIRED: 'AUTH_REQUIRED',\n AUTH_INVALID: 'AUTH_INVALID',\n AUTH_EXPIRED: 'AUTH_EXPIRED',\n\n // CLI\n CLI_NOT_FOUND: 'CLI_NOT_FOUND',\n CONFIG_ERROR: 'CONFIG_ERROR',\n\n // Builder\n BUILDER_NOT_STARTED: 'BUILDER_NOT_STARTED',\n BUILDER_ALREADY_STARTED: 'BUILDER_ALREADY_STARTED',\n VALIDATION_REQUIRED: 'VALIDATION_REQUIRED',\n VALIDATION_ERROR: 'VALIDATION_ERROR',\n DUPLICATE_NODE_ID: 'DUPLICATE_NODE_ID',\n NODE_NOT_FOUND: 'NODE_NOT_FOUND',\n CYCLE_DETECTED: 'CYCLE_DETECTED',\n INVALID_STATE: 'INVALID_STATE',\n\n // Workflow\n WORKFLOW_NOT_FOUND: 'WORKFLOW_NOT_FOUND',\n WORKFLOW_EXISTS: 'WORKFLOW_EXISTS',\n RUN_NOT_FOUND: 'RUN_NOT_FOUND',\n\n // Node\n INVALID_NODE_TYPE: 'INVALID_NODE_TYPE',\n INVALID_NODE_INPUT: 'INVALID_NODE_INPUT',\n EXECUTION_FAILED: 'EXECUTION_FAILED',\n\n // Network\n NETWORK_ERROR: 'NETWORK_ERROR',\n TIMEOUT: 'TIMEOUT',\n API_ERROR: 'API_ERROR',\n\n // General\n NOT_FOUND: 'NOT_FOUND',\n CONFLICT: 'CONFLICT',\n PERMISSION_DENIED: 'PERMISSION_DENIED',\n INVALID_INPUT: 'INVALID_INPUT',\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n\n // Variables\n MISSING_VARIABLES: 'MISSING_VARIABLES',\n} as const;\n\nexport type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];\n","/**\n * Multi-format output formatter for CLI.\n * Supports: pretty, json, compact, plain\n */\n\nimport { Style, Symbols, AsciiSymbol, UI, shouldUseColor, isTTY, styled } from './ui.js';\n\nexport type OutputFormat = 'pretty' | 'json' | 'compact' | 'plain';\n\nexport interface FormatterOptions {\n format: OutputFormat;\n noColor?: boolean;\n verbose?: boolean;\n}\n\nexport interface SuccessPayload {\n message?: string;\n [key: string]: unknown;\n}\n\nexport interface SuggestedFix {\n field?: string;\n format?: string;\n example?: string;\n}\n\nexport interface ErrorPayload {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n hint?: string;\n suggestedFix?: SuggestedFix;\n /**\n * Indicates if the error can be fixed by adjusting parameters.\n * - true: Fix the parameters (see suggestedFix) and retry the SAME command\n * - false: The approach may not work, consider alternatives\n */\n recoverable?: boolean;\n}\n\nconst VERSION = '1.0';\n\n/**\n * Determine the effective output format\n * Priority: explicit flag > REFLY_FORMAT env > auto-detect (TTY=pretty, pipe=json)\n */\nexport function resolveFormat(explicitFormat?: OutputFormat, autoDetect = true): OutputFormat {\n // 1. Explicit format from CLI flag\n if (explicitFormat) {\n return explicitFormat;\n }\n\n // 2. Environment variable override (always respected)\n const envFormat = process.env.REFLY_FORMAT as OutputFormat | undefined;\n if (envFormat && ['pretty', 'json', 'compact', 'plain'].includes(envFormat)) {\n return envFormat;\n }\n\n // 3. Auto-detect based on TTY\n if (autoDetect) {\n // When piped (not a TTY), use JSON for machine parsing\n // When interactive (TTY), use pretty for human readability\n return isTTY() ? 'pretty' : 'json';\n }\n\n return 'pretty';\n}\n\n/**\n * Output formatter class\n */\nexport class OutputFormatter {\n private options: FormatterOptions;\n private useColor: boolean;\n private useUnicode: boolean;\n\n constructor(options: Partial<FormatterOptions> = {}) {\n this.options = {\n format: options.format || 'pretty',\n noColor: options.noColor ?? false,\n verbose: options.verbose ?? false,\n };\n\n this.useColor = !this.options.noColor && this.options.format !== 'plain' && shouldUseColor();\n\n // Use Unicode symbols for pretty/compact formats, ASCII only for plain\n this.useUnicode = this.options.format !== 'plain';\n }\n\n /**\n * Output a success response\n */\n success(type: string, payload: SuccessPayload): void {\n switch (this.options.format) {\n case 'json':\n this.outputJson({ ok: true, type, version: VERSION, payload });\n break;\n case 'pretty':\n this.outputPretty(type, payload);\n break;\n case 'compact':\n this.outputCompact(type, payload);\n break;\n case 'plain':\n this.outputPlain(type, payload);\n break;\n }\n }\n\n /**\n * Output an error response\n */\n error(error: ErrorPayload): void {\n switch (this.options.format) {\n case 'json':\n this.outputJson({\n ok: false,\n type: 'error',\n version: VERSION,\n error,\n });\n break;\n case 'pretty':\n this.outputErrorPretty(error);\n break;\n case 'compact':\n this.outputErrorCompact(error);\n break;\n case 'plain':\n this.outputErrorPlain(error);\n break;\n }\n }\n\n /**\n * Output progress message (non-blocking, for TTY only)\n */\n progress(message: string): void {\n if (this.options.format === 'json') {\n return; // No progress in JSON mode\n }\n\n if (!isTTY()) {\n console.log(message);\n return;\n }\n\n const icon = this.useColor ? styled(Symbols.RUNNING, Style.TEXT_INFO) : AsciiSymbol.RUNNING;\n process.stdout.write(`\\r${icon} ${message}`);\n }\n\n /**\n * Clear progress line\n */\n clearProgress(): void {\n if (isTTY()) {\n process.stdout.write('\\r\\x1b[K');\n }\n }\n\n // === JSON Format ===\n\n private outputJson(data: unknown): void {\n console.log(JSON.stringify(data, this.sanitizeJsonReplacer, 2));\n }\n\n /**\n * JSON replacer that sanitizes control characters in strings.\n * Control characters (U+0000 to U+001F) can break jq parsing.\n */\n private sanitizeJsonReplacer = (_key: string, value: unknown): unknown => {\n if (typeof value === 'string') {\n // Remove control characters (except \\n, \\r, \\t which are common)\n // Using character code check to avoid linter issues with control chars in regex\n return value\n .split('')\n .filter((char) => {\n const code = char.charCodeAt(0);\n // Allow printable chars (>= 0x20), and \\t (0x09), \\n (0x0A), \\r (0x0D)\n return code >= 0x20 || code === 0x09 || code === 0x0a || code === 0x0d;\n })\n .join('');\n }\n return value;\n };\n\n // === Pretty Format ===\n\n private outputPretty(type: string, payload: SuccessPayload): void {\n // Special handling for workflow status\n if (type === 'workflow.status' || type === 'workflow.progress') {\n this.outputWorkflowStatus(payload);\n return;\n }\n\n // Special handling for CLI status (Phase 1: Charm-style cards)\n if (type === 'status') {\n this.outputStatusPretty(payload);\n return;\n }\n\n // Phase 2: Workflow list with Docker-style table\n if (type === 'workflow.list') {\n this.outputWorkflowListPretty(payload);\n return;\n }\n\n const { message, ...rest } = payload;\n\n // Success icon and message\n if (message) {\n console.log(UI.successMsg(message));\n } else {\n console.log(UI.successMsg(this.humanizeType(type)));\n }\n\n // Check if this is a node-related output (has node data)\n if (rest.node && typeof rest.node === 'object') {\n console.log();\n this.outputNodeInfo(rest.node as Record<string, unknown>);\n } else {\n // Additional fields (using labeled values for better visual)\n const fields = this.extractDisplayFields(rest);\n if (fields.length > 0) {\n console.log();\n for (const [key, value] of fields) {\n console.log(UI.labeledValue(this.humanizeKey(key), this.formatValue(value)));\n }\n }\n }\n\n // Nested objects (like diff, builder) - but skip 'node' as it's handled above\n const nested = this.extractNestedObjects(rest);\n for (const [key, obj] of nested) {\n if (key === 'node') continue; // Already handled\n console.log();\n this.outputNestedObject(key, obj as Record<string, unknown>);\n }\n\n // Workflow stats summary (if available)\n if (rest.nodesCount !== undefined || rest.edgesCount !== undefined) {\n console.log();\n const stats: Array<{\n label: string;\n value: string | number;\n type?: 'success' | 'error' | 'warning' | 'info';\n }> = [];\n if (rest.nodesCount !== undefined)\n stats.push({ label: 'Nodes', value: rest.nodesCount as number });\n if (rest.edgesCount !== undefined)\n stats.push({ label: 'Edges', value: rest.edgesCount as number });\n if (rest.valid !== undefined) {\n stats.push({\n label: 'Valid',\n value: rest.valid ? '✓' : '✗',\n type: rest.valid ? 'success' : 'error',\n });\n }\n console.log(UI.stats(stats));\n }\n\n // Hint/next step\n if (rest.nextStep) {\n console.log();\n console.log(UI.dim(` 💡 ${rest.nextStep}`));\n }\n\n console.log();\n }\n\n /**\n * Output node information in a visual format\n */\n private outputNodeInfo(node: Record<string, unknown>): void {\n const id = (node.id as string) || (node.nodeId as string) || 'unknown';\n const type = (node.type as string) || (node.nodeType as string) || 'unknown';\n const dependsOn = (node.dependsOn as string[]) || (node.dependencies as string[]) || [];\n\n // Node card display\n console.log(UI.nodeCard({ id, type, dependsOn }));\n\n // Additional node properties (config, etc.)\n const skipKeys = [\n 'id',\n 'nodeId',\n 'type',\n 'nodeType',\n 'dependsOn',\n 'dependencies',\n 'config',\n 'data',\n ];\n const extraFields = Object.entries(node).filter(\n ([k, v]) => !skipKeys.includes(k) && v !== null && v !== undefined && typeof v !== 'object',\n );\n\n if (extraFields.length > 0) {\n for (const [key, value] of extraFields) {\n console.log(UI.labeledValue(this.humanizeKey(key), this.formatValue(value)));\n }\n }\n }\n\n private outputNestedObject(label: string, obj: Record<string, unknown>): void {\n const humanLabel = this.humanizeKey(label);\n const fields = Object.entries(obj).filter(\n ([, v]) => v !== null && v !== undefined && typeof v !== 'object',\n );\n\n if (fields.length === 0) return;\n\n // Compact display for small objects\n if (fields.length <= 3) {\n const parts = fields.map(([k, v]) => `${this.humanizeKey(k)}: ${this.formatValue(v)}`);\n console.log(UI.indent(UI.dim(`${humanLabel}: `) + parts.join(' ')));\n } else {\n console.log(UI.indent(UI.dim(`${humanLabel}:`)));\n for (const [k, v] of fields) {\n console.log(UI.keyValue(this.humanizeKey(k), this.formatValue(v), 14));\n }\n }\n }\n\n private outputErrorPretty(error: ErrorPayload): void {\n console.log(UI.errorMsg(error.message));\n\n if (error.code) {\n console.log(UI.keyValue('Code', UI.dim(error.code)));\n }\n\n // Show recoverable status prominently\n if (error.recoverable !== undefined) {\n const recoverableText = error.recoverable\n ? '🔄 Recoverable: Fix the parameter and retry the SAME command'\n : '❌ Not recoverable: Consider a different approach';\n console.log(UI.dim(` ${recoverableText}`));\n }\n\n if (error.details && Object.keys(error.details).length > 0) {\n console.log();\n console.log(UI.indent(UI.dim('Details:')));\n for (const [key, value] of Object.entries(error.details)) {\n const humanKey = this.humanizeKey(key);\n // For objects, show key on its own line then formatted object below\n if (typeof value === 'object' && value !== null) {\n console.log(UI.indent(`${UI.dim(`${humanKey}:`)}`));\n console.log(UI.indent(this.formatObject(value as Record<string, unknown>, 2), 4));\n } else {\n console.log(UI.keyValue(humanKey, this.formatValue(value), 14));\n }\n }\n }\n\n if (error.hint) {\n console.log();\n console.log(UI.dim(` 💡 Hint: ${error.hint}`));\n }\n\n if (error.suggestedFix && Object.keys(error.suggestedFix).length > 0) {\n console.log();\n console.log(UI.dim(' ✅ Suggested fix:'));\n console.log(\n UI.indent(this.formatObject(error.suggestedFix as Record<string, unknown>, 2), 4),\n );\n }\n\n console.log();\n }\n\n // === Workflow List Format (Phase 2: Docker-style table) ===\n\n private outputWorkflowListPretty(payload: SuccessPayload): void {\n const { workflows, total } = payload as { workflows: unknown[]; total: number };\n const workflowList = workflows as Array<Record<string, unknown>>;\n\n if (!workflowList || workflowList.length === 0) {\n console.log(UI.dim(' No workflows found'));\n console.log();\n return;\n }\n\n // Format status for each workflow\n const rows = workflowList.map((w) => ({\n name: String(w.name || '—').slice(0, 40),\n nodes: w.nodeCount ?? 0,\n updated: w.updatedAt ? UI.relativeTime(w.updatedAt as string) : '—',\n }));\n\n console.log(\n UI.table({\n title: 'WORKFLOWS',\n columns: [\n { key: 'name', label: 'Name', width: 45 },\n { key: 'nodes', label: 'Nodes', width: 6, align: 'right' },\n { key: 'updated', label: 'Updated', width: 12 },\n ],\n rows,\n }),\n );\n\n if (total > workflowList.length) {\n console.log();\n console.log(UI.dim(` Showing ${workflowList.length} of ${total} workflows`));\n }\n console.log();\n }\n\n // === CLI Status Format (Phase 1: Charm-style cards) ===\n\n private outputStatusPretty(payload: SuccessPayload): void {\n const { cli_version, auth_status, user, skill, api_endpoint } = payload as Record<\n string,\n unknown\n >;\n\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n\n // Header\n console.log(`${sym.DIAMOND} ${UI.bold('Refly CLI')} v${cli_version || '?'}`);\n console.log();\n\n // Auth status\n const authOk = auth_status === 'valid';\n const userObj = user as Record<string, unknown> | null;\n let authText = '';\n if (authOk && userObj?.email) {\n authText = String(userObj.email);\n } else if (auth_status === 'expired') {\n authText = 'Token expired';\n } else {\n authText = 'Not authenticated';\n }\n\n // Skill status\n const skillObj = skill as Record<string, unknown> | null;\n const skillInstalled = skillObj?.installed === true;\n const skillVersion = skillObj?.version ? `v${skillObj.version}` : '';\n const skillUpToDate = skillObj?.up_to_date === true;\n let skillText = '';\n if (skillInstalled) {\n skillText = skillVersion + (skillUpToDate ? ' (up to date)' : ' (update available)');\n } else {\n skillText = 'Not installed';\n }\n\n // Build combined status card\n const authIcon = authOk\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.FAILURE, Style.TEXT_DANGER);\n const connIcon = authOk\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.PENDING, Style.TEXT_DIM);\n const skillIcon = skillInstalled\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.PENDING, Style.TEXT_DIM);\n\n const displayEndpoint = api_endpoint ? String(api_endpoint) : 'https://refly.ai';\n const lines: Array<{ text: string; indent?: boolean; muted?: boolean }> = [\n { text: `${authIcon} Account ${authOk ? authText : authText}`, muted: !authOk },\n { text: `${connIcon} Link ${displayEndpoint}` },\n { text: `${skillIcon} Version ${skillText}`, muted: !skillInstalled },\n ];\n\n console.log(\n UI.card({\n title: 'Status',\n lines,\n width: 45,\n }),\n );\n console.log();\n }\n\n // === Workflow Status Format ===\n\n private outputWorkflowStatus(payload: SuccessPayload): void {\n const {\n runId,\n status,\n title,\n totalNodes,\n executedNodes,\n failedNodes,\n nodeStatuses,\n createdAt,\n updatedAt,\n watching,\n isInitial,\n completed,\n // For progress updates\n summary,\n changedNodes,\n } = payload as Record<string, unknown>;\n\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n\n // Header with status\n const statusStr = (status as string) || 'unknown';\n const statusIcon = UI.statusIcon(statusStr);\n const statusLabel = this.formatWorkflowStatus(statusStr);\n\n // For progress updates (delta mode), show compact output\n if (changedNodes && !isInitial) {\n const progressStr = UI.progressBar(\n (executedNodes as number) || 0,\n (totalNodes as number) || 1,\n { width: 25 },\n );\n console.log(` ${progressStr} ${statusIcon} ${statusLabel}`);\n\n // Show changed nodes\n const nodes = changedNodes as Array<Record<string, unknown>>;\n if (nodes && nodes.length > 0) {\n for (const node of nodes) {\n const nodeIcon = UI.statusIcon(node.status as string);\n const nodeTitle = (node.title as string) || (node.nodeId as string);\n console.log(` ${nodeIcon} ${nodeTitle}`);\n }\n }\n\n if (summary) {\n console.log(UI.dim(` ${summary}`));\n }\n return;\n }\n\n // Full status output\n console.log(`${statusIcon} ${UI.bold('Workflow')} ${statusLabel}`);\n console.log();\n\n // Progress bar\n const total = (totalNodes as number) || 0;\n const executed = (executedNodes as number) || 0;\n const failed = (failedNodes as number) || 0;\n\n if (total > 0) {\n const progressStr = UI.progressBar(executed, total, { width: 30 });\n console.log(` ${progressStr}`);\n console.log();\n }\n\n // Run info\n console.log(UI.labeledValue('Run ID', (runId as string) || '—'));\n if (title) {\n console.log(UI.labeledValue('Title', title as string));\n }\n\n // Time info\n if (createdAt) {\n const duration = UI.formatDuration(createdAt as string, updatedAt as string);\n console.log(\n UI.labeledValue(\n 'Started',\n UI.formatTime(createdAt as string) + (duration ? ` (${duration})` : ''),\n ),\n );\n }\n\n // Node statuses\n const nodes = nodeStatuses as Array<Record<string, unknown>>;\n if (nodes && nodes.length > 0) {\n console.log();\n console.log(UI.dim(' Nodes:'));\n\n nodes.forEach((node, idx) => {\n const isLast = idx === nodes.length - 1;\n const prefix = isLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n const nodeIcon = UI.statusIcon(node.status as string);\n const nodeTitle = (node.title as string) || (node.nodeId as string);\n const nodeType = (node.nodeType as string) || '';\n const nodeProgress = node.progress as number;\n\n let line = ` ${prefix}${sym.BOX_HORIZONTAL} ${nodeIcon} ${nodeTitle}`;\n if (nodeType) {\n line += ` ${UI.dim(`(${nodeType})`)}`;\n }\n if (nodeProgress !== undefined && nodeProgress < 100 && node.status === 'executing') {\n line += ` ${UI.dim(`${nodeProgress}%`)}`;\n }\n console.log(line);\n\n // Show error message if failed\n if (node.status === 'failed' && node.errorMessage) {\n const errorPrefix = isLast ? ' ' : ` ${sym.BOX_VERTICAL}`;\n // Clean up error message (remove JSON array brackets if present)\n let errorMsg = node.errorMessage as string;\n if (errorMsg.startsWith('[') && errorMsg.endsWith(']')) {\n try {\n const parsed = JSON.parse(errorMsg);\n errorMsg = Array.isArray(parsed) ? parsed.join(', ') : errorMsg;\n } catch {\n // Keep original if not valid JSON\n }\n }\n if (errorMsg && errorMsg !== '[]') {\n console.log(`${errorPrefix} ${UI.error(errorMsg)}`);\n }\n }\n });\n }\n\n // Summary stats\n if (failed > 0) {\n console.log();\n console.log(\n UI.stats([\n { label: 'Completed', value: executed, type: 'success' },\n { label: 'Failed', value: failed, type: 'error' },\n { label: 'Total', value: total },\n ]),\n );\n }\n\n // Watch mode indicator\n if (watching) {\n console.log();\n console.log(UI.dim(` ${sym.RUNNING} Watching for updates...`));\n }\n\n // Completion message\n if (completed) {\n console.log();\n if (statusStr === 'finish') {\n console.log(UI.successMsg('Workflow completed successfully'));\n } else if (statusStr === 'failed') {\n console.log(UI.errorMsg('Workflow failed'));\n }\n }\n\n console.log();\n }\n\n private formatWorkflowStatus(status: string): string {\n const statusMap: Record<string, string> = {\n init: 'Initializing',\n executing: 'Executing',\n finish: 'Completed',\n failed: 'Failed',\n };\n return statusMap[status] || status;\n }\n\n // === Compact Format ===\n\n private outputCompact(type: string, payload: SuccessPayload): void {\n const { message, ...rest } = payload;\n const icon = this.useColor ? styled(Symbols.SUCCESS, Style.TEXT_SUCCESS) : AsciiSymbol.SUCCESS;\n\n const mainMsg = message || this.humanizeType(type);\n const extras = this.extractDisplayFields(rest)\n .slice(0, 3)\n .map(([k, v]) => `${k}=${this.formatValue(v)}`)\n .join(' ');\n\n console.log(`${icon} ${mainMsg}${extras ? ` ${UI.dim(extras)}` : ''}`);\n }\n\n private outputErrorCompact(error: ErrorPayload): void {\n const icon = this.useColor ? styled(Symbols.FAILURE, Style.TEXT_DANGER) : AsciiSymbol.FAILURE;\n\n console.log(`${icon} ${error.message} ${UI.dim(`[${error.code}]`)}`);\n if (error.hint) {\n console.log(UI.dim(` ${error.hint}`));\n }\n if (error.suggestedFix) {\n console.log(UI.dim(` fix: ${this.formatValue(error.suggestedFix)}`));\n }\n }\n\n // === Plain Format ===\n\n private outputPlain(type: string, payload: SuccessPayload): void {\n const { message, ...rest } = payload;\n const mainMsg = message || this.humanizeType(type);\n\n console.log(`[ok] ${mainMsg}`);\n\n const fields = this.extractDisplayFields(rest);\n for (const [key, value] of fields) {\n console.log(` ${this.humanizeKey(key)}: ${this.formatValue(value)}`);\n }\n }\n\n private outputErrorPlain(error: ErrorPayload): void {\n console.log(`[err] ${error.message}`);\n console.log(` code: ${error.code}`);\n if (error.hint) {\n console.log(` hint: ${error.hint}`);\n }\n if (error.suggestedFix) {\n console.log(` suggestedFix: ${this.formatValue(error.suggestedFix)}`);\n }\n }\n\n // === Helper Methods ===\n\n private humanizeType(type: string): string {\n // builder.add-node -> Add Node\n return type\n .split('.')\n .pop()!\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n }\n\n private humanizeKey(key: string): string {\n // nodeCount -> Node Count, runId -> Run ID\n return key\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (s) => s.toUpperCase())\n .replace(/Id$/, 'ID')\n .trim();\n }\n\n private formatValue(value: unknown, indent = 0): string {\n if (value === null || value === undefined) {\n return UI.dim('—');\n }\n if (typeof value === 'boolean') {\n return this.formatBooleanValue(value);\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return value;\n }\n if (Array.isArray(value)) {\n // For simple arrays, join with comma\n if (value.every((v) => typeof v !== 'object' || v === null)) {\n return value.map((v) => this.formatValue(v)).join(', ');\n }\n // For arrays of objects, format each on new line\n return value.map((v) => this.formatValue(v, indent)).join(', ');\n }\n // For objects, format as key-value pairs\n if (typeof value === 'object') {\n return this.formatObject(value as Record<string, unknown>, indent);\n }\n return JSON.stringify(value);\n }\n\n private formatBooleanValue(value: boolean): string {\n if (value) {\n return this.useColor ? styled(Symbols.SUCCESS, Style.TEXT_SUCCESS) : 'yes';\n }\n return this.useColor ? styled(Symbols.FAILURE, Style.TEXT_DANGER) : 'no';\n }\n\n /**\n * Format an object as readable key-value pairs\n */\n private formatObject(obj: Record<string, unknown>, indent = 0): string {\n const entries = Object.entries(obj).filter(([, v]) => v !== null && v !== undefined);\n\n if (entries.length === 0) {\n return UI.dim('{}');\n }\n\n // For compact display (3 or fewer simple fields), show inline\n const simpleEntries = entries.filter(([, v]) => typeof v !== 'object');\n if (simpleEntries.length === entries.length && entries.length <= 3) {\n const parts = entries.map(([k, v]) => `${this.humanizeKey(k)}: ${this.formatValue(v)}`);\n return parts.join(', ');\n }\n\n // For larger objects, show as tree structure\n const lines: string[] = [];\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n const padding = ' '.repeat(indent);\n\n entries.forEach(([key, val], idx) => {\n const isLast = idx === entries.length - 1;\n const prefix = isLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n const humanKey = this.humanizeKey(key);\n\n if (typeof val === 'object' && val !== null && !Array.isArray(val)) {\n // Nested object - show header then recurse\n lines.push(`${padding}${prefix}${sym.BOX_HORIZONTAL} ${UI.dim(humanKey)}:`);\n const nestedStr = this.formatObject(val as Record<string, unknown>, indent + 3);\n lines.push(nestedStr);\n } else {\n lines.push(\n `${padding}${prefix}${sym.BOX_HORIZONTAL} ${UI.dim(humanKey)}: ${this.formatValue(val)}`,\n );\n }\n });\n\n return lines.join('\\n');\n }\n\n private extractDisplayFields(obj: Record<string, unknown>): Array<[string, unknown]> {\n return Object.entries(obj).filter(\n ([key, value]) =>\n value !== null && value !== undefined && typeof value !== 'object' && key !== 'nextStep',\n );\n }\n\n private extractNestedObjects(obj: Record<string, unknown>): Array<[string, unknown]> {\n return Object.entries(obj).filter(\n ([key, value]) =>\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n key !== 'node' && // Skip raw node data in pretty mode\n key !== 'diff',\n );\n }\n}\n\n/**\n * Global formatter instance\n */\nlet globalFormatter: OutputFormatter | null = null;\n\n/**\n * Initialize the global formatter\n */\nexport function initFormatter(options: Partial<FormatterOptions> = {}): OutputFormatter {\n globalFormatter = new OutputFormatter(options);\n return globalFormatter;\n}\n\n/**\n * Get the global formatter (initializes with defaults if not set)\n */\nexport function getFormatter(): OutputFormatter {\n if (!globalFormatter) {\n globalFormatter = new OutputFormatter({ format: resolveFormat() });\n }\n return globalFormatter;\n}\n\nexport default OutputFormatter;\n","/**\n * UI utilities for CLI output styling.\n * Reference: OpenCode CLI ui.ts\n */\n\n/**\n * ANSI color and style codes\n */\nexport const Style = {\n // Reset\n RESET: '\\x1b[0m',\n\n // Text styles\n BOLD: '\\x1b[1m',\n DIM: '\\x1b[2m',\n ITALIC: '\\x1b[3m',\n UNDERLINE: '\\x1b[4m',\n\n // Text colors\n TEXT_HIGHLIGHT: '\\x1b[96m', // Bright Cyan\n TEXT_HIGHLIGHT_BOLD: '\\x1b[96m\\x1b[1m',\n TEXT_DIM: '\\x1b[90m', // Gray\n TEXT_DIM_BOLD: '\\x1b[90m\\x1b[1m',\n TEXT_NORMAL: '\\x1b[0m',\n TEXT_NORMAL_BOLD: '\\x1b[1m',\n\n // Status colors\n TEXT_SUCCESS: '\\x1b[92m', // Bright Green\n TEXT_SUCCESS_BOLD: '\\x1b[92m\\x1b[1m',\n TEXT_WARNING: '\\x1b[93m', // Bright Yellow\n TEXT_WARNING_BOLD: '\\x1b[93m\\x1b[1m',\n TEXT_DANGER: '\\x1b[91m', // Bright Red\n TEXT_DANGER_BOLD: '\\x1b[91m\\x1b[1m',\n TEXT_INFO: '\\x1b[94m', // Bright Blue\n TEXT_INFO_BOLD: '\\x1b[94m\\x1b[1m',\n\n // Additional colors\n TEXT_MAGENTA: '\\x1b[95m',\n TEXT_MAGENTA_BOLD: '\\x1b[95m\\x1b[1m',\n TEXT_WHITE: '\\x1b[97m',\n TEXT_WHITE_BOLD: '\\x1b[97m\\x1b[1m',\n} as const;\n\n/**\n * Unicode symbols for pretty output\n */\nexport const Symbols = {\n // Status\n SUCCESS: '✓',\n FAILURE: '✗',\n WARNING: '⚠',\n INFO: 'ℹ',\n PENDING: '○',\n RUNNING: '◐',\n ARROW_RIGHT: '→',\n ARROW_DOWN: '↓',\n PLAY: '▶',\n STOP: '■',\n\n // Box drawing\n BOX_TOP_LEFT: '┌',\n BOX_TOP_RIGHT: '┐',\n BOX_BOTTOM_LEFT: '└',\n BOX_BOTTOM_RIGHT: '┘',\n BOX_HORIZONTAL: '─',\n BOX_VERTICAL: '│',\n BOX_VERTICAL_RIGHT: '├',\n BOX_VERTICAL_LEFT: '┤',\n\n // Bullets\n BULLET: '•',\n DIAMOND: '◆',\n} as const;\n\n/**\n * ASCII fallback symbols for plain/no-color mode\n */\nexport const AsciiSymbol = {\n SUCCESS: '[ok]',\n FAILURE: '[err]',\n WARNING: '[warn]',\n INFO: '[info]',\n PENDING: '[ ]',\n RUNNING: '[..]',\n ARROW_RIGHT: '->',\n ARROW_DOWN: 'v',\n PLAY: '>',\n STOP: 'x',\n\n BOX_TOP_LEFT: '+',\n BOX_TOP_RIGHT: '+',\n BOX_BOTTOM_LEFT: '+',\n BOX_BOTTOM_RIGHT: '+',\n BOX_HORIZONTAL: '-',\n BOX_VERTICAL: '|',\n BOX_VERTICAL_RIGHT: '+',\n BOX_VERTICAL_LEFT: '+',\n\n BULLET: '*',\n DIAMOND: '*',\n} as const;\n\n/**\n * Tool display styles mapping\n * Format: [displayLabel, colorStyle]\n */\nexport const TOOL_STYLES: Record<string, [string, string]> = {\n // Workflow node types\n 'knowledge.search': ['Search', Style.TEXT_INFO_BOLD],\n 'llm.generate': ['Generate', Style.TEXT_SUCCESS_BOLD],\n 'notification.email': ['Email', Style.TEXT_WARNING_BOLD],\n 'code.executor': ['Code', Style.TEXT_DANGER_BOLD],\n 'web.search': ['Web', Style.TEXT_HIGHLIGHT_BOLD],\n 'document.read': ['Read', Style.TEXT_HIGHLIGHT_BOLD],\n 'document.write': ['Write', Style.TEXT_SUCCESS_BOLD],\n\n // Builder operations\n 'builder.start': ['Builder', Style.TEXT_INFO_BOLD],\n 'builder.add-node': ['AddNode', Style.TEXT_SUCCESS_BOLD],\n 'builder.remove-node': ['RemoveNode', Style.TEXT_WARNING_BOLD],\n 'builder.connect': ['Connect', Style.TEXT_INFO_BOLD],\n 'builder.validate': ['Validate', Style.TEXT_HIGHLIGHT_BOLD],\n 'builder.commit': ['Commit', Style.TEXT_SUCCESS_BOLD],\n\n // Workflow operations\n 'workflow.create': ['Create', Style.TEXT_SUCCESS_BOLD],\n 'workflow.run': ['Run', Style.TEXT_INFO_BOLD],\n 'workflow.list': ['List', Style.TEXT_DIM_BOLD],\n 'workflow.get': ['Get', Style.TEXT_DIM_BOLD],\n 'workflow.delete': ['Delete', Style.TEXT_DANGER_BOLD],\n};\n\n/**\n * Check if colors should be enabled\n */\nexport function shouldUseColor(): boolean {\n // Check NO_COLOR environment variable (https://no-color.org/)\n if (process.env.NO_COLOR !== undefined) {\n return false;\n }\n\n // Check REFLY_NO_COLOR\n if (process.env.REFLY_NO_COLOR === '1') {\n return false;\n }\n\n // Check FORCE_COLOR\n if (process.env.FORCE_COLOR !== undefined) {\n return true;\n }\n\n // Check if stdout is a TTY\n return process.stdout.isTTY === true;\n}\n\n/**\n * Check if output is going to a TTY\n */\nexport function isTTY(): boolean {\n return process.stdout.isTTY === true;\n}\n\n/**\n * Get the appropriate symbol based on color mode\n */\nexport function getSymbol(key: keyof typeof Symbols, useColor: boolean = shouldUseColor()): string {\n return useColor ? Symbols[key] : AsciiSymbol[key];\n}\n\n/**\n * Apply style to text if colors are enabled\n */\nexport function styled(text: string, style: string, useColor: boolean = shouldUseColor()): string {\n if (!useColor) {\n return text;\n }\n return `${style}${text}${Style.RESET}`;\n}\n\n/**\n * Format a stat value with the appropriate style based on type.\n */\nfunction formatStatValue(value: string, type?: 'success' | 'error' | 'warning' | 'info'): string {\n if (!type) {\n return UI.bold(value);\n }\n\n switch (type) {\n case 'success':\n return UI.success(value);\n case 'error':\n return UI.error(value);\n case 'warning':\n return UI.warning(value);\n case 'info':\n return UI.info(value);\n }\n}\n\n/**\n * Helper functions for common styles\n */\nexport const UI = {\n // Styled text helpers\n success: (text: string) => styled(text, Style.TEXT_SUCCESS),\n error: (text: string) => styled(text, Style.TEXT_DANGER),\n warning: (text: string) => styled(text, Style.TEXT_WARNING),\n info: (text: string) => styled(text, Style.TEXT_INFO),\n highlight: (text: string) => styled(text, Style.TEXT_HIGHLIGHT),\n dim: (text: string) => styled(text, Style.TEXT_DIM),\n bold: (text: string) => styled(text, Style.BOLD),\n\n // Success/error icons with text\n successIcon: () => styled(getSymbol('SUCCESS'), Style.TEXT_SUCCESS),\n errorIcon: () => styled(getSymbol('FAILURE'), Style.TEXT_DANGER),\n warningIcon: () => styled(getSymbol('WARNING'), Style.TEXT_WARNING),\n infoIcon: () => styled(getSymbol('INFO'), Style.TEXT_INFO),\n\n // Formatted messages\n successMsg: (msg: string) => `${UI.successIcon()} ${msg}`,\n errorMsg: (msg: string) => `${UI.errorIcon()} ${msg}`,\n warningMsg: (msg: string) => `${UI.warningIcon()} ${msg}`,\n infoMsg: (msg: string) => `${UI.infoIcon()} ${msg}`,\n\n // Box drawing\n box: (title: string, content: string, width = 40) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const titlePart = title ? `${sym.BOX_HORIZONTAL} ${title} ` : '';\n const remainingWidth = Math.max(0, width - titlePart.length - 2);\n\n const lines = [\n ` ${sym.BOX_TOP_LEFT}${titlePart}${sym.BOX_HORIZONTAL.repeat(remainingWidth)}${sym.BOX_TOP_RIGHT}`,\n ...content\n .split('\\n')\n .map((line) => ` ${sym.BOX_VERTICAL} ${line.padEnd(width - 4)}${sym.BOX_VERTICAL}`),\n ` ${sym.BOX_BOTTOM_LEFT}${sym.BOX_HORIZONTAL.repeat(width - 2)}${sym.BOX_BOTTOM_RIGHT}`,\n ];\n\n return lines.join('\\n');\n },\n\n // Indentation\n indent: (text: string, spaces = 2) => {\n const pad = ' '.repeat(spaces);\n return text\n .split('\\n')\n .map((line) => `${pad}${line}`)\n .join('\\n');\n },\n\n // Key-value display\n keyValue: (key: string, value: string, keyWidth = 12) => {\n return ` ${UI.dim(key.padEnd(keyWidth))} ${value}`;\n },\n\n // Labeled value with icon (more visual than keyValue)\n labeledValue: (label: string, value: string, icon?: string) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const displayIcon = icon || sym.BULLET;\n return ` ${displayIcon} ${UI.dim(`${label}:`)} ${value}`;\n },\n\n // Flow diagram for dependencies (e.g., input → search → generate)\n flowDiagram: (nodes: string[], highlight?: string) => {\n const useColor = shouldUseColor();\n const arrow = useColor ? ` ${Symbols.ARROW_RIGHT} ` : ' -> ';\n\n return nodes\n .map((node, idx) => {\n if (highlight && node === highlight) {\n return UI.highlight(UI.bold(node));\n }\n // First node is dimmed (usually input), last highlighted (output)\n if (idx === 0) {\n return UI.dim(node);\n }\n return node;\n })\n .join(arrow);\n },\n\n // Dependency display with visual arrow\n dependency: (from: string, to: string) => {\n const useColor = shouldUseColor();\n const arrow = useColor ? Symbols.ARROW_RIGHT : '->';\n return ` ${UI.dim(from)} ${arrow} ${UI.bold(to)}`;\n },\n\n // Multiple dependencies display\n dependencies: (deps: string[], nodeName: string) => {\n if (deps.length === 0) {\n return ` ${UI.dim('(no dependencies)')}`;\n }\n const useColor = shouldUseColor();\n const arrow = useColor ? Symbols.ARROW_RIGHT : '->';\n const depList = deps.map((d) => UI.dim(d)).join(', ');\n return ` ${depList} ${arrow} ${UI.bold(nodeName)}`;\n },\n\n // Tree structure for hierarchical data\n tree: (items: Array<{ label: string; children?: string[] }>) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const lines: string[] = [];\n\n items.forEach((item, idx) => {\n const isLast = idx === items.length - 1;\n const prefix = isLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n lines.push(` ${prefix}${sym.BOX_HORIZONTAL} ${item.label}`);\n\n if (item.children) {\n const childPrefix = isLast ? ' ' : ` ${sym.BOX_VERTICAL}`;\n item.children.forEach((child, childIdx) => {\n const childIsLast = childIdx === item.children!.length - 1;\n const childBranch = childIsLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n lines.push(`${childPrefix} ${childBranch}${sym.BOX_HORIZONTAL} ${UI.dim(child)}`);\n });\n }\n });\n\n return lines.join('\\n');\n },\n\n // Node card display (compact visual representation)\n nodeCard: (node: { id: string; type: string; dependsOn?: string[] }) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const [label, colorStyle] = TOOL_STYLES[node.type] || [node.type, Style.TEXT_INFO];\n const styledType = useColor ? `${colorStyle}${label}${Style.RESET}` : label;\n\n const lines: string[] = [];\n lines.push(` ${sym.DIAMOND} ${UI.bold(node.id)} ${UI.dim('(')}${styledType}${UI.dim(')')}`);\n\n if (node.dependsOn && node.dependsOn.length > 0) {\n const arrow = useColor ? Symbols.ARROW_RIGHT : '->';\n const deps = node.dependsOn.join(', ');\n lines.push(` ${UI.dim(deps)} ${arrow} ${node.id}`);\n }\n\n return lines.join('\\n');\n },\n\n // Status badge\n badge: (text: string, type: 'success' | 'error' | 'warning' | 'info' | 'dim' = 'info') => {\n const useColor = shouldUseColor();\n if (!useColor) {\n return `[${text}]`;\n }\n\n const styles: Record<string, string> = {\n success: Style.TEXT_SUCCESS,\n error: Style.TEXT_DANGER,\n warning: Style.TEXT_WARNING,\n info: Style.TEXT_INFO,\n dim: Style.TEXT_DIM,\n };\n\n return `${styles[type]}[${text}]${Style.RESET}`;\n },\n\n // Summary stats line\n stats: (\n items: Array<{\n label: string;\n value: string | number;\n type?: 'success' | 'error' | 'warning' | 'info';\n }>,\n ) => {\n const parts = items.map((item) => {\n const value = String(item.value);\n const styledValue = formatStatValue(value, item.type);\n return `${UI.dim(`${item.label}:`)} ${styledValue}`;\n });\n return ` ${parts.join(' ')}`;\n },\n\n // Progress bar\n progressBar: (\n current: number,\n total: number,\n options?: {\n width?: number;\n showPercent?: boolean;\n showCount?: boolean;\n filledChar?: string;\n emptyChar?: string;\n },\n ) => {\n const useColor = shouldUseColor();\n const width = options?.width ?? 20;\n const showPercent = options?.showPercent ?? true;\n const showCount = options?.showCount ?? true;\n const filledChar = options?.filledChar ?? (useColor ? '█' : '#');\n const emptyChar = options?.emptyChar ?? (useColor ? '░' : '-');\n\n const percent = total > 0 ? Math.round((current / total) * 100) : 0;\n const filled = total > 0 ? Math.round((current / total) * width) : 0;\n const empty = width - filled;\n\n const bar = filledChar.repeat(filled) + emptyChar.repeat(empty);\n const coloredBar = useColor\n ? styled(bar, percent === 100 ? Style.TEXT_SUCCESS : Style.TEXT_INFO)\n : bar;\n\n const parts: string[] = [`[${coloredBar}]`];\n if (showPercent) {\n parts.push(`${percent.toString().padStart(3)}%`);\n }\n if (showCount) {\n parts.push(UI.dim(`${current}/${total}`));\n }\n\n return parts.join(' ');\n },\n\n // Status icon based on status string\n statusIcon: (status: string) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n\n switch (status) {\n case 'finish':\n case 'completed':\n case 'success':\n return styled(sym.SUCCESS, Style.TEXT_SUCCESS);\n case 'failed':\n case 'error':\n return styled(sym.FAILURE, Style.TEXT_DANGER);\n case 'executing':\n case 'running':\n case 'in_progress':\n return styled(sym.RUNNING, Style.TEXT_INFO);\n case 'init':\n case 'pending':\n case 'waiting':\n return styled(sym.PENDING, Style.TEXT_DIM);\n default:\n return styled(sym.INFO, Style.TEXT_DIM);\n }\n },\n\n // Format duration in human readable form\n formatDuration: (startTime?: string, endTime?: string) => {\n if (!startTime) return '';\n const start = new Date(startTime).getTime();\n const end = endTime ? new Date(endTime).getTime() : Date.now();\n const durationMs = end - start;\n\n if (durationMs < 1000) return `${durationMs}ms`;\n if (durationMs < 60000) return `${(durationMs / 1000).toFixed(1)}s`;\n const minutes = Math.floor(durationMs / 60000);\n const seconds = Math.round((durationMs % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n },\n\n // Format timestamp\n formatTime: (timestamp?: string) => {\n if (!timestamp) return UI.dim('—');\n const date = new Date(timestamp);\n return date.toLocaleTimeString('en-US', { hour12: false });\n },\n\n // Tool execution line\n toolLine: (toolType: string, message: string, duration?: number): string => {\n const useColor = shouldUseColor();\n const [label, colorStyle] = TOOL_STYLES[toolType] || [toolType, Style.TEXT_INFO_BOLD];\n const sym = useColor ? Symbols : AsciiSymbol;\n const styledLabel = useColor\n ? `${colorStyle}${label.padEnd(8)}${Style.RESET}`\n : label.padEnd(8);\n const durationStr = duration !== undefined ? UI.dim(` [${duration.toFixed(1)}s]`) : '';\n\n return `${sym.BOX_VERTICAL} ${styledLabel} ${message}${durationStr}`;\n },\n\n // ============================================================\n // Phase 1: Charm-style Card Component\n // ============================================================\n\n /**\n * Charm-style card with box border\n * @param options Card configuration\n * @returns Formatted card string\n */\n card: (options: {\n icon?: string;\n title: string;\n status?: 'success' | 'error' | 'warning' | 'info' | 'pending';\n lines: Array<{ text: string; indent?: boolean; muted?: boolean }>;\n width?: number;\n }): string => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const maxWidth = Math.min(options.width ?? 50, 100);\n const innerWidth = maxWidth - 4; // Account for borders and padding\n\n // Determine status icon\n let statusIcon = options.icon ?? '';\n if (!statusIcon && options.status) {\n const iconMap: Record<string, string> = {\n success: sym.SUCCESS,\n error: sym.FAILURE,\n warning: sym.PENDING,\n info: sym.RUNNING,\n pending: sym.PENDING,\n };\n statusIcon = iconMap[options.status] || '';\n if (useColor && options.status) {\n const styleMap: Record<string, string> = {\n success: Style.TEXT_SUCCESS,\n error: Style.TEXT_DANGER,\n warning: Style.TEXT_WARNING,\n info: Style.TEXT_INFO,\n pending: Style.TEXT_DIM,\n };\n statusIcon = styled(statusIcon, styleMap[options.status]);\n }\n }\n\n // Build title line\n const titleText = statusIcon ? `${statusIcon} ${options.title}` : options.title;\n\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape codes need control characters\n const ansiRegex = /\\x1b\\[[0-9;]*m/g;\n\n // Truncate or wrap text to fit within card\n const truncate = (text: string, maxLen: number): string => {\n // Strip ANSI codes for length calculation\n const stripped = text.replace(ansiRegex, '');\n if (stripped.length <= maxLen) return text;\n // Find where to cut (accounting for ANSI codes)\n let visibleLen = 0;\n let cutIndex = 0;\n for (let i = 0; i < text.length; i++) {\n if (text[i] === '\\x1b') {\n // Skip ANSI sequence\n const end = text.indexOf('m', i);\n if (end !== -1) {\n i = end;\n continue;\n }\n }\n visibleLen++;\n if (visibleLen >= maxLen - 1) {\n cutIndex = i + 1;\n break;\n }\n }\n return `${text.slice(0, cutIndex)}…`;\n };\n\n const padRight = (text: string, width: number): string => {\n const stripped = text.replace(ansiRegex, '');\n const padding = Math.max(0, width - stripped.length);\n return text + ' '.repeat(padding);\n };\n\n const lines: string[] = [];\n\n // Top border\n lines.push(`${sym.BOX_TOP_LEFT}${sym.BOX_HORIZONTAL.repeat(maxWidth - 2)}${sym.BOX_TOP_RIGHT}`);\n\n // Title line\n const titleDisplay = truncate(titleText, innerWidth);\n lines.push(`${sym.BOX_VERTICAL} ${padRight(titleDisplay, innerWidth)} ${sym.BOX_VERTICAL}`);\n\n // Content lines\n for (const line of options.lines) {\n const prefix = line.indent ? ' ' : '';\n let content = prefix + line.text;\n if (line.muted && useColor) {\n content = prefix + UI.dim(line.text);\n }\n const displayContent = truncate(content, innerWidth);\n lines.push(`${sym.BOX_VERTICAL} ${padRight(displayContent, innerWidth)} ${sym.BOX_VERTICAL}`);\n }\n\n // Bottom border\n lines.push(\n `${sym.BOX_BOTTOM_LEFT}${sym.BOX_HORIZONTAL.repeat(maxWidth - 2)}${sym.BOX_BOTTOM_RIGHT}`,\n );\n\n return lines.join('\\n');\n },\n\n // ============================================================\n // Phase 1: Docker-style Table Component\n // ============================================================\n\n /**\n * Docker-style table with header and rows\n * @param options Table configuration\n * @returns Formatted table string\n */\n table: (options: {\n title?: string;\n columns: Array<{\n key: string;\n label: string;\n width?: number;\n align?: 'left' | 'right';\n }>;\n rows: Array<Record<string, unknown>>;\n maxWidth?: number;\n }): string => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const maxTotalWidth = options.maxWidth ?? 100;\n\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape codes need control characters\n const ansiStripRegex = /\\x1b\\[[0-9;]*m/g;\n\n // Calculate column widths\n const columns = options.columns.map((col) => {\n // Find max content width for this column\n let maxContentWidth = col.label.length;\n for (const row of options.rows) {\n const value = String(row[col.key] ?? '');\n // Strip ANSI codes and status icons for width calculation\n const stripped = value.replace(ansiStripRegex, '').replace(/^[✓✗◐○] /, '');\n maxContentWidth = Math.max(maxContentWidth, stripped.length);\n }\n return {\n ...col,\n calculatedWidth: col.width ?? Math.min(maxContentWidth, 40),\n };\n });\n\n // Adjust widths if total exceeds maxWidth\n const totalWidth = columns.reduce((sum, col) => sum + col.calculatedWidth + 2, 0);\n if (totalWidth > maxTotalWidth) {\n const scale = maxTotalWidth / totalWidth;\n for (const col of columns) {\n col.calculatedWidth = Math.max(5, Math.floor(col.calculatedWidth * scale));\n }\n }\n\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape codes need control characters\n const ansiRegex = /\\x1b\\[[0-9;]*m/g;\n\n const truncate = (text: string, maxLen: number): string => {\n const stripped = text.replace(ansiRegex, '');\n if (stripped.length <= maxLen) return text;\n let visibleLen = 0;\n let cutIndex = 0;\n for (let i = 0; i < text.length; i++) {\n if (text[i] === '\\x1b') {\n const end = text.indexOf('m', i);\n if (end !== -1) {\n i = end;\n continue;\n }\n }\n visibleLen++;\n if (visibleLen >= maxLen - 1) {\n cutIndex = i + 1;\n break;\n }\n }\n return `${text.slice(0, cutIndex)}…`;\n };\n\n const pad = (text: string, width: number, align: 'left' | 'right' = 'left'): string => {\n const stripped = text.replace(ansiRegex, '');\n const padding = Math.max(0, width - stripped.length);\n return align === 'right' ? ' '.repeat(padding) + text : text + ' '.repeat(padding);\n };\n\n const lines: string[] = [];\n\n // Title (if provided)\n if (options.title) {\n lines.push(`${sym.DIAMOND} ${useColor ? UI.bold(options.title) : options.title}`);\n }\n\n // Header row\n const headerCells = columns.map((col) => {\n const label = useColor ? col.label.toUpperCase() : col.label.toUpperCase();\n return pad(label, col.calculatedWidth, col.align);\n });\n lines.push(headerCells.join(' '));\n\n // Divider\n const dividerCells = columns.map((col) => '─'.repeat(col.calculatedWidth));\n lines.push(useColor ? UI.dim(dividerCells.join(' ')) : dividerCells.join(' '));\n\n // Data rows\n for (const row of options.rows) {\n const cells = columns.map((col) => {\n let value = String(row[col.key] ?? '—');\n value = truncate(value, col.calculatedWidth);\n return pad(value, col.calculatedWidth, col.align);\n });\n lines.push(cells.join(' '));\n }\n\n return lines.join('\\n');\n },\n\n // ============================================================\n // Phase 2/3 Extension Points (interfaces only)\n // ============================================================\n\n /**\n * Wizard step indicator (Phase 3)\n * Placeholder for future wizard-style login flow\n */\n wizardStep: (current: number, total: number, label: string): string => {\n const useColor = shouldUseColor();\n const stepText = `(${current}/${total})`;\n return useColor ? `${UI.dim(stepText)} ${label}` : `${stepText} ${label}`;\n },\n\n /**\n * Format relative time (e.g., \"2h ago\", \"5m ago\")\n */\n relativeTime: (date: Date | string): string => {\n const now = Date.now();\n const then = typeof date === 'string' ? new Date(date).getTime() : date.getTime();\n const diffMs = now - then;\n\n if (diffMs < 60000) return 'just now';\n if (diffMs < 3600000) return `${Math.floor(diffMs / 60000)}m ago`;\n if (diffMs < 86400000) return `${Math.floor(diffMs / 3600000)}h ago`;\n return `${Math.floor(diffMs / 86400000)}d ago`;\n },\n\n /**\n * Format time remaining (e.g., \"23h left\", \"5m left\")\n */\n timeRemaining: (expiresAt: Date | string | number): string => {\n const now = Date.now();\n const expiry = parseExpiryTimestamp(expiresAt);\n const diffMs = expiry - now;\n\n if (diffMs <= 0) return 'expired';\n if (diffMs < 60000) return `${Math.floor(diffMs / 1000)}s left`;\n if (diffMs < 3600000) return `${Math.floor(diffMs / 60000)}m left`;\n if (diffMs < 86400000) return `${Math.floor(diffMs / 3600000)}h left`;\n return `${Math.floor(diffMs / 86400000)}d left`;\n },\n};\n\n/**\n * Parse expiry timestamp from various formats to milliseconds.\n */\nfunction parseExpiryTimestamp(expiresAt: Date | string | number): number {\n if (typeof expiresAt === 'number') {\n return expiresAt * 1000; // Assume Unix timestamp in seconds\n }\n if (typeof expiresAt === 'string') {\n return new Date(expiresAt).getTime();\n }\n return expiresAt.getTime();\n}\n\nexport default UI;\n","/**\n * Custom error classes for CLI operations\n */\n\nimport { ErrorCode, ErrorCodes, type SuggestedFix } from './output.js';\n\nexport class CLIError extends Error {\n constructor(\n public readonly code: ErrorCode,\n message: string,\n public readonly details?: Record<string, unknown>,\n public readonly hint?: string,\n public readonly suggestedFix?: SuggestedFix,\n ) {\n super(message);\n this.name = 'CLIError';\n }\n}\n\nexport class AuthError extends CLIError {\n constructor(message: string, hint?: string) {\n super(ErrorCodes.AUTH_REQUIRED, message, undefined, hint ?? 'refly login');\n }\n}\n\nexport class ValidationError extends CLIError {\n constructor(message: string, details?: Record<string, unknown>) {\n super(ErrorCodes.VALIDATION_ERROR, message, details, 'Fix validation errors and retry');\n }\n}\n\nexport class NetworkError extends CLIError {\n constructor(message: string) {\n super(ErrorCodes.NETWORK_ERROR, message, undefined, 'Check your internet connection');\n }\n}\n\nexport class NotFoundError extends CLIError {\n constructor(resource: string, id: string) {\n super(\n ErrorCodes.NOT_FOUND,\n `${resource} not found: ${id}`,\n { resource, id },\n `Verify the ${resource.toLowerCase()} ID`,\n );\n }\n}\n","/**\n * Configuration management with atomic writes and secure permissions.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport * as crypto from 'node:crypto';\nimport { z } from 'zod';\nimport { getConfigPath, getReflyDir } from './paths.js';\n\n// Platform agent types for config schema\nconst AgentTypeEnum = z.enum([\n 'claude-code',\n 'codex',\n 'antigravity',\n 'github-copilot',\n 'windsurf',\n 'opencode',\n 'moltbot',\n 'cursor',\n 'continue',\n 'trae',\n 'qoder',\n]);\n\n// Platform config schema\nconst PlatformConfigSchema = z.object({\n enabled: z.boolean().default(true),\n globalPath: z.string().optional(),\n});\n\n// Config schema\nconst ConfigSchema = z.object({\n version: z.number().default(1),\n auth: z\n .object({\n // Authentication method: 'oauth' or 'apikey'\n method: z.enum(['oauth', 'apikey']).optional(),\n // OAuth tokens (used when method = 'oauth')\n accessToken: z.string().optional(),\n refreshToken: z.string().optional(),\n expiresAt: z.string().optional(),\n provider: z.enum(['google', 'github']).optional(),\n // API Key (used when method = 'apikey')\n apiKey: z.string().optional(),\n apiKeyId: z.string().optional(),\n apiKeyName: z.string().optional(),\n // User info (shared by both methods)\n user: z\n .object({\n uid: z.string(),\n email: z.string(),\n name: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n api: z\n .object({\n endpoint: z.string().default('https://refly.ai'),\n })\n .optional(),\n skill: z\n .object({\n installedVersion: z.string().optional(),\n installedAt: z.string().optional(),\n })\n .optional(),\n // Multi-platform configuration\n platforms: z.record(AgentTypeEnum, PlatformConfigSchema).optional(),\n});\n\nexport type Config = z.infer<typeof ConfigSchema>;\n\n// Default API endpoint and Web URL - injected at build time by tsup\n// Build with different environments:\n// - Production: pnpm build (or REFLY_BUILD_ENV=production pnpm build)\n// - Test/Dev: REFLY_BUILD_ENV=test pnpm build\n// - Staging: REFLY_BUILD_ENV=staging pnpm build\n// - Custom: REFLY_BUILD_ENDPOINT=https://custom.api.com REFLY_BUILD_WEB_URL=https://custom.web.com pnpm build\n// Can be overridden at runtime by REFLY_API_ENDPOINT / REFLY_WEB_URL env vars\nconst DEFAULT_API_ENDPOINT = process.env.REFLY_BUILD_DEFAULT_ENDPOINT || 'https://refly.ai';\nconst DEFAULT_WEB_URL = process.env.REFLY_BUILD_DEFAULT_WEB_URL || 'https://refly.ai';\n\nconst DEFAULT_CONFIG: Config = {\n version: 1,\n api: {\n endpoint: DEFAULT_API_ENDPOINT,\n },\n};\n\n/**\n * Load configuration from file\n */\nexport function loadConfig(): Config {\n const configPath = getConfigPath();\n\n try {\n if (!fs.existsSync(configPath)) {\n return DEFAULT_CONFIG;\n }\n\n const content = fs.readFileSync(configPath, 'utf-8');\n const parsed = JSON.parse(content);\n return ConfigSchema.parse(parsed);\n } catch {\n // Return default config if parsing fails\n return DEFAULT_CONFIG;\n }\n}\n\n/**\n * Save configuration atomically with secure permissions\n */\nexport function saveConfig(config: Config): void {\n const configPath = getConfigPath();\n const tempPath = path.join(getReflyDir(), `.config-${crypto.randomUUID()}.tmp`);\n\n // Validate before saving\n const validated = ConfigSchema.parse(config);\n\n // Write to temp file first\n fs.writeFileSync(tempPath, JSON.stringify(validated, null, 2), {\n mode: 0o600, // Owner read/write only\n });\n\n // Atomic rename\n fs.renameSync(tempPath, configPath);\n\n // Ensure permissions on final file (for existing files)\n if (os.platform() !== 'win32') {\n fs.chmodSync(configPath, 0o600);\n }\n}\n\n/**\n * Get the API endpoint (with override support)\n */\nexport function getApiEndpoint(override?: string): string {\n if (override) return override;\n\n // Check environment variable\n const envEndpoint = process.env.REFLY_API_ENDPOINT;\n if (envEndpoint) return envEndpoint;\n\n // Load from config\n const config = loadConfig();\n return config.api?.endpoint ?? DEFAULT_CONFIG.api!.endpoint;\n}\n\n/**\n * Get the Web URL for browser links (with override support)\n * Used to generate workflow URLs, canvas links, etc.\n */\nexport function getWebUrl(override?: string): string {\n if (override) return override;\n\n // Check environment variable\n const envWebUrl = process.env.REFLY_WEB_URL;\n if (envWebUrl) return envWebUrl;\n\n // Default to build-time injected value\n return DEFAULT_WEB_URL;\n}\n\n/**\n * Check if authenticated (OAuth or API Key)\n */\nexport function isAuthenticated(): boolean {\n const config = loadConfig();\n const method = config.auth?.method;\n\n if (method === 'apikey') {\n return !!config.auth?.apiKey;\n }\n\n // Default to OAuth check\n return !!config.auth?.accessToken;\n}\n\n/**\n * Get authentication method\n */\nexport function getAuthMethod(): 'oauth' | 'apikey' | undefined {\n const config = loadConfig();\n return config.auth?.method;\n}\n\n/**\n * Clear authentication\n */\nexport function clearAuth(): void {\n const config = loadConfig();\n config.auth = undefined;\n saveConfig(config);\n}\n\n/**\n * Update skill installation info\n */\nexport function updateSkillInfo(version: string): void {\n const config = loadConfig();\n config.skill = {\n installedVersion: version,\n installedAt: new Date().toISOString(),\n };\n saveConfig(config);\n}\n\n/**\n * Set OAuth tokens\n */\nexport function setOAuthTokens(tokens: {\n accessToken: string;\n refreshToken: string;\n expiresAt: string;\n provider: 'google' | 'github';\n user: { uid: string; email: string; name?: string };\n}): void {\n const config = loadConfig();\n config.auth = {\n method: 'oauth',\n accessToken: tokens.accessToken,\n refreshToken: tokens.refreshToken,\n expiresAt: tokens.expiresAt,\n provider: tokens.provider,\n user: tokens.user,\n };\n saveConfig(config);\n}\n\n/**\n * Get OAuth access token\n */\nexport function getAccessToken(): string | undefined {\n const config = loadConfig();\n return config.auth?.accessToken;\n}\n\n/**\n * Get OAuth refresh token\n */\nexport function getRefreshToken(): string | undefined {\n const config = loadConfig();\n return config.auth?.refreshToken;\n}\n\n/**\n * Get token expiry time\n */\nexport function getTokenExpiresAt(): string | undefined {\n const config = loadConfig();\n return config.auth?.expiresAt;\n}\n\n/**\n * Get OAuth provider\n */\nexport function getOAuthProvider(): 'google' | 'github' | undefined {\n const config = loadConfig();\n return config.auth?.provider;\n}\n\n/**\n * Get authenticated user info\n */\nexport function getAuthUser(): { uid: string; email: string; name?: string } | undefined {\n const config = loadConfig();\n return config.auth?.user;\n}\n\n/**\n * Set API Key authentication\n */\nexport function setApiKey(apiKeyData: {\n apiKey: string;\n apiKeyId: string;\n apiKeyName: string;\n user: { uid: string; email: string; name?: string };\n}): void {\n const config = loadConfig();\n config.auth = {\n method: 'apikey',\n apiKey: apiKeyData.apiKey,\n apiKeyId: apiKeyData.apiKeyId,\n apiKeyName: apiKeyData.apiKeyName,\n user: apiKeyData.user,\n };\n saveConfig(config);\n}\n\n/**\n * Get API Key\n */\nexport function getApiKey(): string | undefined {\n const config = loadConfig();\n return config.auth?.apiKey;\n}\n\n/**\n * Get API Key info\n */\nexport function getApiKeyInfo(): { keyId: string; name: string } | undefined {\n const config = loadConfig();\n if (config.auth?.apiKeyId && config.auth?.apiKeyName) {\n return {\n keyId: config.auth.apiKeyId,\n name: config.auth.apiKeyName,\n };\n }\n return undefined;\n}\n","import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[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}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((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}))\\])|(\\[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})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?: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])$/;\nconst ipv4CidrRegex = /^(?:(?: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// const ipv6Regex =\n// /^(([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})))$/;\nconst ipv6Regex = /^(([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]))$/;\nconst ipv6CidrRegex = /^(([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// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","/**\n * API client for Refly backend communication.\n * Handles authentication, retries, and error mapping.\n * Supports both OAuth tokens and API Keys for authentication.\n */\n\nimport * as fs from 'node:fs';\nimport { statSync } from 'node:fs';\nimport * as path from 'node:path';\nimport mime from 'mime';\nimport {\n getApiEndpoint,\n getAccessToken,\n getRefreshToken,\n getTokenExpiresAt,\n setOAuthTokens,\n getOAuthProvider,\n getAuthUser,\n getAuthMethod,\n getApiKey,\n} from '../config/config.js';\nimport { ErrorCodes, type ErrorCode } from '../utils/output.js';\nimport { CLIError, AuthError, NetworkError } from '../utils/errors.js';\nimport { logger } from '../utils/logger.js';\n\nexport interface APIResponse<T = unknown> {\n success: boolean;\n data?: T;\n errCode?: string;\n errMsg?: string;\n // Alternative error format used by some API responses\n error?: string;\n message?: string;\n}\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n body?: unknown;\n query?: Record<string, string>;\n timeout?: number;\n requireAuth?: boolean;\n}\n\nconst DEFAULT_TIMEOUT = 30000; // 30 seconds\n\n/**\n * Make an authenticated API request with automatic token refresh (for OAuth)\n * or API Key authentication\n */\nexport async function apiRequest<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = 'GET', body, query, timeout = DEFAULT_TIMEOUT, requireAuth = true } = options;\n\n const endpoint = getApiEndpoint();\n let url = `${endpoint}${path}`;\n\n // Add query parameters\n if (query && Object.keys(query).length > 0) {\n const params = new URLSearchParams(query);\n url = `${url}?${params.toString()}`;\n }\n\n // Build headers\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'User-Agent': 'refly-cli/0.1.0',\n };\n\n // Handle authentication based on method\n if (requireAuth) {\n const authMethod = getAuthMethod();\n\n if (authMethod === 'apikey') {\n // Use API Key authentication\n const apiKey = getApiKey();\n if (!apiKey) {\n throw new AuthError('Not authenticated');\n }\n headers['X-API-Key'] = apiKey;\n } else {\n // Use OAuth authentication (default)\n let accessToken = getAccessToken();\n\n if (!accessToken) {\n throw new AuthError('Not authenticated');\n }\n\n // Check if OAuth token is expired and refresh if needed\n const expiresAt = getTokenExpiresAt();\n if (expiresAt && new Date(expiresAt) < new Date()) {\n logger.debug('Access token expired, refreshing...');\n try {\n accessToken = await refreshAccessToken();\n } catch (error) {\n logger.error('Failed to refresh token:', error);\n throw new AuthError('Session expired, please login again');\n }\n }\n\n headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n logger.debug(`API Request: ${method} ${path}`);\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n // Handle empty responses (e.g., 204 No Content for DELETE)\n const contentLength = response.headers.get('content-length');\n const contentType = response.headers.get('content-type');\n if (\n response.status === 204 ||\n contentLength === '0' ||\n (!contentType?.includes('application/json') &&\n response.status >= 200 &&\n response.status < 300)\n ) {\n if (!response.ok) {\n throw new CLIError(ErrorCodes.API_ERROR, `HTTP ${response.status}: ${response.statusText}`);\n }\n return undefined as T;\n }\n\n // Parse response\n const data = (await response.json()) as APIResponse<T>;\n const hasSuccessFlag = typeof data === 'object' && data !== null && 'success' in data;\n\n // Handle API-level errors\n if (!response.ok) {\n throw mapAPIError(response.status, data);\n }\n\n if (hasSuccessFlag) {\n if (data.success) {\n return data.data as T;\n }\n throw mapAPIError(response.status, data);\n }\n\n // Non-wrapped responses (raw DTOs)\n return data as T;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof CLIError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CLIError(ErrorCodes.TIMEOUT, 'Request timed out', undefined, 'Try again later');\n }\n\n if (error.message.includes('fetch')) {\n throw new NetworkError('Cannot connect to API');\n }\n }\n\n throw new CLIError(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Unknown error',\n );\n }\n}\n\n/**\n * Refresh access token using refresh token (OAuth only)\n */\nasync function refreshAccessToken(): Promise<string> {\n const refreshToken = getRefreshToken();\n if (!refreshToken) {\n throw new AuthError('No refresh token available');\n }\n\n const provider = getOAuthProvider();\n const user = getAuthUser();\n\n if (!provider || !user) {\n throw new AuthError('Invalid OAuth state');\n }\n\n const endpoint = getApiEndpoint();\n const url = `${endpoint}/v1/auth/cli/oauth/refresh`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'refly-cli/0.1.0',\n },\n body: JSON.stringify({ refreshToken }),\n });\n\n if (!response.ok) {\n throw new AuthError('Failed to refresh token');\n }\n\n const data = (await response.json()) as APIResponse<{\n accessToken: string;\n refreshToken: string;\n }>;\n\n if (!data.success || !data.data) {\n throw new AuthError('Failed to refresh token');\n }\n\n // Update stored tokens\n setOAuthTokens({\n accessToken: data.data.accessToken,\n refreshToken: data.data.refreshToken,\n expiresAt: new Date(Date.now() + 3600000).toISOString(), // 1 hour\n provider,\n user,\n });\n\n logger.debug('Access token refreshed successfully');\n return data.data.accessToken;\n}\n\n/**\n * Map API error response to CLIError\n */\nfunction mapAPIError(status: number, response: APIResponse): CLIError {\n // Handle CLI error format: { ok: false, type: 'error', error: { code, message, hint } }\n if (response.error && typeof response.error === 'object') {\n const cliError = response.error as {\n code?: string;\n message?: string;\n hint?: string;\n suggestedFix?: { field?: string; format?: string; example?: string };\n };\n return new CLIError(\n (cliError.code || 'UNKNOWN') as ErrorCode,\n cliError.message || 'Unknown error',\n undefined,\n cliError.hint,\n cliError.suggestedFix,\n );\n }\n\n // Handle legacy format\n const errCode = response.errCode ?? response.error ?? 'UNKNOWN';\n const errMsg = response.errMsg ?? response.message ?? 'Unknown error';\n\n // Map HTTP status codes\n if (status === 401 || status === 403) {\n return new AuthError(errMsg);\n }\n\n if (status === 404) {\n return new CLIError(ErrorCodes.NOT_FOUND, errMsg, undefined, 'Check the resource ID');\n }\n\n if (status === 409) {\n return new CLIError(ErrorCodes.CONFLICT, errMsg, undefined, 'Refresh and try again');\n }\n\n if (status === 422) {\n return new CLIError(ErrorCodes.INVALID_INPUT, errMsg, undefined, 'Check input format');\n }\n\n if (status >= 500) {\n return new CLIError(ErrorCodes.API_ERROR, errMsg, undefined, 'Try again later');\n }\n\n // Map API error codes to ErrorCode type\n return new CLIError(errCode as ErrorCode, errMsg);\n}\n\n/**\n * Stream response interface for file downloads\n */\nexport interface StreamResponse {\n data: Buffer;\n filename: string;\n contentType: string;\n size: number;\n}\n\n/**\n * Make an authenticated streaming API request for file downloads.\n * Reuses the same auth logic as apiRequest() for OAuth/API Key support.\n */\nexport async function apiRequestStream(\n path: string,\n options: { timeout?: number } = {},\n): Promise<StreamResponse> {\n const { timeout = 300000 } = options; // 5 min default for downloads\n\n const endpoint = getApiEndpoint();\n const url = `${endpoint}${path}`;\n\n // Build headers with authentication (same logic as apiRequest)\n const headers: Record<string, string> = {\n 'User-Agent': 'refly-cli/0.1.0',\n };\n\n const authMethod = getAuthMethod();\n\n if (authMethod === 'apikey') {\n // Use API Key authentication\n const apiKey = getApiKey();\n if (!apiKey) {\n throw new AuthError('Not authenticated');\n }\n headers['X-API-Key'] = apiKey;\n } else {\n // Use OAuth authentication (default)\n let accessToken = getAccessToken();\n\n if (!accessToken) {\n throw new AuthError('Not authenticated');\n }\n\n // Check if OAuth token is expired and refresh if needed\n const expiresAt = getTokenExpiresAt();\n if (expiresAt && new Date(expiresAt) < new Date()) {\n logger.debug('Access token expired, refreshing...');\n try {\n accessToken = await refreshAccessToken();\n } catch (error) {\n logger.error('Failed to refresh token:', error);\n throw new AuthError('Session expired, please login again');\n }\n }\n\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n logger.debug(`API Stream Request: GET ${path}`);\n\n const response = await fetch(url, {\n method: 'GET',\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n // Try to parse error response\n try {\n const errorData = (await response.json()) as APIResponse;\n throw mapAPIError(response.status, errorData);\n } catch (e) {\n if (e instanceof CLIError) throw e;\n throw new CLIError(ErrorCodes.API_ERROR, `HTTP ${response.status}: ${response.statusText}`);\n }\n }\n\n // Parse filename from Content-Disposition header\n const contentDisposition = response.headers.get('content-disposition');\n let filename = 'download';\n if (contentDisposition) {\n // Handle both: filename=\"name.ext\" and filename*=UTF-8''name.ext\n const match = contentDisposition.match(/filename\\*?=(?:UTF-8'')?[\"']?([^\"';\\n]+)[\"']?/i);\n if (match) {\n filename = decodeURIComponent(match[1]);\n }\n }\n\n // Get the response as ArrayBuffer and convert to Buffer\n const arrayBuffer = await response.arrayBuffer();\n const data = Buffer.from(arrayBuffer);\n\n return {\n data,\n filename,\n contentType: response.headers.get('content-type') || 'application/octet-stream',\n size: data.length,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof CLIError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CLIError(ErrorCodes.TIMEOUT, 'Download timed out', undefined, 'Try again later');\n }\n\n if (error.message.includes('fetch')) {\n throw new NetworkError('Cannot connect to API');\n }\n }\n\n throw new CLIError(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Unknown error',\n );\n }\n}\n\n/**\n * Verify API connection and authentication\n */\nexport async function verifyConnection(): Promise<{\n connected: boolean;\n authenticated: boolean;\n authMethod?: 'oauth' | 'apikey';\n user?: { uid: string; name?: string; email?: string };\n}> {\n try {\n const authMethod = getAuthMethod();\n\n // Check if we have any credentials\n if (authMethod === 'apikey') {\n const apiKey = getApiKey();\n if (!apiKey) {\n return { connected: true, authenticated: false };\n }\n } else {\n const accessToken = getAccessToken();\n if (!accessToken) {\n return { connected: true, authenticated: false };\n }\n }\n\n const user = await apiRequest<{ uid: string; name?: string; email?: string }>('/v1/user/me', {\n requireAuth: true,\n });\n\n return { connected: true, authenticated: true, authMethod, user };\n } catch (error) {\n if (error instanceof AuthError) {\n return { connected: true, authenticated: false };\n }\n if (error instanceof NetworkError) {\n return { connected: false, authenticated: false };\n }\n // For other errors, assume connection works but auth failed\n return { connected: true, authenticated: false };\n }\n}\n\n/**\n * Result of a drive file upload\n */\nexport interface DriveFileUploadResult {\n fileId: string;\n name: string;\n type: string;\n size: number;\n storageKey: string;\n url?: string;\n}\n\n/**\n * Presigned upload URL response\n */\ninterface PresignedUploadResponse {\n uploadId: string;\n presignedUrl: string;\n expiresIn: number;\n}\n\n/**\n * Get MIME type for a file path\n */\nfunction getMimeType(filePath: string): string {\n return mime.getType(filePath) || 'application/octet-stream';\n}\n\n/**\n * Step 1: Get a presigned URL for file upload\n */\nasync function getPresignedUploadUrl(\n canvasId: string,\n filename: string,\n size: number,\n contentType: string,\n): Promise<PresignedUploadResponse> {\n return apiRequest<PresignedUploadResponse>('/v1/cli/drive/file/upload/presign', {\n method: 'POST',\n body: { canvasId, filename, size, contentType },\n });\n}\n\n/**\n * Step 2: Upload file to presigned URL with retry\n */\nasync function uploadToPresignedUrl(\n presignedUrl: string,\n filePath: string,\n contentType: string,\n retryCount = 1,\n): Promise<void> {\n const fileStats = statSync(filePath);\n const timeout = 300000; // 5 min timeout for upload\n\n for (let attempt = 0; attempt <= retryCount; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n // Read file as buffer for presigned PUT\n const fileBuffer = await fs.promises.readFile(filePath);\n\n const response = await fetch(presignedUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': contentType,\n 'Content-Length': fileStats.size.toString(),\n },\n body: fileBuffer,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => '');\n throw new CLIError(\n ErrorCodes.API_ERROR,\n `Upload to storage failed: HTTP ${response.status} ${response.statusText}${errorText ? ` - ${errorText}` : ''}`,\n );\n }\n\n return; // Success\n } catch (error) {\n clearTimeout(timeoutId);\n\n // Don't retry on auth or validation errors\n if (error instanceof CLIError) {\n throw error;\n }\n\n // Retry on network errors\n if (attempt < retryCount) {\n logger.debug(`Upload attempt ${attempt + 1} failed, retrying...`);\n continue;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CLIError(\n ErrorCodes.TIMEOUT,\n 'Upload timed out',\n undefined,\n 'Try a smaller file or check network',\n );\n }\n\n if (error.message.includes('fetch')) {\n throw new NetworkError('Cannot connect to storage');\n }\n }\n\n throw new CLIError(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Unknown upload error',\n );\n }\n }\n}\n\n/**\n * Step 3: Confirm upload completion\n */\nasync function confirmUpload(uploadId: string): Promise<DriveFileUploadResult> {\n return apiRequest<DriveFileUploadResult>('/v1/cli/drive/file/upload/confirm', {\n method: 'POST',\n body: { uploadId },\n });\n}\n\n/**\n * Upload a file to a canvas using presigned URL flow.\n * 3-step process: presign -> PUT to OSS -> confirm\n * @param filePath - Absolute path to the file to upload\n * @param canvasId - Canvas ID to associate the file with\n * @param options - Optional configuration including progress callback\n * @returns Upload result with file metadata\n */\n/**\n * Workflow variable definition\n */\nexport interface WorkflowVariable {\n variableId?: string;\n name: string;\n variableType?: string;\n value?: unknown[];\n required?: boolean;\n isSingle?: boolean;\n resourceTypes?: string[];\n default?: unknown;\n description?: string;\n}\n\n/**\n * Workflow info returned from GET /v1/cli/workflow/:id\n */\nexport interface WorkflowInfo {\n workflowId: string;\n name: string;\n nodes: unknown[];\n edges: unknown[];\n variables: WorkflowVariable[];\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Fetch workflow details by ID\n * @param workflowId - The workflow ID to fetch\n * @returns Workflow details including variables\n */\nexport async function apiGetWorkflow(workflowId: string): Promise<WorkflowInfo> {\n return apiRequest<WorkflowInfo>(`/v1/cli/workflow/${workflowId}`);\n}\n\nexport async function apiUploadDriveFile(\n filePath: string,\n canvasId: string,\n options?: {\n timeout?: number;\n onProgress?: (stage: 'presign' | 'upload' | 'confirm') => void;\n },\n): Promise<DriveFileUploadResult> {\n const filename = path.basename(filePath);\n const mimeType = getMimeType(filePath);\n const fileStats = statSync(filePath);\n\n logger.debug(`Starting presigned upload: ${filename} (${fileStats.size} bytes)`);\n\n // Step 1: Get presigned URL\n options?.onProgress?.('presign');\n let presignResponse: PresignedUploadResponse;\n try {\n presignResponse = await getPresignedUploadUrl(canvasId, filename, fileStats.size, mimeType);\n logger.debug(`Got presigned URL, uploadId: ${presignResponse.uploadId}`);\n } catch (error) {\n logger.error('Failed to get presigned URL:', error);\n throw error;\n }\n\n // Step 2: Upload to presigned URL\n options?.onProgress?.('upload');\n try {\n await uploadToPresignedUrl(presignResponse.presignedUrl, filePath, mimeType);\n logger.debug('File uploaded to presigned URL');\n } catch (error) {\n logger.error('Failed to upload to presigned URL:', error);\n throw error;\n }\n\n // Step 3: Confirm upload\n options?.onProgress?.('confirm');\n try {\n const result = await confirmUpload(presignResponse.uploadId);\n logger.debug(`Upload confirmed, fileId: ${result.fileId}`);\n return result;\n } catch (error) {\n logger.error('Failed to confirm upload:', error);\n throw error;\n }\n}\n\n/**\n * Get workflow variables with current values\n * @param canvasId - The canvas/workflow ID\n * @returns Array of workflow variables with values\n */\nexport async function apiGetWorkflowVariables(canvasId: string): Promise<WorkflowVariable[]> {\n return apiRequest<WorkflowVariable[]>('/v1/canvas/workflow/variables', {\n query: { canvasId },\n });\n}\n\n/**\n * Update workflow variables (set values)\n * @param canvasId - The canvas/workflow ID\n * @param variables - Variables with values to set\n * @returns Updated variables\n */\nexport async function apiUpdateWorkflowVariables(\n canvasId: string,\n variables: WorkflowVariable[],\n): Promise<WorkflowVariable[]> {\n return apiRequest<WorkflowVariable[]>('/v1/canvas/workflow/variables', {\n method: 'POST',\n body: { canvasId, variables },\n });\n}\n\n/**\n * Action result response from the API\n */\nexport interface ActionResultResponse {\n resultId: string;\n version?: number;\n title?: string;\n type?: string;\n status?: string;\n targetId?: string;\n targetType?: string;\n workflowExecutionId?: string;\n workflowNodeExecutionId?: string;\n input?: Record<string, unknown>;\n actionMeta?: Record<string, unknown>;\n context?: Record<string, unknown>;\n errors?: Array<{ type: string; message: string }>;\n errorType?: string;\n outputUrl?: string;\n storageKey?: string;\n createdAt?: string;\n updatedAt?: string;\n steps?: Array<{\n name?: string;\n content?: string;\n reasoningContent?: string;\n logs?: unknown[];\n artifacts?: unknown[];\n structuredData?: Record<string, unknown>;\n tokenUsage?: unknown[];\n toolCalls?: Array<{\n callId: string;\n toolsetId: string;\n toolName: string;\n input?: Record<string, unknown>;\n output?: Record<string, unknown>;\n error?: string;\n status: 'executing' | 'completed' | 'failed';\n createdAt?: number;\n updatedAt?: number;\n }>;\n }>;\n messages?: Array<{\n messageId: string;\n type: string;\n content?: string;\n reasoningContent?: string;\n toolCallId?: string;\n createdAt?: string;\n updatedAt?: string;\n }>;\n files?: Array<{\n fileId: string;\n name: string;\n type: string;\n size: number;\n }>;\n modelInfo?: {\n provider?: string;\n modelId?: string;\n };\n}\n\n/**\n * Get action result by resultId\n * @param resultId - The action result ID (ar-xxx)\n * @returns Action result details\n */\nexport async function apiGetActionResult(resultId: string): Promise<ActionResultResponse> {\n return apiRequest<ActionResultResponse>('/v1/cli/action/result', {\n query: { resultId },\n });\n}\n","/**\n * Skill installer - copies SKILL.md and rules to Refly skill directory,\n * then creates symlink from Claude Code directory.\n *\n * Target structure:\n * ~/.refly/skills/base/\n * ├── SKILL.md\n * └── rules/\n * ├── workflow.md\n * ├── node.md\n * ├── file.md\n * └── skill.md\n *\n * Symlink:\n * ~/.claude/skills/refly → ~/.refly/skills/base/\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getReflyBaseSkillDir,\n getClaudeCommandsDir,\n getClaudeSkillSymlinkPath,\n ensureDir,\n ensureReflySkillsDir,\n} from '../config/paths.js';\nimport { updateSkillInfo } from '../config/config.js';\nimport { logger } from '../utils/logger.js';\nimport { createSkillSymlink } from './symlink.js';\n\n/**\n * Remove old skill directory if it exists (not a symlink)\n */\nfunction removeOldSkillDirectory(): void {\n const claudeSkillPath = getClaudeSkillSymlinkPath('refly');\n\n if (!fs.existsSync(claudeSkillPath)) {\n return;\n }\n\n try {\n const stat = fs.lstatSync(claudeSkillPath);\n if (stat.isSymbolicLink()) {\n // Already a symlink, remove it so we can recreate\n fs.unlinkSync(claudeSkillPath);\n } else if (stat.isDirectory()) {\n // Old directory structure, remove it\n fs.rmSync(claudeSkillPath, { recursive: true, force: true });\n logger.info('Removed old skill directory');\n }\n } catch (err) {\n logger.warn('Failed to remove old directory:', err);\n }\n}\n\n// Get the skill files from the package\nfunction getPackageSkillDir(): string {\n // When installed globally, skill files are in the package's skill directory\n // During development, they're relative to the source\n const possiblePaths = [\n path.join(__dirname, '..', '..', 'skill'), // Built package: dist/bin/../../skill\n path.join(__dirname, '..', '..', '..', 'skill'), // Development: dist/bin/../../../skill\n path.join(__dirname, '..', 'skill'), // Alternative: dist/../skill\n ];\n\n logger.debug('Looking for skill files, __dirname:', __dirname);\n\n for (const p of possiblePaths) {\n const resolved = path.resolve(p);\n const exists = fs.existsSync(resolved);\n logger.debug(` Checking path: ${resolved} - exists: ${exists}`);\n if (exists) {\n return resolved;\n }\n }\n\n throw new Error(`Skill files not found in package. Searched paths from __dirname=${__dirname}`);\n}\n\nexport interface InstallResult {\n skillInstalled: boolean;\n skillPath: string | null;\n symlinkPath: string | null;\n commandsInstalled: boolean;\n commandsPath: string | null;\n version: string;\n}\n\n/**\n * Install skill files to Refly directory and create symlink to Claude Code\n */\nexport function installSkill(): InstallResult {\n const result: InstallResult = {\n skillInstalled: false,\n skillPath: null,\n symlinkPath: null,\n commandsInstalled: false,\n commandsPath: null,\n version: getSkillVersion(),\n };\n\n const sourceDir = getPackageSkillDir();\n logger.debug('Source skill directory:', sourceDir);\n\n // Install SKILL.md and rules to ~/.refly/skills/base/\n ensureReflySkillsDir();\n const targetDir = getReflyBaseSkillDir();\n logger.debug('Target skill directory:', targetDir);\n\n try {\n ensureDir(targetDir);\n ensureDir(path.join(targetDir, 'rules'));\n logger.debug('Created target directories');\n } catch (err) {\n logger.error('Failed to create target directories:', err);\n throw err;\n }\n\n // Copy SKILL.md\n const skillSource = path.join(sourceDir, 'SKILL.md');\n const skillTarget = path.join(targetDir, 'SKILL.md');\n logger.debug(`Copying SKILL.md: ${skillSource} -> ${skillTarget}`);\n if (fs.existsSync(skillSource)) {\n fs.copyFileSync(skillSource, skillTarget);\n result.skillInstalled = true;\n result.skillPath = targetDir;\n logger.debug('SKILL.md copied successfully');\n } else {\n logger.warn('SKILL.md source not found:', skillSource);\n }\n\n // Copy references to rules folder\n const refsSource = path.join(sourceDir, 'references');\n const rulesTarget = path.join(targetDir, 'rules');\n if (fs.existsSync(refsSource)) {\n const files = fs.readdirSync(refsSource);\n logger.debug(`Copying ${files.length} rule files`);\n for (const file of files) {\n fs.copyFileSync(path.join(refsSource, file), path.join(rulesTarget, file));\n }\n }\n\n // Remove old directory if exists, then create symlink\n removeOldSkillDirectory();\n const symlinkResult = createSkillSymlink('refly');\n if (symlinkResult.success) {\n result.symlinkPath = symlinkResult.claudePath;\n logger.info(`Created symlink: ${symlinkResult.claudePath} -> ${symlinkResult.reflyPath}`);\n } else {\n logger.warn(`Failed to create symlink: ${symlinkResult.error}`);\n }\n\n // Install slash commands\n const commandsDir = getClaudeCommandsDir();\n logger.debug('Commands directory:', commandsDir);\n ensureDir(commandsDir);\n result.commandsInstalled = installSlashCommands(sourceDir, commandsDir);\n if (result.commandsInstalled) {\n result.commandsPath = commandsDir;\n }\n logger.debug('Commands installed:', result.commandsInstalled);\n\n // Update config with installation info\n updateSkillInfo(result.version);\n\n logger.info('Skill installation complete:', {\n skillInstalled: result.skillInstalled,\n symlinkPath: result.symlinkPath,\n commandsInstalled: result.commandsInstalled,\n });\n\n return result;\n}\n\n/**\n * Install slash command files\n */\nfunction installSlashCommands(sourceDir: string, targetDir: string): boolean {\n const commandsSource = path.join(sourceDir, '..', 'commands');\n if (!fs.existsSync(commandsSource)) {\n return false;\n }\n\n try {\n const files = fs.readdirSync(commandsSource);\n for (const file of files) {\n if (file.endsWith('.md')) {\n fs.copyFileSync(path.join(commandsSource, file), path.join(targetDir, file));\n }\n }\n return files.length > 0;\n } catch {\n return false;\n }\n}\n\n/**\n * Get skill version from SKILL.md\n */\nfunction getSkillVersion(): string {\n try {\n const skillPath = path.join(getPackageSkillDir(), 'SKILL.md');\n const content = fs.readFileSync(skillPath, 'utf-8');\n // Extract version from frontmatter if present, otherwise use package version\n const versionMatch = content.match(/version:\\s*(\\d+\\.\\d+\\.\\d+)/);\n if (versionMatch) {\n return versionMatch[1];\n }\n } catch {\n // Fall through to package version\n }\n\n // Use CLI package version\n try {\n const pkgPath = path.join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n return pkg.version;\n } catch {\n return '0.1.0';\n }\n}\n\n/**\n * Check if skill is installed and up to date\n */\nexport function isSkillInstalled(): {\n installed: boolean;\n upToDate: boolean;\n currentVersion?: string;\n symlinkValid?: boolean;\n} {\n const skillPath = path.join(getReflyBaseSkillDir(), 'SKILL.md');\n\n if (!fs.existsSync(skillPath)) {\n return { installed: false, upToDate: false };\n }\n\n const currentVersion = getSkillVersion();\n\n // Check if symlink is valid\n const { isSkillSymlinkValid } = require('./symlink.js');\n const symlinkStatus = isSkillSymlinkValid('refly');\n\n return {\n installed: true,\n upToDate: true,\n currentVersion,\n symlinkValid: symlinkStatus.isValid,\n };\n}\n"],"mappings":"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","names":["fs","path","fs","path","fs","path","import_node_os","isValid","fs","path","isValid","fs","isValid","skillMdPath","fs","path","fs","path","os","util","objectUtil","path","errorUtil","path","errorMap","ctx","result","issues","elements","processed","result","r","ZodFirstPartyTypeKind","fs","path","path","fs","path","isSkillSymlinkValid"]}
|