@powerformer/refly-cli 0.1.0 → 0.1.1-beta.0
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/commands/refly-login.md +17 -0
- package/commands/refly-status.md +19 -0
- package/commands/refly-upgrade.md +17 -0
- package/dist/bin/refly.js +5949 -5954
- package/dist/bin/refly.js.map +1 -1
- package/dist/index.d.ts +33 -33
- package/dist/index.js +5 -15
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/bin/refly.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.4.2_postcss@8.5.6_tsx@4.20.6_typescript@5.8.3_yaml@2.8.0/node_modules/tsup/assets/cjs_shims.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/error.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/argument.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/help.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/option.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/suggestSimilar.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/command.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/index.js","../../src/utils/ui.ts","../../src/utils/formatter.ts","../../src/utils/output.ts","../../src/config/paths.ts","../../../../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/ZodError.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/errors.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/helpers/typeAliases.js","../../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.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/external.js","../../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js","../../src/config/config.ts","../../src/utils/errors.ts","../../src/utils/logger.ts","../../src/api/client.ts","../../src/bin/refly.ts","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/esm.mjs","../../src/commands/init.ts","../../src/skill/installer.ts","../../src/commands/login.ts","../../../../node_modules/.pnpm/open@10.2.0/node_modules/open/index.js","../../../../node_modules/.pnpm/wsl-utils@0.1.0/node_modules/wsl-utils/index.js","../../../../node_modules/.pnpm/is-wsl@3.1.0/node_modules/is-wsl/index.js","../../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js","../../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js","../../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js","../../../../node_modules/.pnpm/default-browser@5.4.0/node_modules/default-browser/index.js","../../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/index.js","../../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js","../../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js","../../../../node_modules/.pnpm/default-browser@5.4.0/node_modules/default-browser/windows.js","../../src/commands/logout.ts","../../src/commands/status.ts","../../src/commands/whoami.ts","../../src/commands/upgrade.ts","../../src/commands/config.ts","../../src/commands/builder/index.ts","../../src/commands/builder/start.ts","../../src/builder/store.ts","../../src/builder/schema.ts","../../src/commands/builder/status.ts","../../src/builder/graph.ts","../../src/commands/builder/add-node.ts","../../src/builder/ops.ts","../../src/builder/state.ts","../../src/commands/builder/update-node.ts","../../src/commands/builder/remove-node.ts","../../src/commands/builder/connect.ts","../../src/commands/builder/disconnect.ts","../../src/commands/builder/graph.ts","../../src/commands/builder/validate.ts","../../src/builder/validate.ts","../../src/commands/builder/commit.ts","../../src/builder/commit.ts","../../src/commands/builder/abort.ts","../../src/commands/workflow/index.ts","../../src/commands/workflow/create.ts","../../src/commands/workflow/generate.ts","../../src/commands/workflow/list.ts","../../src/commands/workflow/get.ts","../../src/commands/workflow/edit.ts","../../src/commands/workflow/delete.ts","../../src/commands/workflow/run.ts","../../src/commands/workflow/abort.ts","../../src/commands/workflow/status.ts","../../src/commands/workflow/run-detail.ts","../../src/commands/workflow/run-node.ts","../../src/commands/workflow/run-toolcalls.ts","../../src/commands/node/index.ts","../../src/commands/node/types.ts","../../src/commands/node/run.ts","../../src/commands/node/result.ts","../../src/commands/tool/index.ts","../../src/commands/tool/calls.ts","../../src/commands/tool/get.ts","../../src/commands/file/index.ts","../../src/commands/file/list.ts","../../src/commands/file/get.ts","../../src/commands/file/download.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 * CommanderError class\n */\nclass CommanderError extends Error {\n /**\n * Constructs the CommanderError class\n * @param {number} exitCode suggested exit code which could be used with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n */\n constructor(exitCode, code, message) {\n super(message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n this.code = code;\n this.exitCode = exitCode;\n this.nestedError = undefined;\n }\n}\n\n/**\n * InvalidArgumentError class\n */\nclass InvalidArgumentError extends CommanderError {\n /**\n * Constructs the InvalidArgumentError class\n * @param {string} [message] explanation of why argument is invalid\n */\n constructor(message) {\n super(1, 'commander.invalidArgument', message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Argument {\n /**\n * Initialize a new command argument with the given name and description.\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @param {string} name\n * @param {string} [description]\n */\n\n constructor(name, description) {\n this.description = description || '';\n this.variadic = false;\n this.parseArg = undefined;\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.argChoices = undefined;\n\n switch (name[0]) {\n case '<': // e.g. <required>\n this.required = true;\n this._name = name.slice(1, -1);\n break;\n case '[': // e.g. [optional]\n this.required = false;\n this._name = name.slice(1, -1);\n break;\n default:\n this.required = true;\n this._name = name;\n break;\n }\n\n if (this._name.length > 3 && this._name.slice(-3) === '...') {\n this.variadic = true;\n this._name = this._name.slice(0, -3);\n }\n }\n\n /**\n * Return argument name.\n *\n * @return {string}\n */\n\n name() {\n return this._name;\n }\n\n /**\n * @package\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Argument}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI command arguments into argument values.\n *\n * @param {Function} [fn]\n * @return {Argument}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Only allow argument value to be one of choices.\n *\n * @param {string[]} values\n * @return {Argument}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(\n `Allowed choices are ${this.argChoices.join(', ')}.`,\n );\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Make argument required.\n *\n * @returns {Argument}\n */\n argRequired() {\n this.required = true;\n return this;\n }\n\n /**\n * Make argument optional.\n *\n * @returns {Argument}\n */\n argOptional() {\n this.required = false;\n return this;\n }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @private\n */\n\nfunction humanReadableArgName(arg) {\n const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n","const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n constructor() {\n this.helpWidth = undefined;\n this.sortSubcommands = false;\n this.sortOptions = false;\n this.showGlobalOptions = false;\n }\n\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n *\n * @param {Command} cmd\n * @returns {Command[]}\n */\n\n visibleCommands(cmd) {\n const visibleCommands = cmd.commands.filter((cmd) => !cmd._hidden);\n const helpCommand = cmd._getHelpCommand();\n if (helpCommand && !helpCommand._hidden) {\n visibleCommands.push(helpCommand);\n }\n if (this.sortSubcommands) {\n visibleCommands.sort((a, b) => {\n // @ts-ignore: because overloaded return type\n return a.name().localeCompare(b.name());\n });\n }\n return visibleCommands;\n }\n\n /**\n * Compare options for sort.\n *\n * @param {Option} a\n * @param {Option} b\n * @returns {number}\n */\n compareOptions(a, b) {\n const getSortKey = (option) => {\n // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n return option.short\n ? option.short.replace(/^-/, '')\n : option.long.replace(/^--/, '');\n };\n return getSortKey(a).localeCompare(getSortKey(b));\n }\n\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleOptions(cmd) {\n const visibleOptions = cmd.options.filter((option) => !option.hidden);\n // Built-in help option.\n const helpOption = cmd._getHelpOption();\n if (helpOption && !helpOption.hidden) {\n // Automatically hide conflicting flags. Bit dubious but a historical behaviour that is convenient for single-command programs.\n const removeShort = helpOption.short && cmd._findOption(helpOption.short);\n const removeLong = helpOption.long && cmd._findOption(helpOption.long);\n if (!removeShort && !removeLong) {\n visibleOptions.push(helpOption); // no changes needed\n } else if (helpOption.long && !removeLong) {\n visibleOptions.push(\n cmd.createOption(helpOption.long, helpOption.description),\n );\n } else if (helpOption.short && !removeShort) {\n visibleOptions.push(\n cmd.createOption(helpOption.short, helpOption.description),\n );\n }\n }\n if (this.sortOptions) {\n visibleOptions.sort(this.compareOptions);\n }\n return visibleOptions;\n }\n\n /**\n * Get an array of the visible global options. (Not including help.)\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleGlobalOptions(cmd) {\n if (!this.showGlobalOptions) return [];\n\n const globalOptions = [];\n for (\n let ancestorCmd = cmd.parent;\n ancestorCmd;\n ancestorCmd = ancestorCmd.parent\n ) {\n const visibleOptions = ancestorCmd.options.filter(\n (option) => !option.hidden,\n );\n globalOptions.push(...visibleOptions);\n }\n if (this.sortOptions) {\n globalOptions.sort(this.compareOptions);\n }\n return globalOptions;\n }\n\n /**\n * Get an array of the arguments if any have a description.\n *\n * @param {Command} cmd\n * @returns {Argument[]}\n */\n\n visibleArguments(cmd) {\n // Side effect! Apply the legacy descriptions before the arguments are displayed.\n if (cmd._argsDescription) {\n cmd.registeredArguments.forEach((argument) => {\n argument.description =\n argument.description || cmd._argsDescription[argument.name()] || '';\n });\n }\n\n // If there are any arguments with a description then return all the arguments.\n if (cmd.registeredArguments.find((argument) => argument.description)) {\n return cmd.registeredArguments;\n }\n return [];\n }\n\n /**\n * Get the command term to show in the list of subcommands.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandTerm(cmd) {\n // Legacy. Ignores custom usage string, and nested commands.\n const args = cmd.registeredArguments\n .map((arg) => humanReadableArgName(arg))\n .join(' ');\n return (\n cmd._name +\n (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n (args ? ' ' + args : '')\n );\n }\n\n /**\n * Get the option term to show in the list of options.\n *\n * @param {Option} option\n * @returns {string}\n */\n\n optionTerm(option) {\n return option.flags;\n }\n\n /**\n * Get the argument term to show in the list of arguments.\n *\n * @param {Argument} argument\n * @returns {string}\n */\n\n argumentTerm(argument) {\n return argument.name();\n }\n\n /**\n * Get the longest command term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestSubcommandTermLength(cmd, helper) {\n return helper.visibleCommands(cmd).reduce((max, command) => {\n return Math.max(max, helper.subcommandTerm(command).length);\n }, 0);\n }\n\n /**\n * Get the longest option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestOptionTermLength(cmd, helper) {\n return helper.visibleOptions(cmd).reduce((max, option) => {\n return Math.max(max, helper.optionTerm(option).length);\n }, 0);\n }\n\n /**\n * Get the longest global option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestGlobalOptionTermLength(cmd, helper) {\n return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n return Math.max(max, helper.optionTerm(option).length);\n }, 0);\n }\n\n /**\n * Get the longest argument term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestArgumentTermLength(cmd, helper) {\n return helper.visibleArguments(cmd).reduce((max, argument) => {\n return Math.max(max, helper.argumentTerm(argument).length);\n }, 0);\n }\n\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandUsage(cmd) {\n // Usage\n let cmdName = cmd._name;\n if (cmd._aliases[0]) {\n cmdName = cmdName + '|' + cmd._aliases[0];\n }\n let ancestorCmdNames = '';\n for (\n let ancestorCmd = cmd.parent;\n ancestorCmd;\n ancestorCmd = ancestorCmd.parent\n ) {\n ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n }\n return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n }\n\n /**\n * Get the description for the command.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandDescription(cmd) {\n // @ts-ignore: because overloaded return type\n return cmd.description();\n }\n\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandDescription(cmd) {\n // @ts-ignore: because overloaded return type\n return cmd.summary() || cmd.description();\n }\n\n /**\n * Get the option description to show in the list of options.\n *\n * @param {Option} option\n * @return {string}\n */\n\n optionDescription(option) {\n const extraInfo = [];\n\n if (option.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n );\n }\n if (option.defaultValue !== undefined) {\n // default for boolean and negated more for programmer than end user,\n // but show true/false for boolean option as may be for hand-rolled env or config processing.\n const showDefault =\n option.required ||\n option.optional ||\n (option.isBoolean() && typeof option.defaultValue === 'boolean');\n if (showDefault) {\n extraInfo.push(\n `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`,\n );\n }\n }\n // preset for boolean and negated are more for programmer than end user\n if (option.presetArg !== undefined && option.optional) {\n extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n }\n if (option.envVar !== undefined) {\n extraInfo.push(`env: ${option.envVar}`);\n }\n if (extraInfo.length > 0) {\n return `${option.description} (${extraInfo.join(', ')})`;\n }\n\n return option.description;\n }\n\n /**\n * Get the argument description to show in the list of arguments.\n *\n * @param {Argument} argument\n * @return {string}\n */\n\n argumentDescription(argument) {\n const extraInfo = [];\n if (argument.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n );\n }\n if (argument.defaultValue !== undefined) {\n extraInfo.push(\n `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`,\n );\n }\n if (extraInfo.length > 0) {\n const extraDescripton = `(${extraInfo.join(', ')})`;\n if (argument.description) {\n return `${argument.description} ${extraDescripton}`;\n }\n return extraDescripton;\n }\n return argument.description;\n }\n\n /**\n * Generate the built-in help text.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {string}\n */\n\n formatHelp(cmd, helper) {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth || 80;\n const itemIndentWidth = 2;\n const itemSeparatorWidth = 2; // between term and description\n function formatItem(term, description) {\n if (description) {\n const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;\n return helper.wrap(\n fullText,\n helpWidth - itemIndentWidth,\n termWidth + itemSeparatorWidth,\n );\n }\n return term;\n }\n function formatList(textArray) {\n return textArray.join('\\n').replace(/^/gm, ' '.repeat(itemIndentWidth));\n }\n\n // Usage\n let output = [`Usage: ${helper.commandUsage(cmd)}`, ''];\n\n // Description\n const commandDescription = helper.commandDescription(cmd);\n if (commandDescription.length > 0) {\n output = output.concat([\n helper.wrap(commandDescription, helpWidth, 0),\n '',\n ]);\n }\n\n // Arguments\n const argumentList = helper.visibleArguments(cmd).map((argument) => {\n return formatItem(\n helper.argumentTerm(argument),\n helper.argumentDescription(argument),\n );\n });\n if (argumentList.length > 0) {\n output = output.concat(['Arguments:', formatList(argumentList), '']);\n }\n\n // Options\n const optionList = helper.visibleOptions(cmd).map((option) => {\n return formatItem(\n helper.optionTerm(option),\n helper.optionDescription(option),\n );\n });\n if (optionList.length > 0) {\n output = output.concat(['Options:', formatList(optionList), '']);\n }\n\n if (this.showGlobalOptions) {\n const globalOptionList = helper\n .visibleGlobalOptions(cmd)\n .map((option) => {\n return formatItem(\n helper.optionTerm(option),\n helper.optionDescription(option),\n );\n });\n if (globalOptionList.length > 0) {\n output = output.concat([\n 'Global Options:',\n formatList(globalOptionList),\n '',\n ]);\n }\n }\n\n // Commands\n const commandList = helper.visibleCommands(cmd).map((cmd) => {\n return formatItem(\n helper.subcommandTerm(cmd),\n helper.subcommandDescription(cmd),\n );\n });\n if (commandList.length > 0) {\n output = output.concat(['Commands:', formatList(commandList), '']);\n }\n\n return output.join('\\n');\n }\n\n /**\n * Calculate the pad width from the maximum term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n padWidth(cmd, helper) {\n return Math.max(\n helper.longestOptionTermLength(cmd, helper),\n helper.longestGlobalOptionTermLength(cmd, helper),\n helper.longestSubcommandTermLength(cmd, helper),\n helper.longestArgumentTermLength(cmd, helper),\n );\n }\n\n /**\n * Wrap the given string to width characters per line, with lines after the first indented.\n * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted.\n *\n * @param {string} str\n * @param {number} width\n * @param {number} indent\n * @param {number} [minColumnWidth=40]\n * @return {string}\n *\n */\n\n wrap(str, width, indent, minColumnWidth = 40) {\n // Full \\s characters, minus the linefeeds.\n const indents =\n ' \\\\f\\\\t\\\\v\\u00a0\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff';\n // Detect manually wrapped and indented strings by searching for line break followed by spaces.\n const manualIndent = new RegExp(`[\\\\n][${indents}]+`);\n if (str.match(manualIndent)) return str;\n // Do not wrap if not enough room for a wrapped column of text (as could end up with a word per line).\n const columnWidth = width - indent;\n if (columnWidth < minColumnWidth) return str;\n\n const leadingStr = str.slice(0, indent);\n const columnText = str.slice(indent).replace('\\r\\n', '\\n');\n const indentString = ' '.repeat(indent);\n const zeroWidthSpace = '\\u200B';\n const breaks = `\\\\s${zeroWidthSpace}`;\n // Match line end (so empty lines don't collapse),\n // or as much text as will fit in column, or excess text up to first break.\n const regex = new RegExp(\n `\\n|.{1,${columnWidth - 1}}([${breaks}]|$)|[^${breaks}]+?([${breaks}]|$)`,\n 'g',\n );\n const lines = columnText.match(regex) || [];\n return (\n leadingStr +\n lines\n .map((line, i) => {\n if (line === '\\n') return ''; // preserve empty lines\n return (i > 0 ? indentString : '') + line.trimEnd();\n })\n .join('\\n')\n );\n }\n}\n\nexports.Help = Help;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Option {\n /**\n * Initialize a new `Option` with the given `flags` and `description`.\n *\n * @param {string} flags\n * @param {string} [description]\n */\n\n constructor(flags, description) {\n this.flags = flags;\n this.description = description || '';\n\n this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n this.optional = flags.includes('['); // A value is optional when the option is specified.\n // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n const optionFlags = splitOptionFlags(flags);\n this.short = optionFlags.shortFlag;\n this.long = optionFlags.longFlag;\n this.negate = false;\n if (this.long) {\n this.negate = this.long.startsWith('--no-');\n }\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.presetArg = undefined;\n this.envVar = undefined;\n this.parseArg = undefined;\n this.hidden = false;\n this.argChoices = undefined;\n this.conflictsWith = [];\n this.implied = undefined;\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Option}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n * The custom processing (parseArg) is called.\n *\n * @example\n * new Option('--color').default('GREYSCALE').preset('RGB');\n * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n *\n * @param {*} arg\n * @return {Option}\n */\n\n preset(arg) {\n this.presetArg = arg;\n return this;\n }\n\n /**\n * Add option name(s) that conflict with this option.\n * An error will be displayed if conflicting options are found during parsing.\n *\n * @example\n * new Option('--rgb').conflicts('cmyk');\n * new Option('--js').conflicts(['ts', 'jsx']);\n *\n * @param {(string | string[])} names\n * @return {Option}\n */\n\n conflicts(names) {\n this.conflictsWith = this.conflictsWith.concat(names);\n return this;\n }\n\n /**\n * Specify implied option values for when this option is set and the implied options are not.\n *\n * The custom processing (parseArg) is not called on the implied values.\n *\n * @example\n * program\n * .addOption(new Option('--log', 'write logging information to file'))\n * .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n *\n * @param {object} impliedOptionValues\n * @return {Option}\n */\n implies(impliedOptionValues) {\n let newImplied = impliedOptionValues;\n if (typeof impliedOptionValues === 'string') {\n // string is not documented, but easy mistake and we can do what user probably intended.\n newImplied = { [impliedOptionValues]: true };\n }\n this.implied = Object.assign(this.implied || {}, newImplied);\n return this;\n }\n\n /**\n * Set environment variable to check for option value.\n *\n * An environment variable is only used if when processed the current option value is\n * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n *\n * @param {string} name\n * @return {Option}\n */\n\n env(name) {\n this.envVar = name;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI option arguments into option values.\n *\n * @param {Function} [fn]\n * @return {Option}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Whether the option is mandatory and must have a value after parsing.\n *\n * @param {boolean} [mandatory=true]\n * @return {Option}\n */\n\n makeOptionMandatory(mandatory = true) {\n this.mandatory = !!mandatory;\n return this;\n }\n\n /**\n * Hide option in help.\n *\n * @param {boolean} [hide=true]\n * @return {Option}\n */\n\n hideHelp(hide = true) {\n this.hidden = !!hide;\n return this;\n }\n\n /**\n * @package\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Only allow option value to be one of choices.\n *\n * @param {string[]} values\n * @return {Option}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(\n `Allowed choices are ${this.argChoices.join(', ')}.`,\n );\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Return option name.\n *\n * @return {string}\n */\n\n name() {\n if (this.long) {\n return this.long.replace(/^--/, '');\n }\n return this.short.replace(/^-/, '');\n }\n\n /**\n * Return option name, in a camelcase format that can be used\n * as a object attribute key.\n *\n * @return {string}\n */\n\n attributeName() {\n return camelcase(this.name().replace(/^no-/, ''));\n }\n\n /**\n * Check if `arg` matches the short or long flag.\n *\n * @param {string} arg\n * @return {boolean}\n * @package\n */\n\n is(arg) {\n return this.short === arg || this.long === arg;\n }\n\n /**\n * Return whether a boolean option.\n *\n * Options are one of boolean, negated, required argument, or optional argument.\n *\n * @return {boolean}\n * @package\n */\n\n isBoolean() {\n return !this.required && !this.optional && !this.negate;\n }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nclass DualOptions {\n /**\n * @param {Option[]} options\n */\n constructor(options) {\n this.positiveOptions = new Map();\n this.negativeOptions = new Map();\n this.dualOptions = new Set();\n options.forEach((option) => {\n if (option.negate) {\n this.negativeOptions.set(option.attributeName(), option);\n } else {\n this.positiveOptions.set(option.attributeName(), option);\n }\n });\n this.negativeOptions.forEach((value, key) => {\n if (this.positiveOptions.has(key)) {\n this.dualOptions.add(key);\n }\n });\n }\n\n /**\n * Did the value come from the option, and not from possible matching dual option?\n *\n * @param {*} value\n * @param {Option} option\n * @returns {boolean}\n */\n valueFromOption(value, option) {\n const optionKey = option.attributeName();\n if (!this.dualOptions.has(optionKey)) return true;\n\n // Use the value to deduce if (probably) came from the option.\n const preset = this.negativeOptions.get(optionKey).presetArg;\n const negativeValue = preset !== undefined ? preset : false;\n return option.negate === (negativeValue === value);\n }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction camelcase(str) {\n return str.split('-').reduce((str, word) => {\n return str + word[0].toUpperCase() + word.slice(1);\n });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @private\n */\n\nfunction splitOptionFlags(flags) {\n let shortFlag;\n let longFlag;\n // Use original very loose parsing to maintain backwards compatibility for now,\n // which allowed for example unintended `-sw, --short-word` [sic].\n const flagParts = flags.split(/[ |,]+/);\n if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1]))\n shortFlag = flagParts.shift();\n longFlag = flagParts.shift();\n // Add support for lone short flag without significantly changing parsing!\n if (!shortFlag && /^-[^-]$/.test(longFlag)) {\n shortFlag = longFlag;\n longFlag = undefined;\n }\n return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.DualOptions = DualOptions;\n","const maxDistance = 3;\n\nfunction editDistance(a, b) {\n // https://en.wikipedia.org/wiki/Damerau–Levenshtein_distance\n // Calculating optimal string alignment distance, no substring is edited more than once.\n // (Simple implementation.)\n\n // Quick early exit, return worst case.\n if (Math.abs(a.length - b.length) > maxDistance)\n return Math.max(a.length, b.length);\n\n // distance between prefix substrings of a and b\n const d = [];\n\n // pure deletions turn a into empty string\n for (let i = 0; i <= a.length; i++) {\n d[i] = [i];\n }\n // pure insertions turn empty string into b\n for (let j = 0; j <= b.length; j++) {\n d[0][j] = j;\n }\n\n // fill matrix\n for (let j = 1; j <= b.length; j++) {\n for (let i = 1; i <= a.length; i++) {\n let cost = 1;\n if (a[i - 1] === b[j - 1]) {\n cost = 0;\n } else {\n cost = 1;\n }\n d[i][j] = Math.min(\n d[i - 1][j] + 1, // deletion\n d[i][j - 1] + 1, // insertion\n d[i - 1][j - 1] + cost, // substitution\n );\n // transposition\n if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n }\n }\n }\n\n return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n if (!candidates || candidates.length === 0) return '';\n // remove possible duplicates\n candidates = Array.from(new Set(candidates));\n\n const searchingOptions = word.startsWith('--');\n if (searchingOptions) {\n word = word.slice(2);\n candidates = candidates.map((candidate) => candidate.slice(2));\n }\n\n let similar = [];\n let bestDistance = maxDistance;\n const minSimilarity = 0.4;\n candidates.forEach((candidate) => {\n if (candidate.length <= 1) return; // no one character guesses\n\n const distance = editDistance(word, candidate);\n const length = Math.max(word.length, candidate.length);\n const similarity = (length - distance) / length;\n if (similarity > minSimilarity) {\n if (distance < bestDistance) {\n // better edit distance, throw away previous worse matches\n bestDistance = distance;\n similar = [candidate];\n } else if (distance === bestDistance) {\n similar.push(candidate);\n }\n }\n });\n\n similar.sort((a, b) => a.localeCompare(b));\n if (searchingOptions) {\n similar = similar.map((candidate) => `--${candidate}`);\n }\n\n if (similar.length > 1) {\n return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n }\n if (similar.length === 1) {\n return `\\n(Did you mean ${similar[0]}?)`;\n }\n return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n","const EventEmitter = require('node:events').EventEmitter;\nconst childProcess = require('node:child_process');\nconst path = require('node:path');\nconst fs = require('node:fs');\nconst process = require('node:process');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help } = require('./help.js');\nconst { Option, DualOptions } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\nclass Command extends EventEmitter {\n /**\n * Initialize a new `Command`.\n *\n * @param {string} [name]\n */\n\n constructor(name) {\n super();\n /** @type {Command[]} */\n this.commands = [];\n /** @type {Option[]} */\n this.options = [];\n this.parent = null;\n this._allowUnknownOption = false;\n this._allowExcessArguments = true;\n /** @type {Argument[]} */\n this.registeredArguments = [];\n this._args = this.registeredArguments; // deprecated old name\n /** @type {string[]} */\n this.args = []; // cli args with options removed\n this.rawArgs = [];\n this.processedArgs = []; // like .args but after custom processing and collecting variadic\n this._scriptPath = null;\n this._name = name || '';\n this._optionValues = {};\n this._optionValueSources = {}; // default, env, cli etc\n this._storeOptionsAsProperties = false;\n this._actionHandler = null;\n this._executableHandler = false;\n this._executableFile = null; // custom name for executable\n this._executableDir = null; // custom search directory for subcommands\n this._defaultCommandName = null;\n this._exitCallback = null;\n this._aliases = [];\n this._combineFlagAndOptionalValue = true;\n this._description = '';\n this._summary = '';\n this._argsDescription = undefined; // legacy\n this._enablePositionalOptions = false;\n this._passThroughOptions = false;\n this._lifeCycleHooks = {}; // a hash of arrays\n /** @type {(boolean | string)} */\n this._showHelpAfterError = false;\n this._showSuggestionAfterError = true;\n\n // see .configureOutput() for docs\n this._outputConfiguration = {\n writeOut: (str) => process.stdout.write(str),\n writeErr: (str) => process.stderr.write(str),\n getOutHelpWidth: () =>\n process.stdout.isTTY ? process.stdout.columns : undefined,\n getErrHelpWidth: () =>\n process.stderr.isTTY ? process.stderr.columns : undefined,\n outputError: (str, write) => write(str),\n };\n\n this._hidden = false;\n /** @type {(Option | null | undefined)} */\n this._helpOption = undefined; // Lazy created on demand. May be null if help option is disabled.\n this._addImplicitHelpCommand = undefined; // undecided whether true or false yet, not inherited\n /** @type {Command} */\n this._helpCommand = undefined; // lazy initialised, inherited\n this._helpConfiguration = {};\n }\n\n /**\n * Copy settings that are useful to have in common across root command and subcommands.\n *\n * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n *\n * @param {Command} sourceCommand\n * @return {Command} `this` command for chaining\n */\n copyInheritedSettings(sourceCommand) {\n this._outputConfiguration = sourceCommand._outputConfiguration;\n this._helpOption = sourceCommand._helpOption;\n this._helpCommand = sourceCommand._helpCommand;\n this._helpConfiguration = sourceCommand._helpConfiguration;\n this._exitCallback = sourceCommand._exitCallback;\n this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n this._combineFlagAndOptionalValue =\n sourceCommand._combineFlagAndOptionalValue;\n this._allowExcessArguments = sourceCommand._allowExcessArguments;\n this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n this._showHelpAfterError = sourceCommand._showHelpAfterError;\n this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n return this;\n }\n\n /**\n * @returns {Command[]}\n * @private\n */\n\n _getCommandAndAncestors() {\n const result = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n for (let command = this; command; command = command.parent) {\n result.push(command);\n }\n return result;\n }\n\n /**\n * Define a command.\n *\n * There are two styles of command: pay attention to where to put the description.\n *\n * @example\n * // Command implemented using action handler (description is supplied separately to `.command`)\n * program\n * .command('clone <source> [destination]')\n * .description('clone a repository into a newly created directory')\n * .action((source, destination) => {\n * console.log('clone command called');\n * });\n *\n * // Command implemented using separate executable file (description is second parameter to `.command`)\n * program\n * .command('start <service>', 'start named service')\n * .command('stop [service]', 'stop named service, or all if no name supplied');\n *\n * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n * @param {(object | string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n * @param {object} [execOpts] - configuration options (for executable)\n * @return {Command} returns new command for action handler, or `this` for executable command\n */\n\n command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n let desc = actionOptsOrExecDesc;\n let opts = execOpts;\n if (typeof desc === 'object' && desc !== null) {\n opts = desc;\n desc = null;\n }\n opts = opts || {};\n const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n const cmd = this.createCommand(name);\n if (desc) {\n cmd.description(desc);\n cmd._executableHandler = true;\n }\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n if (args) cmd.arguments(args);\n this._registerCommand(cmd);\n cmd.parent = this;\n cmd.copyInheritedSettings(this);\n\n if (desc) return this;\n return cmd;\n }\n\n /**\n * Factory routine to create a new unattached command.\n *\n * See .command() for creating an attached subcommand, which uses this routine to\n * create the command. You can override createCommand to customise subcommands.\n *\n * @param {string} [name]\n * @return {Command} new command\n */\n\n createCommand(name) {\n return new Command(name);\n }\n\n /**\n * You can customise the help with a subclass of Help by overriding createHelp,\n * or by overriding Help properties using configureHelp().\n *\n * @return {Help}\n */\n\n createHelp() {\n return Object.assign(new Help(), this.configureHelp());\n }\n\n /**\n * You can customise the help by overriding Help properties using configureHelp(),\n * or with a subclass of Help by overriding createHelp().\n *\n * @param {object} [configuration] - configuration options\n * @return {(Command | object)} `this` command for chaining, or stored configuration\n */\n\n configureHelp(configuration) {\n if (configuration === undefined) return this._helpConfiguration;\n\n this._helpConfiguration = configuration;\n return this;\n }\n\n /**\n * The default output goes to stdout and stderr. You can customise this for special\n * applications. You can also customise the display of errors by overriding outputError.\n *\n * The configuration properties are all functions:\n *\n * // functions to change where being written, stdout and stderr\n * writeOut(str)\n * writeErr(str)\n * // matching functions to specify width for wrapping help\n * getOutHelpWidth()\n * getErrHelpWidth()\n * // functions based on what is being written out\n * outputError(str, write) // used for displaying errors, and not used for displaying help\n *\n * @param {object} [configuration] - configuration options\n * @return {(Command | object)} `this` command for chaining, or stored configuration\n */\n\n configureOutput(configuration) {\n if (configuration === undefined) return this._outputConfiguration;\n\n Object.assign(this._outputConfiguration, configuration);\n return this;\n }\n\n /**\n * Display the help or a custom message after an error occurs.\n *\n * @param {(boolean|string)} [displayHelp]\n * @return {Command} `this` command for chaining\n */\n showHelpAfterError(displayHelp = true) {\n if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n this._showHelpAfterError = displayHelp;\n return this;\n }\n\n /**\n * Display suggestion of similar commands for unknown commands, or options for unknown options.\n *\n * @param {boolean} [displaySuggestion]\n * @return {Command} `this` command for chaining\n */\n showSuggestionAfterError(displaySuggestion = true) {\n this._showSuggestionAfterError = !!displaySuggestion;\n return this;\n }\n\n /**\n * Add a prepared subcommand.\n *\n * See .command() for creating an attached subcommand which inherits settings from its parent.\n *\n * @param {Command} cmd - new subcommand\n * @param {object} [opts] - configuration options\n * @return {Command} `this` command for chaining\n */\n\n addCommand(cmd, opts) {\n if (!cmd._name) {\n throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n }\n\n opts = opts || {};\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n this._registerCommand(cmd);\n cmd.parent = this;\n cmd._checkForBrokenPassThrough();\n\n return this;\n }\n\n /**\n * Factory routine to create a new unattached argument.\n *\n * See .argument() for creating an attached argument, which uses this routine to\n * create the argument. You can override createArgument to return a custom argument.\n *\n * @param {string} name\n * @param {string} [description]\n * @return {Argument} new argument\n */\n\n createArgument(name, description) {\n return new Argument(name, description);\n }\n\n /**\n * Define argument syntax for command.\n *\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @example\n * program.argument('<input-file>');\n * program.argument('[output-file]');\n *\n * @param {string} name\n * @param {string} [description]\n * @param {(Function|*)} [fn] - custom argument processing function\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n argument(name, description, fn, defaultValue) {\n const argument = this.createArgument(name, description);\n if (typeof fn === 'function') {\n argument.default(defaultValue).argParser(fn);\n } else {\n argument.default(fn);\n }\n this.addArgument(argument);\n return this;\n }\n\n /**\n * Define argument syntax for command, adding multiple at once (without descriptions).\n *\n * See also .argument().\n *\n * @example\n * program.arguments('<cmd> [env]');\n *\n * @param {string} names\n * @return {Command} `this` command for chaining\n */\n\n arguments(names) {\n names\n .trim()\n .split(/ +/)\n .forEach((detail) => {\n this.argument(detail);\n });\n return this;\n }\n\n /**\n * Define argument syntax for command, adding a prepared argument.\n *\n * @param {Argument} argument\n * @return {Command} `this` command for chaining\n */\n addArgument(argument) {\n const previousArgument = this.registeredArguments.slice(-1)[0];\n if (previousArgument && previousArgument.variadic) {\n throw new Error(\n `only the last argument can be variadic '${previousArgument.name()}'`,\n );\n }\n if (\n argument.required &&\n argument.defaultValue !== undefined &&\n argument.parseArg === undefined\n ) {\n throw new Error(\n `a default value for a required argument is never used: '${argument.name()}'`,\n );\n }\n this.registeredArguments.push(argument);\n return this;\n }\n\n /**\n * Customise or override default help command. By default a help command is automatically added if your command has subcommands.\n *\n * @example\n * program.helpCommand('help [cmd]');\n * program.helpCommand('help [cmd]', 'show help');\n * program.helpCommand(false); // suppress default help command\n * program.helpCommand(true); // add help command even if no subcommands\n *\n * @param {string|boolean} enableOrNameAndArgs - enable with custom name and/or arguments, or boolean to override whether added\n * @param {string} [description] - custom description\n * @return {Command} `this` command for chaining\n */\n\n helpCommand(enableOrNameAndArgs, description) {\n if (typeof enableOrNameAndArgs === 'boolean') {\n this._addImplicitHelpCommand = enableOrNameAndArgs;\n return this;\n }\n\n enableOrNameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n const [, helpName, helpArgs] = enableOrNameAndArgs.match(/([^ ]+) *(.*)/);\n const helpDescription = description ?? 'display help for command';\n\n const helpCommand = this.createCommand(helpName);\n helpCommand.helpOption(false);\n if (helpArgs) helpCommand.arguments(helpArgs);\n if (helpDescription) helpCommand.description(helpDescription);\n\n this._addImplicitHelpCommand = true;\n this._helpCommand = helpCommand;\n\n return this;\n }\n\n /**\n * Add prepared custom help command.\n *\n * @param {(Command|string|boolean)} helpCommand - custom help command, or deprecated enableOrNameAndArgs as for `.helpCommand()`\n * @param {string} [deprecatedDescription] - deprecated custom description used with custom name only\n * @return {Command} `this` command for chaining\n */\n addHelpCommand(helpCommand, deprecatedDescription) {\n // If not passed an object, call through to helpCommand for backwards compatibility,\n // as addHelpCommand was originally used like helpCommand is now.\n if (typeof helpCommand !== 'object') {\n this.helpCommand(helpCommand, deprecatedDescription);\n return this;\n }\n\n this._addImplicitHelpCommand = true;\n this._helpCommand = helpCommand;\n return this;\n }\n\n /**\n * Lazy create help command.\n *\n * @return {(Command|null)}\n * @package\n */\n _getHelpCommand() {\n const hasImplicitHelpCommand =\n this._addImplicitHelpCommand ??\n (this.commands.length &&\n !this._actionHandler &&\n !this._findCommand('help'));\n\n if (hasImplicitHelpCommand) {\n if (this._helpCommand === undefined) {\n this.helpCommand(undefined, undefined); // use default name and description\n }\n return this._helpCommand;\n }\n return null;\n }\n\n /**\n * Add hook for life cycle event.\n *\n * @param {string} event\n * @param {Function} listener\n * @return {Command} `this` command for chaining\n */\n\n hook(event, listener) {\n const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n if (!allowedValues.includes(event)) {\n throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n if (this._lifeCycleHooks[event]) {\n this._lifeCycleHooks[event].push(listener);\n } else {\n this._lifeCycleHooks[event] = [listener];\n }\n return this;\n }\n\n /**\n * Register callback to use as replacement for calling process.exit.\n *\n * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n * @return {Command} `this` command for chaining\n */\n\n exitOverride(fn) {\n if (fn) {\n this._exitCallback = fn;\n } else {\n this._exitCallback = (err) => {\n if (err.code !== 'commander.executeSubCommandAsync') {\n throw err;\n } else {\n // Async callback from spawn events, not useful to throw.\n }\n };\n }\n return this;\n }\n\n /**\n * Call process.exit, and _exitCallback if defined.\n *\n * @param {number} exitCode exit code for using with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n * @return never\n * @private\n */\n\n _exit(exitCode, code, message) {\n if (this._exitCallback) {\n this._exitCallback(new CommanderError(exitCode, code, message));\n // Expecting this line is not reached.\n }\n process.exit(exitCode);\n }\n\n /**\n * Register callback `fn` for the command.\n *\n * @example\n * program\n * .command('serve')\n * .description('start service')\n * .action(function() {\n * // do work here\n * });\n *\n * @param {Function} fn\n * @return {Command} `this` command for chaining\n */\n\n action(fn) {\n const listener = (args) => {\n // The .action callback takes an extra parameter which is the command or options.\n const expectedArgsCount = this.registeredArguments.length;\n const actionArgs = args.slice(0, expectedArgsCount);\n if (this._storeOptionsAsProperties) {\n actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n } else {\n actionArgs[expectedArgsCount] = this.opts();\n }\n actionArgs.push(this);\n\n return fn.apply(this, actionArgs);\n };\n this._actionHandler = listener;\n return this;\n }\n\n /**\n * Factory routine to create a new unattached option.\n *\n * See .option() for creating an attached option, which uses this routine to\n * create the option. You can override createOption to return a custom option.\n *\n * @param {string} flags\n * @param {string} [description]\n * @return {Option} new option\n */\n\n createOption(flags, description) {\n return new Option(flags, description);\n }\n\n /**\n * Wrap parseArgs to catch 'commander.invalidArgument'.\n *\n * @param {(Option | Argument)} target\n * @param {string} value\n * @param {*} previous\n * @param {string} invalidArgumentMessage\n * @private\n */\n\n _callParseArg(target, value, previous, invalidArgumentMessage) {\n try {\n return target.parseArg(value, previous);\n } catch (err) {\n if (err.code === 'commander.invalidArgument') {\n const message = `${invalidArgumentMessage} ${err.message}`;\n this.error(message, { exitCode: err.exitCode, code: err.code });\n }\n throw err;\n }\n }\n\n /**\n * Check for option flag conflicts.\n * Register option if no conflicts found, or throw on conflict.\n *\n * @param {Option} option\n * @private\n */\n\n _registerOption(option) {\n const matchingOption =\n (option.short && this._findOption(option.short)) ||\n (option.long && this._findOption(option.long));\n if (matchingOption) {\n const matchingFlag =\n option.long && this._findOption(option.long)\n ? option.long\n : option.short;\n throw new Error(`Cannot add option '${option.flags}'${this._name && ` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'\n- already used by option '${matchingOption.flags}'`);\n }\n\n this.options.push(option);\n }\n\n /**\n * Check for command name and alias conflicts with existing commands.\n * Register command if no conflicts found, or throw on conflict.\n *\n * @param {Command} command\n * @private\n */\n\n _registerCommand(command) {\n const knownBy = (cmd) => {\n return [cmd.name()].concat(cmd.aliases());\n };\n\n const alreadyUsed = knownBy(command).find((name) =>\n this._findCommand(name),\n );\n if (alreadyUsed) {\n const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n const newCmd = knownBy(command).join('|');\n throw new Error(\n `cannot add command '${newCmd}' as already have command '${existingCmd}'`,\n );\n }\n\n this.commands.push(command);\n }\n\n /**\n * Add an option.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addOption(option) {\n this._registerOption(option);\n\n const oname = option.name();\n const name = option.attributeName();\n\n // store default value\n if (option.negate) {\n // --no-foo is special and defaults foo to true, unless a --foo option is already defined\n const positiveLongFlag = option.long.replace(/^--no-/, '--');\n if (!this._findOption(positiveLongFlag)) {\n this.setOptionValueWithSource(\n name,\n option.defaultValue === undefined ? true : option.defaultValue,\n 'default',\n );\n }\n } else if (option.defaultValue !== undefined) {\n this.setOptionValueWithSource(name, option.defaultValue, 'default');\n }\n\n // handler for cli and env supplied values\n const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n // val is null for optional option used without an optional-argument.\n // val is undefined for boolean and negated option.\n if (val == null && option.presetArg !== undefined) {\n val = option.presetArg;\n }\n\n // custom processing\n const oldValue = this.getOptionValue(name);\n if (val !== null && option.parseArg) {\n val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n } else if (val !== null && option.variadic) {\n val = option._concatValue(val, oldValue);\n }\n\n // Fill-in appropriate missing values. Long winded but easy to follow.\n if (val == null) {\n if (option.negate) {\n val = false;\n } else if (option.isBoolean() || option.optional) {\n val = true;\n } else {\n val = ''; // not normal, parseArg might have failed or be a mock function for testing\n }\n }\n this.setOptionValueWithSource(name, val, valueSource);\n };\n\n this.on('option:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'cli');\n });\n\n if (option.envVar) {\n this.on('optionEnv:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'env');\n });\n }\n\n return this;\n }\n\n /**\n * Internal implementation shared by .option() and .requiredOption()\n *\n * @return {Command} `this` command for chaining\n * @private\n */\n _optionEx(config, flags, description, fn, defaultValue) {\n if (typeof flags === 'object' && flags instanceof Option) {\n throw new Error(\n 'To add an Option object use addOption() instead of option() or requiredOption()',\n );\n }\n const option = this.createOption(flags, description);\n option.makeOptionMandatory(!!config.mandatory);\n if (typeof fn === 'function') {\n option.default(defaultValue).argParser(fn);\n } else if (fn instanceof RegExp) {\n // deprecated\n const regex = fn;\n fn = (val, def) => {\n const m = regex.exec(val);\n return m ? m[0] : def;\n };\n option.default(defaultValue).argParser(fn);\n } else {\n option.default(fn);\n }\n\n return this.addOption(option);\n }\n\n /**\n * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n *\n * See the README for more details, and see also addOption() and requiredOption().\n *\n * @example\n * program\n * .option('-p, --pepper', 'add pepper')\n * .option('-p, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n * .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n * .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n option(flags, description, parseArg, defaultValue) {\n return this._optionEx({}, flags, description, parseArg, defaultValue);\n }\n\n /**\n * Add a required option which must have a value after parsing. This usually means\n * the option must be specified on the command line. (Otherwise the same as .option().)\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n requiredOption(flags, description, parseArg, defaultValue) {\n return this._optionEx(\n { mandatory: true },\n flags,\n description,\n parseArg,\n defaultValue,\n );\n }\n\n /**\n * Alter parsing of short flags with optional values.\n *\n * @example\n * // for `.option('-f,--flag [value]'):\n * program.combineFlagAndOptionalValue(true); // `-f80` is treated like `--flag=80`, this is the default behaviour\n * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n *\n * @param {boolean} [combine] - if `true` or omitted, an optional value can be specified directly after the flag.\n * @return {Command} `this` command for chaining\n */\n combineFlagAndOptionalValue(combine = true) {\n this._combineFlagAndOptionalValue = !!combine;\n return this;\n }\n\n /**\n * Allow unknown options on the command line.\n *\n * @param {boolean} [allowUnknown] - if `true` or omitted, no error will be thrown for unknown options.\n * @return {Command} `this` command for chaining\n */\n allowUnknownOption(allowUnknown = true) {\n this._allowUnknownOption = !!allowUnknown;\n return this;\n }\n\n /**\n * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n *\n * @param {boolean} [allowExcess] - if `true` or omitted, no error will be thrown for excess arguments.\n * @return {Command} `this` command for chaining\n */\n allowExcessArguments(allowExcess = true) {\n this._allowExcessArguments = !!allowExcess;\n return this;\n }\n\n /**\n * Enable positional options. Positional means global options are specified before subcommands which lets\n * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n * The default behaviour is non-positional and global options may appear anywhere on the command line.\n *\n * @param {boolean} [positional]\n * @return {Command} `this` command for chaining\n */\n enablePositionalOptions(positional = true) {\n this._enablePositionalOptions = !!positional;\n return this;\n }\n\n /**\n * Pass through options that come after command-arguments rather than treat them as command-options,\n * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n * positional options to have been enabled on the program (parent commands).\n * The default behaviour is non-positional and options may appear before or after command-arguments.\n *\n * @param {boolean} [passThrough] for unknown options.\n * @return {Command} `this` command for chaining\n */\n passThroughOptions(passThrough = true) {\n this._passThroughOptions = !!passThrough;\n this._checkForBrokenPassThrough();\n return this;\n }\n\n /**\n * @private\n */\n\n _checkForBrokenPassThrough() {\n if (\n this.parent &&\n this._passThroughOptions &&\n !this.parent._enablePositionalOptions\n ) {\n throw new Error(\n `passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`,\n );\n }\n }\n\n /**\n * Whether to store option values as properties on command object,\n * or store separately (specify false). In both cases the option values can be accessed using .opts().\n *\n * @param {boolean} [storeAsProperties=true]\n * @return {Command} `this` command for chaining\n */\n\n storeOptionsAsProperties(storeAsProperties = true) {\n if (this.options.length) {\n throw new Error('call .storeOptionsAsProperties() before adding options');\n }\n if (Object.keys(this._optionValues).length) {\n throw new Error(\n 'call .storeOptionsAsProperties() before setting option values',\n );\n }\n this._storeOptionsAsProperties = !!storeAsProperties;\n return this;\n }\n\n /**\n * Retrieve option value.\n *\n * @param {string} key\n * @return {object} value\n */\n\n getOptionValue(key) {\n if (this._storeOptionsAsProperties) {\n return this[key];\n }\n return this._optionValues[key];\n }\n\n /**\n * Store option value.\n *\n * @param {string} key\n * @param {object} value\n * @return {Command} `this` command for chaining\n */\n\n setOptionValue(key, value) {\n return this.setOptionValueWithSource(key, value, undefined);\n }\n\n /**\n * Store option value and where the value came from.\n *\n * @param {string} key\n * @param {object} value\n * @param {string} source - expected values are default/config/env/cli/implied\n * @return {Command} `this` command for chaining\n */\n\n setOptionValueWithSource(key, value, source) {\n if (this._storeOptionsAsProperties) {\n this[key] = value;\n } else {\n this._optionValues[key] = value;\n }\n this._optionValueSources[key] = source;\n return this;\n }\n\n /**\n * Get source of option value.\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSource(key) {\n return this._optionValueSources[key];\n }\n\n /**\n * Get source of option value. See also .optsWithGlobals().\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSourceWithGlobals(key) {\n // global overwrites local, like optsWithGlobals\n let source;\n this._getCommandAndAncestors().forEach((cmd) => {\n if (cmd.getOptionValueSource(key) !== undefined) {\n source = cmd.getOptionValueSource(key);\n }\n });\n return source;\n }\n\n /**\n * Get user arguments from implied or explicit arguments.\n * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n *\n * @private\n */\n\n _prepareUserArgs(argv, parseOptions) {\n if (argv !== undefined && !Array.isArray(argv)) {\n throw new Error('first parameter to parse must be array or undefined');\n }\n parseOptions = parseOptions || {};\n\n // auto-detect argument conventions if nothing supplied\n if (argv === undefined && parseOptions.from === undefined) {\n if (process.versions?.electron) {\n parseOptions.from = 'electron';\n }\n // check node specific options for scenarios where user CLI args follow executable without scriptname\n const execArgv = process.execArgv ?? [];\n if (\n execArgv.includes('-e') ||\n execArgv.includes('--eval') ||\n execArgv.includes('-p') ||\n execArgv.includes('--print')\n ) {\n parseOptions.from = 'eval'; // internal usage, not documented\n }\n }\n\n // default to using process.argv\n if (argv === undefined) {\n argv = process.argv;\n }\n this.rawArgs = argv.slice();\n\n // extract the user args and scriptPath\n let userArgs;\n switch (parseOptions.from) {\n case undefined:\n case 'node':\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n break;\n case 'electron':\n // @ts-ignore: because defaultApp is an unknown property\n if (process.defaultApp) {\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n } else {\n userArgs = argv.slice(1);\n }\n break;\n case 'user':\n userArgs = argv.slice(0);\n break;\n case 'eval':\n userArgs = argv.slice(1);\n break;\n default:\n throw new Error(\n `unexpected parse option { from: '${parseOptions.from}' }`,\n );\n }\n\n // Find default name for program from arguments.\n if (!this._name && this._scriptPath)\n this.nameFromFilename(this._scriptPath);\n this._name = this._name || 'program';\n\n return userArgs;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Use parseAsync instead of parse if any of your action handlers are async.\n *\n * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n *\n * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n * - `'user'`: just user arguments\n *\n * @example\n * program.parse(); // parse process.argv and auto-detect electron and special node flags\n * program.parse(process.argv); // assume argv[0] is app and argv[1] is script\n * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv] - optional, defaults to process.argv\n * @param {object} [parseOptions] - optionally specify style of options with from: node/user/electron\n * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n * @return {Command} `this` command for chaining\n */\n\n parse(argv, parseOptions) {\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n this._parseCommand([], userArgs);\n\n return this;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n *\n * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n * - `'user'`: just user arguments\n *\n * @example\n * await program.parseAsync(); // parse process.argv and auto-detect electron and special node flags\n * await program.parseAsync(process.argv); // assume argv[0] is app and argv[1] is script\n * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv]\n * @param {object} [parseOptions]\n * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n * @return {Promise}\n */\n\n async parseAsync(argv, parseOptions) {\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n await this._parseCommand([], userArgs);\n\n return this;\n }\n\n /**\n * Execute a sub-command executable.\n *\n * @private\n */\n\n _executeSubCommand(subcommand, args) {\n args = args.slice();\n let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n function findFile(baseDir, baseName) {\n // Look for specified file\n const localBin = path.resolve(baseDir, baseName);\n if (fs.existsSync(localBin)) return localBin;\n\n // Stop looking if candidate already has an expected extension.\n if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n // Try all the extensions.\n const foundExt = sourceExt.find((ext) =>\n fs.existsSync(`${localBin}${ext}`),\n );\n if (foundExt) return `${localBin}${foundExt}`;\n\n return undefined;\n }\n\n // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // executableFile and executableDir might be full path, or just a name\n let executableFile =\n subcommand._executableFile || `${this._name}-${subcommand._name}`;\n let executableDir = this._executableDir || '';\n if (this._scriptPath) {\n let resolvedScriptPath; // resolve possible symlink for installed npm binary\n try {\n resolvedScriptPath = fs.realpathSync(this._scriptPath);\n } catch (err) {\n resolvedScriptPath = this._scriptPath;\n }\n executableDir = path.resolve(\n path.dirname(resolvedScriptPath),\n executableDir,\n );\n }\n\n // Look for a local file in preference to a command in PATH.\n if (executableDir) {\n let localFile = findFile(executableDir, executableFile);\n\n // Legacy search using prefix of script name instead of command name\n if (!localFile && !subcommand._executableFile && this._scriptPath) {\n const legacyName = path.basename(\n this._scriptPath,\n path.extname(this._scriptPath),\n );\n if (legacyName !== this._name) {\n localFile = findFile(\n executableDir,\n `${legacyName}-${subcommand._name}`,\n );\n }\n }\n executableFile = localFile || executableFile;\n }\n\n launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n let proc;\n if (process.platform !== 'win32') {\n if (launchWithNode) {\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n } else {\n proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n }\n } else {\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n }\n\n if (!proc.killed) {\n // testing mainly to avoid leak warnings during unit tests with mocked spawn\n const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n signals.forEach((signal) => {\n process.on(signal, () => {\n if (proc.killed === false && proc.exitCode === null) {\n // @ts-ignore because signals not typed to known strings\n proc.kill(signal);\n }\n });\n });\n }\n\n // By default terminate process when spawned process terminates.\n const exitCallback = this._exitCallback;\n proc.on('close', (code) => {\n code = code ?? 1; // code is null if spawned process terminated due to a signal\n if (!exitCallback) {\n process.exit(code);\n } else {\n exitCallback(\n new CommanderError(\n code,\n 'commander.executeSubCommandAsync',\n '(close)',\n ),\n );\n }\n });\n proc.on('error', (err) => {\n // @ts-ignore: because err.code is an unknown property\n if (err.code === 'ENOENT') {\n const executableDirMessage = executableDir\n ? `searched for local subcommand relative to directory '${executableDir}'`\n : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n const executableMissing = `'${executableFile}' does not exist\n - if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n throw new Error(executableMissing);\n // @ts-ignore: because err.code is an unknown property\n } else if (err.code === 'EACCES') {\n throw new Error(`'${executableFile}' not executable`);\n }\n if (!exitCallback) {\n process.exit(1);\n } else {\n const wrappedError = new CommanderError(\n 1,\n 'commander.executeSubCommandAsync',\n '(error)',\n );\n wrappedError.nestedError = err;\n exitCallback(wrappedError);\n }\n });\n\n // Store the reference to the child process\n this.runningCommand = proc;\n }\n\n /**\n * @private\n */\n\n _dispatchSubcommand(commandName, operands, unknown) {\n const subCommand = this._findCommand(commandName);\n if (!subCommand) this.help({ error: true });\n\n let promiseChain;\n promiseChain = this._chainOrCallSubCommandHook(\n promiseChain,\n subCommand,\n 'preSubcommand',\n );\n promiseChain = this._chainOrCall(promiseChain, () => {\n if (subCommand._executableHandler) {\n this._executeSubCommand(subCommand, operands.concat(unknown));\n } else {\n return subCommand._parseCommand(operands, unknown);\n }\n });\n return promiseChain;\n }\n\n /**\n * Invoke help directly if possible, or dispatch if necessary.\n * e.g. help foo\n *\n * @private\n */\n\n _dispatchHelpCommand(subcommandName) {\n if (!subcommandName) {\n this.help();\n }\n const subCommand = this._findCommand(subcommandName);\n if (subCommand && !subCommand._executableHandler) {\n subCommand.help();\n }\n\n // Fallback to parsing the help flag to invoke the help.\n return this._dispatchSubcommand(\n subcommandName,\n [],\n [this._getHelpOption()?.long ?? this._getHelpOption()?.short ?? '--help'],\n );\n }\n\n /**\n * Check this.args against expected this.registeredArguments.\n *\n * @private\n */\n\n _checkNumberOfArguments() {\n // too few\n this.registeredArguments.forEach((arg, i) => {\n if (arg.required && this.args[i] == null) {\n this.missingArgument(arg.name());\n }\n });\n // too many\n if (\n this.registeredArguments.length > 0 &&\n this.registeredArguments[this.registeredArguments.length - 1].variadic\n ) {\n return;\n }\n if (this.args.length > this.registeredArguments.length) {\n this._excessArguments(this.args);\n }\n }\n\n /**\n * Process this.args using this.registeredArguments and save as this.processedArgs!\n *\n * @private\n */\n\n _processArguments() {\n const myParseArg = (argument, value, previous) => {\n // Extra processing for nice error message on parsing failure.\n let parsedValue = value;\n if (value !== null && argument.parseArg) {\n const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n parsedValue = this._callParseArg(\n argument,\n value,\n previous,\n invalidValueMessage,\n );\n }\n return parsedValue;\n };\n\n this._checkNumberOfArguments();\n\n const processedArgs = [];\n this.registeredArguments.forEach((declaredArg, index) => {\n let value = declaredArg.defaultValue;\n if (declaredArg.variadic) {\n // Collect together remaining arguments for passing together as an array.\n if (index < this.args.length) {\n value = this.args.slice(index);\n if (declaredArg.parseArg) {\n value = value.reduce((processed, v) => {\n return myParseArg(declaredArg, v, processed);\n }, declaredArg.defaultValue);\n }\n } else if (value === undefined) {\n value = [];\n }\n } else if (index < this.args.length) {\n value = this.args[index];\n if (declaredArg.parseArg) {\n value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n }\n }\n processedArgs[index] = value;\n });\n this.processedArgs = processedArgs;\n }\n\n /**\n * Once we have a promise we chain, but call synchronously until then.\n *\n * @param {(Promise|undefined)} promise\n * @param {Function} fn\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCall(promise, fn) {\n // thenable\n if (promise && promise.then && typeof promise.then === 'function') {\n // already have a promise, chain callback\n return promise.then(() => fn());\n }\n // callback might return a promise\n return fn();\n }\n\n /**\n *\n * @param {(Promise|undefined)} promise\n * @param {string} event\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCallHooks(promise, event) {\n let result = promise;\n const hooks = [];\n this._getCommandAndAncestors()\n .reverse()\n .filter((cmd) => cmd._lifeCycleHooks[event] !== undefined)\n .forEach((hookedCommand) => {\n hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n hooks.push({ hookedCommand, callback });\n });\n });\n if (event === 'postAction') {\n hooks.reverse();\n }\n\n hooks.forEach((hookDetail) => {\n result = this._chainOrCall(result, () => {\n return hookDetail.callback(hookDetail.hookedCommand, this);\n });\n });\n return result;\n }\n\n /**\n *\n * @param {(Promise|undefined)} promise\n * @param {Command} subCommand\n * @param {string} event\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCallSubCommandHook(promise, subCommand, event) {\n let result = promise;\n if (this._lifeCycleHooks[event] !== undefined) {\n this._lifeCycleHooks[event].forEach((hook) => {\n result = this._chainOrCall(result, () => {\n return hook(this, subCommand);\n });\n });\n }\n return result;\n }\n\n /**\n * Process arguments in context of this command.\n * Returns action result, in case it is a promise.\n *\n * @private\n */\n\n _parseCommand(operands, unknown) {\n const parsed = this.parseOptions(unknown);\n this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n this._parseOptionsImplied();\n operands = operands.concat(parsed.operands);\n unknown = parsed.unknown;\n this.args = operands.concat(unknown);\n\n if (operands && this._findCommand(operands[0])) {\n return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n }\n if (\n this._getHelpCommand() &&\n operands[0] === this._getHelpCommand().name()\n ) {\n return this._dispatchHelpCommand(operands[1]);\n }\n if (this._defaultCommandName) {\n this._outputHelpIfRequested(unknown); // Run the help for default command from parent rather than passing to default command\n return this._dispatchSubcommand(\n this._defaultCommandName,\n operands,\n unknown,\n );\n }\n if (\n this.commands.length &&\n this.args.length === 0 &&\n !this._actionHandler &&\n !this._defaultCommandName\n ) {\n // probably missing subcommand and no handler, user needs help (and exit)\n this.help({ error: true });\n }\n\n this._outputHelpIfRequested(parsed.unknown);\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n const checkForUnknownOptions = () => {\n if (parsed.unknown.length > 0) {\n this.unknownOption(parsed.unknown[0]);\n }\n };\n\n const commandEvent = `command:${this.name()}`;\n if (this._actionHandler) {\n checkForUnknownOptions();\n this._processArguments();\n\n let promiseChain;\n promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n promiseChain = this._chainOrCall(promiseChain, () =>\n this._actionHandler(this.processedArgs),\n );\n if (this.parent) {\n promiseChain = this._chainOrCall(promiseChain, () => {\n this.parent.emit(commandEvent, operands, unknown); // legacy\n });\n }\n promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n return promiseChain;\n }\n if (this.parent && this.parent.listenerCount(commandEvent)) {\n checkForUnknownOptions();\n this._processArguments();\n this.parent.emit(commandEvent, operands, unknown); // legacy\n } else if (operands.length) {\n if (this._findCommand('*')) {\n // legacy default command\n return this._dispatchSubcommand('*', operands, unknown);\n }\n if (this.listenerCount('command:*')) {\n // skip option check, emit event for possible misspelling suggestion\n this.emit('command:*', operands, unknown);\n } else if (this.commands.length) {\n this.unknownCommand();\n } else {\n checkForUnknownOptions();\n this._processArguments();\n }\n } else if (this.commands.length) {\n checkForUnknownOptions();\n // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n this.help({ error: true });\n } else {\n checkForUnknownOptions();\n this._processArguments();\n // fall through for caller to handle after calling .parse()\n }\n }\n\n /**\n * Find matching command.\n *\n * @private\n * @return {Command | undefined}\n */\n _findCommand(name) {\n if (!name) return undefined;\n return this.commands.find(\n (cmd) => cmd._name === name || cmd._aliases.includes(name),\n );\n }\n\n /**\n * Return an option matching `arg` if any.\n *\n * @param {string} arg\n * @return {Option}\n * @package\n */\n\n _findOption(arg) {\n return this.options.find((option) => option.is(arg));\n }\n\n /**\n * Display an error message if a mandatory option does not have a value.\n * Called after checking for help flags in leaf subcommand.\n *\n * @private\n */\n\n _checkForMissingMandatoryOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd.options.forEach((anOption) => {\n if (\n anOption.mandatory &&\n cmd.getOptionValue(anOption.attributeName()) === undefined\n ) {\n cmd.missingMandatoryOptionValue(anOption);\n }\n });\n });\n }\n\n /**\n * Display an error message if conflicting options are used together in this.\n *\n * @private\n */\n _checkForConflictingLocalOptions() {\n const definedNonDefaultOptions = this.options.filter((option) => {\n const optionKey = option.attributeName();\n if (this.getOptionValue(optionKey) === undefined) {\n return false;\n }\n return this.getOptionValueSource(optionKey) !== 'default';\n });\n\n const optionsWithConflicting = definedNonDefaultOptions.filter(\n (option) => option.conflictsWith.length > 0,\n );\n\n optionsWithConflicting.forEach((option) => {\n const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n option.conflictsWith.includes(defined.attributeName()),\n );\n if (conflictingAndDefined) {\n this._conflictingOption(option, conflictingAndDefined);\n }\n });\n }\n\n /**\n * Display an error message if conflicting options are used together.\n * Called after checking for help flags in leaf subcommand.\n *\n * @private\n */\n _checkForConflictingOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd._checkForConflictingLocalOptions();\n });\n }\n\n /**\n * Parse options from `argv` removing known options,\n * and return argv split into operands and unknown arguments.\n *\n * Examples:\n *\n * argv => operands, unknown\n * --known kkk op => [op], []\n * op --known kkk => [op], []\n * sub --unknown uuu op => [sub], [--unknown uuu op]\n * sub -- --unknown uuu op => [sub --unknown uuu op], []\n *\n * @param {string[]} argv\n * @return {{operands: string[], unknown: string[]}}\n */\n\n parseOptions(argv) {\n const operands = []; // operands, not options or values\n const unknown = []; // first unknown option and remaining unknown args\n let dest = operands;\n const args = argv.slice();\n\n function maybeOption(arg) {\n return arg.length > 1 && arg[0] === '-';\n }\n\n // parse options\n let activeVariadicOption = null;\n while (args.length) {\n const arg = args.shift();\n\n // literal\n if (arg === '--') {\n if (dest === unknown) dest.push(arg);\n dest.push(...args);\n break;\n }\n\n if (activeVariadicOption && !maybeOption(arg)) {\n this.emit(`option:${activeVariadicOption.name()}`, arg);\n continue;\n }\n activeVariadicOption = null;\n\n if (maybeOption(arg)) {\n const option = this._findOption(arg);\n // recognised option, call listener to assign value with possible custom processing\n if (option) {\n if (option.required) {\n const value = args.shift();\n if (value === undefined) this.optionMissingArgument(option);\n this.emit(`option:${option.name()}`, value);\n } else if (option.optional) {\n let value = null;\n // historical behaviour is optional value is following arg unless an option\n if (args.length > 0 && !maybeOption(args[0])) {\n value = args.shift();\n }\n this.emit(`option:${option.name()}`, value);\n } else {\n // boolean flag\n this.emit(`option:${option.name()}`);\n }\n activeVariadicOption = option.variadic ? option : null;\n continue;\n }\n }\n\n // Look for combo options following single dash, eat first one if known.\n if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n const option = this._findOption(`-${arg[1]}`);\n if (option) {\n if (\n option.required ||\n (option.optional && this._combineFlagAndOptionalValue)\n ) {\n // option with value following in same argument\n this.emit(`option:${option.name()}`, arg.slice(2));\n } else {\n // boolean option, emit and put back remainder of arg for further processing\n this.emit(`option:${option.name()}`);\n args.unshift(`-${arg.slice(2)}`);\n }\n continue;\n }\n }\n\n // Look for known long flag with value, like --foo=bar\n if (/^--[^=]+=/.test(arg)) {\n const index = arg.indexOf('=');\n const option = this._findOption(arg.slice(0, index));\n if (option && (option.required || option.optional)) {\n this.emit(`option:${option.name()}`, arg.slice(index + 1));\n continue;\n }\n }\n\n // Not a recognised option by this command.\n // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n if (maybeOption(arg)) {\n dest = unknown;\n }\n\n // If using positionalOptions, stop processing our options at subcommand.\n if (\n (this._enablePositionalOptions || this._passThroughOptions) &&\n operands.length === 0 &&\n unknown.length === 0\n ) {\n if (this._findCommand(arg)) {\n operands.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n } else if (\n this._getHelpCommand() &&\n arg === this._getHelpCommand().name()\n ) {\n operands.push(arg);\n if (args.length > 0) operands.push(...args);\n break;\n } else if (this._defaultCommandName) {\n unknown.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n }\n }\n\n // If using passThroughOptions, stop processing options at first command-argument.\n if (this._passThroughOptions) {\n dest.push(arg);\n if (args.length > 0) dest.push(...args);\n break;\n }\n\n // add arg\n dest.push(arg);\n }\n\n return { operands, unknown };\n }\n\n /**\n * Return an object containing local option values as key-value pairs.\n *\n * @return {object}\n */\n opts() {\n if (this._storeOptionsAsProperties) {\n // Preserve original behaviour so backwards compatible when still using properties\n const result = {};\n const len = this.options.length;\n\n for (let i = 0; i < len; i++) {\n const key = this.options[i].attributeName();\n result[key] =\n key === this._versionOptionName ? this._version : this[key];\n }\n return result;\n }\n\n return this._optionValues;\n }\n\n /**\n * Return an object containing merged local and global option values as key-value pairs.\n *\n * @return {object}\n */\n optsWithGlobals() {\n // globals overwrite locals\n return this._getCommandAndAncestors().reduce(\n (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n {},\n );\n }\n\n /**\n * Display error message and exit (or call exitOverride).\n *\n * @param {string} message\n * @param {object} [errorOptions]\n * @param {string} [errorOptions.code] - an id string representing the error\n * @param {number} [errorOptions.exitCode] - used with process.exit\n */\n error(message, errorOptions) {\n // output handling\n this._outputConfiguration.outputError(\n `${message}\\n`,\n this._outputConfiguration.writeErr,\n );\n if (typeof this._showHelpAfterError === 'string') {\n this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n } else if (this._showHelpAfterError) {\n this._outputConfiguration.writeErr('\\n');\n this.outputHelp({ error: true });\n }\n\n // exit handling\n const config = errorOptions || {};\n const exitCode = config.exitCode || 1;\n const code = config.code || 'commander.error';\n this._exit(exitCode, code, message);\n }\n\n /**\n * Apply any option related environment variables, if option does\n * not have a value from cli or client code.\n *\n * @private\n */\n _parseOptionsEnv() {\n this.options.forEach((option) => {\n if (option.envVar && option.envVar in process.env) {\n const optionKey = option.attributeName();\n // Priority check. Do not overwrite cli or options from unknown source (client-code).\n if (\n this.getOptionValue(optionKey) === undefined ||\n ['default', 'config', 'env'].includes(\n this.getOptionValueSource(optionKey),\n )\n ) {\n if (option.required || option.optional) {\n // option can take a value\n // keep very simple, optional always takes value\n this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n } else {\n // boolean\n // keep very simple, only care that envVar defined and not the value\n this.emit(`optionEnv:${option.name()}`);\n }\n }\n }\n });\n }\n\n /**\n * Apply any implied option values, if option is undefined or default value.\n *\n * @private\n */\n _parseOptionsImplied() {\n const dualHelper = new DualOptions(this.options);\n const hasCustomOptionValue = (optionKey) => {\n return (\n this.getOptionValue(optionKey) !== undefined &&\n !['default', 'implied'].includes(this.getOptionValueSource(optionKey))\n );\n };\n this.options\n .filter(\n (option) =>\n option.implied !== undefined &&\n hasCustomOptionValue(option.attributeName()) &&\n dualHelper.valueFromOption(\n this.getOptionValue(option.attributeName()),\n option,\n ),\n )\n .forEach((option) => {\n Object.keys(option.implied)\n .filter((impliedKey) => !hasCustomOptionValue(impliedKey))\n .forEach((impliedKey) => {\n this.setOptionValueWithSource(\n impliedKey,\n option.implied[impliedKey],\n 'implied',\n );\n });\n });\n }\n\n /**\n * Argument `name` is missing.\n *\n * @param {string} name\n * @private\n */\n\n missingArgument(name) {\n const message = `error: missing required argument '${name}'`;\n this.error(message, { code: 'commander.missingArgument' });\n }\n\n /**\n * `Option` is missing an argument.\n *\n * @param {Option} option\n * @private\n */\n\n optionMissingArgument(option) {\n const message = `error: option '${option.flags}' argument missing`;\n this.error(message, { code: 'commander.optionMissingArgument' });\n }\n\n /**\n * `Option` does not have a value, and is a mandatory option.\n *\n * @param {Option} option\n * @private\n */\n\n missingMandatoryOptionValue(option) {\n const message = `error: required option '${option.flags}' not specified`;\n this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n }\n\n /**\n * `Option` conflicts with another option.\n *\n * @param {Option} option\n * @param {Option} conflictingOption\n * @private\n */\n _conflictingOption(option, conflictingOption) {\n // The calling code does not know whether a negated option is the source of the\n // value, so do some work to take an educated guess.\n const findBestOptionFromValue = (option) => {\n const optionKey = option.attributeName();\n const optionValue = this.getOptionValue(optionKey);\n const negativeOption = this.options.find(\n (target) => target.negate && optionKey === target.attributeName(),\n );\n const positiveOption = this.options.find(\n (target) => !target.negate && optionKey === target.attributeName(),\n );\n if (\n negativeOption &&\n ((negativeOption.presetArg === undefined && optionValue === false) ||\n (negativeOption.presetArg !== undefined &&\n optionValue === negativeOption.presetArg))\n ) {\n return negativeOption;\n }\n return positiveOption || option;\n };\n\n const getErrorMessage = (option) => {\n const bestOption = findBestOptionFromValue(option);\n const optionKey = bestOption.attributeName();\n const source = this.getOptionValueSource(optionKey);\n if (source === 'env') {\n return `environment variable '${bestOption.envVar}'`;\n }\n return `option '${bestOption.flags}'`;\n };\n\n const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n this.error(message, { code: 'commander.conflictingOption' });\n }\n\n /**\n * Unknown option `flag`.\n *\n * @param {string} flag\n * @private\n */\n\n unknownOption(flag) {\n if (this._allowUnknownOption) return;\n let suggestion = '';\n\n if (flag.startsWith('--') && this._showSuggestionAfterError) {\n // Looping to pick up the global options too\n let candidateFlags = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let command = this;\n do {\n const moreFlags = command\n .createHelp()\n .visibleOptions(command)\n .filter((option) => option.long)\n .map((option) => option.long);\n candidateFlags = candidateFlags.concat(moreFlags);\n command = command.parent;\n } while (command && !command._enablePositionalOptions);\n suggestion = suggestSimilar(flag, candidateFlags);\n }\n\n const message = `error: unknown option '${flag}'${suggestion}`;\n this.error(message, { code: 'commander.unknownOption' });\n }\n\n /**\n * Excess arguments, more than expected.\n *\n * @param {string[]} receivedArgs\n * @private\n */\n\n _excessArguments(receivedArgs) {\n if (this._allowExcessArguments) return;\n\n const expected = this.registeredArguments.length;\n const s = expected === 1 ? '' : 's';\n const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n this.error(message, { code: 'commander.excessArguments' });\n }\n\n /**\n * Unknown command.\n *\n * @private\n */\n\n unknownCommand() {\n const unknownName = this.args[0];\n let suggestion = '';\n\n if (this._showSuggestionAfterError) {\n const candidateNames = [];\n this.createHelp()\n .visibleCommands(this)\n .forEach((command) => {\n candidateNames.push(command.name());\n // just visible alias\n if (command.alias()) candidateNames.push(command.alias());\n });\n suggestion = suggestSimilar(unknownName, candidateNames);\n }\n\n const message = `error: unknown command '${unknownName}'${suggestion}`;\n this.error(message, { code: 'commander.unknownCommand' });\n }\n\n /**\n * Get or set the program version.\n *\n * This method auto-registers the \"-V, --version\" option which will print the version number.\n *\n * You can optionally supply the flags and description to override the defaults.\n *\n * @param {string} [str]\n * @param {string} [flags]\n * @param {string} [description]\n * @return {(this | string | undefined)} `this` command for chaining, or version string if no arguments\n */\n\n version(str, flags, description) {\n if (str === undefined) return this._version;\n this._version = str;\n flags = flags || '-V, --version';\n description = description || 'output the version number';\n const versionOption = this.createOption(flags, description);\n this._versionOptionName = versionOption.attributeName();\n this._registerOption(versionOption);\n\n this.on('option:' + versionOption.name(), () => {\n this._outputConfiguration.writeOut(`${str}\\n`);\n this._exit(0, 'commander.version', str);\n });\n return this;\n }\n\n /**\n * Set the description.\n *\n * @param {string} [str]\n * @param {object} [argsDescription]\n * @return {(string|Command)}\n */\n description(str, argsDescription) {\n if (str === undefined && argsDescription === undefined)\n return this._description;\n this._description = str;\n if (argsDescription) {\n this._argsDescription = argsDescription;\n }\n return this;\n }\n\n /**\n * Set the summary. Used when listed as subcommand of parent.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n summary(str) {\n if (str === undefined) return this._summary;\n this._summary = str;\n return this;\n }\n\n /**\n * Set an alias for the command.\n *\n * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n *\n * @param {string} [alias]\n * @return {(string|Command)}\n */\n\n alias(alias) {\n if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n /** @type {Command} */\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let command = this;\n if (\n this.commands.length !== 0 &&\n this.commands[this.commands.length - 1]._executableHandler\n ) {\n // assume adding alias for last added executable subcommand, rather than this\n command = this.commands[this.commands.length - 1];\n }\n\n if (alias === command._name)\n throw new Error(\"Command alias can't be the same as its name\");\n const matchingCommand = this.parent?._findCommand(alias);\n if (matchingCommand) {\n // c.f. _registerCommand\n const existingCmd = [matchingCommand.name()]\n .concat(matchingCommand.aliases())\n .join('|');\n throw new Error(\n `cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`,\n );\n }\n\n command._aliases.push(alias);\n return this;\n }\n\n /**\n * Set aliases for the command.\n *\n * Only the first alias is shown in the auto-generated help.\n *\n * @param {string[]} [aliases]\n * @return {(string[]|Command)}\n */\n\n aliases(aliases) {\n // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n if (aliases === undefined) return this._aliases;\n\n aliases.forEach((alias) => this.alias(alias));\n return this;\n }\n\n /**\n * Set / get the command usage `str`.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n\n usage(str) {\n if (str === undefined) {\n if (this._usage) return this._usage;\n\n const args = this.registeredArguments.map((arg) => {\n return humanReadableArgName(arg);\n });\n return []\n .concat(\n this.options.length || this._helpOption !== null ? '[options]' : [],\n this.commands.length ? '[command]' : [],\n this.registeredArguments.length ? args : [],\n )\n .join(' ');\n }\n\n this._usage = str;\n return this;\n }\n\n /**\n * Get or set the name of the command.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n\n name(str) {\n if (str === undefined) return this._name;\n this._name = str;\n return this;\n }\n\n /**\n * Set the name of the command from script filename, such as process.argv[1],\n * or require.main.filename, or __filename.\n *\n * (Used internally and public although not documented in README.)\n *\n * @example\n * program.nameFromFilename(require.main.filename);\n *\n * @param {string} filename\n * @return {Command}\n */\n\n nameFromFilename(filename) {\n this._name = path.basename(filename, path.extname(filename));\n\n return this;\n }\n\n /**\n * Get or set the directory for searching for executable subcommands of this command.\n *\n * @example\n * program.executableDir(__dirname);\n * // or\n * program.executableDir('subcommands');\n *\n * @param {string} [path]\n * @return {(string|null|Command)}\n */\n\n executableDir(path) {\n if (path === undefined) return this._executableDir;\n this._executableDir = path;\n return this;\n }\n\n /**\n * Return program help documentation.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n * @return {string}\n */\n\n helpInformation(contextOptions) {\n const helper = this.createHelp();\n if (helper.helpWidth === undefined) {\n helper.helpWidth =\n contextOptions && contextOptions.error\n ? this._outputConfiguration.getErrHelpWidth()\n : this._outputConfiguration.getOutHelpWidth();\n }\n return helper.formatHelp(this, helper);\n }\n\n /**\n * @private\n */\n\n _getHelpContext(contextOptions) {\n contextOptions = contextOptions || {};\n const context = { error: !!contextOptions.error };\n let write;\n if (context.error) {\n write = (arg) => this._outputConfiguration.writeErr(arg);\n } else {\n write = (arg) => this._outputConfiguration.writeOut(arg);\n }\n context.write = contextOptions.write || write;\n context.command = this;\n return context;\n }\n\n /**\n * Output help information for this command.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n outputHelp(contextOptions) {\n let deprecatedCallback;\n if (typeof contextOptions === 'function') {\n deprecatedCallback = contextOptions;\n contextOptions = undefined;\n }\n const context = this._getHelpContext(contextOptions);\n\n this._getCommandAndAncestors()\n .reverse()\n .forEach((command) => command.emit('beforeAllHelp', context));\n this.emit('beforeHelp', context);\n\n let helpInformation = this.helpInformation(context);\n if (deprecatedCallback) {\n helpInformation = deprecatedCallback(helpInformation);\n if (\n typeof helpInformation !== 'string' &&\n !Buffer.isBuffer(helpInformation)\n ) {\n throw new Error('outputHelp callback must return a string or a Buffer');\n }\n }\n context.write(helpInformation);\n\n if (this._getHelpOption()?.long) {\n this.emit(this._getHelpOption().long); // deprecated\n }\n this.emit('afterHelp', context);\n this._getCommandAndAncestors().forEach((command) =>\n command.emit('afterAllHelp', context),\n );\n }\n\n /**\n * You can pass in flags and a description to customise the built-in help option.\n * Pass in false to disable the built-in help option.\n *\n * @example\n * program.helpOption('-?, --help' 'show help'); // customise\n * program.helpOption(false); // disable\n *\n * @param {(string | boolean)} flags\n * @param {string} [description]\n * @return {Command} `this` command for chaining\n */\n\n helpOption(flags, description) {\n // Support disabling built-in help option.\n if (typeof flags === 'boolean') {\n if (flags) {\n this._helpOption = this._helpOption ?? undefined; // preserve existing option\n } else {\n this._helpOption = null; // disable\n }\n return this;\n }\n\n // Customise flags and description.\n flags = flags ?? '-h, --help';\n description = description ?? 'display help for command';\n this._helpOption = this.createOption(flags, description);\n\n return this;\n }\n\n /**\n * Lazy create help option.\n * Returns null if has been disabled with .helpOption(false).\n *\n * @returns {(Option | null)} the help option\n * @package\n */\n _getHelpOption() {\n // Lazy create help option on demand.\n if (this._helpOption === undefined) {\n this.helpOption(undefined, undefined);\n }\n return this._helpOption;\n }\n\n /**\n * Supply your own option to use for the built-in help option.\n * This is an alternative to using helpOption() to customise the flags and description etc.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addHelpOption(option) {\n this._helpOption = option;\n return this;\n }\n\n /**\n * Output help information and exit.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n help(contextOptions) {\n this.outputHelp(contextOptions);\n let exitCode = process.exitCode || 0;\n if (\n exitCode === 0 &&\n contextOptions &&\n typeof contextOptions !== 'function' &&\n contextOptions.error\n ) {\n exitCode = 1;\n }\n // message: do not have all displayed text available so only passing placeholder.\n this._exit(exitCode, 'commander.help', '(outputHelp)');\n }\n\n /**\n * Add additional text to be displayed with the built-in help.\n *\n * Position is 'before' or 'after' to affect just this command,\n * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n *\n * @param {string} position - before or after built-in help\n * @param {(string | Function)} text - string to add, or a function returning a string\n * @return {Command} `this` command for chaining\n */\n addHelpText(position, text) {\n const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n if (!allowedValues.includes(position)) {\n throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n const helpEvent = `${position}Help`;\n this.on(helpEvent, (context) => {\n let helpStr;\n if (typeof text === 'function') {\n helpStr = text({ error: context.error, command: context.command });\n } else {\n helpStr = text;\n }\n // Ignore falsy value when nothing to output.\n if (helpStr) {\n context.write(`${helpStr}\\n`);\n }\n });\n return this;\n }\n\n /**\n * Output help information if help flags specified\n *\n * @param {Array} args - array of options to search for help flags\n * @private\n */\n\n _outputHelpIfRequested(args) {\n const helpOption = this._getHelpOption();\n const helpRequested = helpOption && args.find((arg) => helpOption.is(arg));\n if (helpRequested) {\n this.outputHelp();\n // (Do not have all displayed text available so only passing placeholder.)\n this._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n }\n }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @private\n */\n\nfunction incrementNodeInspectorPort(args) {\n // Testing for these options:\n // --inspect[=[host:]port]\n // --inspect-brk[=[host:]port]\n // --inspect-port=[host:]port\n return args.map((arg) => {\n if (!arg.startsWith('--inspect')) {\n return arg;\n }\n let debugOption;\n let debugHost = '127.0.0.1';\n let debugPort = '9229';\n let match;\n if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n // e.g. --inspect\n debugOption = match[1];\n } else if (\n (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null\n ) {\n debugOption = match[1];\n if (/^\\d+$/.test(match[3])) {\n // e.g. --inspect=1234\n debugPort = match[3];\n } else {\n // e.g. --inspect=localhost\n debugHost = match[3];\n }\n } else if (\n (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null\n ) {\n // e.g. --inspect=localhost:1234\n debugOption = match[1];\n debugHost = match[3];\n debugPort = match[4];\n }\n\n if (debugOption && debugPort !== '0') {\n return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n }\n return arg;\n });\n}\n\nexports.Command = Command;\n","const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\nexports.program = new Command();\n\nexports.createCommand = (name) => new Command(name);\nexports.createOption = (flags, description) => new Option(flags, description);\nexports.createArgument = (name, description) => new Argument(name, description);\n\n/**\n * Expose classes\n */\n\nexports.Command = Command;\nexports.Option = Option;\nexports.Argument = Argument;\nexports.Help = Help;\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\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 * 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 = item.type\n ? item.type === 'success'\n ? UI.success(value)\n : item.type === 'error'\n ? UI.error(value)\n : item.type === 'warning'\n ? UI.warning(value)\n : UI.info(value)\n : UI.bold(value);\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\nexport default UI;\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 ErrorPayload {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n hint?: string;\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, null, 2));\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 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 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 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 }\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 }\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 value\n ? this.useColor\n ? styled(Symbols.SUCCESS, Style.TEXT_SUCCESS)\n : 'yes'\n : this.useColor\n ? styled(Symbols.FAILURE, Style.TEXT_DANGER)\n : 'no';\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 /**\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 * 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} from './formatter.js';\n\nexport type { OutputFormat, FormatterOptions, SuccessPayload };\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}\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 * 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 },\n): never {\n const formatter = getFormatter();\n formatter.error({\n code,\n message,\n details: options?.details,\n hint: options?.hint,\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 },\n): void {\n const formatter = getFormatter();\n formatter.error({\n code,\n message,\n details: options?.details,\n hint: options?.hint,\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 },\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 },\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\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} as const;\n\nexport type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];\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 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 builder data directory (~/.refly/builder)\n */\nexport function getBuilderDir(): string {\n const dir = path.join(getReflyDir(), 'builder');\n ensureDir(dir);\n return dir;\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 current builder session path\n */\nexport function getCurrentSessionPath(): string {\n return path.join(getBuilderDir(), 'current');\n}\n\n/**\n * Get a session file path by ID\n */\nexport function getSessionPath(sessionId: string): string {\n return path.join(getBuilderDir(), `session-${sessionId}.json`);\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 { 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","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 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 { 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","export {};\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","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 * 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 * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\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// 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});\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","/**\n * Custom error classes for CLI operations\n */\n\nimport { ErrorCode, ErrorCodes } 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 ) {\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 BuilderError extends CLIError {}\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 * 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 * 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 {\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}\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 // Parse response\n const data = (await response.json()) as APIResponse<T>;\n\n // Handle API-level errors\n if (!response.ok || !data.success) {\n throw mapAPIError(response.status, data);\n }\n\n return data.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 const errCode = response.errCode ?? 'UNKNOWN';\n const errMsg = response.errMsg ?? '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 * Refly CLI - Main entry point\n *\n * Supports multiple output formats: json, pretty, compact, plain.\n * Exit codes: 0=success, 1=error, 2=auth, 3=validation, 4=network, 5=not found\n */\n\nimport { Command } from 'commander';\nimport { fail, ErrorCodes, configureOutput, type OutputFormat } from '../utils/output.js';\n\n// Import commands\nimport { initCommand } from '../commands/init.js';\nimport { loginCommand } from '../commands/login.js';\nimport { logoutCommand } from '../commands/logout.js';\nimport { statusCommand } from '../commands/status.js';\nimport { whoamiCommand } from '../commands/whoami.js';\nimport { upgradeCommand } from '../commands/upgrade.js';\nimport { configCommand } from '../commands/config.js';\nimport { builderCommand } from '../commands/builder/index.js';\nimport { workflowCommand } from '../commands/workflow/index.js';\nimport { nodeCommand } from '../commands/node/index.js';\nimport { toolCommand } from '../commands/tool/index.js';\nimport { fileCommand } from '../commands/file/index.js';\n\nconst VERSION = '0.1.0';\n\nconst program = new Command();\n\nprogram\n .name('refly')\n .description('Refly CLI - Workflow orchestration for Claude Code')\n .version(VERSION, '-v, --version', 'Output CLI version')\n .option('--host <url>', 'API endpoint override')\n .option('--debug', 'Enable debug logging')\n .option(\n '-f, --format <format>',\n 'Output format: json, pretty, compact, plain (default: auto-detect)',\n )\n .option('--no-color', 'Disable colored output')\n .option('--verbose', 'Enable verbose output');\n\n// Global options handling\nprogram.hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n\n // Configure output format (must be done before any output)\n configureOutput({\n format: opts.format as OutputFormat | undefined,\n noColor: opts.color === false,\n verbose: opts.verbose ?? false,\n autoDetect: !opts.format, // Auto-detect only if format not explicitly set\n });\n\n // Set API endpoint override\n if (opts.host) {\n process.env.REFLY_API_ENDPOINT = opts.host;\n }\n\n // Enable debug logging\n if (opts.debug) {\n const { logger } = require('../utils/logger.js');\n logger.setLevel('debug');\n logger.enableFileLogging();\n }\n});\n\n// Add commands\nprogram.addCommand(initCommand);\nprogram.addCommand(loginCommand);\nprogram.addCommand(logoutCommand);\nprogram.addCommand(statusCommand);\nprogram.addCommand(whoamiCommand);\nprogram.addCommand(upgradeCommand);\nprogram.addCommand(configCommand);\nprogram.addCommand(builderCommand);\nprogram.addCommand(workflowCommand);\nprogram.addCommand(nodeCommand);\nprogram.addCommand(toolCommand);\nprogram.addCommand(fileCommand);\n\n// Error handling\nprogram.exitOverride((err) => {\n // Commander throws errors for help/version which we should let through\n if (err.code === 'commander.helpDisplayed' || err.code === 'commander.version') {\n process.exit(0);\n }\n\n // Handle other commander errors\n fail(ErrorCodes.INVALID_INPUT, err.message, {\n details: { code: err.code },\n hint: 'Run `refly --help` for usage',\n });\n});\n\n// Catch unhandled errors\nprocess.on('uncaughtException', (error) => {\n fail(ErrorCodes.INTERNAL_ERROR, error.message, {\n hint: 'Report this issue at https://github.com/refly-ai/refly/issues',\n });\n});\n\nprocess.on('unhandledRejection', (reason) => {\n fail(ErrorCodes.INTERNAL_ERROR, reason instanceof Error ? reason.message : String(reason), {\n hint: 'Report this issue at https://github.com/refly-ai/refly/issues',\n });\n});\n\n// Parse arguments\nprogram.parse();\n","import commander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n program,\n createCommand,\n createArgument,\n createOption,\n CommanderError,\n InvalidArgumentError,\n InvalidOptionArgumentError, // deprecated old name\n Command,\n Argument,\n Option,\n Help,\n} = commander;\n","/**\n * refly init - Initialize CLI and install skill files\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../utils/output.js';\nimport { installSkill, isSkillInstalled } from '../skill/installer.js';\nimport { loadConfig, saveConfig, getApiEndpoint, setApiKey } from '../config/config.js';\nimport { getReflyDir } from '../config/paths.js';\n\n// Default API endpoint - injected at build time by tsup\n// Build with different environments:\n// - Test/Dev: REFLY_BUILD_ENV=test pnpm build\n// - Production: REFLY_BUILD_ENV=production pnpm build (or just pnpm build)\n// - Custom: REFLY_BUILD_ENDPOINT=https://custom.refly.ai pnpm build\nconst DEFAULT_API_ENDPOINT = process.env.REFLY_BUILD_DEFAULT_ENDPOINT || 'https://refly.ai';\n\n/**\n * Generate API key via dev endpoint (bypasses authentication)\n */\nasync function generateDevApiKey(\n endpoint: string,\n email: string,\n): Promise<{\n keyId: string;\n apiKey: string;\n name: string;\n user: { uid: string; email: string; name: string | null };\n} | null> {\n try {\n const response = await fetch(`${endpoint}/v1/auth/cli/dev/api-key`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n email,\n name: 'CLI Auto-generated Key',\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(`Failed to generate API key: ${errorText}`);\n return null;\n }\n\n const data: any = await response.json();\n if (data?.success && data.data) {\n return data.data;\n }\n return null;\n } catch (error) {\n console.error(`Failed to connect to server: ${error}`);\n return null;\n }\n}\n\nexport const initCommand = new Command('init')\n .description('Initialize Refly CLI and install skill files')\n .option('--force', 'Force reinstall even if already installed')\n .option('--host <url>', 'API server URL', DEFAULT_API_ENDPOINT)\n .option('--email <email>', 'Auto-generate API key for this email (dev mode)')\n .action(async (options) => {\n try {\n const { force, host, email } = options;\n const apiEndpoint = host || DEFAULT_API_ENDPOINT;\n\n // Check current state\n const skillStatus = isSkillInstalled();\n\n if (skillStatus.installed && skillStatus.upToDate && !force && !email) {\n return ok('init', {\n message: 'Refly CLI already initialized',\n configDir: getReflyDir(),\n skillInstalled: true,\n skillVersion: skillStatus.currentVersion,\n apiEndpoint: getApiEndpoint(),\n });\n }\n\n // Initialize config with API endpoint\n const config = loadConfig();\n config.api = {\n endpoint: apiEndpoint,\n };\n saveConfig(config);\n\n // Install skill files\n const result = installSkill();\n\n // Auto-generate API key if email provided\n let apiKeyInfo: {\n keyId: string;\n apiKey: string;\n name: string;\n user: { uid: string; email: string; name: string | null };\n } | null = null;\n\n if (email) {\n console.log(`\\nGenerating API key for ${email}...`);\n apiKeyInfo = await generateDevApiKey(apiEndpoint, email);\n\n if (apiKeyInfo) {\n // Save API key to config\n setApiKey({\n apiKey: apiKeyInfo.apiKey,\n apiKeyId: apiKeyInfo.keyId,\n apiKeyName: apiKeyInfo.name,\n user: {\n uid: apiKeyInfo.user.uid,\n email: apiKeyInfo.user.email,\n name: apiKeyInfo.user.name || undefined,\n },\n });\n console.log('API key generated and saved successfully!');\n } else {\n console.warn(\n `Warning: Failed to generate API key. You can login manually with 'refly login'`,\n );\n }\n }\n\n ok('init', {\n message: 'Refly CLI initialized successfully',\n configDir: getReflyDir(),\n apiEndpoint: apiEndpoint,\n skillInstalled: result.skillInstalled,\n skillPath: result.skillPath,\n commandsInstalled: result.commandsInstalled,\n commandsPath: result.commandsPath,\n version: result.version,\n ...(apiKeyInfo\n ? {\n authenticated: true,\n authMethod: 'apikey',\n user: apiKeyInfo.user,\n apiKeyId: apiKeyInfo.keyId,\n }\n : {\n nextStep: 'Run `refly login` to authenticate, or use --email <email> for dev mode',\n }),\n });\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to initialize',\n { hint: 'Check permissions and try again' },\n );\n }\n });\n","/**\n * Skill installer - copies SKILL.md and references to Claude Code directories.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getClaudeSkillDir,\n getClaudeCommandsDir,\n ensureDir,\n claudeDirectoriesExist,\n} from '../config/paths.js';\nimport { updateSkillInfo } from '../config/config.js';\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\n path.join(__dirname, '..', '..', '..', 'skill'), // Development\n ];\n\n for (const p of possiblePaths) {\n if (fs.existsSync(p)) {\n return p;\n }\n }\n\n throw new Error('Skill files not found in package');\n}\n\nexport interface InstallResult {\n skillInstalled: boolean;\n skillPath: string | null;\n commandsInstalled: boolean;\n commandsPath: string | null;\n version: string;\n}\n\n/**\n * Install skill files to Claude Code directories\n */\nexport function installSkill(): InstallResult {\n const result: InstallResult = {\n skillInstalled: false,\n skillPath: null,\n commandsInstalled: false,\n commandsPath: null,\n version: getSkillVersion(),\n };\n\n const dirs = claudeDirectoriesExist();\n const sourceDir = getPackageSkillDir();\n\n // Install SKILL.md and references\n // Always try to create skills directory\n const targetDir = getClaudeSkillDir();\n ensureDir(targetDir);\n ensureDir(path.join(targetDir, 'references'));\n\n // Copy SKILL.md\n const skillSource = path.join(sourceDir, 'SKILL.md');\n const skillTarget = path.join(targetDir, 'SKILL.md');\n if (fs.existsSync(skillSource)) {\n fs.copyFileSync(skillSource, skillTarget);\n result.skillInstalled = true;\n result.skillPath = targetDir;\n }\n\n // Copy references\n const refsSource = path.join(sourceDir, 'references');\n const refsTarget = path.join(targetDir, 'references');\n if (fs.existsSync(refsSource)) {\n const files = fs.readdirSync(refsSource);\n for (const file of files) {\n fs.copyFileSync(path.join(refsSource, file), path.join(refsTarget, file));\n }\n }\n\n // Install slash commands (optional)\n if (dirs.commands) {\n const commandsDir = getClaudeCommandsDir();\n result.commandsInstalled = installSlashCommands(sourceDir, commandsDir);\n if (result.commandsInstalled) {\n result.commandsPath = commandsDir;\n }\n }\n\n // Update config with installation info\n updateSkillInfo(result.version);\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} {\n const skillPath = path.join(getClaudeSkillDir(), 'SKILL.md');\n\n if (!fs.existsSync(skillPath)) {\n return { installed: false, upToDate: false };\n }\n\n const currentVersion = getSkillVersion();\n // For now, consider it up to date if it exists\n // Future: parse version from installed SKILL.md and compare\n\n return {\n installed: true,\n upToDate: true,\n currentVersion,\n };\n}\n","/**\n * refly login - Authenticate with OAuth (Google or GitHub), Device Flow, or API Key\n */\n\nimport { Command } from 'commander';\nimport * as http from 'node:http';\nimport * as os from 'node:os';\nimport type { AddressInfo } from 'node:net';\nimport open from 'open';\nimport { ok, fail, ErrorCodes } from '../utils/output.js';\nimport { setOAuthTokens, setApiKey, getApiEndpoint, getWebUrl } from '../config/config.js';\nimport { apiRequest } from '../api/client.js';\nimport { logger } from '../utils/logger.js';\n\n// CLI version for device registration\nconst CLI_VERSION = '0.1.0';\n\nexport const loginCommand = new Command('login')\n .description('Authenticate with Refly using OAuth or API Key')\n .option('-p, --provider <provider>', 'OAuth provider (google or github)', 'google')\n .option('-k, --api-key <key>', 'Authenticate using an API key')\n .option('-d, --device', 'Use device authorization flow (for headless environments)')\n .action(async (options) => {\n try {\n // If API key is provided, use API key authentication\n if (options.apiKey) {\n await loginWithApiKey(options.apiKey);\n return;\n }\n\n // Validate provider\n const provider = options.provider as 'google' | 'github';\n if (!['google', 'github'].includes(provider)) {\n return fail(ErrorCodes.INVALID_INPUT, 'Invalid provider', {\n hint: 'Provider must be \"google\" or \"github\"',\n });\n }\n\n // Use device flow if requested\n if (options.device) {\n await loginWithDeviceFlow();\n return;\n }\n\n // Otherwise, use OAuth with local callback server\n await loginWithOAuth(provider);\n } catch (error) {\n logger.error('Login failed:', error);\n fail(ErrorCodes.AUTH_REQUIRED, error instanceof Error ? error.message : 'Login failed', {\n hint: 'Try again or check your internet connection',\n });\n }\n });\n\n/**\n * Login using API Key\n */\nasync function loginWithApiKey(apiKey: string): Promise<void> {\n logger.info('Validating API key...');\n\n // Validate API key format\n if (!apiKey.startsWith('rf_')) {\n return fail(ErrorCodes.INVALID_INPUT, 'Invalid API key format', {\n hint: 'API key should start with \"rf_\"',\n });\n }\n\n // Validate API key with backend\n const result = await apiRequest<{\n valid: boolean;\n user?: { uid: string; email?: string; name?: string };\n }>('/v1/auth/cli/api-key/validate', {\n method: 'POST',\n body: { apiKey },\n requireAuth: false,\n });\n\n if (!result.valid || !result.user) {\n return fail(ErrorCodes.AUTH_REQUIRED, 'Invalid or expired API key', {\n hint: 'Generate a new API key from the Refly web app',\n });\n }\n\n // Store API key\n logger.debug('Storing API key...');\n setApiKey({\n apiKey,\n apiKeyId: 'manual', // We don't have the key ID when user provides directly\n apiKeyName: 'CLI Login',\n user: {\n uid: result.user.uid,\n email: result.user.email || '',\n name: result.user.name,\n },\n });\n\n ok('login', {\n message: 'Successfully authenticated with API key',\n user: result.user,\n method: 'apikey',\n });\n}\n\n/**\n * Login using OAuth\n */\nasync function loginWithOAuth(provider: 'google' | 'github'): Promise<void> {\n logger.info(`Starting ${provider} OAuth flow...`);\n\n // 1. Start local callback server\n const { server, port, callbackPromise } = await startCallbackServer();\n\n try {\n // 2. Request OAuth URL from backend\n logger.debug(`Requesting OAuth URL for port ${port}`);\n const initResponse = await apiRequest<{ authUrl: string; state: string }>(\n '/v1/auth/cli/oauth/init',\n {\n method: 'GET',\n query: { provider, port: port.toString() },\n requireAuth: false,\n },\n );\n\n const { authUrl } = initResponse;\n\n // 3. Open browser to OAuth URL\n logger.info('Opening browser for authentication...');\n process.stderr.write(`Opening browser for ${provider} authentication...\\n`);\n await open(authUrl);\n\n // 4. Wait for callback (with timeout)\n logger.debug('Waiting for OAuth callback...');\n const callbackResult = await Promise.race([\n callbackPromise,\n new Promise<{ code: string; state: string; error?: string }>(\n (_, reject) => setTimeout(() => reject(new Error('OAuth callback timeout')), 120000), // 2 minutes\n ),\n ]);\n\n // Handle OAuth error from provider\n if (callbackResult.error) {\n return fail(ErrorCodes.AUTH_REQUIRED, `OAuth failed: ${callbackResult.error}`, {\n hint: 'Check browser for error details',\n });\n }\n\n const { code, state: returnedState } = callbackResult;\n\n // 5. Exchange code for tokens\n logger.debug('Exchanging authorization code for tokens...');\n const tokens = await apiRequest<{\n accessToken: string;\n refreshToken: string;\n user: { uid: string; email: string; name?: string };\n }>('/v1/auth/cli/oauth/callback', {\n method: 'POST',\n body: { code, state: returnedState, provider },\n requireAuth: false,\n });\n\n // 6. Store tokens securely\n logger.debug('Storing OAuth tokens...');\n setOAuthTokens({\n accessToken: tokens.accessToken,\n refreshToken: tokens.refreshToken,\n expiresAt: new Date(Date.now() + 3600000).toISOString(), // 1 hour\n provider,\n user: tokens.user,\n });\n\n ok('login', {\n message: 'Successfully authenticated',\n user: tokens.user,\n provider,\n method: 'oauth',\n });\n } finally {\n // 7. Close server\n server.close();\n logger.debug('Callback server closed');\n }\n}\n\n/**\n * Start local HTTP server to receive OAuth callback\n * Returns server, port, and a promise that resolves with callback data\n */\nasync function startCallbackServer(): Promise<{\n server: http.Server;\n port: number;\n callbackPromise: Promise<{ code: string; state: string; error?: string }>;\n}> {\n return new Promise((resolve) => {\n let callbackResolve: (value: { code: string; state: string; error?: string }) => void;\n const callbackPromise = new Promise<{ code: string; state: string; error?: string }>((res) => {\n callbackResolve = res;\n });\n\n const server = http.createServer((req, res) => {\n const url = new URL(req.url!, 'http://localhost');\n\n if (url.pathname === '/callback') {\n const code = url.searchParams.get('code');\n const state = url.searchParams.get('state');\n const error = url.searchParams.get('error');\n const errorDescription = url.searchParams.get('error_description');\n\n // Handle OAuth error from provider\n if (error) {\n res.writeHead(400, { 'Content-Type': 'text/html' });\n res.end(`\n <html>\n <head>\n <title>Authentication Failed</title>\n <style>\n body { font-family: system-ui; max-width: 600px; margin: 50px auto; padding: 20px; }\n h1 { color: #d32f2f; }\n p { color: #666; line-height: 1.6; }\n </style>\n </head>\n <body>\n <h1>Authentication Failed</h1>\n <p><strong>Error:</strong> ${error}</p>\n ${errorDescription ? `<p>${errorDescription}</p>` : ''}\n <p>You can close this window and try again.</p>\n </body>\n </html>\n `);\n callbackResolve({ code: '', state: '', error: errorDescription || error });\n return;\n }\n\n if (code && state) {\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(`\n <html>\n <head>\n <title>Authentication Successful</title>\n <style>\n body { font-family: system-ui; max-width: 600px; margin: 50px auto; padding: 20px; }\n h1 { color: #2e7d32; }\n p { color: #666; line-height: 1.6; }\n </style>\n </head>\n <body>\n <h1>Authentication Successful!</h1>\n <p>You have successfully authenticated with Refly.</p>\n <p>You can close this window and return to the terminal.</p>\n </body>\n </html>\n `);\n callbackResolve({ code, state });\n } else {\n res.writeHead(400, { 'Content-Type': 'text/html' });\n res.end(`\n <html>\n <head>\n <title>Authentication Failed</title>\n <style>\n body { font-family: system-ui; max-width: 600px; margin: 50px auto; padding: 20px; }\n h1 { color: #d32f2f; }\n p { color: #666; line-height: 1.6; }\n </style>\n </head>\n <body>\n <h1>Authentication Failed</h1>\n <p>Missing authorization code or state parameter.</p>\n <p>You can close this window and try again.</p>\n </body>\n </html>\n `);\n callbackResolve({ code: '', state: '', error: 'Missing code or state' });\n }\n } else {\n res.writeHead(404);\n res.end('Not Found');\n }\n });\n\n // Listen on random available port\n server.listen(0, 'localhost', () => {\n const address = server.address() as AddressInfo;\n resolve({ server, port: address.port, callbackPromise });\n });\n });\n}\n\n/**\n * Device authorization flow response types\n */\ninterface DeviceSessionInfo {\n deviceId: string;\n cliVersion: string;\n host: string;\n status: 'pending' | 'authorized' | 'cancelled' | 'expired';\n createdAt: string;\n expiresAt: string;\n}\n\ninterface DeviceSessionWithTokens extends DeviceSessionInfo {\n accessToken?: string;\n refreshToken?: string;\n}\n\n/**\n * Login using device authorization flow\n * This is useful for headless environments or when local server can't be used\n */\nasync function loginWithDeviceFlow(): Promise<void> {\n logger.info('Starting device authorization flow...');\n\n // 1. Initialize device session\n const hostname = os.hostname();\n const initResponse = await apiRequest<DeviceSessionInfo>('/v1/auth/cli/device/init', {\n method: 'POST',\n body: {\n cliVersion: CLI_VERSION,\n host: hostname,\n },\n requireAuth: false,\n });\n\n const { deviceId, expiresAt } = initResponse;\n\n // 2. Build authorization URL\n // Use web URL for browser authorization page (may differ from API endpoint in some environments)\n const webUrl = getWebUrl();\n const authUrl = `${webUrl}/cli/auth?device_id=${encodeURIComponent(deviceId)}&cli_version=${encodeURIComponent(CLI_VERSION)}&host=${encodeURIComponent(hostname)}`;\n\n // 3. Print instructions and open browser\n process.stderr.write('\\n');\n process.stderr.write('To authorize this device, open the following URL in your browser:\\n');\n process.stderr.write('\\n');\n process.stderr.write(` ${authUrl}\\n`);\n process.stderr.write('\\n');\n process.stderr.write(`Device ID: ${deviceId}\\n`);\n process.stderr.write(`Expires: ${new Date(expiresAt).toLocaleTimeString()}\\n`);\n process.stderr.write('\\n');\n process.stderr.write('Waiting for authorization...\\n');\n\n // Try to open browser automatically\n try {\n await open(authUrl);\n logger.debug('Browser opened successfully');\n } catch {\n logger.debug('Could not open browser automatically');\n }\n\n // 4. Poll for authorization status\n const pollInterval = 2000; // 2 seconds\n const maxAttempts = 150; // 5 minutes (150 * 2s)\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n await sleep(pollInterval);\n\n const statusResponse = await apiRequest<DeviceSessionWithTokens>('/v1/auth/cli/device/status', {\n method: 'GET',\n query: { device_id: deviceId },\n requireAuth: false,\n });\n\n switch (statusResponse.status) {\n case 'authorized':\n if (statusResponse.accessToken && statusResponse.refreshToken) {\n // Get user info from the token\n // For now, we'll make an additional call to get user info\n const userInfo = await getUserInfoFromToken(statusResponse.accessToken);\n\n // Store tokens\n setOAuthTokens({\n accessToken: statusResponse.accessToken,\n refreshToken: statusResponse.refreshToken,\n expiresAt: new Date(Date.now() + 3600000).toISOString(), // 1 hour\n provider: 'google', // Device flow doesn't specify provider, default to google\n user: userInfo,\n });\n\n ok('login', {\n message: 'Successfully authenticated via device authorization',\n user: userInfo,\n method: 'device',\n });\n return;\n }\n break;\n\n case 'cancelled':\n return fail(ErrorCodes.AUTH_REQUIRED, 'Authorization was cancelled', {\n hint: 'The authorization request was cancelled in the browser',\n });\n\n case 'expired':\n return fail(ErrorCodes.AUTH_REQUIRED, 'Authorization request expired', {\n hint: 'Run `refly login --device` again to start a new session',\n });\n\n case 'pending':\n // Continue polling\n if (attempt % 5 === 0) {\n process.stderr.write('.');\n }\n break;\n }\n }\n\n // Timeout\n fail(ErrorCodes.TIMEOUT, 'Authorization timeout', {\n hint: 'Complete authorization in the browser within 5 minutes',\n });\n}\n\n/**\n * Get user info from access token\n */\nasync function getUserInfoFromToken(\n accessToken: string,\n): Promise<{ uid: string; email: string; name?: string }> {\n try {\n const endpoint = getApiEndpoint();\n const response = await fetch(`${endpoint}/v1/user/me`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (response.ok) {\n const data = (await response.json()) as {\n success: boolean;\n data?: { uid: string; email?: string; name?: string };\n };\n if (data.success && data.data) {\n return {\n uid: data.data.uid,\n email: data.data.email || '',\n name: data.data.name,\n };\n }\n }\n } catch (error) {\n logger.debug('Failed to get user info:', error);\n }\n\n // Fallback if we can't get user info\n return {\n uid: 'unknown',\n email: '',\n };\n}\n\n/**\n * Sleep helper\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import process from 'node:process';\nimport {Buffer} from 'node:buffer';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport {isWsl, powerShellPath} from 'wsl-utils';\nimport defineLazyProperty from 'define-lazy-prop';\nimport defaultBrowser from 'default-browser';\nimport isInsideContainer from 'is-inside-container';\n\nconst execFile = promisify(childProcess.execFile);\n\n// Path to included `xdg-open`.\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\n/**\nGet the default browser name in Windows from WSL.\n\n@returns {Promise<string>} Browser name.\n*/\nasync function getWindowsDefaultBrowserFromWsl() {\n\tconst powershellPath = await powerShellPath();\n\tconst rawCommand = String.raw`(Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\").ProgId`;\n\tconst encodedCommand = Buffer.from(rawCommand, 'utf16le').toString('base64');\n\n\tconst {stdout} = await execFile(\n\t\tpowershellPath,\n\t\t[\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'-ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand',\n\t\t\tencodedCommand,\n\t\t],\n\t\t{encoding: 'utf8'},\n\t);\n\n\tconst progId = stdout.trim();\n\n\t// Map ProgId to browser IDs\n\tconst browserMap = {\n\t\tChromeHTML: 'com.google.chrome',\n\t\tBraveHTML: 'com.brave.Browser',\n\t\tMSEdgeHTM: 'com.microsoft.edge',\n\t\tFirefoxURL: 'org.mozilla.firefox',\n\t};\n\n\treturn browserMap[progId] ? {id: browserMap[progId]} : {};\n}\n\nconst pTryEach = async (array, mapper) => {\n\tlet latestError;\n\n\tfor (const item of array) {\n\t\ttry {\n\t\t\treturn await mapper(item); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tlatestError = error;\n\t\t}\n\t}\n\n\tthrow latestError;\n};\n\n// eslint-disable-next-line complexity\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options,\n\t};\n\n\tif (Array.isArray(options.app)) {\n\t\treturn pTryEach(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp,\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app ?? {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn pTryEach(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments,\n\t\t\t},\n\t\t}));\n\t}\n\n\tif (app === 'browser' || app === 'browserPrivate') {\n\t\t// IDs from default-browser for macOS and windows are the same\n\t\tconst ids = {\n\t\t\t'com.google.chrome': 'chrome',\n\t\t\t'google-chrome.desktop': 'chrome',\n\t\t\t'com.brave.Browser': 'brave',\n\t\t\t'org.mozilla.firefox': 'firefox',\n\t\t\t'firefox.desktop': 'firefox',\n\t\t\t'com.microsoft.msedge': 'edge',\n\t\t\t'com.microsoft.edge': 'edge',\n\t\t\t'com.microsoft.edgemac': 'edge',\n\t\t\t'microsoft-edge.desktop': 'edge',\n\t\t};\n\n\t\t// Incognito flags for each browser in `apps`.\n\t\tconst flags = {\n\t\t\tchrome: '--incognito',\n\t\t\tbrave: '--incognito',\n\t\t\tfirefox: '--private-window',\n\t\t\tedge: '--inPrivate',\n\t\t};\n\n\t\tconst browser = isWsl ? await getWindowsDefaultBrowserFromWsl() : await defaultBrowser();\n\t\tif (browser.id in ids) {\n\t\t\tconst browserName = ids[browser.id];\n\n\t\t\tif (app === 'browserPrivate') {\n\t\t\t\tappArguments.push(flags[browserName]);\n\t\t\t}\n\n\t\t\treturn baseOpen({\n\t\t\t\t...options,\n\t\t\t\tapp: {\n\t\t\t\t\tname: apps[browserName],\n\t\t\t\t\targuments: appArguments,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthrow new Error(`${browser.name} is not supported as a default browser`);\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || (isWsl && !isInsideContainer() && !app)) {\n\t\tcommand = await powerShellPath();\n\n\t\tcliArguments.push(\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'-ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand',\n\t\t);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\tconst encodedArguments = ['Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\t// Double quote with double quotes to ensure the inner quotes are passed through.\n\t\t\t// Inner quotes are delimited for PowerShell interpretation with backticks.\n\t\t\tencodedArguments.push(`\"\\`\"${app}\\`\"\"`);\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.push(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(`\"${options.target}\"`);\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(argument => `\"\\`\"${argument}\\`\"\"`);\n\t\t\tencodedArguments.push('-ArgumentList', appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64');\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron\n\t\t\t\t?? (platform === 'android' || isBundled || !exeLocalXdgOpen);\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\t// This has to come after `--args`.\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode > 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\treturn subprocess;\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget,\n\t});\n};\n\nexport const openApp = (name, options) => {\n\tif (typeof name !== 'string' && !Array.isArray(name)) {\n\t\tthrow new TypeError('Expected a valid `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options ?? {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments,\n\t\t},\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nexport const apps = {};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'brave', () => detectPlatformBinary({\n\tdarwin: 'brave browser',\n\twin32: 'brave',\n\tlinux: ['brave-browser', 'brave'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe',\n\t\tx64: ['/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe', '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: String.raw`C:\\Program Files\\Mozilla Firefox\\firefox.exe`,\n\tlinux: 'firefox',\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe',\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev'],\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',\n}));\n\ndefineLazyProperty(apps, 'browser', () => 'browser');\n\ndefineLazyProperty(apps, 'browserPrivate', () => 'browserPrivate');\n\nexport default open;\n","import process from 'node:process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport isWsl from 'is-wsl';\n\nexport const wslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst configMountPoint = /(?<!#.*)root\\s*=\\s*(?<mountPoint>.*)/g.exec(configContent);\n\n\t\tif (!configMountPoint) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = configMountPoint.groups.mountPoint.trim();\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nexport const powerShellPathFromWsl = async () => {\n\tconst mountPoint = await wslDrivesMountPoint();\n\treturn `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;\n};\n\nexport const powerShellPath = async () => {\n\tif (isWsl) {\n\t\treturn powerShellPathFromWsl();\n\t}\n\n\treturn `${process.env.SYSTEMROOT || process.env.windir || String.raw`C:\\Windows`}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n};\n\nexport {default as isWsl} from 'is-wsl';\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport isInsideContainer from 'is-inside-container';\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isInsideContainer()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft')\n\t\t\t? !isInsideContainer() : false;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default process.env.__IS_WSL_TEST__ ? isWsl : isWsl();\n","import fs from 'node:fs';\nimport isDocker from 'is-docker';\n\nlet cachedResult;\n\n// Podman detection\nconst hasContainerEnv = () => {\n\ttry {\n\t\tfs.statSync('/run/.containerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default function isInsideContainer() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n","import fs from 'node:fs';\n\nlet isDockerCached;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function isDocker() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (isDockerCached === undefined) {\n\t\tisDockerCached = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDockerCached;\n}\n","export default function defineLazyProperty(object, propertyName, valueGetter) {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = valueGetter();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\nimport defaultBrowserId from 'default-browser-id';\nimport bundleName from 'bundle-name';\nimport windows from './windows.js';\n\nexport {_windowsBrowserProgIdMap} from './windows.js';\n\nconst execFileAsync = promisify(execFile);\n\n// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js\nconst titleize = string => string.toLowerCase().replaceAll(/(?:^|\\s|-)\\S/g, x => x.toUpperCase());\n\nexport default async function defaultBrowser() {\n\tif (process.platform === 'darwin') {\n\t\tconst id = await defaultBrowserId();\n\t\tconst name = await bundleName(id);\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'linux') {\n\t\tconst {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n\t\tconst id = stdout.trim();\n\t\tconst name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows();\n\t}\n\n\tthrow new Error('Only macOS, Linux, and Windows are supported');\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport default async function defaultBrowserId() {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);\n\n\t// `(?!-)` is to prevent matching `LSHandlerRoleAll = \"-\";`.\n\tconst match = /LSHandlerRoleAll = \"(?!-)(?<id>[^\"]+?)\";\\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);\n\n\tconst browserId = match?.groups.id ?? 'com.apple.Safari';\n\n\t// Correct the case for Safari's bundle identifier\n\tif (browserId === 'com.apple.safari') {\n\t\treturn 'com.apple.Safari';\n\t}\n\n\treturn browserId;\n}\n","import {runAppleScript} from 'run-applescript';\n\nexport default async function bundleName(bundleId) {\n\treturn runAppleScript(`tell application \"Finder\" to set app_path to application file id \"${bundleId}\" as string\\ntell application \"System Events\" to get value of property list item \"CFBundleName\" of property list file (app_path & \":Contents:Info.plist\")`);\n}\n","import process from 'node:process';\nimport {promisify} from 'node:util';\nimport {execFile, execFileSync} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runAppleScript(script, {humanReadableOutput = true, signal} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst execOptions = {};\n\tif (signal) {\n\t\texecOptions.signal = signal;\n\t}\n\n\tconst {stdout} = await execFileAsync('osascript', ['-e', script, outputArguments], execOptions);\n\treturn stdout.trim();\n}\n\nexport function runAppleScriptSync(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst stdout = execFileSync('osascript', ['-e', script, ...outputArguments], {\n\t\tencoding: 'utf8',\n\t\tstdio: ['ignore', 'pipe', 'ignore'],\n\t\ttimeout: 500,\n\t});\n\n\treturn stdout.trim();\n}\n","import {promisify} from 'node:util';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\n// TODO: Fix the casing of bundle identifiers in the next major version.\n\n// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake\n// ones that look real and match the macOS/Linux versions for cross-platform apps.\nconst windowsBrowserProgIds = {\n\tMSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // The missing `L` is correct.\n\tMSEdgeBHTML: {name: 'Edge Beta', id: 'com.microsoft.edge.beta'},\n\tMSEdgeDHTML: {name: 'Edge Dev', id: 'com.microsoft.edge.dev'},\n\tAppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},\n\tChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},\n\tChromeBHTML: {name: 'Chrome Beta', id: 'com.google.chrome.beta'},\n\tChromeDHTML: {name: 'Chrome Dev', id: 'com.google.chrome.dev'},\n\tChromiumHTM: {name: 'Chromium', id: 'org.chromium.Chromium'},\n\tBraveHTML: {name: 'Brave', id: 'com.brave.Browser'},\n\tBraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},\n\tBraveDHTML: {name: 'Brave Dev', id: 'com.brave.Browser.dev'},\n\tBraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},\n\tFirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},\n\tOperaStable: {name: 'Opera', id: 'com.operasoftware.Opera'},\n\tVivaldiHTM: {name: 'Vivaldi', id: 'com.vivaldi.Vivaldi'},\n\t'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},\n};\n\nexport const _windowsBrowserProgIdMap = new Map(Object.entries(windowsBrowserProgIds));\n\nexport class UnknownBrowserError extends Error {}\n\nexport default async function defaultBrowser(_execFileAsync = execFileAsync) {\n\tconst {stdout} = await _execFileAsync('reg', [\n\t\t'QUERY',\n\t\t' HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice',\n\t\t'/v',\n\t\t'ProgId',\n\t]);\n\n\tconst match = /ProgId\\s*REG_SZ\\s*(?<id>\\S+)/.exec(stdout);\n\tif (!match) {\n\t\tthrow new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);\n\t}\n\n\tconst {id} = match.groups;\n\n\tconst browser = windowsBrowserProgIds[id];\n\tif (!browser) {\n\t\tthrow new UnknownBrowserError(`Unknown browser ID: ${id}`);\n\t}\n\n\treturn browser;\n}\n","/**\n * refly logout - Revoke tokens and remove stored credentials\n */\n\nimport { Command } from 'commander';\nimport { ok } from '../utils/output.js';\nimport { clearAuth, isAuthenticated, getRefreshToken } from '../config/config.js';\nimport { apiRequest } from '../api/client.js';\nimport { logger } from '../utils/logger.js';\n\nexport const logoutCommand = new Command('logout')\n .description('Logout and remove stored credentials')\n .action(async () => {\n const wasAuthenticated = isAuthenticated();\n\n if (!wasAuthenticated) {\n return ok('logout', {\n message: 'No credentials were stored',\n });\n }\n\n // If using OAuth tokens, revoke them on the server\n const refreshToken = getRefreshToken();\n if (refreshToken) {\n try {\n logger.debug('Revoking OAuth tokens on server...');\n await apiRequest('/v1/auth/cli/oauth/revoke', {\n method: 'POST',\n });\n logger.debug('OAuth tokens revoked successfully');\n } catch (error) {\n // Ignore errors during logout (token might already be invalid)\n logger.debug('Failed to revoke tokens on server (ignored):', error);\n }\n }\n\n // Clear local credentials\n clearAuth();\n\n ok('logout', {\n message: 'Successfully logged out',\n });\n });\n","/**\n * refly status - Check CLI configuration and authentication status\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../utils/output.js';\nimport {\n loadConfig,\n getApiEndpoint,\n isAuthenticated,\n getOAuthProvider,\n getApiKeyInfo,\n} from '../config/config.js';\nimport { verifyConnection } from '../api/client.js';\nimport { isSkillInstalled } from '../skill/installer.js';\nimport { getReflyDir } from '../config/paths.js';\n\n// CLI version from package.json\nconst CLI_VERSION = '0.1.0';\n\nexport const statusCommand = new Command('status')\n .description('Check CLI configuration and authentication status')\n .action(async () => {\n try {\n loadConfig();\n const skillStatus = isSkillInstalled();\n\n // Check authentication\n let authStatus: 'valid' | 'expired' | 'missing' = 'missing';\n let user: { uid: string; name?: string; email?: string } | undefined;\n let authMethod: 'oauth' | 'apikey' | undefined;\n let authDetails: Record<string, unknown> = {};\n\n if (isAuthenticated()) {\n const verification = await verifyConnection();\n if (verification.authenticated) {\n authStatus = 'valid';\n user = verification.user;\n authMethod = verification.authMethod;\n\n // Add auth-specific details\n if (authMethod === 'oauth') {\n const provider = getOAuthProvider();\n authDetails = { provider };\n } else if (authMethod === 'apikey') {\n const keyInfo = getApiKeyInfo();\n authDetails = { keyId: keyInfo?.keyId, keyName: keyInfo?.name };\n }\n } else if (verification.connected) {\n authStatus = 'expired';\n }\n }\n\n // Build response\n const payload = {\n cli_version: CLI_VERSION,\n config_dir: getReflyDir(),\n api_endpoint: getApiEndpoint(),\n auth_status: authStatus,\n auth_method: authMethod ?? null,\n auth_details: Object.keys(authDetails).length > 0 ? authDetails : null,\n user: user ?? null,\n skill: {\n installed: skillStatus.installed,\n version: skillStatus.currentVersion ?? null,\n up_to_date: skillStatus.upToDate,\n },\n };\n\n // If not authenticated, return error response\n if (authStatus !== 'valid') {\n fail(\n ErrorCodes.AUTH_REQUIRED,\n authStatus === 'expired' ? 'Authentication expired' : 'Not authenticated',\n {\n details: payload,\n hint: 'refly login',\n },\n );\n }\n\n ok('status', payload);\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get status',\n { hint: 'Try running `refly init` first' },\n );\n }\n });\n","/**\n * refly whoami - Show current authenticated user\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../utils/output.js';\nimport { isAuthenticated } from '../config/config.js';\nimport { verifyConnection } from '../api/client.js';\n\nexport const whoamiCommand = new Command('whoami')\n .description('Show current authenticated user')\n .action(async () => {\n try {\n if (!isAuthenticated()) {\n fail(ErrorCodes.AUTH_REQUIRED, 'Not authenticated', { hint: 'refly login' });\n }\n\n const verification = await verifyConnection();\n\n if (!verification.authenticated || !verification.user) {\n fail(ErrorCodes.AUTH_EXPIRED, 'Authentication expired or invalid', { hint: 'refly login' });\n }\n\n ok('whoami', {\n uid: verification.user.uid,\n name: verification.user.name ?? null,\n email: verification.user.email ?? null,\n });\n } catch (error) {\n fail(\n ErrorCodes.AUTH_REQUIRED,\n error instanceof Error ? error.message : 'Failed to get user info',\n { hint: 'refly login' },\n );\n }\n });\n","/**\n * refly upgrade - Reinstall/upgrade skill files\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../utils/output.js';\nimport { installSkill, isSkillInstalled } from '../skill/installer.js';\n\nexport const upgradeCommand = new Command('upgrade')\n .description('Reinstall or upgrade skill files')\n .action(async () => {\n try {\n const beforeStatus = isSkillInstalled();\n const result = installSkill();\n\n ok('upgrade', {\n message: 'Skill files upgraded successfully',\n previousVersion: beforeStatus.currentVersion ?? null,\n newVersion: result.version,\n skillPath: result.skillPath,\n commandsInstalled: result.commandsInstalled,\n });\n } catch (error) {\n return fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to upgrade',\n { hint: 'Check permissions and try again' },\n );\n }\n });\n","/**\n * refly config - Manage CLI configuration\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../utils/output.js';\nimport { loadConfig, saveConfig } from '../config/config.js';\n\nexport const configCommand = new Command('config')\n .description('Manage CLI configuration')\n .addCommand(\n new Command('get')\n .description('Get configuration value')\n .argument('[key]', 'Configuration key (e.g., api.endpoint)')\n .action((key?: string) => {\n const config = loadConfig();\n\n if (!key) {\n // Show all config (mask sensitive values)\n const safeConfig = {\n ...config,\n auth: config.auth\n ? {\n method: config.auth.method,\n provider: config.auth.provider,\n apiKeyId: config.auth.apiKeyId,\n apiKeyName: config.auth.apiKeyName,\n user: config.auth.user,\n // Mask sensitive tokens\n accessToken: config.auth.accessToken ? '***' : undefined,\n refreshToken: config.auth.refreshToken ? '***' : undefined,\n apiKey: config.auth.apiKey ? '***' : undefined,\n }\n : undefined,\n };\n ok('config', safeConfig);\n return;\n }\n\n // Get specific key\n const value = getNestedValue(config, key);\n if (value === undefined) {\n return fail(ErrorCodes.NOT_FOUND, `Configuration key '${key}' not found`);\n }\n\n ok('config', { [key]: value });\n }),\n )\n .addCommand(\n new Command('set')\n .description('Set configuration value')\n .argument('<key>', 'Configuration key (e.g., api.endpoint)')\n .argument('<value>', 'Configuration value')\n .action((key: string, value: string) => {\n const config = loadConfig();\n\n // Only allow setting certain keys\n const allowedKeys = ['api.endpoint'];\n if (!allowedKeys.includes(key)) {\n return fail(ErrorCodes.INVALID_INPUT, `Cannot set '${key}'`, {\n hint: `Allowed keys: ${allowedKeys.join(', ')}`,\n });\n }\n\n setNestedValue(config, key, value);\n saveConfig(config);\n\n ok('config', {\n message: `Set ${key} = ${value}`,\n [key]: value,\n });\n }),\n )\n .addCommand(\n new Command('reset')\n .description('Reset configuration to defaults')\n .option('--api', 'Reset only API endpoint')\n .action((options) => {\n const config = loadConfig();\n\n if (options.api) {\n config.api = { endpoint: 'https://api.refly.ai' };\n saveConfig(config);\n ok('config', {\n message: 'API endpoint reset to default',\n 'api.endpoint': 'https://api.refly.ai',\n });\n } else {\n // Full reset (preserve auth)\n const auth = config.auth;\n saveConfig({\n version: 1,\n api: { endpoint: 'https://api.refly.ai' },\n auth,\n });\n ok('config', { message: 'Configuration reset to defaults (auth preserved)' });\n }\n }),\n )\n .addCommand(\n new Command('path').description('Show configuration file path').action(() => {\n const { getConfigPath } = require('../config/paths.js');\n ok('config', { path: getConfigPath() });\n }),\n );\n\n// Also add shorthand for common operations\nconfigCommand.action(() => {\n // Default action: show current config\n const config = loadConfig();\n const safeConfig = {\n version: config.version,\n api: config.api,\n auth: config.auth\n ? {\n method: config.auth.method,\n provider: config.auth.provider,\n user: config.auth.user,\n }\n : undefined,\n skill: config.skill,\n };\n ok('config', safeConfig);\n});\n\n/**\n * Get nested value from object using dot notation\n */\nfunction getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((current: unknown, key) => {\n if (current && typeof current === 'object' && key in current) {\n return (current as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * Set nested value in object using dot notation\n */\nfunction setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {\n const keys = path.split('.');\n const lastKey = keys.pop()!;\n\n let current = obj;\n for (const key of keys) {\n if (!(key in current) || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n\n current[lastKey] = value;\n}\n","/**\n * refly builder - Builder command group\n */\n\nimport { Command } from 'commander';\nimport { builderStartCommand } from './start.js';\nimport { builderStatusCommand } from './status.js';\nimport { builderAddNodeCommand } from './add-node.js';\nimport { builderUpdateNodeCommand } from './update-node.js';\nimport { builderRemoveNodeCommand } from './remove-node.js';\nimport { builderConnectCommand } from './connect.js';\nimport { builderDisconnectCommand } from './disconnect.js';\nimport { builderGraphCommand } from './graph.js';\nimport { builderValidateCommand } from './validate.js';\nimport { builderCommitCommand } from './commit.js';\nimport { builderAbortCommand } from './abort.js';\n\nexport const builderCommand = new Command('builder')\n .description('Build workflows incrementally with local state')\n .addCommand(builderStartCommand)\n .addCommand(builderStatusCommand)\n .addCommand(builderAddNodeCommand)\n .addCommand(builderUpdateNodeCommand)\n .addCommand(builderRemoveNodeCommand)\n .addCommand(builderConnectCommand)\n .addCommand(builderDisconnectCommand)\n .addCommand(builderGraphCommand)\n .addCommand(builderValidateCommand)\n .addCommand(builderCommitCommand)\n .addCommand(builderAbortCommand);\n","/**\n * refly builder start - Start a new builder session\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { createSession, saveSession, setCurrent, getCurrentSession } from '../../builder/store.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderStartCommand = new Command('start')\n .description('Start a new builder session')\n .requiredOption('--name <name>', 'Workflow name')\n .option('--description <description>', 'Workflow description')\n .option('--force', 'Abort existing session and start new')\n .action(async (options) => {\n try {\n const { name, description, force } = options;\n\n // Check for existing session\n const existing = getCurrentSession();\n if (existing && existing.state !== 'COMMITTED' && existing.state !== 'ABORTED') {\n if (!force) {\n throw new BuilderError(\n ErrorCodes.BUILDER_ALREADY_STARTED,\n `A builder session is already active: ${existing.workflowDraft.name}`,\n { sessionId: existing.id, state: existing.state },\n 'Use --force to abort and start new, or run `refly builder abort`',\n );\n }\n // Force: abort existing\n setCurrent(null);\n }\n\n // Create new session\n const session = createSession(name, description);\n saveSession(session);\n setCurrent(session.id);\n\n ok('builder.start', {\n message: 'Builder session started',\n sessionId: session.id,\n workflowName: name,\n state: session.state,\n nextStep: 'Add nodes with `refly builder add-node --node \\'{\"id\":\"n1\",\"type\":\"...\"}\\'`',\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to start builder',\n );\n }\n });\n","/**\n * Builder session persistence with atomic writes\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as crypto from 'node:crypto';\nimport { getBuilderDir, getCurrentSessionPath, getSessionPath } from '../config/paths.js';\nimport { BuilderSession, BuilderSessionSchema, BuilderState } from './schema.js';\n\n/**\n * Generate a unique session ID\n */\nexport function generateSessionId(): string {\n return crypto.randomUUID();\n}\n\n/**\n * Create a new builder session\n */\nexport function createSession(name: string, description?: string): BuilderSession {\n const now = new Date().toISOString();\n const session: BuilderSession = {\n id: generateSessionId(),\n version: 1,\n state: BuilderState.DRAFT,\n createdAt: now,\n updatedAt: now,\n workflowDraft: {\n name,\n description,\n nodes: [],\n },\n validation: { ok: false, errors: [] },\n };\n\n return session;\n}\n\n/**\n * Save session to disk atomically\n */\nexport function saveSession(session: BuilderSession): void {\n const sessionPath = getSessionPath(session.id);\n const tempPath = path.join(getBuilderDir(), `.session-${session.id}-${Date.now()}.tmp`);\n\n // Update timestamp\n session.updatedAt = new Date().toISOString();\n\n // Validate before saving\n const validated = BuilderSessionSchema.parse(session);\n\n // Write to temp file first\n fs.writeFileSync(tempPath, JSON.stringify(validated, null, 2), {\n mode: 0o600,\n });\n\n // Atomic rename\n fs.renameSync(tempPath, sessionPath);\n}\n\n/**\n * Load session from disk\n */\nexport function loadSession(sessionId: string): BuilderSession | null {\n const sessionPath = getSessionPath(sessionId);\n\n try {\n if (!fs.existsSync(sessionPath)) {\n return null;\n }\n\n const content = fs.readFileSync(sessionPath, 'utf-8');\n const parsed = JSON.parse(content);\n return BuilderSessionSchema.parse(parsed);\n } catch {\n return null;\n }\n}\n\n/**\n * Delete session from disk\n */\nexport function deleteSession(sessionId: string): void {\n const sessionPath = getSessionPath(sessionId);\n\n try {\n if (fs.existsSync(sessionPath)) {\n fs.unlinkSync(sessionPath);\n }\n } catch {\n // Ignore deletion errors\n }\n}\n\n/**\n * Set current session pointer\n */\nexport function setCurrent(sessionId: string | null): void {\n const currentPath = getCurrentSessionPath();\n\n if (sessionId === null) {\n // Clear current pointer\n try {\n if (fs.existsSync(currentPath)) {\n fs.unlinkSync(currentPath);\n }\n } catch {\n // Ignore\n }\n return;\n }\n\n fs.writeFileSync(currentPath, sessionId, { mode: 0o600 });\n}\n\n/**\n * Get current session ID\n */\nexport function getCurrentSessionId(): string | null {\n const currentPath = getCurrentSessionPath();\n\n try {\n if (!fs.existsSync(currentPath)) {\n return null;\n }\n\n return fs.readFileSync(currentPath, 'utf-8').trim();\n } catch {\n return null;\n }\n}\n\n/**\n * Get current session (convenience function)\n */\nexport function getCurrentSession(): BuilderSession | null {\n const sessionId = getCurrentSessionId();\n if (!sessionId) return null;\n\n return loadSession(sessionId);\n}\n\n/**\n * List all sessions\n */\nexport function listSessions(): BuilderSession[] {\n const builderDir = getBuilderDir();\n\n try {\n const files = fs.readdirSync(builderDir);\n const sessions: BuilderSession[] = [];\n\n for (const file of files) {\n if (file.startsWith('session-') && file.endsWith('.json')) {\n const sessionId = file.replace('session-', '').replace('.json', '');\n const session = loadSession(sessionId);\n if (session) {\n sessions.push(session);\n }\n }\n }\n\n return sessions.sort(\n (a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime(),\n );\n } catch {\n return [];\n }\n}\n","/**\n * Builder session schema and types\n */\n\nimport { z } from 'zod';\n\n// Node schema\nexport const NodeSchema = z.object({\n id: z.string().min(1),\n type: z.string().min(1),\n input: z.record(z.unknown()).default({}),\n dependsOn: z.array(z.string()).default([]),\n});\n\nexport type WorkflowNode = z.infer<typeof NodeSchema>;\n\n// Workflow draft schema\nexport const WorkflowDraftSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n nodes: z.array(NodeSchema).default([]),\n metadata: z\n .object({\n tags: z.array(z.string()).optional(),\n owner: z.string().optional(),\n })\n .optional(),\n});\n\nexport type WorkflowDraft = z.infer<typeof WorkflowDraftSchema>;\n\n// Validation result\nexport const ValidationResultSchema = z.object({\n ok: z.boolean(),\n errors: z\n .array(\n z.object({\n code: z.string(),\n message: z.string(),\n nodeId: z.string().optional(),\n details: z.record(z.unknown()).optional(),\n }),\n )\n .default([]),\n});\n\nexport type ValidationResult = z.infer<typeof ValidationResultSchema>;\n\n// Builder state enum\nexport const BuilderState = {\n IDLE: 'IDLE',\n DRAFT: 'DRAFT',\n VALIDATED: 'VALIDATED',\n COMMITTED: 'COMMITTED',\n ABORTED: 'ABORTED',\n} as const;\n\nexport type BuilderStateType = (typeof BuilderState)[keyof typeof BuilderState];\n\n// Commit info\nexport const CommitInfoSchema = z.object({\n workflowId: z.string().optional(),\n committedAt: z.string().optional(),\n});\n\nexport type CommitInfo = z.infer<typeof CommitInfoSchema>;\n\n// Full session schema\nexport const BuilderSessionSchema = z.object({\n id: z.string(),\n version: z.number().default(1),\n state: z.enum(['IDLE', 'DRAFT', 'VALIDATED', 'COMMITTED', 'ABORTED']),\n createdAt: z.string(),\n updatedAt: z.string(),\n workflowDraft: WorkflowDraftSchema,\n validation: ValidationResultSchema.default({ ok: false, errors: [] }),\n commit: CommitInfoSchema.optional(),\n});\n\nexport type BuilderSession = z.infer<typeof BuilderSessionSchema>;\n\n// Diff types for operations\nexport interface NodeDiff {\n action: 'add' | 'update' | 'remove';\n nodeId: string;\n before?: WorkflowNode;\n after?: WorkflowNode;\n}\n\nexport interface ConnectionDiff {\n action: 'connect' | 'disconnect';\n from: string;\n to: string;\n}\n\nexport type Diff = NodeDiff | ConnectionDiff;\n","/**\n * refly builder status - Show current builder session status\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { generateGraph } from '../../builder/graph.js';\n\nexport const builderStatusCommand = new Command('status')\n .description('Show current builder session status')\n .action(async () => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n const graph = generateGraph(session);\n\n ok('builder.status', {\n sessionId: session.id,\n state: session.state,\n workflowName: session.workflowDraft.name,\n description: session.workflowDraft.description ?? null,\n createdAt: session.createdAt,\n updatedAt: session.updatedAt,\n nodes: graph.nodes,\n stats: graph.stats,\n validation: session.validation,\n commit: session.commit ?? null,\n });\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get status',\n );\n }\n });\n","/**\n * Graph utilities for visualizing workflow DAG\n */\n\nimport { BuilderSession, WorkflowNode } from './schema.js';\n\nexport interface Edge {\n from: string;\n to: string;\n}\n\nexport interface GraphOutput {\n nodes: Array<{\n id: string;\n type: string;\n dependsOn: string[];\n }>;\n edges: Edge[];\n stats: {\n nodeCount: number;\n edgeCount: number;\n rootNodes: string[];\n leafNodes: string[];\n };\n}\n\n/**\n * Generate graph representation of the workflow\n */\nexport function generateGraph(session: BuilderSession): GraphOutput {\n const nodes = session.workflowDraft.nodes;\n const edges: Edge[] = [];\n\n // Build edges from dependencies\n for (const node of nodes) {\n for (const depId of node.dependsOn) {\n edges.push({ from: depId, to: node.id });\n }\n }\n\n // Find root nodes (no dependencies)\n const rootNodes = nodes.filter((n) => n.dependsOn.length === 0).map((n) => n.id);\n\n // Find leaf nodes (no one depends on them)\n const hasDependent = new Set<string>();\n for (const node of nodes) {\n for (const depId of node.dependsOn) {\n hasDependent.add(depId);\n }\n }\n const leafNodes = nodes.filter((n) => !hasDependent.has(n.id)).map((n) => n.id);\n\n return {\n nodes: nodes.map((n) => ({\n id: n.id,\n type: n.type,\n dependsOn: n.dependsOn,\n })),\n edges,\n stats: {\n nodeCount: nodes.length,\n edgeCount: edges.length,\n rootNodes,\n leafNodes,\n },\n };\n}\n\n/**\n * Get topological order of nodes (for execution)\n */\nexport function getTopologicalOrder(nodes: WorkflowNode[]): string[] {\n const nodeMap = new Map<string, WorkflowNode>();\n const inDegree = new Map<string, number>();\n const adjacency = new Map<string, string[]>();\n\n // Initialize\n for (const node of nodes) {\n nodeMap.set(node.id, node);\n inDegree.set(node.id, 0);\n adjacency.set(node.id, []);\n }\n\n // Build graph\n for (const node of nodes) {\n for (const depId of node.dependsOn) {\n adjacency.get(depId)?.push(node.id);\n inDegree.set(node.id, (inDegree.get(node.id) ?? 0) + 1);\n }\n }\n\n // Kahn's algorithm\n const queue: string[] = [];\n const result: string[] = [];\n\n // Start with nodes that have no dependencies\n for (const [nodeId, degree] of inDegree) {\n if (degree === 0) {\n queue.push(nodeId);\n }\n }\n\n while (queue.length > 0) {\n const nodeId = queue.shift()!;\n result.push(nodeId);\n\n for (const dependent of adjacency.get(nodeId) ?? []) {\n const newDegree = (inDegree.get(dependent) ?? 1) - 1;\n inDegree.set(dependent, newDegree);\n if (newDegree === 0) {\n queue.push(dependent);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Generate ASCII representation of the graph\n */\nexport function generateAsciiGraph(session: BuilderSession): string {\n const graph = generateGraph(session);\n\n if (graph.nodes.length === 0) {\n return '(empty workflow)';\n }\n\n const lines: string[] = [];\n lines.push(`Workflow: ${session.workflowDraft.name}`);\n lines.push(`Nodes: ${graph.stats.nodeCount}, Edges: ${graph.stats.edgeCount}`);\n lines.push('');\n\n // Get execution order\n const order = getTopologicalOrder(session.workflowDraft.nodes);\n\n for (const nodeId of order) {\n const node = session.workflowDraft.nodes.find((n) => n.id === nodeId);\n if (!node) continue;\n\n const isRoot = graph.stats.rootNodes.includes(nodeId);\n const isLeaf = graph.stats.leafNodes.includes(nodeId);\n\n let prefix = ' ';\n if (isRoot) prefix = '> ';\n if (isLeaf) prefix = '* ';\n\n const deps = node.dependsOn.length > 0 ? ` <- [${node.dependsOn.join(', ')}]` : '';\n lines.push(`${prefix}[${node.id}] ${node.type}${deps}`);\n }\n\n lines.push('');\n lines.push('Legend: > root, * leaf');\n\n return lines.join('\\n');\n}\n","/**\n * refly builder add-node - Add a node to the draft\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { addNode } from '../../builder/ops.js';\nimport { generateGraph } from '../../builder/graph.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderAddNodeCommand = new Command('add-node')\n .description('Add a node to the workflow draft')\n .requiredOption('--node <json>', 'Node definition as JSON')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Parse node JSON\n let nodeData: unknown;\n try {\n nodeData = JSON.parse(options.node);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --node', {\n hint: 'Ensure the node is valid JSON: --node \\'{\"id\":\"n1\",\"type\":\"...\"}\\'',\n });\n }\n\n // Add node\n const { node, diff } = addNode(session, nodeData);\n const graph = generateGraph(session);\n\n ok('builder.add-node', {\n message: `Node \"${node.id}\" added`,\n node,\n diff,\n builder: {\n state: session.state,\n nodeCount: graph.stats.nodeCount,\n },\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to add node',\n );\n }\n });\n","/**\n * Builder operations - add, update, remove, connect nodes\n */\n\nimport { BuilderSession, WorkflowNode, NodeSchema, Diff } from './schema.js';\nimport { invalidate, requireEditable } from './state.js';\nimport { BuilderError } from '../utils/errors.js';\nimport { ErrorCodes } from '../utils/output.js';\n\n/**\n * Add a node to the draft\n */\nexport function addNode(\n session: BuilderSession,\n nodeData: unknown,\n): { node: WorkflowNode; diff: Diff } {\n requireEditable(session);\n\n // Parse and validate node\n const node = NodeSchema.parse(nodeData);\n\n // Check for duplicate ID\n const existing = session.workflowDraft.nodes.find((n) => n.id === node.id);\n if (existing) {\n throw new BuilderError(\n ErrorCodes.DUPLICATE_NODE_ID,\n `Node with ID \"${node.id}\" already exists`,\n { nodeId: node.id },\n 'Use a different node ID or update the existing node',\n );\n }\n\n // Add node\n session.workflowDraft.nodes.push(node);\n\n // Invalidate validation\n invalidate(session);\n\n const diff: Diff = {\n action: 'add',\n nodeId: node.id,\n after: node,\n };\n\n return { node, diff };\n}\n\n/**\n * Update an existing node\n */\nexport function updateNode(\n session: BuilderSession,\n nodeId: string,\n patch: Record<string, unknown>,\n): { node: WorkflowNode; diff: Diff } {\n requireEditable(session);\n\n // Find node\n const index = session.workflowDraft.nodes.findIndex((n) => n.id === nodeId);\n if (index === -1) {\n throw new BuilderError(\n ErrorCodes.NODE_NOT_FOUND,\n `Node \"${nodeId}\" not found`,\n { nodeId },\n 'Check node ID with `refly builder status`',\n );\n }\n\n const before = { ...session.workflowDraft.nodes[index] };\n\n // Apply patch (except ID which cannot be changed)\n const updated = {\n ...before,\n ...patch,\n id: nodeId, // Preserve original ID\n };\n\n // Validate updated node\n const node = NodeSchema.parse(updated);\n session.workflowDraft.nodes[index] = node;\n\n // Invalidate validation\n invalidate(session);\n\n const diff: Diff = {\n action: 'update',\n nodeId: node.id,\n before,\n after: node,\n };\n\n return { node, diff };\n}\n\n/**\n * Remove a node from the draft\n */\nexport function removeNode(\n session: BuilderSession,\n nodeId: string,\n): { removed: WorkflowNode; diff: Diff; cleanedDeps: string[] } {\n requireEditable(session);\n\n // Find node\n const index = session.workflowDraft.nodes.findIndex((n) => n.id === nodeId);\n if (index === -1) {\n throw new BuilderError(\n ErrorCodes.NODE_NOT_FOUND,\n `Node \"${nodeId}\" not found`,\n { nodeId },\n 'Check node ID with `refly builder status`',\n );\n }\n\n const removed = session.workflowDraft.nodes[index];\n\n // Remove the node\n session.workflowDraft.nodes.splice(index, 1);\n\n // Clean up dependencies referencing this node\n const cleanedDeps: string[] = [];\n for (const node of session.workflowDraft.nodes) {\n const depIndex = node.dependsOn.indexOf(nodeId);\n if (depIndex !== -1) {\n node.dependsOn.splice(depIndex, 1);\n cleanedDeps.push(node.id);\n }\n }\n\n // Invalidate validation\n invalidate(session);\n\n const diff: Diff = {\n action: 'remove',\n nodeId: nodeId,\n before: removed,\n };\n\n return { removed, diff, cleanedDeps };\n}\n\n/**\n * Connect two nodes (add dependency)\n */\nexport function connectNodes(\n session: BuilderSession,\n fromId: string,\n toId: string,\n): { diff: Diff } {\n requireEditable(session);\n\n // Find both nodes\n const fromNode = session.workflowDraft.nodes.find((n) => n.id === fromId);\n const toNode = session.workflowDraft.nodes.find((n) => n.id === toId);\n\n if (!fromNode) {\n throw new BuilderError(ErrorCodes.NODE_NOT_FOUND, `Source node \"${fromId}\" not found`, {\n nodeId: fromId,\n });\n }\n\n if (!toNode) {\n throw new BuilderError(ErrorCodes.NODE_NOT_FOUND, `Target node \"${toId}\" not found`, {\n nodeId: toId,\n });\n }\n\n // Prevent self-connection\n if (fromId === toId) {\n throw new BuilderError(ErrorCodes.VALIDATION_ERROR, 'Cannot connect a node to itself', {\n nodeId: fromId,\n });\n }\n\n // Add dependency (toNode depends on fromNode)\n if (!toNode.dependsOn.includes(fromId)) {\n toNode.dependsOn.push(fromId);\n }\n\n // Invalidate validation\n invalidate(session);\n\n const diff: Diff = {\n action: 'connect',\n from: fromId,\n to: toId,\n };\n\n return { diff };\n}\n\n/**\n * Disconnect two nodes (remove dependency)\n */\nexport function disconnectNodes(\n session: BuilderSession,\n fromId: string,\n toId: string,\n): { diff: Diff } {\n requireEditable(session);\n\n // Find target node\n const toNode = session.workflowDraft.nodes.find((n) => n.id === toId);\n\n if (!toNode) {\n throw new BuilderError(ErrorCodes.NODE_NOT_FOUND, `Target node \"${toId}\" not found`, {\n nodeId: toId,\n });\n }\n\n // Remove dependency\n const depIndex = toNode.dependsOn.indexOf(fromId);\n if (depIndex !== -1) {\n toNode.dependsOn.splice(depIndex, 1);\n }\n\n // Invalidate validation\n invalidate(session);\n\n const diff: Diff = {\n action: 'disconnect',\n from: fromId,\n to: toId,\n };\n\n return { diff };\n}\n","/**\n * Builder state machine - manages state transitions\n */\n\nimport { BuilderSession, BuilderState, BuilderStateType } from './schema.js';\nimport { saveSession } from './store.js';\nimport { BuilderError } from '../utils/errors.js';\nimport { ErrorCodes } from '../utils/output.js';\n\n/**\n * Valid state transitions\n */\nconst VALID_TRANSITIONS: Record<BuilderStateType, BuilderStateType[]> = {\n [BuilderState.IDLE]: [BuilderState.DRAFT],\n [BuilderState.DRAFT]: [BuilderState.VALIDATED, BuilderState.ABORTED],\n [BuilderState.VALIDATED]: [BuilderState.DRAFT, BuilderState.COMMITTED, BuilderState.ABORTED],\n [BuilderState.COMMITTED]: [], // Terminal state\n [BuilderState.ABORTED]: [], // Terminal state\n};\n\n/**\n * Check if a state transition is valid\n */\nexport function canTransition(from: BuilderStateType, to: BuilderStateType): boolean {\n return VALID_TRANSITIONS[from]?.includes(to) ?? false;\n}\n\n/**\n * Transition session to a new state\n */\nexport function transitionTo(session: BuilderSession, newState: BuilderStateType): void {\n if (!canTransition(session.state, newState)) {\n throw new BuilderError(\n ErrorCodes.INVALID_STATE,\n `Cannot transition from ${session.state} to ${newState}`,\n { currentState: session.state, targetState: newState },\n `Current state is ${session.state}`,\n );\n }\n\n session.state = newState;\n saveSession(session);\n}\n\n/**\n * Check if session is editable\n */\nexport function isEditable(session: BuilderSession): boolean {\n return session.state === BuilderState.DRAFT || session.state === BuilderState.VALIDATED;\n}\n\n/**\n * Check if session can be validated\n */\nexport function canValidate(session: BuilderSession): boolean {\n return session.state === BuilderState.DRAFT;\n}\n\n/**\n * Check if session can be committed\n */\nexport function canCommit(session: BuilderSession): boolean {\n return session.state === BuilderState.VALIDATED && session.validation.ok;\n}\n\n/**\n * Invalidate session (after any edit operation)\n * Transitions VALIDATED -> DRAFT\n */\nexport function invalidate(session: BuilderSession): void {\n if (session.state === BuilderState.VALIDATED) {\n session.state = BuilderState.DRAFT;\n session.validation = { ok: false, errors: [] };\n }\n // If already DRAFT, just clear validation\n if (session.state === BuilderState.DRAFT) {\n session.validation = { ok: false, errors: [] };\n }\n saveSession(session);\n}\n\n/**\n * Guard: ensure session is started\n */\nexport function requireStarted(session: BuilderSession | null): asserts session is BuilderSession {\n if (!session) {\n throw new BuilderError(\n ErrorCodes.BUILDER_NOT_STARTED,\n 'No active builder session',\n undefined,\n 'refly builder start --name \"your-workflow\"',\n );\n }\n}\n\n/**\n * Guard: ensure session is editable\n */\nexport function requireEditable(session: BuilderSession): void {\n requireStarted(session);\n\n if (!isEditable(session)) {\n throw new BuilderError(\n ErrorCodes.INVALID_STATE,\n `Session is ${session.state} and cannot be edited`,\n { state: session.state },\n session.state === BuilderState.COMMITTED\n ? 'Start a new session with `refly builder start`'\n : 'Abort and start a new session',\n );\n }\n}\n\n/**\n * Guard: ensure session can be validated\n */\nexport function requireValidatable(session: BuilderSession): void {\n requireStarted(session);\n\n if (session.state === BuilderState.VALIDATED) {\n // Already validated, OK to re-validate\n return;\n }\n\n if (session.state !== BuilderState.DRAFT) {\n throw new BuilderError(\n ErrorCodes.INVALID_STATE,\n `Session is ${session.state} and cannot be validated`,\n { state: session.state },\n );\n }\n}\n\n/**\n * Guard: ensure session can be committed\n */\nexport function requireCommittable(session: BuilderSession): void {\n requireStarted(session);\n\n if (session.state !== BuilderState.VALIDATED) {\n throw new BuilderError(\n ErrorCodes.VALIDATION_REQUIRED,\n 'Session must be validated before commit',\n { state: session.state },\n 'refly builder validate',\n );\n }\n\n if (!session.validation.ok) {\n throw new BuilderError(\n ErrorCodes.VALIDATION_ERROR,\n 'Validation has errors',\n { errors: session.validation.errors },\n 'Fix validation errors and run `refly builder validate` again',\n );\n }\n}\n","/**\n * refly builder update-node - Update an existing node\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { updateNode } from '../../builder/ops.js';\nimport { generateGraph } from '../../builder/graph.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderUpdateNodeCommand = new Command('update-node')\n .description('Update an existing node in the workflow draft')\n .requiredOption('--id <nodeId>', 'Node ID to update')\n .requiredOption('--patch <json>', 'Patch to apply as JSON')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Parse patch JSON\n let patch: Record<string, unknown>;\n try {\n patch = JSON.parse(options.patch);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --patch', {\n hint: 'Ensure the patch is valid JSON',\n });\n }\n\n // Update node\n const { node, diff } = updateNode(session, options.id, patch);\n const graph = generateGraph(session);\n\n ok('builder.update-node', {\n message: `Node \"${node.id}\" updated`,\n node,\n diff,\n builder: {\n state: session.state,\n nodeCount: graph.stats.nodeCount,\n },\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to update node',\n );\n }\n });\n","/**\n * refly builder remove-node - Remove a node from the draft\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { removeNode } from '../../builder/ops.js';\nimport { generateGraph } from '../../builder/graph.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderRemoveNodeCommand = new Command('remove-node')\n .description('Remove a node from the workflow draft')\n .requiredOption('--id <nodeId>', 'Node ID to remove')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Remove node\n const { removed, diff, cleanedDeps } = removeNode(session, options.id);\n const graph = generateGraph(session);\n\n ok('builder.remove-node', {\n message: `Node \"${removed.id}\" removed`,\n removed,\n diff,\n cleanedDeps:\n cleanedDeps.length > 0\n ? {\n message: 'Dependencies cleaned from nodes',\n nodes: cleanedDeps,\n }\n : null,\n builder: {\n state: session.state,\n nodeCount: graph.stats.nodeCount,\n },\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to remove node',\n );\n }\n });\n","/**\n * refly builder connect - Connect two nodes\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { connectNodes } from '../../builder/ops.js';\nimport { generateGraph } from '../../builder/graph.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderConnectCommand = new Command('connect')\n .description('Connect two nodes (add dependency)')\n .requiredOption('--from <nodeId>', 'Source node ID')\n .requiredOption('--to <nodeId>', 'Target node ID (will depend on source)')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Connect nodes\n const { diff } = connectNodes(session, options.from, options.to);\n const graph = generateGraph(session);\n\n ok('builder.connect', {\n message: `Connected \"${options.from}\" -> \"${options.to}\"`,\n diff,\n builder: {\n state: session.state,\n edgeCount: graph.stats.edgeCount,\n },\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to connect nodes',\n );\n }\n });\n","/**\n * refly builder disconnect - Disconnect two nodes\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { disconnectNodes } from '../../builder/ops.js';\nimport { generateGraph } from '../../builder/graph.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderDisconnectCommand = new Command('disconnect')\n .description('Disconnect two nodes (remove dependency)')\n .requiredOption('--from <nodeId>', 'Source node ID')\n .requiredOption('--to <nodeId>', 'Target node ID')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Disconnect nodes\n const { diff } = disconnectNodes(session, options.from, options.to);\n const graph = generateGraph(session);\n\n ok('builder.disconnect', {\n message: `Disconnected \"${options.from}\" -> \"${options.to}\"`,\n diff,\n builder: {\n state: session.state,\n edgeCount: graph.stats.edgeCount,\n },\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to disconnect nodes',\n );\n }\n });\n","/**\n * refly builder graph - Show DAG structure\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { generateGraph, generateAsciiGraph } from '../../builder/graph.js';\n\nexport const builderGraphCommand = new Command('graph')\n .description('Show workflow DAG structure')\n .option('--ascii', 'Output ASCII representation')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n const graph = generateGraph(session);\n\n if (options.ascii) {\n // ASCII mode - still JSON but include ASCII representation\n const ascii = generateAsciiGraph(session);\n ok('builder.graph', {\n ascii,\n ...graph,\n });\n } else {\n ok('builder.graph', graph);\n }\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to generate graph',\n );\n }\n });\n","/**\n * refly builder validate - Validate the workflow draft\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { validateDraft } from '../../builder/validate.js';\nimport { generateGraph } from '../../builder/graph.js';\n\nexport const builderValidateCommand = new Command('validate')\n .description('Validate the workflow draft')\n .action(async () => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Validate\n const result = validateDraft(session);\n const graph = generateGraph(session);\n\n if (!result.ok) {\n fail(ErrorCodes.VALIDATION_ERROR, 'Workflow validation failed', {\n details: {\n errors: result.errors,\n graph: graph.stats,\n },\n hint: 'Fix the errors and run validate again',\n });\n }\n\n ok('builder.validate', {\n message: 'Workflow validation passed',\n state: session.state,\n graph: graph.stats,\n nextStep: 'Run `refly builder commit` to create the workflow',\n });\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to validate',\n );\n }\n });\n","/**\n * DAG validation for workflow drafts\n */\n\nimport { BuilderSession, ValidationResult, WorkflowNode, BuilderState } from './schema.js';\nimport { saveSession } from './store.js';\n\ninterface ValidationError {\n code: string;\n message: string;\n nodeId?: string;\n details?: Record<string, unknown>;\n}\n\n/**\n * Validate a workflow draft\n */\nexport function validateDraft(session: BuilderSession): ValidationResult {\n const errors: ValidationError[] = [];\n const nodes = session.workflowDraft.nodes;\n\n // 1. Check workflow name\n if (!session.workflowDraft.name || session.workflowDraft.name.trim() === '') {\n errors.push({\n code: 'MISSING_NAME',\n message: 'Workflow name is required',\n });\n }\n\n // 2. Check for empty nodes\n if (nodes.length === 0) {\n errors.push({\n code: 'EMPTY_WORKFLOW',\n message: 'Workflow must have at least one node',\n });\n }\n\n // 3. Check node ID uniqueness\n const nodeIds = new Set<string>();\n for (const node of nodes) {\n if (nodeIds.has(node.id)) {\n errors.push({\n code: 'DUPLICATE_NODE_ID',\n message: `Duplicate node ID: ${node.id}`,\n nodeId: node.id,\n });\n }\n nodeIds.add(node.id);\n }\n\n // 4. Check required fields\n for (const node of nodes) {\n if (!node.id || node.id.trim() === '') {\n errors.push({\n code: 'MISSING_NODE_ID',\n message: 'Node ID is required',\n details: { node },\n });\n }\n\n if (!node.type || node.type.trim() === '') {\n errors.push({\n code: 'MISSING_NODE_TYPE',\n message: 'Node type is required',\n nodeId: node.id,\n });\n }\n }\n\n // 5. Check dependency references\n for (const node of nodes) {\n for (const depId of node.dependsOn) {\n if (!nodeIds.has(depId)) {\n errors.push({\n code: 'MISSING_DEPENDENCY',\n message: `Node \"${node.id}\" depends on non-existent node \"${depId}\"`,\n nodeId: node.id,\n details: { missingDep: depId },\n });\n }\n\n // Check self-reference\n if (depId === node.id) {\n errors.push({\n code: 'SELF_REFERENCE',\n message: `Node \"${node.id}\" cannot depend on itself`,\n nodeId: node.id,\n });\n }\n }\n }\n\n // 6. Cycle detection\n const cycleResult = detectCycles(nodes);\n if (cycleResult.hasCycle) {\n errors.push({\n code: 'CYCLE_DETECTED',\n message: `Circular dependency detected: ${cycleResult.cycle?.join(' -> ')}`,\n details: { cycle: cycleResult.cycle },\n });\n }\n\n // Build result\n const result: ValidationResult = {\n ok: errors.length === 0,\n errors,\n };\n\n // Update session\n session.validation = result;\n if (result.ok && session.state === BuilderState.DRAFT) {\n session.state = BuilderState.VALIDATED;\n }\n saveSession(session);\n\n return result;\n}\n\n/**\n * Detect cycles in the DAG using DFS\n */\nfunction detectCycles(nodes: WorkflowNode[]): { hasCycle: boolean; cycle?: string[] } {\n const nodeMap = new Map<string, WorkflowNode>();\n for (const node of nodes) {\n nodeMap.set(node.id, node);\n }\n\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n function dfs(nodeId: string): string[] | null {\n if (recursionStack.has(nodeId)) {\n // Found cycle - extract cycle path\n const cycleStart = path.indexOf(nodeId);\n return [...path.slice(cycleStart), nodeId];\n }\n\n if (visited.has(nodeId)) {\n return null;\n }\n\n visited.add(nodeId);\n recursionStack.add(nodeId);\n path.push(nodeId);\n\n const node = nodeMap.get(nodeId);\n if (node) {\n for (const depId of node.dependsOn) {\n const cycle = dfs(depId);\n if (cycle) {\n return cycle;\n }\n }\n }\n\n path.pop();\n recursionStack.delete(nodeId);\n return null;\n }\n\n for (const node of nodes) {\n const cycle = dfs(node.id);\n if (cycle) {\n return { hasCycle: true, cycle };\n }\n }\n\n return { hasCycle: false };\n}\n\n/**\n * Check if a node type is valid\n * TODO: Fetch and cache valid types from API\n */\nexport function isValidNodeType(type: string): boolean {\n // For Phase 1, accept any non-empty type\n // In Phase 2, this should validate against refly node types\n return type.trim().length > 0;\n}\n","/**\n * refly builder commit - Commit the draft and create workflow\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { commitSession } from '../../builder/commit.js';\nimport { BuilderError } from '../../utils/errors.js';\nimport { CLIError } from '../../utils/errors.js';\n\nexport const builderCommitCommand = new Command('commit')\n .description('Commit the validated draft and create the workflow')\n .action(async () => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Commit\n const result = await commitSession(session);\n\n ok('builder.commit', {\n message: 'Workflow created successfully',\n workflowId: result.workflowId,\n workflowName: result.name,\n createdAt: result.createdAt,\n nextStep: `Run your workflow with \\`refly workflow run ${result.workflowId}\\``,\n });\n } catch (error) {\n if (error instanceof BuilderError || error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Failed to commit');\n }\n });\n","/**\n * Builder commit - create workflow from validated draft\n */\n\nimport { BuilderSession, BuilderState } from './schema.js';\nimport { saveSession, setCurrent } from './store.js';\nimport { requireCommittable } from './state.js';\nimport { apiRequest } from '../api/client.js';\n\nexport interface WorkflowCreateRequest {\n name: string;\n description?: string;\n spec: {\n version: number;\n nodes: Array<{\n id: string;\n type: string;\n input: Record<string, unknown>;\n dependsOn: string[];\n }>;\n metadata?: {\n tags?: string[];\n owner?: string;\n };\n };\n}\n\nexport interface WorkflowCreateResponse {\n workflowId: string;\n name: string;\n createdAt: string;\n}\n\n/**\n * Commit the builder session and create a workflow\n */\nexport async function commitSession(session: BuilderSession): Promise<WorkflowCreateResponse> {\n // Guard: must be validated\n requireCommittable(session);\n\n const draft = session.workflowDraft;\n\n // Build workflow spec\n const request: WorkflowCreateRequest = {\n name: draft.name,\n description: draft.description,\n spec: {\n version: 1,\n nodes: draft.nodes.map((n) => ({\n id: n.id,\n type: n.type,\n input: n.input,\n dependsOn: n.dependsOn,\n })),\n metadata: draft.metadata,\n },\n };\n\n // Call API to create workflow\n const response = await apiRequest<WorkflowCreateResponse>('/v1/cli/workflow', {\n method: 'POST',\n body: request,\n });\n\n // Update session state\n session.state = BuilderState.COMMITTED;\n session.commit = {\n workflowId: response.workflowId,\n committedAt: new Date().toISOString(),\n };\n saveSession(session);\n\n // Clear current pointer\n setCurrent(null);\n\n return response;\n}\n","/**\n * refly builder abort - Abort the current session\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession, setCurrent, deleteSession } from '../../builder/store.js';\n\nexport const builderAbortCommand = new Command('abort')\n .description('Abort the current builder session')\n .option('--keep', 'Keep session file (do not delete)')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'Nothing to abort',\n });\n }\n\n const sessionId = session.id;\n const workflowName = session.workflowDraft.name;\n\n // Clear current pointer\n setCurrent(null);\n\n // Optionally delete session file\n if (!options.keep) {\n deleteSession(sessionId);\n }\n\n ok('builder.abort', {\n message: 'Builder session aborted',\n sessionId,\n workflowName,\n deleted: !options.keep,\n });\n } catch (error) {\n fail(ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Failed to abort');\n }\n });\n","/**\n * refly workflow - Workflow command group\n */\n\nimport { Command } from 'commander';\nimport { workflowCreateCommand } from './create.js';\nimport { workflowGenerateCommand } from './generate.js';\nimport { workflowListCommand } from './list.js';\nimport { workflowGetCommand } from './get.js';\nimport { workflowEditCommand } from './edit.js';\nimport { workflowDeleteCommand } from './delete.js';\nimport { workflowRunCommand } from './run.js';\nimport { workflowAbortCommand } from './abort.js';\nimport { workflowStatusCommand } from './status.js';\nimport { workflowRunDetailCommand } from './run-detail.js';\nimport { workflowRunNodeCommand } from './run-node.js';\nimport { workflowRunToolcallsCommand } from './run-toolcalls.js';\n\n// The main run command handles `workflow run <workflowId>`\n// We need to handle this specially since `run` is both a command and a subcommand group\n\nexport const workflowCommand = new Command('workflow')\n .description('Manage and run workflows')\n .addCommand(workflowCreateCommand)\n .addCommand(workflowGenerateCommand)\n .addCommand(workflowListCommand)\n .addCommand(workflowGetCommand)\n .addCommand(workflowEditCommand)\n .addCommand(workflowDeleteCommand)\n .addCommand(workflowRunCommand)\n .addCommand(workflowAbortCommand)\n .addCommand(workflowStatusCommand);\n\n// Add the run get subcommand under a different path\n// Users will use: refly workflow run get <runId>\nworkflowCommand.addCommand(\n new Command('run-status')\n .description('Get workflow run status (alias for run get)')\n .argument('<runId>', 'Run ID')\n .action(async (runId) => {\n // Delegate to run-get\n const { ok, fail, ErrorCodes } = await import('../../utils/output.js');\n const { apiRequest } = await import('../../api/client.js');\n const { CLIError } = await import('../../utils/errors.js');\n\n try {\n const result = await apiRequest(`/v1/cli/workflow/run/${runId}`);\n ok('workflow.run.get', result);\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get run status',\n );\n }\n }),\n);\n\n// Add new execution result commands\n// refly workflow run-detail <runId> - Get detailed workflow run info\nworkflowCommand.addCommand(workflowRunDetailCommand);\n\n// refly workflow run-node <runId> <nodeId> - Get node execution result\nworkflowCommand.addCommand(workflowRunNodeCommand);\n\n// refly workflow run-toolcalls <runId> - Get all tool calls for a run\nworkflowCommand.addCommand(workflowRunToolcallsCommand);\n","/**\n * refly workflow create - Create a workflow directly\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\nexport const workflowCreateCommand = new Command('create')\n .description('Create a workflow from a spec')\n .requiredOption('--name <name>', 'Workflow name')\n .requiredOption('--spec <json>', 'Workflow spec as JSON')\n .option('--description <description>', 'Workflow description')\n .action(async (options) => {\n try {\n // Parse spec JSON\n let spec: unknown;\n try {\n spec = JSON.parse(options.spec);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --spec', {\n hint: 'Ensure the spec is valid JSON',\n });\n }\n\n // Call API\n const result = await apiRequest<{\n workflowId: string;\n name: string;\n createdAt: string;\n }>('/v1/cli/workflow', {\n method: 'POST',\n body: {\n name: options.name,\n description: options.description,\n spec,\n },\n });\n\n ok('workflow.create', {\n message: 'Workflow created successfully',\n workflowId: result.workflowId,\n name: result.name,\n createdAt: result.createdAt,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to create workflow',\n );\n }\n });\n","/**\n * refly workflow generate - Generate a workflow using AI from natural language\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\nimport { getWebUrl } from '../../config/config.js';\n\ninterface GenerateWorkflowResponse {\n workflowId: string;\n canvasId: string;\n sessionId: string;\n resultId: string;\n planId: string;\n workflowPlan: {\n title: string;\n tasks: Array<{\n id: string;\n title: string;\n prompt: string;\n toolsets?: string[];\n dependentTasks?: string[];\n }>;\n variables?: Array<{\n variableId: string;\n name: string;\n description: string;\n variableType: string;\n required?: boolean;\n }>;\n };\n nodesCount: number;\n edgesCount: number;\n}\n\nexport const workflowGenerateCommand = new Command('generate')\n .description('Generate a workflow using AI from natural language description')\n .requiredOption('--query <query>', 'Natural language description of the workflow')\n .option('--canvas-id <canvasId>', 'Optional canvas ID (to update existing workflow)')\n .option('--project-id <projectId>', 'Optional project ID')\n .option('--model-id <modelItemId>', 'Optional model ID to use for generation')\n .option('--locale <locale>', 'Output language locale (e.g., en, zh)')\n .option('--timeout <ms>', 'Timeout in milliseconds (default: 300000)', '300000')\n .option('--variables <json>', 'Predefined workflow variables as JSON')\n .option('--skip-default-nodes', 'Skip creating default nodes (start + skillResponse)')\n .action(async (options) => {\n try {\n // Parse variables JSON if provided\n let variables: unknown[] | undefined;\n if (options.variables) {\n try {\n variables = JSON.parse(options.variables);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --variables', {\n hint: 'Ensure the variables parameter is valid JSON',\n });\n }\n }\n\n // Build request body\n const body: Record<string, unknown> = {\n query: options.query,\n timeout: Number.parseInt(options.timeout, 10),\n };\n\n if (options.canvasId) body.canvasId = options.canvasId;\n if (options.projectId) body.projectId = options.projectId;\n if (options.modelId) body.modelItemId = options.modelId;\n if (options.locale) body.locale = options.locale;\n if (variables) body.variables = variables;\n if (options.skipDefaultNodes) body.skipDefaultNodes = true;\n\n // Call API - this may take a while as it invokes AI\n const result = await apiRequest<GenerateWorkflowResponse>('/v1/cli/workflow/generate', {\n method: 'POST',\n body,\n timeout: Number.parseInt(options.timeout, 10) + 30000, // Add buffer for API processing\n });\n\n // Format output\n ok('workflow.generate', {\n message: 'Workflow generated successfully',\n url: `${getWebUrl()}/workflow/${result.workflowId}`,\n title: result.workflowPlan?.title,\n nodesCount: result.nodesCount,\n workflowId: result.workflowId,\n plan: {\n tasksCount: result.workflowPlan?.tasks?.length ?? 0,\n variablesCount: result.workflowPlan?.variables?.length ?? 0,\n tasks: result.workflowPlan?.tasks?.map((t) => ({\n id: t.id,\n title: t.title,\n toolsets: t.toolsets,\n })),\n },\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to generate workflow',\n {\n hint: 'The AI generation may have timed out. Try increasing --timeout or simplifying your query.',\n },\n );\n }\n });\n","/**\n * refly workflow list - List all workflows\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface WorkflowSummary {\n workflowId: string;\n name: string;\n description?: string;\n nodeCount: number;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const workflowListCommand = new Command('list')\n .description('List all workflows')\n .option('--limit <number>', 'Maximum number of workflows to return', '50')\n .option('--offset <number>', 'Offset for pagination', '0')\n .action(async (options) => {\n try {\n const limit = Number.parseInt(options.limit, 10);\n const offset = Number.parseInt(options.offset, 10);\n\n const result = await apiRequest<{\n workflows: WorkflowSummary[];\n total: number;\n }>(`/v1/cli/workflow?limit=${limit}&offset=${offset}`);\n\n ok('workflow.list', {\n workflows: result.workflows,\n total: result.total,\n limit,\n offset,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to list workflows',\n );\n }\n });\n","/**\n * refly workflow get - Get workflow details\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface WorkflowDetail {\n workflowId: string;\n name: string;\n description?: string;\n spec: {\n version: number;\n nodes: Array<{\n id: string;\n type: string;\n input: Record<string, unknown>;\n dependsOn: string[];\n }>;\n metadata?: Record<string, unknown>;\n };\n createdAt: string;\n updatedAt: string;\n}\n\nexport const workflowGetCommand = new Command('get')\n .description('Get workflow details')\n .argument('<workflowId>', 'Workflow ID')\n .action(async (workflowId) => {\n try {\n const result = await apiRequest<WorkflowDetail>(`/v1/cli/workflow/${workflowId}`);\n\n ok('workflow.get', result);\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get workflow',\n );\n }\n });\n","/**\n * refly workflow edit - Edit an existing workflow\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\nexport const workflowEditCommand = new Command('edit')\n .description('Edit an existing workflow')\n .argument('<workflowId>', 'Workflow ID')\n .requiredOption('--ops <json>', 'Operations to apply as JSON')\n .action(async (workflowId, options) => {\n try {\n // Parse ops JSON\n let ops: unknown;\n try {\n ops = JSON.parse(options.ops);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --ops', {\n hint: 'Ensure the operations are valid JSON',\n });\n }\n\n const result = await apiRequest<{\n workflowId: string;\n name: string;\n updatedAt: string;\n }>(`/v1/cli/workflow/${workflowId}`, {\n method: 'PATCH',\n body: { ops },\n });\n\n ok('workflow.edit', {\n message: 'Workflow updated successfully',\n workflowId: result.workflowId,\n name: result.name,\n updatedAt: result.updatedAt,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to edit workflow',\n );\n }\n });\n","/**\n * refly workflow delete - Delete a workflow\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\nexport const workflowDeleteCommand = new Command('delete')\n .description('Delete a workflow')\n .argument('<workflowId>', 'Workflow ID')\n .action(async (workflowId) => {\n try {\n await apiRequest(`/v1/cli/workflow/${workflowId}`, {\n method: 'DELETE',\n });\n\n ok('workflow.delete', {\n message: 'Workflow deleted successfully',\n workflowId,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to delete workflow',\n );\n }\n });\n","/**\n * refly workflow run - Run a workflow\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface RunResult {\n runId: string;\n workflowId: string;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'aborted';\n createdAt: string;\n}\n\nexport const workflowRunCommand = new Command('run')\n .description('Run a workflow')\n .argument('<workflowId>', 'Workflow ID')\n .option('--input <json>', 'Input variables as JSON', '{}')\n .action(async (workflowId, options) => {\n try {\n // Parse input JSON\n let input: unknown;\n try {\n input = JSON.parse(options.input);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --input', {\n hint: 'Ensure the input is valid JSON',\n });\n }\n\n const result = await apiRequest<RunResult>(`/v1/cli/workflow/${workflowId}/run`, {\n method: 'POST',\n body: { input },\n });\n\n ok('workflow.run', {\n message: 'Workflow run started',\n runId: result.runId,\n workflowId: result.workflowId,\n status: result.status,\n createdAt: result.createdAt,\n nextStep: `Check status with \\`refly workflow run get ${result.runId}\\``,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to run workflow',\n );\n }\n });\n","/**\n * refly workflow abort - Abort a running workflow\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\nexport const workflowAbortCommand = new Command('abort')\n .description('Abort a running workflow')\n .argument('<runId>', 'Run ID')\n .action(async (runId) => {\n try {\n await apiRequest(`/v1/cli/workflow/run/${runId}/abort`, {\n method: 'POST',\n });\n\n ok('workflow.abort', {\n message: 'Workflow run aborted',\n runId,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to abort workflow',\n );\n }\n });\n","/**\n * refly workflow status - Get workflow execution status with optional watch mode\n *\n * Smart diff output: Only outputs when status meaningfully changes to reduce\n * output volume for AI agent integration (e.g., Claude Code background tasks).\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, print, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface NodeStatus {\n nodeId: string;\n nodeType: string;\n status: string;\n title: string;\n progress: number;\n errorMessage?: string;\n startTime?: string;\n endTime?: string;\n}\n\ninterface WorkflowRunStatus {\n runId: string;\n workflowId: string;\n status: 'init' | 'executing' | 'finish' | 'failed';\n title: string;\n totalNodes: number;\n executedNodes: number;\n failedNodes: number;\n nodeStatuses: NodeStatus[];\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Check if workflow status has meaningfully changed\n */\nfunction hasStatusChanged(prev: WorkflowRunStatus | null, current: WorkflowRunStatus): boolean {\n if (!prev) return true;\n\n // Check overall status\n if (prev.status !== current.status) return true;\n\n // Check node counts\n if (prev.executedNodes !== current.executedNodes) return true;\n if (prev.failedNodes !== current.failedNodes) return true;\n\n // Check individual node statuses\n const prevNodeMap = new Map(prev.nodeStatuses.map((n) => [n.nodeId, n]));\n for (const node of current.nodeStatuses) {\n const prevNode = prevNodeMap.get(node.nodeId);\n if (!prevNode) return true;\n if (prevNode.status !== node.status) return true;\n // Only report progress changes if significant (>10%)\n if (Math.abs(prevNode.progress - node.progress) >= 10) return true;\n }\n\n return false;\n}\n\n/**\n * Get changed nodes for delta output\n */\nfunction getChangedNodes(prev: WorkflowRunStatus | null, current: WorkflowRunStatus): NodeStatus[] {\n if (!prev) return current.nodeStatuses;\n\n const prevNodeMap = new Map(prev.nodeStatuses.map((n) => [n.nodeId, n]));\n const changedNodes: NodeStatus[] = [];\n\n for (const node of current.nodeStatuses) {\n const prevNode = prevNodeMap.get(node.nodeId);\n if (!prevNode) {\n changedNodes.push(node);\n } else if (\n prevNode.status !== node.status ||\n Math.abs(prevNode.progress - node.progress) >= 10\n ) {\n changedNodes.push(node);\n }\n }\n\n return changedNodes;\n}\n\n/**\n * Generate human-readable summary of status change\n */\nfunction generateSummary(changedNodes: NodeStatus[]): string {\n if (changedNodes.length === 0) return '';\n\n const summaries: string[] = [];\n for (const node of changedNodes) {\n if (node.status === 'finish') {\n summaries.push(`Node '${node.title}' completed`);\n } else if (node.status === 'failed') {\n summaries.push(`Node '${node.title}' failed`);\n } else if (node.status === 'executing') {\n summaries.push(`Node '${node.title}' started`);\n }\n }\n\n return summaries.join('; ') || `${changedNodes.length} node(s) updated`;\n}\n\nexport const workflowStatusCommand = new Command('status')\n .description('Get detailed workflow execution status')\n .argument('<runId>', 'Workflow run ID')\n .option('--watch', 'Watch mode: continuously poll until completion')\n .option('--interval <ms>', 'Poll interval in ms (default: 2000)', '2000')\n .option('--full', 'In watch mode, output full status every time (not just changes)')\n .action(async (runId, options) => {\n try {\n // Validate poll interval\n const pollInterval = Number.parseInt(options.interval, 10);\n if (Number.isNaN(pollInterval) || pollInterval <= 0) {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid poll interval', {\n hint: 'Poll interval must be a positive number in milliseconds',\n });\n }\n\n const fetchStatus = async () => {\n return await apiRequest<WorkflowRunStatus>(`/v1/cli/workflow/run/${runId}`);\n };\n\n if (options.watch) {\n // Watch mode: poll until completion with smart diff output\n let prevStatus: WorkflowRunStatus | null = null;\n let status = await fetchStatus();\n\n // Always output initial status (full)\n print('workflow.status', {\n ...status,\n watching: true,\n isInitial: true,\n });\n prevStatus = status;\n\n while (status.status === 'init' || status.status === 'executing') {\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n status = await fetchStatus();\n\n // Smart diff: only output if status has meaningfully changed\n if (options.full || hasStatusChanged(prevStatus, status)) {\n if (options.full) {\n // Full mode: output complete status every time\n print('workflow.status', {\n ...status,\n watching: true,\n });\n } else {\n // Smart diff mode: output delta with changed nodes only\n const changedNodes = getChangedNodes(prevStatus, status);\n print('workflow.progress', {\n runId: status.runId,\n status: status.status,\n progress: `${status.executedNodes}/${status.totalNodes}`,\n executedNodes: status.executedNodes,\n totalNodes: status.totalNodes,\n failedNodes: status.failedNodes,\n summary: generateSummary(changedNodes),\n changedNodes,\n watching: true,\n });\n }\n prevStatus = status;\n }\n }\n\n // Final output with ok() which exits the process\n ok('workflow.status', {\n ...status,\n watching: false,\n completed: true,\n });\n } else {\n // Single fetch\n const status = await fetchStatus();\n ok('workflow.status', status);\n }\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get workflow status',\n );\n }\n });\n","/**\n * refly workflow run detail - Get detailed workflow run information\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolCallSummary {\n callId: string;\n toolName: string;\n toolsetId: string;\n status: 'executing' | 'completed' | 'failed';\n durationMs?: number;\n error?: string;\n}\n\ninterface NodeExecutionDetail {\n nodeId: string;\n nodeExecutionId: string;\n nodeType: string;\n title: string;\n status: 'waiting' | 'executing' | 'finish' | 'failed';\n progress: number;\n startTime?: string;\n endTime?: string;\n durationMs?: number;\n query?: string;\n originalQuery?: string;\n resultId?: string;\n resultVersion?: number;\n outputPreview?: string;\n outputTokens?: number;\n toolCallsCount: number;\n toolCallsSummary?: ToolCallSummary[];\n errorMessage?: string;\n errorType?: string;\n}\n\ninterface WorkflowError {\n nodeId: string;\n nodeTitle: string;\n errorType: string;\n errorMessage: string;\n timestamp: string;\n}\n\ninterface WorkflowRunDetailResponse {\n runId: string;\n workflowId: string;\n title: string;\n status: 'init' | 'executing' | 'finish' | 'failed';\n totalNodes: number;\n executedNodes: number;\n failedNodes: number;\n startedAt: string;\n finishedAt?: string;\n durationMs?: number;\n nodes: NodeExecutionDetail[];\n errors?: WorkflowError[];\n}\n\nexport const workflowRunDetailCommand = new Command('detail')\n .description('Get detailed workflow run information including all node results')\n .argument('<runId>', 'Workflow run ID')\n .option('--no-tool-calls', 'Exclude tool call summaries')\n .option('--preview-length <length>', 'Output preview length (default: 500)', '500')\n .action(async (runId, options) => {\n try {\n const params = new URLSearchParams();\n if (options.toolCalls === false) {\n params.set('includeToolCalls', 'false');\n }\n if (options.previewLength) {\n params.set('outputPreviewLength', options.previewLength);\n }\n\n const queryString = params.toString();\n const url = `/v1/cli/workflow/run/${runId}/detail${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<WorkflowRunDetailResponse>(url);\n\n ok('workflow.run.detail', {\n runId: result.runId,\n workflowId: result.workflowId,\n title: result.title,\n status: result.status,\n progress: {\n total: result.totalNodes,\n executed: result.executedNodes,\n failed: result.failedNodes,\n },\n timing: {\n startedAt: result.startedAt,\n finishedAt: result.finishedAt,\n durationMs: result.durationMs,\n },\n nodes: result.nodes,\n errors: result.errors,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get workflow run detail',\n );\n }\n });\n","/**\n * refly workflow run node - Get detailed node execution result\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolCallDetail {\n callId: string;\n toolsetId: string;\n toolName: string;\n stepName?: string;\n input: Record<string, unknown>;\n output?: Record<string, unknown>;\n status: 'executing' | 'completed' | 'failed';\n error?: string;\n createdAt: string;\n updatedAt: string;\n durationMs?: number;\n}\n\ninterface ActionMessage {\n messageId: string;\n type: 'ai' | 'tool';\n content?: string;\n reasoningContent?: string;\n toolCallId?: string;\n createdAt: string;\n}\n\ninterface NodeResultDetailResponse {\n nodeId: string;\n nodeExecutionId: string;\n nodeType: string;\n title: string;\n status: string;\n startTime?: string;\n endTime?: string;\n durationMs?: number;\n query?: string;\n originalQuery?: string;\n resultId?: string;\n resultVersion?: number;\n output?: {\n content: string;\n reasoningContent?: string;\n artifacts?: unknown[];\n structuredData?: Record<string, unknown>;\n };\n tokenUsage?: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n };\n toolCalls: ToolCallDetail[];\n messages?: ActionMessage[];\n error?: {\n type: string;\n message: string;\n };\n}\n\nexport const workflowRunNodeCommand = new Command('node')\n .description('Get detailed execution result for a specific node')\n .argument('<runId>', 'Workflow run ID')\n .argument('<nodeId>', 'Node ID')\n .option('--include-messages', 'Include AI conversation messages')\n .option('--raw', 'Disable output sanitization (show full tool outputs)')\n .action(async (runId, nodeId, options) => {\n try {\n const params = new URLSearchParams();\n if (options.includeMessages) {\n params.set('includeMessages', 'true');\n }\n if (options.raw) {\n params.set('sanitizeForDisplay', 'false');\n }\n\n const queryString = params.toString();\n const url = `/v1/cli/workflow/run/${runId}/node/${nodeId}${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<NodeResultDetailResponse>(url);\n\n ok('workflow.node.result', {\n nodeId: result.nodeId,\n nodeExecutionId: result.nodeExecutionId,\n nodeType: result.nodeType,\n title: result.title,\n status: result.status,\n timing: {\n startTime: result.startTime,\n endTime: result.endTime,\n durationMs: result.durationMs,\n },\n query: result.query,\n originalQuery: result.originalQuery,\n resultId: result.resultId,\n resultVersion: result.resultVersion,\n output: result.output,\n tokenUsage: result.tokenUsage,\n toolCallsCount: result.toolCalls?.length ?? 0,\n toolCalls: result.toolCalls,\n messages: result.messages,\n error: result.error,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get node result',\n );\n }\n });\n","/**\n * refly workflow run toolcalls - Get all tool calls for a workflow run\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolCallDetail {\n callId: string;\n toolsetId: string;\n toolName: string;\n stepName?: string;\n input: Record<string, unknown>;\n output?: Record<string, unknown>;\n status: 'executing' | 'completed' | 'failed';\n error?: string;\n createdAt: string;\n updatedAt: string;\n durationMs?: number;\n}\n\ninterface WorkflowToolCallsResponse {\n runId: string;\n totalCount: number;\n toolCalls: ToolCallDetail[];\n byStatus: {\n executing: number;\n completed: number;\n failed: number;\n };\n byToolset: Record<string, number>;\n byTool: Record<string, number>;\n}\n\nexport const workflowRunToolcallsCommand = new Command('toolcalls')\n .description('Get all tool calls for a workflow run')\n .argument('<runId>', 'Workflow run ID')\n .option('--node-id <nodeId>', 'Filter by node ID')\n .option('--toolset-id <toolsetId>', 'Filter by toolset ID')\n .option('--tool-name <toolName>', 'Filter by tool name')\n .option('--status <status>', 'Filter by status (executing, completed, failed)')\n .option('--limit <limit>', 'Maximum number of results (default: 100)', '100')\n .option('--offset <offset>', 'Pagination offset (default: 0)', '0')\n .option('--raw', 'Disable output sanitization (show full tool outputs)')\n .action(async (runId, options) => {\n try {\n const params = new URLSearchParams();\n if (options.nodeId) {\n params.set('nodeId', options.nodeId);\n }\n if (options.toolsetId) {\n params.set('toolsetId', options.toolsetId);\n }\n if (options.toolName) {\n params.set('toolName', options.toolName);\n }\n if (options.status) {\n params.set('status', options.status);\n }\n if (options.limit) {\n params.set('limit', options.limit);\n }\n if (options.offset) {\n params.set('offset', options.offset);\n }\n if (options.raw) {\n params.set('sanitizeForDisplay', 'false');\n }\n\n const queryString = params.toString();\n const url = `/v1/cli/workflow/run/${runId}/toolcalls${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<WorkflowToolCallsResponse>(url);\n\n ok('workflow.toolcalls', {\n runId: result.runId,\n totalCount: result.totalCount,\n toolCalls: result.toolCalls,\n summary: {\n byStatus: result.byStatus,\n byToolset: result.byToolset,\n byTool: result.byTool,\n },\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get workflow tool calls',\n );\n }\n });\n","/**\n * refly node - Node command group\n */\n\nimport { Command } from 'commander';\nimport { nodeTypesCommand } from './types.js';\nimport { nodeRunCommand } from './run.js';\nimport { nodeResultCommand } from './result.js';\n\nexport const nodeCommand = new Command('node')\n .description('Node operations: types, run, and execution results')\n .addCommand(nodeTypesCommand)\n .addCommand(nodeRunCommand)\n .addCommand(nodeResultCommand);\n","/**\n * refly node types - List available node types\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { getCacheDir } from '../../config/paths.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface NodeType {\n type: string;\n name: string;\n description: string;\n category: string;\n authorized?: boolean;\n}\n\ninterface NodeTypesResponse {\n nodeTypes: NodeType[];\n total: number;\n}\n\nconst CACHE_FILE = 'node-types.json';\nconst CACHE_TTL = 24 * 60 * 60 * 1000; // 24 hours\n\nexport const nodeTypesCommand = new Command('types')\n .description('List available node types')\n .option('--refresh', 'Force refresh from API')\n .option('--category <category>', 'Filter by category')\n .action(async (options) => {\n try {\n let data: NodeTypesResponse;\n\n // Try cache first\n if (!options.refresh) {\n const cached = loadFromCache();\n if (cached) {\n data = cached;\n } else {\n data = await fetchAndCache();\n }\n } else {\n data = await fetchAndCache();\n }\n\n // Filter by category if specified\n let nodeTypes = data.nodeTypes || [];\n if (options.category) {\n nodeTypes = nodeTypes.filter(\n (t: NodeType) => t.category.toLowerCase() === options.category.toLowerCase(),\n );\n }\n\n ok('node.types', {\n nodeTypes,\n total: nodeTypes.length,\n categories: [...new Set(data.nodeTypes?.map((t: NodeType) => t.category) || [])],\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get node types',\n );\n }\n });\n\nfunction getCachePath(): string {\n return path.join(getCacheDir(), CACHE_FILE);\n}\n\nfunction loadFromCache(): NodeTypesResponse | null {\n try {\n const cachePath = getCachePath();\n if (!fs.existsSync(cachePath)) {\n return null;\n }\n\n const stat = fs.statSync(cachePath);\n const age = Date.now() - stat.mtimeMs;\n if (age > CACHE_TTL) {\n return null;\n }\n\n const content = fs.readFileSync(cachePath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\nasync function fetchAndCache(): Promise<NodeTypesResponse> {\n const data = await apiRequest<NodeTypesResponse>('/v1/cli/node/types');\n\n // Save to cache\n try {\n const cachePath = getCachePath();\n fs.writeFileSync(cachePath, JSON.stringify(data, null, 2));\n } catch {\n // Ignore cache write errors\n }\n\n return data;\n}\n","/**\n * refly node run - Run a single node for debugging\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface NodeRunResult {\n result: unknown;\n metrics: {\n durationMs: number;\n tokensUsed?: number;\n };\n logs?: string[];\n}\n\nexport const nodeRunCommand = new Command('run')\n .description('Run a single node for debugging')\n .requiredOption('--type <nodeType>', 'Node type to run')\n .requiredOption('--input <json>', 'Input data as JSON')\n .action(async (options) => {\n try {\n // Parse input JSON\n let input: unknown;\n try {\n input = JSON.parse(options.input);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --input', {\n hint: 'Ensure the input is valid JSON',\n });\n }\n\n const result = await apiRequest<NodeRunResult>('/v1/cli/node/run', {\n method: 'POST',\n body: {\n type: options.type,\n input,\n },\n });\n\n ok('node.run', {\n type: options.type,\n result: result.result,\n metrics: result.metrics,\n logs: result.logs ?? [],\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to run node',\n );\n }\n });\n","/**\n * refly node result - Get node execution result\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface NodeStep {\n stepIndex: number;\n content: string;\n toolCalls?: unknown[];\n}\n\ninterface NodeResult {\n resultId: string;\n status: string;\n content: string;\n tokenUsage?: {\n input: number;\n output: number;\n total: number;\n };\n steps?: NodeStep[];\n toolCalls?: unknown[];\n messages?: unknown[];\n}\n\nexport const nodeResultCommand = new Command('result')\n .description('Get node execution result')\n .argument('<resultId>', 'Node result ID')\n .option('--include-steps', 'Include detailed step information')\n .option('--include-messages', 'Include chat messages')\n .option('--include-tool-calls', 'Include tool call details')\n .action(async (resultId, options) => {\n try {\n const result = await apiRequest<NodeResult>(`/v1/cli/action/result?resultId=${resultId}`);\n\n // Format output based on options\n const output: Record<string, unknown> = {\n resultId: result.resultId,\n status: result.status,\n content: result.content,\n tokenUsage: result.tokenUsage,\n };\n\n if (options.includeSteps && result.steps) {\n output.steps = result.steps.map((step) => ({\n stepIndex: step.stepIndex,\n content: step.content,\n toolCallsCount: step.toolCalls?.length ?? 0,\n }));\n }\n\n if (options.includeToolCalls && result.toolCalls) {\n output.toolCalls = result.toolCalls;\n }\n\n if (options.includeMessages && result.messages) {\n output.messages = result.messages;\n }\n\n ok('node.result', output);\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get node result',\n );\n }\n });\n","/**\n * refly tool - Tool command group\n */\n\nimport { Command } from 'commander';\nimport { toolCallsCommand } from './calls.js';\nimport { toolGetCommand } from './get.js';\n\nexport const toolCommand = new Command('tool')\n .description('Tool-related operations')\n .addCommand(toolCallsCommand)\n .addCommand(toolGetCommand);\n","/**\n * refly tool calls - Get tool execution results for an action\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolCall {\n callId: string;\n toolName: string;\n toolsetId: string;\n status: string;\n input: string;\n output: string;\n error?: string;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface ToolCallsResponse {\n toolCalls: ToolCall[];\n version: number;\n}\n\nexport const toolCallsCommand = new Command('calls')\n .description('Get tool execution results for an action')\n .requiredOption('--result-id <resultId>', 'Action result ID')\n .option('--version <version>', 'Specific version number')\n .action(async (options) => {\n try {\n const params = new URLSearchParams({ resultId: options.resultId });\n if (options.version) {\n params.set('version', options.version);\n }\n\n const result = await apiRequest<ToolCallsResponse>(`/v1/cli/toolcall?${params}`);\n\n ok('tool.calls', {\n resultId: options.resultId,\n version: result.version,\n count: result.toolCalls?.length ?? 0,\n toolCalls: result.toolCalls?.map((tc) => ({\n callId: tc.callId,\n toolName: tc.toolName,\n toolsetId: tc.toolsetId,\n status: tc.status,\n input: tc.input,\n output: tc.output,\n error: tc.error,\n createdAt: tc.createdAt,\n updatedAt: tc.updatedAt,\n })),\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get tool calls',\n );\n }\n });\n","/**\n * refly tool get - Get full details for a single tool call\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolCallFullDetail {\n callId: string;\n resultId: string;\n resultVersion: number;\n workflowExecutionId?: string;\n nodeId?: string;\n toolsetId: string;\n toolName: string;\n stepName?: string;\n input: Record<string, unknown>;\n output?: Record<string, unknown>;\n status: 'executing' | 'completed' | 'failed';\n error?: string;\n createdAt: string;\n updatedAt: string;\n durationMs?: number;\n}\n\nexport const toolGetCommand = new Command('get')\n .description('Get full details for a single tool call')\n .argument('<callId>', 'Tool call ID')\n .option('--raw', 'Disable output sanitization (show full tool output)')\n .action(async (callId, options) => {\n try {\n const params = new URLSearchParams();\n if (options.raw) {\n params.set('sanitizeForDisplay', 'false');\n }\n\n const queryString = params.toString();\n const url = `/v1/cli/toolcall/${callId}${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<ToolCallFullDetail>(url);\n\n ok('tool.detail', {\n callId: result.callId,\n context: {\n resultId: result.resultId,\n resultVersion: result.resultVersion,\n workflowExecutionId: result.workflowExecutionId,\n nodeId: result.nodeId,\n },\n tool: {\n toolsetId: result.toolsetId,\n toolName: result.toolName,\n stepName: result.stepName,\n },\n input: result.input,\n output: result.output,\n status: result.status,\n error: result.error,\n timing: {\n createdAt: result.createdAt,\n updatedAt: result.updatedAt,\n durationMs: result.durationMs,\n },\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get tool call detail',\n );\n }\n });\n","/**\n * refly file - File command group\n */\n\nimport { Command } from 'commander';\nimport { fileListCommand } from './list.js';\nimport { fileGetCommand } from './get.js';\nimport { fileDownloadCommand } from './download.js';\n\nexport const fileCommand = new Command('file')\n .description('Manage files and documents')\n .addCommand(fileListCommand)\n .addCommand(fileGetCommand)\n .addCommand(fileDownloadCommand);\n","/**\n * refly file list - List files\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface FileInfo {\n fileId: string;\n name: string;\n type: string;\n size?: number;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface ListFilesResponse {\n files: FileInfo[];\n total: number;\n page: number;\n pageSize: number;\n}\n\nexport const fileListCommand = new Command('list')\n .description('List files')\n .option('--page <n>', 'Page number (default: 1)', '1')\n .option('--page-size <n>', 'Number of files per page (default: 20)', '20')\n .option('--canvas-id <id>', 'Filter by canvas ID')\n .option('--result-id <id>', 'Filter by action result ID')\n .option('--include-content', 'Include file content in response')\n .action(async (options) => {\n try {\n const params = new URLSearchParams({\n page: options.page,\n pageSize: options.pageSize,\n });\n if (options.canvasId) {\n params.set('canvasId', options.canvasId);\n }\n if (options.resultId) {\n params.set('resultId', options.resultId);\n }\n if (options.includeContent) {\n params.set('includeContent', 'true');\n }\n\n const result = await apiRequest<ListFilesResponse>(`/v1/cli/drive/files?${params}`);\n\n ok('file.list', {\n total: result.total,\n page: result.page,\n pageSize: result.pageSize,\n files: result.files?.map((f) => ({\n fileId: f.fileId,\n name: f.name,\n type: f.type,\n size: f.size,\n createdAt: f.createdAt,\n updatedAt: f.updatedAt,\n })),\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to list files',\n );\n }\n });\n","/**\n * refly file get - Get file details\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface FileInfo {\n fileId: string;\n name: string;\n type: string;\n size?: number;\n content?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const fileGetCommand = new Command('get')\n .description('Get file details')\n .argument('<fileId>', 'File ID')\n .option('--no-content', 'Exclude file content from response')\n .action(async (fileId, options) => {\n try {\n const includeContent = options.content !== false;\n const result = await apiRequest<FileInfo>(\n `/v1/cli/drive/files/${fileId}?includeContent=${includeContent}`,\n );\n\n ok('file.get', {\n fileId: result.fileId,\n name: result.name,\n type: result.type,\n size: result.size,\n content: includeContent ? result.content : undefined,\n createdAt: result.createdAt,\n updatedAt: result.updatedAt,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get file',\n );\n }\n });\n","/**\n * refly file download - Download file to local filesystem\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequestStream } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nexport const fileDownloadCommand = new Command('download')\n .description('Download file to local filesystem')\n .argument('<fileId>', 'File ID')\n .option('-o, --output <path>', 'Output file path (defaults to original filename)')\n .action(async (fileId, options) => {\n try {\n const { data, filename, contentType, size } = await apiRequestStream(\n `/v1/cli/drive/files/${fileId}/download`,\n );\n\n const outputPath = options.output || filename || `${fileId}`;\n const resolvedPath = path.resolve(outputPath);\n\n // Write buffer to file\n fs.writeFileSync(resolvedPath, data);\n\n ok('file.download', {\n fileId,\n path: resolvedPath,\n filename,\n contentType,\n size,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to download file',\n );\n }\n });\n"],"mappings":"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","names":["exports","CommanderError","InvalidArgumentError","exports","InvalidArgumentError","Argument","exports","Help","cmd","exports","InvalidArgumentError","Option","str","exports","exports","childProcess","path","fs","process","Argument","CommanderError","Help","Option","Command","option","exports","Argument","Command","CommanderError","InvalidArgumentError","Help","Option","nodes","VERSION","util","objectUtil","path","errorUtil","errorMap","r","path","ctx","result","issues","elements","processed","ZodFirstPartyTypeKind","fs","path","os","init_errors","fs","path","path","init_errors","commander","fs","path","DEFAULT_API_ENDPOINT","os","import_node_process","import_node_util","import_node_child_process","import_promises","import_node_process","import_node_fs","import_node_fs","fs","fs","process","os","fs","fs","fsConstants","process","import_node_util","import_node_process","import_node_child_process","import_node_process","process","import_node_process","import_node_util","import_node_child_process","execFileAsync","process","import_node_util","import_node_child_process","execFileAsync","execFileAsync","defaultBrowser","process","execFile","childProcess","__dirname","path","platform","process","defaultBrowser","fs","fsConstants","resolve","platform","resolve","hostname","CLI_VERSION","getConfigPath","path","fs","path","crypto","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","path","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","resolve","init_errors","init_errors","init_errors","ok","fail","ErrorCodes","apiRequest","CLIError","fs","path","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","init_errors","fs","path","VERSION","program","logger"]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/.pnpm/tsup@8.5.1_@swc+core@1.12.14_@swc+helpers@0.5.17__jiti@2.4.2_postcss@8.5.6_tsx@4.20.6_typescript@5.8.3_yaml@2.8.0/node_modules/tsup/assets/cjs_shims.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/error.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/argument.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/help.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/option.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/suggestSimilar.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/lib/command.js","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/index.js","../../src/config/paths.ts","../../src/utils/logger.ts","../../src/bin/refly.ts","../../../../node_modules/.pnpm/commander@12.1.0/node_modules/commander/esm.mjs","../../src/utils/output.ts","../../src/utils/formatter.ts","../../src/utils/ui.ts","../../src/commands/init.ts","../../src/skill/installer.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/commands/login.ts","../../../../node_modules/.pnpm/open@10.2.0/node_modules/open/index.js","../../../../node_modules/.pnpm/wsl-utils@0.1.0/node_modules/wsl-utils/index.js","../../../../node_modules/.pnpm/is-wsl@3.1.0/node_modules/is-wsl/index.js","../../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js","../../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js","../../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js","../../../../node_modules/.pnpm/default-browser@5.4.0/node_modules/default-browser/index.js","../../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/index.js","../../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js","../../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js","../../../../node_modules/.pnpm/default-browser@5.4.0/node_modules/default-browser/windows.js","../../src/api/client.ts","../../src/utils/errors.ts","../../src/commands/logout.ts","../../src/commands/status.ts","../../src/commands/whoami.ts","../../src/commands/upgrade.ts","../../src/commands/config.ts","../../src/commands/builder/index.ts","../../src/commands/builder/start.ts","../../src/builder/store.ts","../../src/builder/schema.ts","../../src/commands/builder/status.ts","../../src/builder/graph.ts","../../src/commands/builder/add-node.ts","../../src/builder/ops.ts","../../src/builder/state.ts","../../src/commands/builder/update-node.ts","../../src/commands/builder/remove-node.ts","../../src/commands/builder/connect.ts","../../src/commands/builder/disconnect.ts","../../src/commands/builder/graph.ts","../../src/commands/builder/validate.ts","../../src/builder/validate.ts","../../src/commands/builder/commit.ts","../../src/builder/commit.ts","../../src/commands/builder/abort.ts","../../src/commands/workflow/index.ts","../../src/commands/workflow/create.ts","../../src/commands/workflow/generate.ts","../../src/commands/workflow/list.ts","../../src/commands/workflow/get.ts","../../src/commands/workflow/edit.ts","../../src/commands/workflow/delete.ts","../../src/commands/workflow/run.ts","../../src/commands/workflow/run-detail.ts","../../src/commands/workflow/run-node.ts","../../src/commands/workflow/run-toolcalls.ts","../../src/commands/workflow/abort.ts","../../src/commands/workflow/status.ts","../../src/commands/workflow/toolset-keys.ts","../../src/commands/workflow/layout.ts","../../src/commands/node/index.ts","../../src/commands/node/types.ts","../../src/commands/node/run.ts","../../src/commands/node/result.ts","../../src/commands/tool/index.ts","../../src/commands/tool/calls.ts","../../src/commands/tool/get.ts","../../src/commands/file/index.ts","../../src/commands/file/list.ts","../../src/commands/file/get.ts","../../src/commands/file/download.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 * CommanderError class\n */\nclass CommanderError extends Error {\n /**\n * Constructs the CommanderError class\n * @param {number} exitCode suggested exit code which could be used with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n */\n constructor(exitCode, code, message) {\n super(message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n this.code = code;\n this.exitCode = exitCode;\n this.nestedError = undefined;\n }\n}\n\n/**\n * InvalidArgumentError class\n */\nclass InvalidArgumentError extends CommanderError {\n /**\n * Constructs the InvalidArgumentError class\n * @param {string} [message] explanation of why argument is invalid\n */\n constructor(message) {\n super(1, 'commander.invalidArgument', message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Argument {\n /**\n * Initialize a new command argument with the given name and description.\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @param {string} name\n * @param {string} [description]\n */\n\n constructor(name, description) {\n this.description = description || '';\n this.variadic = false;\n this.parseArg = undefined;\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.argChoices = undefined;\n\n switch (name[0]) {\n case '<': // e.g. <required>\n this.required = true;\n this._name = name.slice(1, -1);\n break;\n case '[': // e.g. [optional]\n this.required = false;\n this._name = name.slice(1, -1);\n break;\n default:\n this.required = true;\n this._name = name;\n break;\n }\n\n if (this._name.length > 3 && this._name.slice(-3) === '...') {\n this.variadic = true;\n this._name = this._name.slice(0, -3);\n }\n }\n\n /**\n * Return argument name.\n *\n * @return {string}\n */\n\n name() {\n return this._name;\n }\n\n /**\n * @package\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Argument}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI command arguments into argument values.\n *\n * @param {Function} [fn]\n * @return {Argument}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Only allow argument value to be one of choices.\n *\n * @param {string[]} values\n * @return {Argument}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(\n `Allowed choices are ${this.argChoices.join(', ')}.`,\n );\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Make argument required.\n *\n * @returns {Argument}\n */\n argRequired() {\n this.required = true;\n return this;\n }\n\n /**\n * Make argument optional.\n *\n * @returns {Argument}\n */\n argOptional() {\n this.required = false;\n return this;\n }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @private\n */\n\nfunction humanReadableArgName(arg) {\n const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n","const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n constructor() {\n this.helpWidth = undefined;\n this.sortSubcommands = false;\n this.sortOptions = false;\n this.showGlobalOptions = false;\n }\n\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n *\n * @param {Command} cmd\n * @returns {Command[]}\n */\n\n visibleCommands(cmd) {\n const visibleCommands = cmd.commands.filter((cmd) => !cmd._hidden);\n const helpCommand = cmd._getHelpCommand();\n if (helpCommand && !helpCommand._hidden) {\n visibleCommands.push(helpCommand);\n }\n if (this.sortSubcommands) {\n visibleCommands.sort((a, b) => {\n // @ts-ignore: because overloaded return type\n return a.name().localeCompare(b.name());\n });\n }\n return visibleCommands;\n }\n\n /**\n * Compare options for sort.\n *\n * @param {Option} a\n * @param {Option} b\n * @returns {number}\n */\n compareOptions(a, b) {\n const getSortKey = (option) => {\n // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n return option.short\n ? option.short.replace(/^-/, '')\n : option.long.replace(/^--/, '');\n };\n return getSortKey(a).localeCompare(getSortKey(b));\n }\n\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleOptions(cmd) {\n const visibleOptions = cmd.options.filter((option) => !option.hidden);\n // Built-in help option.\n const helpOption = cmd._getHelpOption();\n if (helpOption && !helpOption.hidden) {\n // Automatically hide conflicting flags. Bit dubious but a historical behaviour that is convenient for single-command programs.\n const removeShort = helpOption.short && cmd._findOption(helpOption.short);\n const removeLong = helpOption.long && cmd._findOption(helpOption.long);\n if (!removeShort && !removeLong) {\n visibleOptions.push(helpOption); // no changes needed\n } else if (helpOption.long && !removeLong) {\n visibleOptions.push(\n cmd.createOption(helpOption.long, helpOption.description),\n );\n } else if (helpOption.short && !removeShort) {\n visibleOptions.push(\n cmd.createOption(helpOption.short, helpOption.description),\n );\n }\n }\n if (this.sortOptions) {\n visibleOptions.sort(this.compareOptions);\n }\n return visibleOptions;\n }\n\n /**\n * Get an array of the visible global options. (Not including help.)\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleGlobalOptions(cmd) {\n if (!this.showGlobalOptions) return [];\n\n const globalOptions = [];\n for (\n let ancestorCmd = cmd.parent;\n ancestorCmd;\n ancestorCmd = ancestorCmd.parent\n ) {\n const visibleOptions = ancestorCmd.options.filter(\n (option) => !option.hidden,\n );\n globalOptions.push(...visibleOptions);\n }\n if (this.sortOptions) {\n globalOptions.sort(this.compareOptions);\n }\n return globalOptions;\n }\n\n /**\n * Get an array of the arguments if any have a description.\n *\n * @param {Command} cmd\n * @returns {Argument[]}\n */\n\n visibleArguments(cmd) {\n // Side effect! Apply the legacy descriptions before the arguments are displayed.\n if (cmd._argsDescription) {\n cmd.registeredArguments.forEach((argument) => {\n argument.description =\n argument.description || cmd._argsDescription[argument.name()] || '';\n });\n }\n\n // If there are any arguments with a description then return all the arguments.\n if (cmd.registeredArguments.find((argument) => argument.description)) {\n return cmd.registeredArguments;\n }\n return [];\n }\n\n /**\n * Get the command term to show in the list of subcommands.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandTerm(cmd) {\n // Legacy. Ignores custom usage string, and nested commands.\n const args = cmd.registeredArguments\n .map((arg) => humanReadableArgName(arg))\n .join(' ');\n return (\n cmd._name +\n (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n (args ? ' ' + args : '')\n );\n }\n\n /**\n * Get the option term to show in the list of options.\n *\n * @param {Option} option\n * @returns {string}\n */\n\n optionTerm(option) {\n return option.flags;\n }\n\n /**\n * Get the argument term to show in the list of arguments.\n *\n * @param {Argument} argument\n * @returns {string}\n */\n\n argumentTerm(argument) {\n return argument.name();\n }\n\n /**\n * Get the longest command term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestSubcommandTermLength(cmd, helper) {\n return helper.visibleCommands(cmd).reduce((max, command) => {\n return Math.max(max, helper.subcommandTerm(command).length);\n }, 0);\n }\n\n /**\n * Get the longest option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestOptionTermLength(cmd, helper) {\n return helper.visibleOptions(cmd).reduce((max, option) => {\n return Math.max(max, helper.optionTerm(option).length);\n }, 0);\n }\n\n /**\n * Get the longest global option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestGlobalOptionTermLength(cmd, helper) {\n return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n return Math.max(max, helper.optionTerm(option).length);\n }, 0);\n }\n\n /**\n * Get the longest argument term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestArgumentTermLength(cmd, helper) {\n return helper.visibleArguments(cmd).reduce((max, argument) => {\n return Math.max(max, helper.argumentTerm(argument).length);\n }, 0);\n }\n\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandUsage(cmd) {\n // Usage\n let cmdName = cmd._name;\n if (cmd._aliases[0]) {\n cmdName = cmdName + '|' + cmd._aliases[0];\n }\n let ancestorCmdNames = '';\n for (\n let ancestorCmd = cmd.parent;\n ancestorCmd;\n ancestorCmd = ancestorCmd.parent\n ) {\n ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n }\n return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n }\n\n /**\n * Get the description for the command.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandDescription(cmd) {\n // @ts-ignore: because overloaded return type\n return cmd.description();\n }\n\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandDescription(cmd) {\n // @ts-ignore: because overloaded return type\n return cmd.summary() || cmd.description();\n }\n\n /**\n * Get the option description to show in the list of options.\n *\n * @param {Option} option\n * @return {string}\n */\n\n optionDescription(option) {\n const extraInfo = [];\n\n if (option.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n );\n }\n if (option.defaultValue !== undefined) {\n // default for boolean and negated more for programmer than end user,\n // but show true/false for boolean option as may be for hand-rolled env or config processing.\n const showDefault =\n option.required ||\n option.optional ||\n (option.isBoolean() && typeof option.defaultValue === 'boolean');\n if (showDefault) {\n extraInfo.push(\n `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`,\n );\n }\n }\n // preset for boolean and negated are more for programmer than end user\n if (option.presetArg !== undefined && option.optional) {\n extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n }\n if (option.envVar !== undefined) {\n extraInfo.push(`env: ${option.envVar}`);\n }\n if (extraInfo.length > 0) {\n return `${option.description} (${extraInfo.join(', ')})`;\n }\n\n return option.description;\n }\n\n /**\n * Get the argument description to show in the list of arguments.\n *\n * @param {Argument} argument\n * @return {string}\n */\n\n argumentDescription(argument) {\n const extraInfo = [];\n if (argument.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n );\n }\n if (argument.defaultValue !== undefined) {\n extraInfo.push(\n `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`,\n );\n }\n if (extraInfo.length > 0) {\n const extraDescripton = `(${extraInfo.join(', ')})`;\n if (argument.description) {\n return `${argument.description} ${extraDescripton}`;\n }\n return extraDescripton;\n }\n return argument.description;\n }\n\n /**\n * Generate the built-in help text.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {string}\n */\n\n formatHelp(cmd, helper) {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth || 80;\n const itemIndentWidth = 2;\n const itemSeparatorWidth = 2; // between term and description\n function formatItem(term, description) {\n if (description) {\n const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;\n return helper.wrap(\n fullText,\n helpWidth - itemIndentWidth,\n termWidth + itemSeparatorWidth,\n );\n }\n return term;\n }\n function formatList(textArray) {\n return textArray.join('\\n').replace(/^/gm, ' '.repeat(itemIndentWidth));\n }\n\n // Usage\n let output = [`Usage: ${helper.commandUsage(cmd)}`, ''];\n\n // Description\n const commandDescription = helper.commandDescription(cmd);\n if (commandDescription.length > 0) {\n output = output.concat([\n helper.wrap(commandDescription, helpWidth, 0),\n '',\n ]);\n }\n\n // Arguments\n const argumentList = helper.visibleArguments(cmd).map((argument) => {\n return formatItem(\n helper.argumentTerm(argument),\n helper.argumentDescription(argument),\n );\n });\n if (argumentList.length > 0) {\n output = output.concat(['Arguments:', formatList(argumentList), '']);\n }\n\n // Options\n const optionList = helper.visibleOptions(cmd).map((option) => {\n return formatItem(\n helper.optionTerm(option),\n helper.optionDescription(option),\n );\n });\n if (optionList.length > 0) {\n output = output.concat(['Options:', formatList(optionList), '']);\n }\n\n if (this.showGlobalOptions) {\n const globalOptionList = helper\n .visibleGlobalOptions(cmd)\n .map((option) => {\n return formatItem(\n helper.optionTerm(option),\n helper.optionDescription(option),\n );\n });\n if (globalOptionList.length > 0) {\n output = output.concat([\n 'Global Options:',\n formatList(globalOptionList),\n '',\n ]);\n }\n }\n\n // Commands\n const commandList = helper.visibleCommands(cmd).map((cmd) => {\n return formatItem(\n helper.subcommandTerm(cmd),\n helper.subcommandDescription(cmd),\n );\n });\n if (commandList.length > 0) {\n output = output.concat(['Commands:', formatList(commandList), '']);\n }\n\n return output.join('\\n');\n }\n\n /**\n * Calculate the pad width from the maximum term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n padWidth(cmd, helper) {\n return Math.max(\n helper.longestOptionTermLength(cmd, helper),\n helper.longestGlobalOptionTermLength(cmd, helper),\n helper.longestSubcommandTermLength(cmd, helper),\n helper.longestArgumentTermLength(cmd, helper),\n );\n }\n\n /**\n * Wrap the given string to width characters per line, with lines after the first indented.\n * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted.\n *\n * @param {string} str\n * @param {number} width\n * @param {number} indent\n * @param {number} [minColumnWidth=40]\n * @return {string}\n *\n */\n\n wrap(str, width, indent, minColumnWidth = 40) {\n // Full \\s characters, minus the linefeeds.\n const indents =\n ' \\\\f\\\\t\\\\v\\u00a0\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff';\n // Detect manually wrapped and indented strings by searching for line break followed by spaces.\n const manualIndent = new RegExp(`[\\\\n][${indents}]+`);\n if (str.match(manualIndent)) return str;\n // Do not wrap if not enough room for a wrapped column of text (as could end up with a word per line).\n const columnWidth = width - indent;\n if (columnWidth < minColumnWidth) return str;\n\n const leadingStr = str.slice(0, indent);\n const columnText = str.slice(indent).replace('\\r\\n', '\\n');\n const indentString = ' '.repeat(indent);\n const zeroWidthSpace = '\\u200B';\n const breaks = `\\\\s${zeroWidthSpace}`;\n // Match line end (so empty lines don't collapse),\n // or as much text as will fit in column, or excess text up to first break.\n const regex = new RegExp(\n `\\n|.{1,${columnWidth - 1}}([${breaks}]|$)|[^${breaks}]+?([${breaks}]|$)`,\n 'g',\n );\n const lines = columnText.match(regex) || [];\n return (\n leadingStr +\n lines\n .map((line, i) => {\n if (line === '\\n') return ''; // preserve empty lines\n return (i > 0 ? indentString : '') + line.trimEnd();\n })\n .join('\\n')\n );\n }\n}\n\nexports.Help = Help;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Option {\n /**\n * Initialize a new `Option` with the given `flags` and `description`.\n *\n * @param {string} flags\n * @param {string} [description]\n */\n\n constructor(flags, description) {\n this.flags = flags;\n this.description = description || '';\n\n this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n this.optional = flags.includes('['); // A value is optional when the option is specified.\n // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n const optionFlags = splitOptionFlags(flags);\n this.short = optionFlags.shortFlag;\n this.long = optionFlags.longFlag;\n this.negate = false;\n if (this.long) {\n this.negate = this.long.startsWith('--no-');\n }\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.presetArg = undefined;\n this.envVar = undefined;\n this.parseArg = undefined;\n this.hidden = false;\n this.argChoices = undefined;\n this.conflictsWith = [];\n this.implied = undefined;\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Option}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n * The custom processing (parseArg) is called.\n *\n * @example\n * new Option('--color').default('GREYSCALE').preset('RGB');\n * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n *\n * @param {*} arg\n * @return {Option}\n */\n\n preset(arg) {\n this.presetArg = arg;\n return this;\n }\n\n /**\n * Add option name(s) that conflict with this option.\n * An error will be displayed if conflicting options are found during parsing.\n *\n * @example\n * new Option('--rgb').conflicts('cmyk');\n * new Option('--js').conflicts(['ts', 'jsx']);\n *\n * @param {(string | string[])} names\n * @return {Option}\n */\n\n conflicts(names) {\n this.conflictsWith = this.conflictsWith.concat(names);\n return this;\n }\n\n /**\n * Specify implied option values for when this option is set and the implied options are not.\n *\n * The custom processing (parseArg) is not called on the implied values.\n *\n * @example\n * program\n * .addOption(new Option('--log', 'write logging information to file'))\n * .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n *\n * @param {object} impliedOptionValues\n * @return {Option}\n */\n implies(impliedOptionValues) {\n let newImplied = impliedOptionValues;\n if (typeof impliedOptionValues === 'string') {\n // string is not documented, but easy mistake and we can do what user probably intended.\n newImplied = { [impliedOptionValues]: true };\n }\n this.implied = Object.assign(this.implied || {}, newImplied);\n return this;\n }\n\n /**\n * Set environment variable to check for option value.\n *\n * An environment variable is only used if when processed the current option value is\n * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n *\n * @param {string} name\n * @return {Option}\n */\n\n env(name) {\n this.envVar = name;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI option arguments into option values.\n *\n * @param {Function} [fn]\n * @return {Option}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Whether the option is mandatory and must have a value after parsing.\n *\n * @param {boolean} [mandatory=true]\n * @return {Option}\n */\n\n makeOptionMandatory(mandatory = true) {\n this.mandatory = !!mandatory;\n return this;\n }\n\n /**\n * Hide option in help.\n *\n * @param {boolean} [hide=true]\n * @return {Option}\n */\n\n hideHelp(hide = true) {\n this.hidden = !!hide;\n return this;\n }\n\n /**\n * @package\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Only allow option value to be one of choices.\n *\n * @param {string[]} values\n * @return {Option}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(\n `Allowed choices are ${this.argChoices.join(', ')}.`,\n );\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Return option name.\n *\n * @return {string}\n */\n\n name() {\n if (this.long) {\n return this.long.replace(/^--/, '');\n }\n return this.short.replace(/^-/, '');\n }\n\n /**\n * Return option name, in a camelcase format that can be used\n * as a object attribute key.\n *\n * @return {string}\n */\n\n attributeName() {\n return camelcase(this.name().replace(/^no-/, ''));\n }\n\n /**\n * Check if `arg` matches the short or long flag.\n *\n * @param {string} arg\n * @return {boolean}\n * @package\n */\n\n is(arg) {\n return this.short === arg || this.long === arg;\n }\n\n /**\n * Return whether a boolean option.\n *\n * Options are one of boolean, negated, required argument, or optional argument.\n *\n * @return {boolean}\n * @package\n */\n\n isBoolean() {\n return !this.required && !this.optional && !this.negate;\n }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nclass DualOptions {\n /**\n * @param {Option[]} options\n */\n constructor(options) {\n this.positiveOptions = new Map();\n this.negativeOptions = new Map();\n this.dualOptions = new Set();\n options.forEach((option) => {\n if (option.negate) {\n this.negativeOptions.set(option.attributeName(), option);\n } else {\n this.positiveOptions.set(option.attributeName(), option);\n }\n });\n this.negativeOptions.forEach((value, key) => {\n if (this.positiveOptions.has(key)) {\n this.dualOptions.add(key);\n }\n });\n }\n\n /**\n * Did the value come from the option, and not from possible matching dual option?\n *\n * @param {*} value\n * @param {Option} option\n * @returns {boolean}\n */\n valueFromOption(value, option) {\n const optionKey = option.attributeName();\n if (!this.dualOptions.has(optionKey)) return true;\n\n // Use the value to deduce if (probably) came from the option.\n const preset = this.negativeOptions.get(optionKey).presetArg;\n const negativeValue = preset !== undefined ? preset : false;\n return option.negate === (negativeValue === value);\n }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction camelcase(str) {\n return str.split('-').reduce((str, word) => {\n return str + word[0].toUpperCase() + word.slice(1);\n });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @private\n */\n\nfunction splitOptionFlags(flags) {\n let shortFlag;\n let longFlag;\n // Use original very loose parsing to maintain backwards compatibility for now,\n // which allowed for example unintended `-sw, --short-word` [sic].\n const flagParts = flags.split(/[ |,]+/);\n if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1]))\n shortFlag = flagParts.shift();\n longFlag = flagParts.shift();\n // Add support for lone short flag without significantly changing parsing!\n if (!shortFlag && /^-[^-]$/.test(longFlag)) {\n shortFlag = longFlag;\n longFlag = undefined;\n }\n return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.DualOptions = DualOptions;\n","const maxDistance = 3;\n\nfunction editDistance(a, b) {\n // https://en.wikipedia.org/wiki/Damerau–Levenshtein_distance\n // Calculating optimal string alignment distance, no substring is edited more than once.\n // (Simple implementation.)\n\n // Quick early exit, return worst case.\n if (Math.abs(a.length - b.length) > maxDistance)\n return Math.max(a.length, b.length);\n\n // distance between prefix substrings of a and b\n const d = [];\n\n // pure deletions turn a into empty string\n for (let i = 0; i <= a.length; i++) {\n d[i] = [i];\n }\n // pure insertions turn empty string into b\n for (let j = 0; j <= b.length; j++) {\n d[0][j] = j;\n }\n\n // fill matrix\n for (let j = 1; j <= b.length; j++) {\n for (let i = 1; i <= a.length; i++) {\n let cost = 1;\n if (a[i - 1] === b[j - 1]) {\n cost = 0;\n } else {\n cost = 1;\n }\n d[i][j] = Math.min(\n d[i - 1][j] + 1, // deletion\n d[i][j - 1] + 1, // insertion\n d[i - 1][j - 1] + cost, // substitution\n );\n // transposition\n if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n }\n }\n }\n\n return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n if (!candidates || candidates.length === 0) return '';\n // remove possible duplicates\n candidates = Array.from(new Set(candidates));\n\n const searchingOptions = word.startsWith('--');\n if (searchingOptions) {\n word = word.slice(2);\n candidates = candidates.map((candidate) => candidate.slice(2));\n }\n\n let similar = [];\n let bestDistance = maxDistance;\n const minSimilarity = 0.4;\n candidates.forEach((candidate) => {\n if (candidate.length <= 1) return; // no one character guesses\n\n const distance = editDistance(word, candidate);\n const length = Math.max(word.length, candidate.length);\n const similarity = (length - distance) / length;\n if (similarity > minSimilarity) {\n if (distance < bestDistance) {\n // better edit distance, throw away previous worse matches\n bestDistance = distance;\n similar = [candidate];\n } else if (distance === bestDistance) {\n similar.push(candidate);\n }\n }\n });\n\n similar.sort((a, b) => a.localeCompare(b));\n if (searchingOptions) {\n similar = similar.map((candidate) => `--${candidate}`);\n }\n\n if (similar.length > 1) {\n return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n }\n if (similar.length === 1) {\n return `\\n(Did you mean ${similar[0]}?)`;\n }\n return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n","const EventEmitter = require('node:events').EventEmitter;\nconst childProcess = require('node:child_process');\nconst path = require('node:path');\nconst fs = require('node:fs');\nconst process = require('node:process');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help } = require('./help.js');\nconst { Option, DualOptions } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\nclass Command extends EventEmitter {\n /**\n * Initialize a new `Command`.\n *\n * @param {string} [name]\n */\n\n constructor(name) {\n super();\n /** @type {Command[]} */\n this.commands = [];\n /** @type {Option[]} */\n this.options = [];\n this.parent = null;\n this._allowUnknownOption = false;\n this._allowExcessArguments = true;\n /** @type {Argument[]} */\n this.registeredArguments = [];\n this._args = this.registeredArguments; // deprecated old name\n /** @type {string[]} */\n this.args = []; // cli args with options removed\n this.rawArgs = [];\n this.processedArgs = []; // like .args but after custom processing and collecting variadic\n this._scriptPath = null;\n this._name = name || '';\n this._optionValues = {};\n this._optionValueSources = {}; // default, env, cli etc\n this._storeOptionsAsProperties = false;\n this._actionHandler = null;\n this._executableHandler = false;\n this._executableFile = null; // custom name for executable\n this._executableDir = null; // custom search directory for subcommands\n this._defaultCommandName = null;\n this._exitCallback = null;\n this._aliases = [];\n this._combineFlagAndOptionalValue = true;\n this._description = '';\n this._summary = '';\n this._argsDescription = undefined; // legacy\n this._enablePositionalOptions = false;\n this._passThroughOptions = false;\n this._lifeCycleHooks = {}; // a hash of arrays\n /** @type {(boolean | string)} */\n this._showHelpAfterError = false;\n this._showSuggestionAfterError = true;\n\n // see .configureOutput() for docs\n this._outputConfiguration = {\n writeOut: (str) => process.stdout.write(str),\n writeErr: (str) => process.stderr.write(str),\n getOutHelpWidth: () =>\n process.stdout.isTTY ? process.stdout.columns : undefined,\n getErrHelpWidth: () =>\n process.stderr.isTTY ? process.stderr.columns : undefined,\n outputError: (str, write) => write(str),\n };\n\n this._hidden = false;\n /** @type {(Option | null | undefined)} */\n this._helpOption = undefined; // Lazy created on demand. May be null if help option is disabled.\n this._addImplicitHelpCommand = undefined; // undecided whether true or false yet, not inherited\n /** @type {Command} */\n this._helpCommand = undefined; // lazy initialised, inherited\n this._helpConfiguration = {};\n }\n\n /**\n * Copy settings that are useful to have in common across root command and subcommands.\n *\n * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n *\n * @param {Command} sourceCommand\n * @return {Command} `this` command for chaining\n */\n copyInheritedSettings(sourceCommand) {\n this._outputConfiguration = sourceCommand._outputConfiguration;\n this._helpOption = sourceCommand._helpOption;\n this._helpCommand = sourceCommand._helpCommand;\n this._helpConfiguration = sourceCommand._helpConfiguration;\n this._exitCallback = sourceCommand._exitCallback;\n this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n this._combineFlagAndOptionalValue =\n sourceCommand._combineFlagAndOptionalValue;\n this._allowExcessArguments = sourceCommand._allowExcessArguments;\n this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n this._showHelpAfterError = sourceCommand._showHelpAfterError;\n this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n return this;\n }\n\n /**\n * @returns {Command[]}\n * @private\n */\n\n _getCommandAndAncestors() {\n const result = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n for (let command = this; command; command = command.parent) {\n result.push(command);\n }\n return result;\n }\n\n /**\n * Define a command.\n *\n * There are two styles of command: pay attention to where to put the description.\n *\n * @example\n * // Command implemented using action handler (description is supplied separately to `.command`)\n * program\n * .command('clone <source> [destination]')\n * .description('clone a repository into a newly created directory')\n * .action((source, destination) => {\n * console.log('clone command called');\n * });\n *\n * // Command implemented using separate executable file (description is second parameter to `.command`)\n * program\n * .command('start <service>', 'start named service')\n * .command('stop [service]', 'stop named service, or all if no name supplied');\n *\n * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n * @param {(object | string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n * @param {object} [execOpts] - configuration options (for executable)\n * @return {Command} returns new command for action handler, or `this` for executable command\n */\n\n command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n let desc = actionOptsOrExecDesc;\n let opts = execOpts;\n if (typeof desc === 'object' && desc !== null) {\n opts = desc;\n desc = null;\n }\n opts = opts || {};\n const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n const cmd = this.createCommand(name);\n if (desc) {\n cmd.description(desc);\n cmd._executableHandler = true;\n }\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n if (args) cmd.arguments(args);\n this._registerCommand(cmd);\n cmd.parent = this;\n cmd.copyInheritedSettings(this);\n\n if (desc) return this;\n return cmd;\n }\n\n /**\n * Factory routine to create a new unattached command.\n *\n * See .command() for creating an attached subcommand, which uses this routine to\n * create the command. You can override createCommand to customise subcommands.\n *\n * @param {string} [name]\n * @return {Command} new command\n */\n\n createCommand(name) {\n return new Command(name);\n }\n\n /**\n * You can customise the help with a subclass of Help by overriding createHelp,\n * or by overriding Help properties using configureHelp().\n *\n * @return {Help}\n */\n\n createHelp() {\n return Object.assign(new Help(), this.configureHelp());\n }\n\n /**\n * You can customise the help by overriding Help properties using configureHelp(),\n * or with a subclass of Help by overriding createHelp().\n *\n * @param {object} [configuration] - configuration options\n * @return {(Command | object)} `this` command for chaining, or stored configuration\n */\n\n configureHelp(configuration) {\n if (configuration === undefined) return this._helpConfiguration;\n\n this._helpConfiguration = configuration;\n return this;\n }\n\n /**\n * The default output goes to stdout and stderr. You can customise this for special\n * applications. You can also customise the display of errors by overriding outputError.\n *\n * The configuration properties are all functions:\n *\n * // functions to change where being written, stdout and stderr\n * writeOut(str)\n * writeErr(str)\n * // matching functions to specify width for wrapping help\n * getOutHelpWidth()\n * getErrHelpWidth()\n * // functions based on what is being written out\n * outputError(str, write) // used for displaying errors, and not used for displaying help\n *\n * @param {object} [configuration] - configuration options\n * @return {(Command | object)} `this` command for chaining, or stored configuration\n */\n\n configureOutput(configuration) {\n if (configuration === undefined) return this._outputConfiguration;\n\n Object.assign(this._outputConfiguration, configuration);\n return this;\n }\n\n /**\n * Display the help or a custom message after an error occurs.\n *\n * @param {(boolean|string)} [displayHelp]\n * @return {Command} `this` command for chaining\n */\n showHelpAfterError(displayHelp = true) {\n if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n this._showHelpAfterError = displayHelp;\n return this;\n }\n\n /**\n * Display suggestion of similar commands for unknown commands, or options for unknown options.\n *\n * @param {boolean} [displaySuggestion]\n * @return {Command} `this` command for chaining\n */\n showSuggestionAfterError(displaySuggestion = true) {\n this._showSuggestionAfterError = !!displaySuggestion;\n return this;\n }\n\n /**\n * Add a prepared subcommand.\n *\n * See .command() for creating an attached subcommand which inherits settings from its parent.\n *\n * @param {Command} cmd - new subcommand\n * @param {object} [opts] - configuration options\n * @return {Command} `this` command for chaining\n */\n\n addCommand(cmd, opts) {\n if (!cmd._name) {\n throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n }\n\n opts = opts || {};\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n this._registerCommand(cmd);\n cmd.parent = this;\n cmd._checkForBrokenPassThrough();\n\n return this;\n }\n\n /**\n * Factory routine to create a new unattached argument.\n *\n * See .argument() for creating an attached argument, which uses this routine to\n * create the argument. You can override createArgument to return a custom argument.\n *\n * @param {string} name\n * @param {string} [description]\n * @return {Argument} new argument\n */\n\n createArgument(name, description) {\n return new Argument(name, description);\n }\n\n /**\n * Define argument syntax for command.\n *\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @example\n * program.argument('<input-file>');\n * program.argument('[output-file]');\n *\n * @param {string} name\n * @param {string} [description]\n * @param {(Function|*)} [fn] - custom argument processing function\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n argument(name, description, fn, defaultValue) {\n const argument = this.createArgument(name, description);\n if (typeof fn === 'function') {\n argument.default(defaultValue).argParser(fn);\n } else {\n argument.default(fn);\n }\n this.addArgument(argument);\n return this;\n }\n\n /**\n * Define argument syntax for command, adding multiple at once (without descriptions).\n *\n * See also .argument().\n *\n * @example\n * program.arguments('<cmd> [env]');\n *\n * @param {string} names\n * @return {Command} `this` command for chaining\n */\n\n arguments(names) {\n names\n .trim()\n .split(/ +/)\n .forEach((detail) => {\n this.argument(detail);\n });\n return this;\n }\n\n /**\n * Define argument syntax for command, adding a prepared argument.\n *\n * @param {Argument} argument\n * @return {Command} `this` command for chaining\n */\n addArgument(argument) {\n const previousArgument = this.registeredArguments.slice(-1)[0];\n if (previousArgument && previousArgument.variadic) {\n throw new Error(\n `only the last argument can be variadic '${previousArgument.name()}'`,\n );\n }\n if (\n argument.required &&\n argument.defaultValue !== undefined &&\n argument.parseArg === undefined\n ) {\n throw new Error(\n `a default value for a required argument is never used: '${argument.name()}'`,\n );\n }\n this.registeredArguments.push(argument);\n return this;\n }\n\n /**\n * Customise or override default help command. By default a help command is automatically added if your command has subcommands.\n *\n * @example\n * program.helpCommand('help [cmd]');\n * program.helpCommand('help [cmd]', 'show help');\n * program.helpCommand(false); // suppress default help command\n * program.helpCommand(true); // add help command even if no subcommands\n *\n * @param {string|boolean} enableOrNameAndArgs - enable with custom name and/or arguments, or boolean to override whether added\n * @param {string} [description] - custom description\n * @return {Command} `this` command for chaining\n */\n\n helpCommand(enableOrNameAndArgs, description) {\n if (typeof enableOrNameAndArgs === 'boolean') {\n this._addImplicitHelpCommand = enableOrNameAndArgs;\n return this;\n }\n\n enableOrNameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n const [, helpName, helpArgs] = enableOrNameAndArgs.match(/([^ ]+) *(.*)/);\n const helpDescription = description ?? 'display help for command';\n\n const helpCommand = this.createCommand(helpName);\n helpCommand.helpOption(false);\n if (helpArgs) helpCommand.arguments(helpArgs);\n if (helpDescription) helpCommand.description(helpDescription);\n\n this._addImplicitHelpCommand = true;\n this._helpCommand = helpCommand;\n\n return this;\n }\n\n /**\n * Add prepared custom help command.\n *\n * @param {(Command|string|boolean)} helpCommand - custom help command, or deprecated enableOrNameAndArgs as for `.helpCommand()`\n * @param {string} [deprecatedDescription] - deprecated custom description used with custom name only\n * @return {Command} `this` command for chaining\n */\n addHelpCommand(helpCommand, deprecatedDescription) {\n // If not passed an object, call through to helpCommand for backwards compatibility,\n // as addHelpCommand was originally used like helpCommand is now.\n if (typeof helpCommand !== 'object') {\n this.helpCommand(helpCommand, deprecatedDescription);\n return this;\n }\n\n this._addImplicitHelpCommand = true;\n this._helpCommand = helpCommand;\n return this;\n }\n\n /**\n * Lazy create help command.\n *\n * @return {(Command|null)}\n * @package\n */\n _getHelpCommand() {\n const hasImplicitHelpCommand =\n this._addImplicitHelpCommand ??\n (this.commands.length &&\n !this._actionHandler &&\n !this._findCommand('help'));\n\n if (hasImplicitHelpCommand) {\n if (this._helpCommand === undefined) {\n this.helpCommand(undefined, undefined); // use default name and description\n }\n return this._helpCommand;\n }\n return null;\n }\n\n /**\n * Add hook for life cycle event.\n *\n * @param {string} event\n * @param {Function} listener\n * @return {Command} `this` command for chaining\n */\n\n hook(event, listener) {\n const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n if (!allowedValues.includes(event)) {\n throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n if (this._lifeCycleHooks[event]) {\n this._lifeCycleHooks[event].push(listener);\n } else {\n this._lifeCycleHooks[event] = [listener];\n }\n return this;\n }\n\n /**\n * Register callback to use as replacement for calling process.exit.\n *\n * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n * @return {Command} `this` command for chaining\n */\n\n exitOverride(fn) {\n if (fn) {\n this._exitCallback = fn;\n } else {\n this._exitCallback = (err) => {\n if (err.code !== 'commander.executeSubCommandAsync') {\n throw err;\n } else {\n // Async callback from spawn events, not useful to throw.\n }\n };\n }\n return this;\n }\n\n /**\n * Call process.exit, and _exitCallback if defined.\n *\n * @param {number} exitCode exit code for using with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n * @return never\n * @private\n */\n\n _exit(exitCode, code, message) {\n if (this._exitCallback) {\n this._exitCallback(new CommanderError(exitCode, code, message));\n // Expecting this line is not reached.\n }\n process.exit(exitCode);\n }\n\n /**\n * Register callback `fn` for the command.\n *\n * @example\n * program\n * .command('serve')\n * .description('start service')\n * .action(function() {\n * // do work here\n * });\n *\n * @param {Function} fn\n * @return {Command} `this` command for chaining\n */\n\n action(fn) {\n const listener = (args) => {\n // The .action callback takes an extra parameter which is the command or options.\n const expectedArgsCount = this.registeredArguments.length;\n const actionArgs = args.slice(0, expectedArgsCount);\n if (this._storeOptionsAsProperties) {\n actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n } else {\n actionArgs[expectedArgsCount] = this.opts();\n }\n actionArgs.push(this);\n\n return fn.apply(this, actionArgs);\n };\n this._actionHandler = listener;\n return this;\n }\n\n /**\n * Factory routine to create a new unattached option.\n *\n * See .option() for creating an attached option, which uses this routine to\n * create the option. You can override createOption to return a custom option.\n *\n * @param {string} flags\n * @param {string} [description]\n * @return {Option} new option\n */\n\n createOption(flags, description) {\n return new Option(flags, description);\n }\n\n /**\n * Wrap parseArgs to catch 'commander.invalidArgument'.\n *\n * @param {(Option | Argument)} target\n * @param {string} value\n * @param {*} previous\n * @param {string} invalidArgumentMessage\n * @private\n */\n\n _callParseArg(target, value, previous, invalidArgumentMessage) {\n try {\n return target.parseArg(value, previous);\n } catch (err) {\n if (err.code === 'commander.invalidArgument') {\n const message = `${invalidArgumentMessage} ${err.message}`;\n this.error(message, { exitCode: err.exitCode, code: err.code });\n }\n throw err;\n }\n }\n\n /**\n * Check for option flag conflicts.\n * Register option if no conflicts found, or throw on conflict.\n *\n * @param {Option} option\n * @private\n */\n\n _registerOption(option) {\n const matchingOption =\n (option.short && this._findOption(option.short)) ||\n (option.long && this._findOption(option.long));\n if (matchingOption) {\n const matchingFlag =\n option.long && this._findOption(option.long)\n ? option.long\n : option.short;\n throw new Error(`Cannot add option '${option.flags}'${this._name && ` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'\n- already used by option '${matchingOption.flags}'`);\n }\n\n this.options.push(option);\n }\n\n /**\n * Check for command name and alias conflicts with existing commands.\n * Register command if no conflicts found, or throw on conflict.\n *\n * @param {Command} command\n * @private\n */\n\n _registerCommand(command) {\n const knownBy = (cmd) => {\n return [cmd.name()].concat(cmd.aliases());\n };\n\n const alreadyUsed = knownBy(command).find((name) =>\n this._findCommand(name),\n );\n if (alreadyUsed) {\n const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n const newCmd = knownBy(command).join('|');\n throw new Error(\n `cannot add command '${newCmd}' as already have command '${existingCmd}'`,\n );\n }\n\n this.commands.push(command);\n }\n\n /**\n * Add an option.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addOption(option) {\n this._registerOption(option);\n\n const oname = option.name();\n const name = option.attributeName();\n\n // store default value\n if (option.negate) {\n // --no-foo is special and defaults foo to true, unless a --foo option is already defined\n const positiveLongFlag = option.long.replace(/^--no-/, '--');\n if (!this._findOption(positiveLongFlag)) {\n this.setOptionValueWithSource(\n name,\n option.defaultValue === undefined ? true : option.defaultValue,\n 'default',\n );\n }\n } else if (option.defaultValue !== undefined) {\n this.setOptionValueWithSource(name, option.defaultValue, 'default');\n }\n\n // handler for cli and env supplied values\n const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n // val is null for optional option used without an optional-argument.\n // val is undefined for boolean and negated option.\n if (val == null && option.presetArg !== undefined) {\n val = option.presetArg;\n }\n\n // custom processing\n const oldValue = this.getOptionValue(name);\n if (val !== null && option.parseArg) {\n val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n } else if (val !== null && option.variadic) {\n val = option._concatValue(val, oldValue);\n }\n\n // Fill-in appropriate missing values. Long winded but easy to follow.\n if (val == null) {\n if (option.negate) {\n val = false;\n } else if (option.isBoolean() || option.optional) {\n val = true;\n } else {\n val = ''; // not normal, parseArg might have failed or be a mock function for testing\n }\n }\n this.setOptionValueWithSource(name, val, valueSource);\n };\n\n this.on('option:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'cli');\n });\n\n if (option.envVar) {\n this.on('optionEnv:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'env');\n });\n }\n\n return this;\n }\n\n /**\n * Internal implementation shared by .option() and .requiredOption()\n *\n * @return {Command} `this` command for chaining\n * @private\n */\n _optionEx(config, flags, description, fn, defaultValue) {\n if (typeof flags === 'object' && flags instanceof Option) {\n throw new Error(\n 'To add an Option object use addOption() instead of option() or requiredOption()',\n );\n }\n const option = this.createOption(flags, description);\n option.makeOptionMandatory(!!config.mandatory);\n if (typeof fn === 'function') {\n option.default(defaultValue).argParser(fn);\n } else if (fn instanceof RegExp) {\n // deprecated\n const regex = fn;\n fn = (val, def) => {\n const m = regex.exec(val);\n return m ? m[0] : def;\n };\n option.default(defaultValue).argParser(fn);\n } else {\n option.default(fn);\n }\n\n return this.addOption(option);\n }\n\n /**\n * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n *\n * See the README for more details, and see also addOption() and requiredOption().\n *\n * @example\n * program\n * .option('-p, --pepper', 'add pepper')\n * .option('-p, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n * .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n * .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n option(flags, description, parseArg, defaultValue) {\n return this._optionEx({}, flags, description, parseArg, defaultValue);\n }\n\n /**\n * Add a required option which must have a value after parsing. This usually means\n * the option must be specified on the command line. (Otherwise the same as .option().)\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n requiredOption(flags, description, parseArg, defaultValue) {\n return this._optionEx(\n { mandatory: true },\n flags,\n description,\n parseArg,\n defaultValue,\n );\n }\n\n /**\n * Alter parsing of short flags with optional values.\n *\n * @example\n * // for `.option('-f,--flag [value]'):\n * program.combineFlagAndOptionalValue(true); // `-f80` is treated like `--flag=80`, this is the default behaviour\n * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n *\n * @param {boolean} [combine] - if `true` or omitted, an optional value can be specified directly after the flag.\n * @return {Command} `this` command for chaining\n */\n combineFlagAndOptionalValue(combine = true) {\n this._combineFlagAndOptionalValue = !!combine;\n return this;\n }\n\n /**\n * Allow unknown options on the command line.\n *\n * @param {boolean} [allowUnknown] - if `true` or omitted, no error will be thrown for unknown options.\n * @return {Command} `this` command for chaining\n */\n allowUnknownOption(allowUnknown = true) {\n this._allowUnknownOption = !!allowUnknown;\n return this;\n }\n\n /**\n * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n *\n * @param {boolean} [allowExcess] - if `true` or omitted, no error will be thrown for excess arguments.\n * @return {Command} `this` command for chaining\n */\n allowExcessArguments(allowExcess = true) {\n this._allowExcessArguments = !!allowExcess;\n return this;\n }\n\n /**\n * Enable positional options. Positional means global options are specified before subcommands which lets\n * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n * The default behaviour is non-positional and global options may appear anywhere on the command line.\n *\n * @param {boolean} [positional]\n * @return {Command} `this` command for chaining\n */\n enablePositionalOptions(positional = true) {\n this._enablePositionalOptions = !!positional;\n return this;\n }\n\n /**\n * Pass through options that come after command-arguments rather than treat them as command-options,\n * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n * positional options to have been enabled on the program (parent commands).\n * The default behaviour is non-positional and options may appear before or after command-arguments.\n *\n * @param {boolean} [passThrough] for unknown options.\n * @return {Command} `this` command for chaining\n */\n passThroughOptions(passThrough = true) {\n this._passThroughOptions = !!passThrough;\n this._checkForBrokenPassThrough();\n return this;\n }\n\n /**\n * @private\n */\n\n _checkForBrokenPassThrough() {\n if (\n this.parent &&\n this._passThroughOptions &&\n !this.parent._enablePositionalOptions\n ) {\n throw new Error(\n `passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`,\n );\n }\n }\n\n /**\n * Whether to store option values as properties on command object,\n * or store separately (specify false). In both cases the option values can be accessed using .opts().\n *\n * @param {boolean} [storeAsProperties=true]\n * @return {Command} `this` command for chaining\n */\n\n storeOptionsAsProperties(storeAsProperties = true) {\n if (this.options.length) {\n throw new Error('call .storeOptionsAsProperties() before adding options');\n }\n if (Object.keys(this._optionValues).length) {\n throw new Error(\n 'call .storeOptionsAsProperties() before setting option values',\n );\n }\n this._storeOptionsAsProperties = !!storeAsProperties;\n return this;\n }\n\n /**\n * Retrieve option value.\n *\n * @param {string} key\n * @return {object} value\n */\n\n getOptionValue(key) {\n if (this._storeOptionsAsProperties) {\n return this[key];\n }\n return this._optionValues[key];\n }\n\n /**\n * Store option value.\n *\n * @param {string} key\n * @param {object} value\n * @return {Command} `this` command for chaining\n */\n\n setOptionValue(key, value) {\n return this.setOptionValueWithSource(key, value, undefined);\n }\n\n /**\n * Store option value and where the value came from.\n *\n * @param {string} key\n * @param {object} value\n * @param {string} source - expected values are default/config/env/cli/implied\n * @return {Command} `this` command for chaining\n */\n\n setOptionValueWithSource(key, value, source) {\n if (this._storeOptionsAsProperties) {\n this[key] = value;\n } else {\n this._optionValues[key] = value;\n }\n this._optionValueSources[key] = source;\n return this;\n }\n\n /**\n * Get source of option value.\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSource(key) {\n return this._optionValueSources[key];\n }\n\n /**\n * Get source of option value. See also .optsWithGlobals().\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSourceWithGlobals(key) {\n // global overwrites local, like optsWithGlobals\n let source;\n this._getCommandAndAncestors().forEach((cmd) => {\n if (cmd.getOptionValueSource(key) !== undefined) {\n source = cmd.getOptionValueSource(key);\n }\n });\n return source;\n }\n\n /**\n * Get user arguments from implied or explicit arguments.\n * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n *\n * @private\n */\n\n _prepareUserArgs(argv, parseOptions) {\n if (argv !== undefined && !Array.isArray(argv)) {\n throw new Error('first parameter to parse must be array or undefined');\n }\n parseOptions = parseOptions || {};\n\n // auto-detect argument conventions if nothing supplied\n if (argv === undefined && parseOptions.from === undefined) {\n if (process.versions?.electron) {\n parseOptions.from = 'electron';\n }\n // check node specific options for scenarios where user CLI args follow executable without scriptname\n const execArgv = process.execArgv ?? [];\n if (\n execArgv.includes('-e') ||\n execArgv.includes('--eval') ||\n execArgv.includes('-p') ||\n execArgv.includes('--print')\n ) {\n parseOptions.from = 'eval'; // internal usage, not documented\n }\n }\n\n // default to using process.argv\n if (argv === undefined) {\n argv = process.argv;\n }\n this.rawArgs = argv.slice();\n\n // extract the user args and scriptPath\n let userArgs;\n switch (parseOptions.from) {\n case undefined:\n case 'node':\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n break;\n case 'electron':\n // @ts-ignore: because defaultApp is an unknown property\n if (process.defaultApp) {\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n } else {\n userArgs = argv.slice(1);\n }\n break;\n case 'user':\n userArgs = argv.slice(0);\n break;\n case 'eval':\n userArgs = argv.slice(1);\n break;\n default:\n throw new Error(\n `unexpected parse option { from: '${parseOptions.from}' }`,\n );\n }\n\n // Find default name for program from arguments.\n if (!this._name && this._scriptPath)\n this.nameFromFilename(this._scriptPath);\n this._name = this._name || 'program';\n\n return userArgs;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Use parseAsync instead of parse if any of your action handlers are async.\n *\n * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n *\n * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n * - `'user'`: just user arguments\n *\n * @example\n * program.parse(); // parse process.argv and auto-detect electron and special node flags\n * program.parse(process.argv); // assume argv[0] is app and argv[1] is script\n * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv] - optional, defaults to process.argv\n * @param {object} [parseOptions] - optionally specify style of options with from: node/user/electron\n * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n * @return {Command} `this` command for chaining\n */\n\n parse(argv, parseOptions) {\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n this._parseCommand([], userArgs);\n\n return this;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n *\n * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n * - `'user'`: just user arguments\n *\n * @example\n * await program.parseAsync(); // parse process.argv and auto-detect electron and special node flags\n * await program.parseAsync(process.argv); // assume argv[0] is app and argv[1] is script\n * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv]\n * @param {object} [parseOptions]\n * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n * @return {Promise}\n */\n\n async parseAsync(argv, parseOptions) {\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n await this._parseCommand([], userArgs);\n\n return this;\n }\n\n /**\n * Execute a sub-command executable.\n *\n * @private\n */\n\n _executeSubCommand(subcommand, args) {\n args = args.slice();\n let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n function findFile(baseDir, baseName) {\n // Look for specified file\n const localBin = path.resolve(baseDir, baseName);\n if (fs.existsSync(localBin)) return localBin;\n\n // Stop looking if candidate already has an expected extension.\n if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n // Try all the extensions.\n const foundExt = sourceExt.find((ext) =>\n fs.existsSync(`${localBin}${ext}`),\n );\n if (foundExt) return `${localBin}${foundExt}`;\n\n return undefined;\n }\n\n // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // executableFile and executableDir might be full path, or just a name\n let executableFile =\n subcommand._executableFile || `${this._name}-${subcommand._name}`;\n let executableDir = this._executableDir || '';\n if (this._scriptPath) {\n let resolvedScriptPath; // resolve possible symlink for installed npm binary\n try {\n resolvedScriptPath = fs.realpathSync(this._scriptPath);\n } catch (err) {\n resolvedScriptPath = this._scriptPath;\n }\n executableDir = path.resolve(\n path.dirname(resolvedScriptPath),\n executableDir,\n );\n }\n\n // Look for a local file in preference to a command in PATH.\n if (executableDir) {\n let localFile = findFile(executableDir, executableFile);\n\n // Legacy search using prefix of script name instead of command name\n if (!localFile && !subcommand._executableFile && this._scriptPath) {\n const legacyName = path.basename(\n this._scriptPath,\n path.extname(this._scriptPath),\n );\n if (legacyName !== this._name) {\n localFile = findFile(\n executableDir,\n `${legacyName}-${subcommand._name}`,\n );\n }\n }\n executableFile = localFile || executableFile;\n }\n\n launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n let proc;\n if (process.platform !== 'win32') {\n if (launchWithNode) {\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n } else {\n proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n }\n } else {\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n }\n\n if (!proc.killed) {\n // testing mainly to avoid leak warnings during unit tests with mocked spawn\n const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n signals.forEach((signal) => {\n process.on(signal, () => {\n if (proc.killed === false && proc.exitCode === null) {\n // @ts-ignore because signals not typed to known strings\n proc.kill(signal);\n }\n });\n });\n }\n\n // By default terminate process when spawned process terminates.\n const exitCallback = this._exitCallback;\n proc.on('close', (code) => {\n code = code ?? 1; // code is null if spawned process terminated due to a signal\n if (!exitCallback) {\n process.exit(code);\n } else {\n exitCallback(\n new CommanderError(\n code,\n 'commander.executeSubCommandAsync',\n '(close)',\n ),\n );\n }\n });\n proc.on('error', (err) => {\n // @ts-ignore: because err.code is an unknown property\n if (err.code === 'ENOENT') {\n const executableDirMessage = executableDir\n ? `searched for local subcommand relative to directory '${executableDir}'`\n : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n const executableMissing = `'${executableFile}' does not exist\n - if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n throw new Error(executableMissing);\n // @ts-ignore: because err.code is an unknown property\n } else if (err.code === 'EACCES') {\n throw new Error(`'${executableFile}' not executable`);\n }\n if (!exitCallback) {\n process.exit(1);\n } else {\n const wrappedError = new CommanderError(\n 1,\n 'commander.executeSubCommandAsync',\n '(error)',\n );\n wrappedError.nestedError = err;\n exitCallback(wrappedError);\n }\n });\n\n // Store the reference to the child process\n this.runningCommand = proc;\n }\n\n /**\n * @private\n */\n\n _dispatchSubcommand(commandName, operands, unknown) {\n const subCommand = this._findCommand(commandName);\n if (!subCommand) this.help({ error: true });\n\n let promiseChain;\n promiseChain = this._chainOrCallSubCommandHook(\n promiseChain,\n subCommand,\n 'preSubcommand',\n );\n promiseChain = this._chainOrCall(promiseChain, () => {\n if (subCommand._executableHandler) {\n this._executeSubCommand(subCommand, operands.concat(unknown));\n } else {\n return subCommand._parseCommand(operands, unknown);\n }\n });\n return promiseChain;\n }\n\n /**\n * Invoke help directly if possible, or dispatch if necessary.\n * e.g. help foo\n *\n * @private\n */\n\n _dispatchHelpCommand(subcommandName) {\n if (!subcommandName) {\n this.help();\n }\n const subCommand = this._findCommand(subcommandName);\n if (subCommand && !subCommand._executableHandler) {\n subCommand.help();\n }\n\n // Fallback to parsing the help flag to invoke the help.\n return this._dispatchSubcommand(\n subcommandName,\n [],\n [this._getHelpOption()?.long ?? this._getHelpOption()?.short ?? '--help'],\n );\n }\n\n /**\n * Check this.args against expected this.registeredArguments.\n *\n * @private\n */\n\n _checkNumberOfArguments() {\n // too few\n this.registeredArguments.forEach((arg, i) => {\n if (arg.required && this.args[i] == null) {\n this.missingArgument(arg.name());\n }\n });\n // too many\n if (\n this.registeredArguments.length > 0 &&\n this.registeredArguments[this.registeredArguments.length - 1].variadic\n ) {\n return;\n }\n if (this.args.length > this.registeredArguments.length) {\n this._excessArguments(this.args);\n }\n }\n\n /**\n * Process this.args using this.registeredArguments and save as this.processedArgs!\n *\n * @private\n */\n\n _processArguments() {\n const myParseArg = (argument, value, previous) => {\n // Extra processing for nice error message on parsing failure.\n let parsedValue = value;\n if (value !== null && argument.parseArg) {\n const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n parsedValue = this._callParseArg(\n argument,\n value,\n previous,\n invalidValueMessage,\n );\n }\n return parsedValue;\n };\n\n this._checkNumberOfArguments();\n\n const processedArgs = [];\n this.registeredArguments.forEach((declaredArg, index) => {\n let value = declaredArg.defaultValue;\n if (declaredArg.variadic) {\n // Collect together remaining arguments for passing together as an array.\n if (index < this.args.length) {\n value = this.args.slice(index);\n if (declaredArg.parseArg) {\n value = value.reduce((processed, v) => {\n return myParseArg(declaredArg, v, processed);\n }, declaredArg.defaultValue);\n }\n } else if (value === undefined) {\n value = [];\n }\n } else if (index < this.args.length) {\n value = this.args[index];\n if (declaredArg.parseArg) {\n value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n }\n }\n processedArgs[index] = value;\n });\n this.processedArgs = processedArgs;\n }\n\n /**\n * Once we have a promise we chain, but call synchronously until then.\n *\n * @param {(Promise|undefined)} promise\n * @param {Function} fn\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCall(promise, fn) {\n // thenable\n if (promise && promise.then && typeof promise.then === 'function') {\n // already have a promise, chain callback\n return promise.then(() => fn());\n }\n // callback might return a promise\n return fn();\n }\n\n /**\n *\n * @param {(Promise|undefined)} promise\n * @param {string} event\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCallHooks(promise, event) {\n let result = promise;\n const hooks = [];\n this._getCommandAndAncestors()\n .reverse()\n .filter((cmd) => cmd._lifeCycleHooks[event] !== undefined)\n .forEach((hookedCommand) => {\n hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n hooks.push({ hookedCommand, callback });\n });\n });\n if (event === 'postAction') {\n hooks.reverse();\n }\n\n hooks.forEach((hookDetail) => {\n result = this._chainOrCall(result, () => {\n return hookDetail.callback(hookDetail.hookedCommand, this);\n });\n });\n return result;\n }\n\n /**\n *\n * @param {(Promise|undefined)} promise\n * @param {Command} subCommand\n * @param {string} event\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCallSubCommandHook(promise, subCommand, event) {\n let result = promise;\n if (this._lifeCycleHooks[event] !== undefined) {\n this._lifeCycleHooks[event].forEach((hook) => {\n result = this._chainOrCall(result, () => {\n return hook(this, subCommand);\n });\n });\n }\n return result;\n }\n\n /**\n * Process arguments in context of this command.\n * Returns action result, in case it is a promise.\n *\n * @private\n */\n\n _parseCommand(operands, unknown) {\n const parsed = this.parseOptions(unknown);\n this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n this._parseOptionsImplied();\n operands = operands.concat(parsed.operands);\n unknown = parsed.unknown;\n this.args = operands.concat(unknown);\n\n if (operands && this._findCommand(operands[0])) {\n return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n }\n if (\n this._getHelpCommand() &&\n operands[0] === this._getHelpCommand().name()\n ) {\n return this._dispatchHelpCommand(operands[1]);\n }\n if (this._defaultCommandName) {\n this._outputHelpIfRequested(unknown); // Run the help for default command from parent rather than passing to default command\n return this._dispatchSubcommand(\n this._defaultCommandName,\n operands,\n unknown,\n );\n }\n if (\n this.commands.length &&\n this.args.length === 0 &&\n !this._actionHandler &&\n !this._defaultCommandName\n ) {\n // probably missing subcommand and no handler, user needs help (and exit)\n this.help({ error: true });\n }\n\n this._outputHelpIfRequested(parsed.unknown);\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n const checkForUnknownOptions = () => {\n if (parsed.unknown.length > 0) {\n this.unknownOption(parsed.unknown[0]);\n }\n };\n\n const commandEvent = `command:${this.name()}`;\n if (this._actionHandler) {\n checkForUnknownOptions();\n this._processArguments();\n\n let promiseChain;\n promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n promiseChain = this._chainOrCall(promiseChain, () =>\n this._actionHandler(this.processedArgs),\n );\n if (this.parent) {\n promiseChain = this._chainOrCall(promiseChain, () => {\n this.parent.emit(commandEvent, operands, unknown); // legacy\n });\n }\n promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n return promiseChain;\n }\n if (this.parent && this.parent.listenerCount(commandEvent)) {\n checkForUnknownOptions();\n this._processArguments();\n this.parent.emit(commandEvent, operands, unknown); // legacy\n } else if (operands.length) {\n if (this._findCommand('*')) {\n // legacy default command\n return this._dispatchSubcommand('*', operands, unknown);\n }\n if (this.listenerCount('command:*')) {\n // skip option check, emit event for possible misspelling suggestion\n this.emit('command:*', operands, unknown);\n } else if (this.commands.length) {\n this.unknownCommand();\n } else {\n checkForUnknownOptions();\n this._processArguments();\n }\n } else if (this.commands.length) {\n checkForUnknownOptions();\n // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n this.help({ error: true });\n } else {\n checkForUnknownOptions();\n this._processArguments();\n // fall through for caller to handle after calling .parse()\n }\n }\n\n /**\n * Find matching command.\n *\n * @private\n * @return {Command | undefined}\n */\n _findCommand(name) {\n if (!name) return undefined;\n return this.commands.find(\n (cmd) => cmd._name === name || cmd._aliases.includes(name),\n );\n }\n\n /**\n * Return an option matching `arg` if any.\n *\n * @param {string} arg\n * @return {Option}\n * @package\n */\n\n _findOption(arg) {\n return this.options.find((option) => option.is(arg));\n }\n\n /**\n * Display an error message if a mandatory option does not have a value.\n * Called after checking for help flags in leaf subcommand.\n *\n * @private\n */\n\n _checkForMissingMandatoryOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd.options.forEach((anOption) => {\n if (\n anOption.mandatory &&\n cmd.getOptionValue(anOption.attributeName()) === undefined\n ) {\n cmd.missingMandatoryOptionValue(anOption);\n }\n });\n });\n }\n\n /**\n * Display an error message if conflicting options are used together in this.\n *\n * @private\n */\n _checkForConflictingLocalOptions() {\n const definedNonDefaultOptions = this.options.filter((option) => {\n const optionKey = option.attributeName();\n if (this.getOptionValue(optionKey) === undefined) {\n return false;\n }\n return this.getOptionValueSource(optionKey) !== 'default';\n });\n\n const optionsWithConflicting = definedNonDefaultOptions.filter(\n (option) => option.conflictsWith.length > 0,\n );\n\n optionsWithConflicting.forEach((option) => {\n const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n option.conflictsWith.includes(defined.attributeName()),\n );\n if (conflictingAndDefined) {\n this._conflictingOption(option, conflictingAndDefined);\n }\n });\n }\n\n /**\n * Display an error message if conflicting options are used together.\n * Called after checking for help flags in leaf subcommand.\n *\n * @private\n */\n _checkForConflictingOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd._checkForConflictingLocalOptions();\n });\n }\n\n /**\n * Parse options from `argv` removing known options,\n * and return argv split into operands and unknown arguments.\n *\n * Examples:\n *\n * argv => operands, unknown\n * --known kkk op => [op], []\n * op --known kkk => [op], []\n * sub --unknown uuu op => [sub], [--unknown uuu op]\n * sub -- --unknown uuu op => [sub --unknown uuu op], []\n *\n * @param {string[]} argv\n * @return {{operands: string[], unknown: string[]}}\n */\n\n parseOptions(argv) {\n const operands = []; // operands, not options or values\n const unknown = []; // first unknown option and remaining unknown args\n let dest = operands;\n const args = argv.slice();\n\n function maybeOption(arg) {\n return arg.length > 1 && arg[0] === '-';\n }\n\n // parse options\n let activeVariadicOption = null;\n while (args.length) {\n const arg = args.shift();\n\n // literal\n if (arg === '--') {\n if (dest === unknown) dest.push(arg);\n dest.push(...args);\n break;\n }\n\n if (activeVariadicOption && !maybeOption(arg)) {\n this.emit(`option:${activeVariadicOption.name()}`, arg);\n continue;\n }\n activeVariadicOption = null;\n\n if (maybeOption(arg)) {\n const option = this._findOption(arg);\n // recognised option, call listener to assign value with possible custom processing\n if (option) {\n if (option.required) {\n const value = args.shift();\n if (value === undefined) this.optionMissingArgument(option);\n this.emit(`option:${option.name()}`, value);\n } else if (option.optional) {\n let value = null;\n // historical behaviour is optional value is following arg unless an option\n if (args.length > 0 && !maybeOption(args[0])) {\n value = args.shift();\n }\n this.emit(`option:${option.name()}`, value);\n } else {\n // boolean flag\n this.emit(`option:${option.name()}`);\n }\n activeVariadicOption = option.variadic ? option : null;\n continue;\n }\n }\n\n // Look for combo options following single dash, eat first one if known.\n if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n const option = this._findOption(`-${arg[1]}`);\n if (option) {\n if (\n option.required ||\n (option.optional && this._combineFlagAndOptionalValue)\n ) {\n // option with value following in same argument\n this.emit(`option:${option.name()}`, arg.slice(2));\n } else {\n // boolean option, emit and put back remainder of arg for further processing\n this.emit(`option:${option.name()}`);\n args.unshift(`-${arg.slice(2)}`);\n }\n continue;\n }\n }\n\n // Look for known long flag with value, like --foo=bar\n if (/^--[^=]+=/.test(arg)) {\n const index = arg.indexOf('=');\n const option = this._findOption(arg.slice(0, index));\n if (option && (option.required || option.optional)) {\n this.emit(`option:${option.name()}`, arg.slice(index + 1));\n continue;\n }\n }\n\n // Not a recognised option by this command.\n // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n if (maybeOption(arg)) {\n dest = unknown;\n }\n\n // If using positionalOptions, stop processing our options at subcommand.\n if (\n (this._enablePositionalOptions || this._passThroughOptions) &&\n operands.length === 0 &&\n unknown.length === 0\n ) {\n if (this._findCommand(arg)) {\n operands.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n } else if (\n this._getHelpCommand() &&\n arg === this._getHelpCommand().name()\n ) {\n operands.push(arg);\n if (args.length > 0) operands.push(...args);\n break;\n } else if (this._defaultCommandName) {\n unknown.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n }\n }\n\n // If using passThroughOptions, stop processing options at first command-argument.\n if (this._passThroughOptions) {\n dest.push(arg);\n if (args.length > 0) dest.push(...args);\n break;\n }\n\n // add arg\n dest.push(arg);\n }\n\n return { operands, unknown };\n }\n\n /**\n * Return an object containing local option values as key-value pairs.\n *\n * @return {object}\n */\n opts() {\n if (this._storeOptionsAsProperties) {\n // Preserve original behaviour so backwards compatible when still using properties\n const result = {};\n const len = this.options.length;\n\n for (let i = 0; i < len; i++) {\n const key = this.options[i].attributeName();\n result[key] =\n key === this._versionOptionName ? this._version : this[key];\n }\n return result;\n }\n\n return this._optionValues;\n }\n\n /**\n * Return an object containing merged local and global option values as key-value pairs.\n *\n * @return {object}\n */\n optsWithGlobals() {\n // globals overwrite locals\n return this._getCommandAndAncestors().reduce(\n (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n {},\n );\n }\n\n /**\n * Display error message and exit (or call exitOverride).\n *\n * @param {string} message\n * @param {object} [errorOptions]\n * @param {string} [errorOptions.code] - an id string representing the error\n * @param {number} [errorOptions.exitCode] - used with process.exit\n */\n error(message, errorOptions) {\n // output handling\n this._outputConfiguration.outputError(\n `${message}\\n`,\n this._outputConfiguration.writeErr,\n );\n if (typeof this._showHelpAfterError === 'string') {\n this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n } else if (this._showHelpAfterError) {\n this._outputConfiguration.writeErr('\\n');\n this.outputHelp({ error: true });\n }\n\n // exit handling\n const config = errorOptions || {};\n const exitCode = config.exitCode || 1;\n const code = config.code || 'commander.error';\n this._exit(exitCode, code, message);\n }\n\n /**\n * Apply any option related environment variables, if option does\n * not have a value from cli or client code.\n *\n * @private\n */\n _parseOptionsEnv() {\n this.options.forEach((option) => {\n if (option.envVar && option.envVar in process.env) {\n const optionKey = option.attributeName();\n // Priority check. Do not overwrite cli or options from unknown source (client-code).\n if (\n this.getOptionValue(optionKey) === undefined ||\n ['default', 'config', 'env'].includes(\n this.getOptionValueSource(optionKey),\n )\n ) {\n if (option.required || option.optional) {\n // option can take a value\n // keep very simple, optional always takes value\n this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n } else {\n // boolean\n // keep very simple, only care that envVar defined and not the value\n this.emit(`optionEnv:${option.name()}`);\n }\n }\n }\n });\n }\n\n /**\n * Apply any implied option values, if option is undefined or default value.\n *\n * @private\n */\n _parseOptionsImplied() {\n const dualHelper = new DualOptions(this.options);\n const hasCustomOptionValue = (optionKey) => {\n return (\n this.getOptionValue(optionKey) !== undefined &&\n !['default', 'implied'].includes(this.getOptionValueSource(optionKey))\n );\n };\n this.options\n .filter(\n (option) =>\n option.implied !== undefined &&\n hasCustomOptionValue(option.attributeName()) &&\n dualHelper.valueFromOption(\n this.getOptionValue(option.attributeName()),\n option,\n ),\n )\n .forEach((option) => {\n Object.keys(option.implied)\n .filter((impliedKey) => !hasCustomOptionValue(impliedKey))\n .forEach((impliedKey) => {\n this.setOptionValueWithSource(\n impliedKey,\n option.implied[impliedKey],\n 'implied',\n );\n });\n });\n }\n\n /**\n * Argument `name` is missing.\n *\n * @param {string} name\n * @private\n */\n\n missingArgument(name) {\n const message = `error: missing required argument '${name}'`;\n this.error(message, { code: 'commander.missingArgument' });\n }\n\n /**\n * `Option` is missing an argument.\n *\n * @param {Option} option\n * @private\n */\n\n optionMissingArgument(option) {\n const message = `error: option '${option.flags}' argument missing`;\n this.error(message, { code: 'commander.optionMissingArgument' });\n }\n\n /**\n * `Option` does not have a value, and is a mandatory option.\n *\n * @param {Option} option\n * @private\n */\n\n missingMandatoryOptionValue(option) {\n const message = `error: required option '${option.flags}' not specified`;\n this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n }\n\n /**\n * `Option` conflicts with another option.\n *\n * @param {Option} option\n * @param {Option} conflictingOption\n * @private\n */\n _conflictingOption(option, conflictingOption) {\n // The calling code does not know whether a negated option is the source of the\n // value, so do some work to take an educated guess.\n const findBestOptionFromValue = (option) => {\n const optionKey = option.attributeName();\n const optionValue = this.getOptionValue(optionKey);\n const negativeOption = this.options.find(\n (target) => target.negate && optionKey === target.attributeName(),\n );\n const positiveOption = this.options.find(\n (target) => !target.negate && optionKey === target.attributeName(),\n );\n if (\n negativeOption &&\n ((negativeOption.presetArg === undefined && optionValue === false) ||\n (negativeOption.presetArg !== undefined &&\n optionValue === negativeOption.presetArg))\n ) {\n return negativeOption;\n }\n return positiveOption || option;\n };\n\n const getErrorMessage = (option) => {\n const bestOption = findBestOptionFromValue(option);\n const optionKey = bestOption.attributeName();\n const source = this.getOptionValueSource(optionKey);\n if (source === 'env') {\n return `environment variable '${bestOption.envVar}'`;\n }\n return `option '${bestOption.flags}'`;\n };\n\n const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n this.error(message, { code: 'commander.conflictingOption' });\n }\n\n /**\n * Unknown option `flag`.\n *\n * @param {string} flag\n * @private\n */\n\n unknownOption(flag) {\n if (this._allowUnknownOption) return;\n let suggestion = '';\n\n if (flag.startsWith('--') && this._showSuggestionAfterError) {\n // Looping to pick up the global options too\n let candidateFlags = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let command = this;\n do {\n const moreFlags = command\n .createHelp()\n .visibleOptions(command)\n .filter((option) => option.long)\n .map((option) => option.long);\n candidateFlags = candidateFlags.concat(moreFlags);\n command = command.parent;\n } while (command && !command._enablePositionalOptions);\n suggestion = suggestSimilar(flag, candidateFlags);\n }\n\n const message = `error: unknown option '${flag}'${suggestion}`;\n this.error(message, { code: 'commander.unknownOption' });\n }\n\n /**\n * Excess arguments, more than expected.\n *\n * @param {string[]} receivedArgs\n * @private\n */\n\n _excessArguments(receivedArgs) {\n if (this._allowExcessArguments) return;\n\n const expected = this.registeredArguments.length;\n const s = expected === 1 ? '' : 's';\n const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n this.error(message, { code: 'commander.excessArguments' });\n }\n\n /**\n * Unknown command.\n *\n * @private\n */\n\n unknownCommand() {\n const unknownName = this.args[0];\n let suggestion = '';\n\n if (this._showSuggestionAfterError) {\n const candidateNames = [];\n this.createHelp()\n .visibleCommands(this)\n .forEach((command) => {\n candidateNames.push(command.name());\n // just visible alias\n if (command.alias()) candidateNames.push(command.alias());\n });\n suggestion = suggestSimilar(unknownName, candidateNames);\n }\n\n const message = `error: unknown command '${unknownName}'${suggestion}`;\n this.error(message, { code: 'commander.unknownCommand' });\n }\n\n /**\n * Get or set the program version.\n *\n * This method auto-registers the \"-V, --version\" option which will print the version number.\n *\n * You can optionally supply the flags and description to override the defaults.\n *\n * @param {string} [str]\n * @param {string} [flags]\n * @param {string} [description]\n * @return {(this | string | undefined)} `this` command for chaining, or version string if no arguments\n */\n\n version(str, flags, description) {\n if (str === undefined) return this._version;\n this._version = str;\n flags = flags || '-V, --version';\n description = description || 'output the version number';\n const versionOption = this.createOption(flags, description);\n this._versionOptionName = versionOption.attributeName();\n this._registerOption(versionOption);\n\n this.on('option:' + versionOption.name(), () => {\n this._outputConfiguration.writeOut(`${str}\\n`);\n this._exit(0, 'commander.version', str);\n });\n return this;\n }\n\n /**\n * Set the description.\n *\n * @param {string} [str]\n * @param {object} [argsDescription]\n * @return {(string|Command)}\n */\n description(str, argsDescription) {\n if (str === undefined && argsDescription === undefined)\n return this._description;\n this._description = str;\n if (argsDescription) {\n this._argsDescription = argsDescription;\n }\n return this;\n }\n\n /**\n * Set the summary. Used when listed as subcommand of parent.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n summary(str) {\n if (str === undefined) return this._summary;\n this._summary = str;\n return this;\n }\n\n /**\n * Set an alias for the command.\n *\n * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n *\n * @param {string} [alias]\n * @return {(string|Command)}\n */\n\n alias(alias) {\n if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n /** @type {Command} */\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let command = this;\n if (\n this.commands.length !== 0 &&\n this.commands[this.commands.length - 1]._executableHandler\n ) {\n // assume adding alias for last added executable subcommand, rather than this\n command = this.commands[this.commands.length - 1];\n }\n\n if (alias === command._name)\n throw new Error(\"Command alias can't be the same as its name\");\n const matchingCommand = this.parent?._findCommand(alias);\n if (matchingCommand) {\n // c.f. _registerCommand\n const existingCmd = [matchingCommand.name()]\n .concat(matchingCommand.aliases())\n .join('|');\n throw new Error(\n `cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`,\n );\n }\n\n command._aliases.push(alias);\n return this;\n }\n\n /**\n * Set aliases for the command.\n *\n * Only the first alias is shown in the auto-generated help.\n *\n * @param {string[]} [aliases]\n * @return {(string[]|Command)}\n */\n\n aliases(aliases) {\n // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n if (aliases === undefined) return this._aliases;\n\n aliases.forEach((alias) => this.alias(alias));\n return this;\n }\n\n /**\n * Set / get the command usage `str`.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n\n usage(str) {\n if (str === undefined) {\n if (this._usage) return this._usage;\n\n const args = this.registeredArguments.map((arg) => {\n return humanReadableArgName(arg);\n });\n return []\n .concat(\n this.options.length || this._helpOption !== null ? '[options]' : [],\n this.commands.length ? '[command]' : [],\n this.registeredArguments.length ? args : [],\n )\n .join(' ');\n }\n\n this._usage = str;\n return this;\n }\n\n /**\n * Get or set the name of the command.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n\n name(str) {\n if (str === undefined) return this._name;\n this._name = str;\n return this;\n }\n\n /**\n * Set the name of the command from script filename, such as process.argv[1],\n * or require.main.filename, or __filename.\n *\n * (Used internally and public although not documented in README.)\n *\n * @example\n * program.nameFromFilename(require.main.filename);\n *\n * @param {string} filename\n * @return {Command}\n */\n\n nameFromFilename(filename) {\n this._name = path.basename(filename, path.extname(filename));\n\n return this;\n }\n\n /**\n * Get or set the directory for searching for executable subcommands of this command.\n *\n * @example\n * program.executableDir(__dirname);\n * // or\n * program.executableDir('subcommands');\n *\n * @param {string} [path]\n * @return {(string|null|Command)}\n */\n\n executableDir(path) {\n if (path === undefined) return this._executableDir;\n this._executableDir = path;\n return this;\n }\n\n /**\n * Return program help documentation.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n * @return {string}\n */\n\n helpInformation(contextOptions) {\n const helper = this.createHelp();\n if (helper.helpWidth === undefined) {\n helper.helpWidth =\n contextOptions && contextOptions.error\n ? this._outputConfiguration.getErrHelpWidth()\n : this._outputConfiguration.getOutHelpWidth();\n }\n return helper.formatHelp(this, helper);\n }\n\n /**\n * @private\n */\n\n _getHelpContext(contextOptions) {\n contextOptions = contextOptions || {};\n const context = { error: !!contextOptions.error };\n let write;\n if (context.error) {\n write = (arg) => this._outputConfiguration.writeErr(arg);\n } else {\n write = (arg) => this._outputConfiguration.writeOut(arg);\n }\n context.write = contextOptions.write || write;\n context.command = this;\n return context;\n }\n\n /**\n * Output help information for this command.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n outputHelp(contextOptions) {\n let deprecatedCallback;\n if (typeof contextOptions === 'function') {\n deprecatedCallback = contextOptions;\n contextOptions = undefined;\n }\n const context = this._getHelpContext(contextOptions);\n\n this._getCommandAndAncestors()\n .reverse()\n .forEach((command) => command.emit('beforeAllHelp', context));\n this.emit('beforeHelp', context);\n\n let helpInformation = this.helpInformation(context);\n if (deprecatedCallback) {\n helpInformation = deprecatedCallback(helpInformation);\n if (\n typeof helpInformation !== 'string' &&\n !Buffer.isBuffer(helpInformation)\n ) {\n throw new Error('outputHelp callback must return a string or a Buffer');\n }\n }\n context.write(helpInformation);\n\n if (this._getHelpOption()?.long) {\n this.emit(this._getHelpOption().long); // deprecated\n }\n this.emit('afterHelp', context);\n this._getCommandAndAncestors().forEach((command) =>\n command.emit('afterAllHelp', context),\n );\n }\n\n /**\n * You can pass in flags and a description to customise the built-in help option.\n * Pass in false to disable the built-in help option.\n *\n * @example\n * program.helpOption('-?, --help' 'show help'); // customise\n * program.helpOption(false); // disable\n *\n * @param {(string | boolean)} flags\n * @param {string} [description]\n * @return {Command} `this` command for chaining\n */\n\n helpOption(flags, description) {\n // Support disabling built-in help option.\n if (typeof flags === 'boolean') {\n if (flags) {\n this._helpOption = this._helpOption ?? undefined; // preserve existing option\n } else {\n this._helpOption = null; // disable\n }\n return this;\n }\n\n // Customise flags and description.\n flags = flags ?? '-h, --help';\n description = description ?? 'display help for command';\n this._helpOption = this.createOption(flags, description);\n\n return this;\n }\n\n /**\n * Lazy create help option.\n * Returns null if has been disabled with .helpOption(false).\n *\n * @returns {(Option | null)} the help option\n * @package\n */\n _getHelpOption() {\n // Lazy create help option on demand.\n if (this._helpOption === undefined) {\n this.helpOption(undefined, undefined);\n }\n return this._helpOption;\n }\n\n /**\n * Supply your own option to use for the built-in help option.\n * This is an alternative to using helpOption() to customise the flags and description etc.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addHelpOption(option) {\n this._helpOption = option;\n return this;\n }\n\n /**\n * Output help information and exit.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n help(contextOptions) {\n this.outputHelp(contextOptions);\n let exitCode = process.exitCode || 0;\n if (\n exitCode === 0 &&\n contextOptions &&\n typeof contextOptions !== 'function' &&\n contextOptions.error\n ) {\n exitCode = 1;\n }\n // message: do not have all displayed text available so only passing placeholder.\n this._exit(exitCode, 'commander.help', '(outputHelp)');\n }\n\n /**\n * Add additional text to be displayed with the built-in help.\n *\n * Position is 'before' or 'after' to affect just this command,\n * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n *\n * @param {string} position - before or after built-in help\n * @param {(string | Function)} text - string to add, or a function returning a string\n * @return {Command} `this` command for chaining\n */\n addHelpText(position, text) {\n const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n if (!allowedValues.includes(position)) {\n throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n const helpEvent = `${position}Help`;\n this.on(helpEvent, (context) => {\n let helpStr;\n if (typeof text === 'function') {\n helpStr = text({ error: context.error, command: context.command });\n } else {\n helpStr = text;\n }\n // Ignore falsy value when nothing to output.\n if (helpStr) {\n context.write(`${helpStr}\\n`);\n }\n });\n return this;\n }\n\n /**\n * Output help information if help flags specified\n *\n * @param {Array} args - array of options to search for help flags\n * @private\n */\n\n _outputHelpIfRequested(args) {\n const helpOption = this._getHelpOption();\n const helpRequested = helpOption && args.find((arg) => helpOption.is(arg));\n if (helpRequested) {\n this.outputHelp();\n // (Do not have all displayed text available so only passing placeholder.)\n this._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n }\n }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @private\n */\n\nfunction incrementNodeInspectorPort(args) {\n // Testing for these options:\n // --inspect[=[host:]port]\n // --inspect-brk[=[host:]port]\n // --inspect-port=[host:]port\n return args.map((arg) => {\n if (!arg.startsWith('--inspect')) {\n return arg;\n }\n let debugOption;\n let debugHost = '127.0.0.1';\n let debugPort = '9229';\n let match;\n if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n // e.g. --inspect\n debugOption = match[1];\n } else if (\n (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null\n ) {\n debugOption = match[1];\n if (/^\\d+$/.test(match[3])) {\n // e.g. --inspect=1234\n debugPort = match[3];\n } else {\n // e.g. --inspect=localhost\n debugHost = match[3];\n }\n } else if (\n (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null\n ) {\n // e.g. --inspect=localhost:1234\n debugOption = match[1];\n debugHost = match[3];\n debugPort = match[4];\n }\n\n if (debugOption && debugPort !== '0') {\n return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n }\n return arg;\n });\n}\n\nexports.Command = Command;\n","const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\nexports.program = new Command();\n\nexports.createCommand = (name) => new Command(name);\nexports.createOption = (flags, description) => new Option(flags, description);\nexports.createArgument = (name, description) => new Argument(name, description);\n\n/**\n * Expose classes\n */\n\nexports.Command = Command;\nexports.Option = Option;\nexports.Argument = Argument;\nexports.Help = Help;\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\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 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 builder data directory (~/.refly/builder)\n */\nexport function getBuilderDir(): string {\n const dir = path.join(getReflyDir(), 'builder');\n ensureDir(dir);\n return dir;\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 current builder session path\n */\nexport function getCurrentSessionPath(): string {\n return path.join(getBuilderDir(), 'current');\n}\n\n/**\n * Get a session file path by ID\n */\nexport function getSessionPath(sessionId: string): string {\n return path.join(getBuilderDir(), `session-${sessionId}.json`);\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 * Refly CLI - Main entry point\n *\n * Supports multiple output formats: json, pretty, compact, plain.\n * Exit codes: 0=success, 1=error, 2=auth, 3=validation, 4=network, 5=not found\n */\n\nimport { Command } from 'commander';\nimport { fail, ErrorCodes, configureOutput, type OutputFormat } from '../utils/output.js';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n// Read version from package.json\nfunction getVersion(): 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// Import commands\nimport { initCommand } from '../commands/init.js';\nimport { loginCommand } from '../commands/login.js';\nimport { logoutCommand } from '../commands/logout.js';\nimport { statusCommand } from '../commands/status.js';\nimport { whoamiCommand } from '../commands/whoami.js';\nimport { upgradeCommand } from '../commands/upgrade.js';\nimport { configCommand } from '../commands/config.js';\nimport { builderCommand } from '../commands/builder/index.js';\nimport { workflowCommand } from '../commands/workflow/index.js';\nimport { nodeCommand } from '../commands/node/index.js';\nimport { toolCommand } from '../commands/tool/index.js';\nimport { fileCommand } from '../commands/file/index.js';\n\nconst VERSION = getVersion();\n\nconst program = new Command();\n\nprogram\n .name('refly')\n .description('Refly CLI - Workflow orchestration for Claude Code')\n .version(VERSION, '-v, --version', 'Output CLI version')\n .option('--host <url>', 'API endpoint override')\n .option('--debug', 'Enable debug logging')\n .option(\n '-f, --format <format>',\n 'Output format: json, pretty, compact, plain (default: auto-detect)',\n )\n .option('--no-color', 'Disable colored output')\n .option('--verbose', 'Enable verbose output');\n\n// Global options handling\nprogram.hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n\n // Configure output format (must be done before any output)\n configureOutput({\n format: opts.format as OutputFormat | undefined,\n noColor: opts.color === false,\n verbose: opts.verbose ?? false,\n autoDetect: !opts.format, // Auto-detect only if format not explicitly set\n });\n\n // Set API endpoint override\n if (opts.host) {\n process.env.REFLY_API_ENDPOINT = opts.host;\n }\n\n // Enable debug logging\n if (opts.debug) {\n const { logger } = require('../utils/logger.js');\n logger.setLevel('debug');\n logger.enableFileLogging();\n }\n});\n\n// Add commands\nprogram.addCommand(initCommand);\nprogram.addCommand(loginCommand);\nprogram.addCommand(logoutCommand);\nprogram.addCommand(statusCommand);\nprogram.addCommand(whoamiCommand);\nprogram.addCommand(upgradeCommand);\nprogram.addCommand(configCommand);\nprogram.addCommand(builderCommand);\nprogram.addCommand(workflowCommand);\nprogram.addCommand(nodeCommand);\nprogram.addCommand(toolCommand);\nprogram.addCommand(fileCommand);\n\n// Error handling\nprogram.exitOverride((err) => {\n // Commander throws errors for help/version which we should let through\n if (err.code === 'commander.helpDisplayed' || err.code === 'commander.version') {\n process.exit(0);\n }\n\n // Handle other commander errors\n fail(ErrorCodes.INVALID_INPUT, err.message, {\n details: { code: err.code },\n hint: 'Run `refly --help` for usage',\n });\n});\n\n// Catch unhandled errors\nprocess.on('uncaughtException', (error) => {\n fail(ErrorCodes.INTERNAL_ERROR, error.message, {\n hint: 'Report this issue at https://github.com/refly-ai/refly/issues',\n });\n});\n\nprocess.on('unhandledRejection', (reason) => {\n fail(ErrorCodes.INTERNAL_ERROR, reason instanceof Error ? reason.message : String(reason), {\n hint: 'Report this issue at https://github.com/refly-ai/refly/issues',\n });\n});\n\n// Parse arguments\nprogram.parse();\n","import commander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n program,\n createCommand,\n createArgument,\n createOption,\n CommanderError,\n InvalidArgumentError,\n InvalidOptionArgumentError, // deprecated old name\n Command,\n Argument,\n Option,\n Help,\n} = commander;\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} from './formatter.js';\n\nexport type { OutputFormat, FormatterOptions, SuccessPayload };\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}\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 * 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 },\n): never {\n const formatter = getFormatter();\n formatter.error({\n code,\n message,\n details: options?.details,\n hint: options?.hint,\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 },\n): void {\n const formatter = getFormatter();\n formatter.error({\n code,\n message,\n details: options?.details,\n hint: options?.hint,\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 },\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 },\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\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} 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 ErrorPayload {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n hint?: string;\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, null, 2));\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 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 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, api_endpoint, auth_status, auth_method, auth_details, user, skill } =\n payload as Record<string, unknown>;\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 Card\n const authOk = auth_status === 'valid';\n const userObj = user as Record<string, unknown> | null;\n const authDetailsObj = auth_details as Record<string, unknown> | null;\n\n const authLines: Array<{ text: string; indent?: boolean; muted?: boolean }> = [];\n\n if (authOk && userObj?.email) {\n authLines.push({ text: String(userObj.email) });\n // Provider info\n const provider = authDetailsObj?.provider || auth_method;\n if (provider) {\n const providerDisplay =\n String(provider).charAt(0).toUpperCase() + String(provider).slice(1);\n // Token expiry\n const exp = userObj?.exp as number | undefined;\n let expiryText = '';\n if (exp) {\n expiryText = ` · ${UI.timeRemaining(exp)}`;\n }\n authLines.push({\n text: `via ${providerDisplay}${expiryText}`,\n indent: true,\n muted: true,\n });\n }\n } else if (auth_status === 'expired') {\n authLines.push({ text: 'Token expired', muted: true });\n } else {\n authLines.push({ text: 'Not authenticated', muted: true });\n }\n\n console.log(\n UI.card({\n title: 'Auth',\n status: authOk ? 'success' : 'error',\n lines: authLines,\n width: 45,\n }),\n );\n console.log();\n\n // Connection Card\n const endpoint = String(api_endpoint || '—');\n console.log(\n UI.card({\n title: 'Connection',\n status: authOk ? 'success' : 'pending',\n lines: [{ text: endpoint }],\n width: 45,\n }),\n );\n console.log();\n\n // Skill Card\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\n const skillLines: Array<{ text: string; indent?: boolean; muted?: boolean }> = [];\n if (skillInstalled) {\n const versionText = skillVersion + (skillUpToDate ? ' (up to date)' : ' (update available)');\n skillLines.push({ text: versionText });\n } else {\n skillLines.push({ text: 'Not installed', muted: true });\n }\n\n console.log(\n UI.card({\n title: 'Skill',\n status: skillInstalled ? 'success' : 'pending',\n lines: skillLines,\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 }\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 }\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 value\n ? this.useColor\n ? styled(Symbols.SUCCESS, Style.TEXT_SUCCESS)\n : 'yes'\n : this.useColor\n ? styled(Symbols.FAILURE, Style.TEXT_DANGER)\n : 'no';\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 /**\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 * 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 = item.type\n ? item.type === 'success'\n ? UI.success(value)\n : item.type === 'error'\n ? UI.error(value)\n : item.type === 'warning'\n ? UI.warning(value)\n : UI.info(value)\n : UI.bold(value);\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 =\n typeof expiresAt === 'number'\n ? expiresAt * 1000 // Assume Unix timestamp in seconds\n : typeof expiresAt === 'string'\n ? new Date(expiresAt).getTime()\n : expiresAt.getTime();\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\nexport default UI;\n","/**\n * refly init - Initialize CLI, install skill files, and authenticate\n */\n\nimport { Command } from 'commander';\nimport { ok, print, fail, ErrorCodes } from '../utils/output.js';\nimport { installSkill, isSkillInstalled } from '../skill/installer.js';\nimport {\n loadConfig,\n saveConfig,\n getApiEndpoint,\n getAccessToken,\n getApiKey,\n} from '../config/config.js';\nimport { getReflyDir } from '../config/paths.js';\nimport { loginWithDeviceFlow } from './login.js';\n\n// Default API endpoint - injected at build time by tsup\n// Build with different environments:\n// - Test/Dev: REFLY_BUILD_ENV=test pnpm build\n// - Production: REFLY_BUILD_ENV=production pnpm build (or just pnpm build)\n// - Custom: REFLY_BUILD_ENDPOINT=https://custom.refly.ai pnpm build\nconst DEFAULT_API_ENDPOINT = process.env.REFLY_BUILD_DEFAULT_ENDPOINT || 'https://refly.ai';\n\nexport const initCommand = new Command('init')\n .description('Initialize Refly CLI, install skill files, and authenticate')\n .option('--force', 'Force reinstall even if already installed')\n .option('--host <url>', 'API server URL', DEFAULT_API_ENDPOINT)\n .option('--skip-login', 'Skip automatic login after initialization')\n .action(async (options) => {\n try {\n const { force, host, skipLogin } = options;\n const apiEndpoint = host || DEFAULT_API_ENDPOINT;\n\n // Check current state\n const skillStatus = isSkillInstalled();\n const isAuthenticated = !!(getAccessToken() || getApiKey());\n\n if (skillStatus.installed && skillStatus.upToDate && !force && isAuthenticated) {\n return ok('init', {\n message: 'Refly CLI already initialized and authenticated',\n configDir: getReflyDir(),\n skillInstalled: true,\n skillVersion: skillStatus.currentVersion,\n apiEndpoint: getApiEndpoint(),\n authenticated: true,\n });\n }\n\n // Initialize config with API endpoint\n const config = loadConfig();\n config.api = {\n endpoint: apiEndpoint,\n };\n saveConfig(config);\n\n // Install skill files\n const result = installSkill();\n\n // Output initialization success (use print instead of ok to continue execution)\n print('init', {\n message: 'Refly CLI initialized successfully',\n configDir: getReflyDir(),\n apiEndpoint: apiEndpoint,\n skillInstalled: result.skillInstalled,\n skillPath: result.skillPath,\n commandsInstalled: result.commandsInstalled,\n commandsPath: result.commandsPath,\n version: result.version,\n });\n\n // Auto-login unless skipped or already authenticated\n if (!skipLogin && !isAuthenticated) {\n process.stderr.write('\\nStarting authentication...\\n');\n const loginSuccess = await loginWithDeviceFlow();\n\n if (!loginSuccess) {\n process.stderr.write(\n '\\nAuthentication was not completed. You can login later with `refly login`.\\n',\n );\n }\n } else if (isAuthenticated) {\n process.stderr.write('\\nAlready authenticated.\\n');\n } else {\n process.stderr.write('\\nSkipped login. Run `refly login` to authenticate later.\\n');\n }\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to initialize',\n { hint: 'Check permissions and try again' },\n );\n }\n });\n","/**\n * Skill installer - copies SKILL.md and references to Claude Code directories.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { getClaudeSkillDir, getClaudeCommandsDir, ensureDir } from '../config/paths.js';\nimport { updateSkillInfo } from '../config/config.js';\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\n path.join(__dirname, '..', '..', '..', 'skill'), // Development\n ];\n\n for (const p of possiblePaths) {\n if (fs.existsSync(p)) {\n return p;\n }\n }\n\n throw new Error('Skill files not found in package');\n}\n\nexport interface InstallResult {\n skillInstalled: boolean;\n skillPath: string | null;\n commandsInstalled: boolean;\n commandsPath: string | null;\n version: string;\n}\n\n/**\n * Install skill files to Claude Code directories\n */\nexport function installSkill(): InstallResult {\n const result: InstallResult = {\n skillInstalled: false,\n skillPath: null,\n commandsInstalled: false,\n commandsPath: null,\n version: getSkillVersion(),\n };\n\n const sourceDir = getPackageSkillDir();\n\n // Install SKILL.md and references\n // Always try to create skills directory\n const targetDir = getClaudeSkillDir();\n ensureDir(targetDir);\n ensureDir(path.join(targetDir, 'references'));\n\n // Copy SKILL.md\n const skillSource = path.join(sourceDir, 'SKILL.md');\n const skillTarget = path.join(targetDir, 'SKILL.md');\n if (fs.existsSync(skillSource)) {\n fs.copyFileSync(skillSource, skillTarget);\n result.skillInstalled = true;\n result.skillPath = targetDir;\n }\n\n // Copy references\n const refsSource = path.join(sourceDir, 'references');\n const refsTarget = path.join(targetDir, 'references');\n if (fs.existsSync(refsSource)) {\n const files = fs.readdirSync(refsSource);\n for (const file of files) {\n fs.copyFileSync(path.join(refsSource, file), path.join(refsTarget, file));\n }\n }\n\n // Install slash commands\n // Always try to create commands directory (same as skills directory)\n const commandsDir = getClaudeCommandsDir();\n ensureDir(commandsDir);\n result.commandsInstalled = installSlashCommands(sourceDir, commandsDir);\n if (result.commandsInstalled) {\n result.commandsPath = commandsDir;\n }\n\n // Update config with installation info\n updateSkillInfo(result.version);\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} {\n const skillPath = path.join(getClaudeSkillDir(), 'SKILL.md');\n\n if (!fs.existsSync(skillPath)) {\n return { installed: false, upToDate: false };\n }\n\n const currentVersion = getSkillVersion();\n // For now, consider it up to date if it exists\n // Future: parse version from installed SKILL.md and compare\n\n return {\n installed: true,\n upToDate: true,\n currentVersion,\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// 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});\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 * refly login - Authenticate with Device Flow or API Key\n */\n\nimport { Command } from 'commander';\nimport * as os from 'node:os';\nimport open from 'open';\nimport { ok, fail, printError, ErrorCodes } from '../utils/output.js';\nimport { setOAuthTokens, setApiKey, getApiEndpoint, getWebUrl } from '../config/config.js';\nimport { apiRequest } from '../api/client.js';\nimport { logger } from '../utils/logger.js';\n\n// CLI version for device registration\nconst CLI_VERSION = '0.1.0';\n\nexport const loginCommand = new Command('login')\n .description('Authenticate with Refly')\n .option('-k, --api-key <key>', 'Authenticate using an API key')\n .action(async (options) => {\n try {\n // If API key is provided, use API key authentication\n if (options.apiKey) {\n await loginWithApiKey(options.apiKey);\n return;\n }\n\n // Default: use device flow (opens browser login page)\n await loginWithDeviceFlow();\n } catch (error) {\n logger.error('Login failed:', error);\n fail(ErrorCodes.AUTH_REQUIRED, error instanceof Error ? error.message : 'Login failed', {\n hint: 'Try again or check your internet connection',\n });\n }\n });\n\n/**\n * Login using API Key\n */\nasync function loginWithApiKey(apiKey: string): Promise<void> {\n logger.info('Validating API key...');\n\n // Validate API key format\n if (!apiKey.startsWith('rf_')) {\n return fail(ErrorCodes.INVALID_INPUT, 'Invalid API key format', {\n hint: 'API key should start with \"rf_\"',\n });\n }\n\n // Validate API key with backend\n const result = await apiRequest<{\n valid: boolean;\n user?: { uid: string; email?: string; name?: string };\n }>('/v1/auth/cli/api-key/validate', {\n method: 'POST',\n body: { apiKey },\n requireAuth: false,\n });\n\n if (!result.valid || !result.user) {\n return fail(ErrorCodes.AUTH_REQUIRED, 'Invalid or expired API key', {\n hint: 'Generate a new API key from the Refly web app',\n });\n }\n\n // Store API key\n logger.debug('Storing API key...');\n setApiKey({\n apiKey,\n apiKeyId: 'manual', // We don't have the key ID when user provides directly\n apiKeyName: 'CLI Login',\n user: {\n uid: result.user.uid,\n email: result.user.email || '',\n name: result.user.name,\n },\n });\n\n ok('login', {\n message: 'Successfully authenticated with API key',\n user: result.user,\n method: 'apikey',\n });\n}\n\n/**\n * Device authorization flow response types\n */\ninterface DeviceSessionInfo {\n deviceId: string;\n cliVersion: string;\n host: string;\n status: 'pending' | 'authorized' | 'cancelled' | 'expired';\n createdAt: string;\n expiresAt: string;\n}\n\ninterface DeviceSessionWithTokens extends DeviceSessionInfo {\n accessToken?: string;\n refreshToken?: string;\n}\n\n/**\n * Login using device authorization flow\n * Opens browser to login page, polls for authorization\n * Exported for use by init command\n */\nexport async function loginWithDeviceFlow(): Promise<boolean> {\n logger.info('Starting device authorization flow...');\n\n // 1. Initialize device session\n const hostname = os.hostname();\n const initResponse = await apiRequest<DeviceSessionInfo>('/v1/auth/cli/device/init', {\n method: 'POST',\n body: {\n cliVersion: CLI_VERSION,\n host: hostname,\n },\n requireAuth: false,\n });\n\n const { deviceId, expiresAt } = initResponse;\n\n // 2. Build authorization URL\n // Use web URL for browser authorization page (may differ from API endpoint in some environments)\n const webUrl = getWebUrl();\n const authUrl = `${webUrl}/cli/auth?device_id=${encodeURIComponent(deviceId)}&cli_version=${encodeURIComponent(CLI_VERSION)}&host=${encodeURIComponent(hostname)}`;\n\n // 3. Print instructions and open browser\n process.stderr.write('\\n');\n process.stderr.write('To authorize this device, open the following URL in your browser:\\n');\n process.stderr.write('\\n');\n process.stderr.write(` ${authUrl}\\n`);\n process.stderr.write('\\n');\n process.stderr.write(`Device ID: ${deviceId}\\n`);\n process.stderr.write(`Expires: ${new Date(expiresAt).toLocaleTimeString()}\\n`);\n process.stderr.write('\\n');\n process.stderr.write('Waiting for authorization...\\n');\n\n // Try to open browser automatically\n try {\n await open(authUrl);\n logger.debug('Browser opened successfully');\n } catch {\n logger.debug('Could not open browser automatically');\n }\n\n // 4. Poll for authorization status\n const pollInterval = 2000; // 2 seconds\n const maxAttempts = 150; // 5 minutes (150 * 2s)\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n await sleep(pollInterval);\n\n const statusResponse = await apiRequest<DeviceSessionWithTokens>('/v1/auth/cli/device/status', {\n method: 'GET',\n query: { device_id: deviceId },\n requireAuth: false,\n });\n\n switch (statusResponse.status) {\n case 'authorized':\n if (statusResponse.accessToken && statusResponse.refreshToken) {\n // Get user info from the token\n // For now, we'll make an additional call to get user info\n const userInfo = await getUserInfoFromToken(statusResponse.accessToken);\n\n // Store tokens\n setOAuthTokens({\n accessToken: statusResponse.accessToken,\n refreshToken: statusResponse.refreshToken,\n expiresAt: new Date(Date.now() + 3600000).toISOString(), // 1 hour\n provider: 'google', // Device flow doesn't specify provider, default to google\n user: userInfo,\n });\n\n ok('login', {\n message: 'Successfully authenticated via device authorization',\n user: userInfo,\n method: 'device',\n });\n return true;\n }\n break;\n\n case 'cancelled':\n printError(ErrorCodes.AUTH_REQUIRED, 'Authorization was cancelled', {\n hint: 'The authorization request was cancelled in the browser',\n });\n return false;\n\n case 'expired':\n printError(ErrorCodes.AUTH_REQUIRED, 'Authorization request expired', {\n hint: 'Run `refly login` again to start a new session',\n });\n return false;\n\n case 'pending':\n // Continue polling\n if (attempt % 5 === 0) {\n process.stderr.write('.');\n }\n break;\n }\n }\n\n // Timeout\n printError(ErrorCodes.TIMEOUT, 'Authorization timeout', {\n hint: 'Complete authorization in the browser within 5 minutes',\n });\n return false;\n}\n\n/**\n * Get user info from access token\n */\nasync function getUserInfoFromToken(\n accessToken: string,\n): Promise<{ uid: string; email: string; name?: string }> {\n try {\n const endpoint = getApiEndpoint();\n const response = await fetch(`${endpoint}/v1/user/me`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (response.ok) {\n const data = (await response.json()) as {\n success: boolean;\n data?: { uid: string; email?: string; name?: string };\n };\n if (data.success && data.data) {\n return {\n uid: data.data.uid,\n email: data.data.email || '',\n name: data.data.name,\n };\n }\n }\n } catch (error) {\n logger.debug('Failed to get user info:', error);\n }\n\n // Fallback if we can't get user info\n return {\n uid: 'unknown',\n email: '',\n };\n}\n\n/**\n * Sleep helper\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import process from 'node:process';\nimport {Buffer} from 'node:buffer';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport {isWsl, powerShellPath} from 'wsl-utils';\nimport defineLazyProperty from 'define-lazy-prop';\nimport defaultBrowser from 'default-browser';\nimport isInsideContainer from 'is-inside-container';\n\nconst execFile = promisify(childProcess.execFile);\n\n// Path to included `xdg-open`.\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\n/**\nGet the default browser name in Windows from WSL.\n\n@returns {Promise<string>} Browser name.\n*/\nasync function getWindowsDefaultBrowserFromWsl() {\n\tconst powershellPath = await powerShellPath();\n\tconst rawCommand = String.raw`(Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\").ProgId`;\n\tconst encodedCommand = Buffer.from(rawCommand, 'utf16le').toString('base64');\n\n\tconst {stdout} = await execFile(\n\t\tpowershellPath,\n\t\t[\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'-ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand',\n\t\t\tencodedCommand,\n\t\t],\n\t\t{encoding: 'utf8'},\n\t);\n\n\tconst progId = stdout.trim();\n\n\t// Map ProgId to browser IDs\n\tconst browserMap = {\n\t\tChromeHTML: 'com.google.chrome',\n\t\tBraveHTML: 'com.brave.Browser',\n\t\tMSEdgeHTM: 'com.microsoft.edge',\n\t\tFirefoxURL: 'org.mozilla.firefox',\n\t};\n\n\treturn browserMap[progId] ? {id: browserMap[progId]} : {};\n}\n\nconst pTryEach = async (array, mapper) => {\n\tlet latestError;\n\n\tfor (const item of array) {\n\t\ttry {\n\t\t\treturn await mapper(item); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tlatestError = error;\n\t\t}\n\t}\n\n\tthrow latestError;\n};\n\n// eslint-disable-next-line complexity\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options,\n\t};\n\n\tif (Array.isArray(options.app)) {\n\t\treturn pTryEach(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp,\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app ?? {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn pTryEach(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments,\n\t\t\t},\n\t\t}));\n\t}\n\n\tif (app === 'browser' || app === 'browserPrivate') {\n\t\t// IDs from default-browser for macOS and windows are the same\n\t\tconst ids = {\n\t\t\t'com.google.chrome': 'chrome',\n\t\t\t'google-chrome.desktop': 'chrome',\n\t\t\t'com.brave.Browser': 'brave',\n\t\t\t'org.mozilla.firefox': 'firefox',\n\t\t\t'firefox.desktop': 'firefox',\n\t\t\t'com.microsoft.msedge': 'edge',\n\t\t\t'com.microsoft.edge': 'edge',\n\t\t\t'com.microsoft.edgemac': 'edge',\n\t\t\t'microsoft-edge.desktop': 'edge',\n\t\t};\n\n\t\t// Incognito flags for each browser in `apps`.\n\t\tconst flags = {\n\t\t\tchrome: '--incognito',\n\t\t\tbrave: '--incognito',\n\t\t\tfirefox: '--private-window',\n\t\t\tedge: '--inPrivate',\n\t\t};\n\n\t\tconst browser = isWsl ? await getWindowsDefaultBrowserFromWsl() : await defaultBrowser();\n\t\tif (browser.id in ids) {\n\t\t\tconst browserName = ids[browser.id];\n\n\t\t\tif (app === 'browserPrivate') {\n\t\t\t\tappArguments.push(flags[browserName]);\n\t\t\t}\n\n\t\t\treturn baseOpen({\n\t\t\t\t...options,\n\t\t\t\tapp: {\n\t\t\t\t\tname: apps[browserName],\n\t\t\t\t\targuments: appArguments,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthrow new Error(`${browser.name} is not supported as a default browser`);\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || (isWsl && !isInsideContainer() && !app)) {\n\t\tcommand = await powerShellPath();\n\n\t\tcliArguments.push(\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'-ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand',\n\t\t);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\tconst encodedArguments = ['Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\t// Double quote with double quotes to ensure the inner quotes are passed through.\n\t\t\t// Inner quotes are delimited for PowerShell interpretation with backticks.\n\t\t\tencodedArguments.push(`\"\\`\"${app}\\`\"\"`);\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.push(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(`\"${options.target}\"`);\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(argument => `\"\\`\"${argument}\\`\"\"`);\n\t\t\tencodedArguments.push('-ArgumentList', appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64');\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron\n\t\t\t\t?? (platform === 'android' || isBundled || !exeLocalXdgOpen);\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\t// This has to come after `--args`.\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode > 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\treturn subprocess;\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget,\n\t});\n};\n\nexport const openApp = (name, options) => {\n\tif (typeof name !== 'string' && !Array.isArray(name)) {\n\t\tthrow new TypeError('Expected a valid `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options ?? {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments,\n\t\t},\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nexport const apps = {};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'brave', () => detectPlatformBinary({\n\tdarwin: 'brave browser',\n\twin32: 'brave',\n\tlinux: ['brave-browser', 'brave'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe',\n\t\tx64: ['/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe', '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: String.raw`C:\\Program Files\\Mozilla Firefox\\firefox.exe`,\n\tlinux: 'firefox',\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe',\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev'],\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',\n}));\n\ndefineLazyProperty(apps, 'browser', () => 'browser');\n\ndefineLazyProperty(apps, 'browserPrivate', () => 'browserPrivate');\n\nexport default open;\n","import process from 'node:process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport isWsl from 'is-wsl';\n\nexport const wslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst configMountPoint = /(?<!#.*)root\\s*=\\s*(?<mountPoint>.*)/g.exec(configContent);\n\n\t\tif (!configMountPoint) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = configMountPoint.groups.mountPoint.trim();\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nexport const powerShellPathFromWsl = async () => {\n\tconst mountPoint = await wslDrivesMountPoint();\n\treturn `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;\n};\n\nexport const powerShellPath = async () => {\n\tif (isWsl) {\n\t\treturn powerShellPathFromWsl();\n\t}\n\n\treturn `${process.env.SYSTEMROOT || process.env.windir || String.raw`C:\\Windows`}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n};\n\nexport {default as isWsl} from 'is-wsl';\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport isInsideContainer from 'is-inside-container';\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isInsideContainer()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft')\n\t\t\t? !isInsideContainer() : false;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default process.env.__IS_WSL_TEST__ ? isWsl : isWsl();\n","import fs from 'node:fs';\nimport isDocker from 'is-docker';\n\nlet cachedResult;\n\n// Podman detection\nconst hasContainerEnv = () => {\n\ttry {\n\t\tfs.statSync('/run/.containerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default function isInsideContainer() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n","import fs from 'node:fs';\n\nlet isDockerCached;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function isDocker() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (isDockerCached === undefined) {\n\t\tisDockerCached = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDockerCached;\n}\n","export default function defineLazyProperty(object, propertyName, valueGetter) {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = valueGetter();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\nimport defaultBrowserId from 'default-browser-id';\nimport bundleName from 'bundle-name';\nimport windows from './windows.js';\n\nexport {_windowsBrowserProgIdMap} from './windows.js';\n\nconst execFileAsync = promisify(execFile);\n\n// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js\nconst titleize = string => string.toLowerCase().replaceAll(/(?:^|\\s|-)\\S/g, x => x.toUpperCase());\n\nexport default async function defaultBrowser() {\n\tif (process.platform === 'darwin') {\n\t\tconst id = await defaultBrowserId();\n\t\tconst name = await bundleName(id);\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'linux') {\n\t\tconst {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n\t\tconst id = stdout.trim();\n\t\tconst name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows();\n\t}\n\n\tthrow new Error('Only macOS, Linux, and Windows are supported');\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport default async function defaultBrowserId() {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);\n\n\t// `(?!-)` is to prevent matching `LSHandlerRoleAll = \"-\";`.\n\tconst match = /LSHandlerRoleAll = \"(?!-)(?<id>[^\"]+?)\";\\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);\n\n\tconst browserId = match?.groups.id ?? 'com.apple.Safari';\n\n\t// Correct the case for Safari's bundle identifier\n\tif (browserId === 'com.apple.safari') {\n\t\treturn 'com.apple.Safari';\n\t}\n\n\treturn browserId;\n}\n","import {runAppleScript} from 'run-applescript';\n\nexport default async function bundleName(bundleId) {\n\treturn runAppleScript(`tell application \"Finder\" to set app_path to application file id \"${bundleId}\" as string\\ntell application \"System Events\" to get value of property list item \"CFBundleName\" of property list file (app_path & \":Contents:Info.plist\")`);\n}\n","import process from 'node:process';\nimport {promisify} from 'node:util';\nimport {execFile, execFileSync} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runAppleScript(script, {humanReadableOutput = true, signal} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst execOptions = {};\n\tif (signal) {\n\t\texecOptions.signal = signal;\n\t}\n\n\tconst {stdout} = await execFileAsync('osascript', ['-e', script, outputArguments], execOptions);\n\treturn stdout.trim();\n}\n\nexport function runAppleScriptSync(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst stdout = execFileSync('osascript', ['-e', script, ...outputArguments], {\n\t\tencoding: 'utf8',\n\t\tstdio: ['ignore', 'pipe', 'ignore'],\n\t\ttimeout: 500,\n\t});\n\n\treturn stdout.trim();\n}\n","import {promisify} from 'node:util';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\n// TODO: Fix the casing of bundle identifiers in the next major version.\n\n// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake\n// ones that look real and match the macOS/Linux versions for cross-platform apps.\nconst windowsBrowserProgIds = {\n\tMSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // The missing `L` is correct.\n\tMSEdgeBHTML: {name: 'Edge Beta', id: 'com.microsoft.edge.beta'},\n\tMSEdgeDHTML: {name: 'Edge Dev', id: 'com.microsoft.edge.dev'},\n\tAppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},\n\tChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},\n\tChromeBHTML: {name: 'Chrome Beta', id: 'com.google.chrome.beta'},\n\tChromeDHTML: {name: 'Chrome Dev', id: 'com.google.chrome.dev'},\n\tChromiumHTM: {name: 'Chromium', id: 'org.chromium.Chromium'},\n\tBraveHTML: {name: 'Brave', id: 'com.brave.Browser'},\n\tBraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},\n\tBraveDHTML: {name: 'Brave Dev', id: 'com.brave.Browser.dev'},\n\tBraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},\n\tFirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},\n\tOperaStable: {name: 'Opera', id: 'com.operasoftware.Opera'},\n\tVivaldiHTM: {name: 'Vivaldi', id: 'com.vivaldi.Vivaldi'},\n\t'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},\n};\n\nexport const _windowsBrowserProgIdMap = new Map(Object.entries(windowsBrowserProgIds));\n\nexport class UnknownBrowserError extends Error {}\n\nexport default async function defaultBrowser(_execFileAsync = execFileAsync) {\n\tconst {stdout} = await _execFileAsync('reg', [\n\t\t'QUERY',\n\t\t' HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice',\n\t\t'/v',\n\t\t'ProgId',\n\t]);\n\n\tconst match = /ProgId\\s*REG_SZ\\s*(?<id>\\S+)/.exec(stdout);\n\tif (!match) {\n\t\tthrow new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);\n\t}\n\n\tconst {id} = match.groups;\n\n\tconst browser = windowsBrowserProgIds[id];\n\tif (!browser) {\n\t\tthrow new UnknownBrowserError(`Unknown browser ID: ${id}`);\n\t}\n\n\treturn browser;\n}\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 {\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}\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 // Parse response\n const data = (await response.json()) as APIResponse<T>;\n\n // Handle API-level errors\n if (!response.ok || !data.success) {\n throw mapAPIError(response.status, data);\n }\n\n return data.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 const errCode = response.errCode ?? 'UNKNOWN';\n const errMsg = response.errMsg ?? '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 * Custom error classes for CLI operations\n */\n\nimport { ErrorCode, ErrorCodes } 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 ) {\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 BuilderError extends CLIError {}\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 * refly logout - Revoke tokens and remove stored credentials\n */\n\nimport { Command } from 'commander';\nimport { ok } from '../utils/output.js';\nimport { clearAuth, isAuthenticated, getRefreshToken } from '../config/config.js';\nimport { apiRequest } from '../api/client.js';\nimport { logger } from '../utils/logger.js';\n\nexport const logoutCommand = new Command('logout')\n .description('Logout and remove stored credentials')\n .action(async () => {\n const wasAuthenticated = isAuthenticated();\n\n if (!wasAuthenticated) {\n return ok('logout', {\n message: 'No credentials were stored',\n });\n }\n\n // If using OAuth tokens, revoke them on the server\n const refreshToken = getRefreshToken();\n if (refreshToken) {\n try {\n logger.debug('Revoking OAuth tokens on server...');\n await apiRequest('/v1/auth/cli/oauth/revoke', {\n method: 'POST',\n });\n logger.debug('OAuth tokens revoked successfully');\n } catch (error) {\n // Ignore errors during logout (token might already be invalid)\n logger.debug('Failed to revoke tokens on server (ignored):', error);\n }\n }\n\n // Clear local credentials\n clearAuth();\n\n ok('logout', {\n message: 'Successfully logged out',\n });\n });\n","/**\n * refly status - Check CLI configuration and authentication status\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../utils/output.js';\nimport {\n loadConfig,\n getApiEndpoint,\n isAuthenticated,\n getOAuthProvider,\n getApiKeyInfo,\n} from '../config/config.js';\nimport { verifyConnection } from '../api/client.js';\nimport { isSkillInstalled } from '../skill/installer.js';\nimport { getReflyDir } from '../config/paths.js';\n\n// CLI version from package.json\nconst CLI_VERSION = '0.1.0';\n\nexport const statusCommand = new Command('status')\n .description('Check CLI configuration and authentication status')\n .action(async () => {\n try {\n loadConfig();\n const skillStatus = isSkillInstalled();\n\n // Check authentication\n let authStatus: 'valid' | 'expired' | 'missing' = 'missing';\n let user: { uid: string; name?: string; email?: string } | undefined;\n let authMethod: 'oauth' | 'apikey' | undefined;\n let authDetails: Record<string, unknown> = {};\n\n if (isAuthenticated()) {\n const verification = await verifyConnection();\n if (verification.authenticated) {\n authStatus = 'valid';\n user = verification.user;\n authMethod = verification.authMethod;\n\n // Add auth-specific details\n if (authMethod === 'oauth') {\n const provider = getOAuthProvider();\n authDetails = { provider };\n } else if (authMethod === 'apikey') {\n const keyInfo = getApiKeyInfo();\n authDetails = { keyId: keyInfo?.keyId, keyName: keyInfo?.name };\n }\n } else if (verification.connected) {\n authStatus = 'expired';\n }\n }\n\n // Build response\n const payload = {\n cli_version: CLI_VERSION,\n config_dir: getReflyDir(),\n api_endpoint: getApiEndpoint(),\n auth_status: authStatus,\n auth_method: authMethod ?? null,\n auth_details: Object.keys(authDetails).length > 0 ? authDetails : null,\n user: user ?? null,\n skill: {\n installed: skillStatus.installed,\n version: skillStatus.currentVersion ?? null,\n up_to_date: skillStatus.upToDate,\n },\n };\n\n // If not authenticated, return error response\n if (authStatus !== 'valid') {\n fail(\n ErrorCodes.AUTH_REQUIRED,\n authStatus === 'expired' ? 'Authentication expired' : 'Not authenticated',\n {\n details: payload,\n hint: 'refly login',\n },\n );\n }\n\n ok('status', payload);\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get status',\n { hint: 'Try running `refly init` first' },\n );\n }\n });\n","/**\n * refly whoami - Show current authenticated user\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../utils/output.js';\nimport { isAuthenticated } from '../config/config.js';\nimport { verifyConnection } from '../api/client.js';\n\nexport const whoamiCommand = new Command('whoami')\n .description('Show current authenticated user')\n .action(async () => {\n try {\n if (!isAuthenticated()) {\n fail(ErrorCodes.AUTH_REQUIRED, 'Not authenticated', { hint: 'refly login' });\n }\n\n const verification = await verifyConnection();\n\n if (!verification.authenticated || !verification.user) {\n fail(ErrorCodes.AUTH_EXPIRED, 'Authentication expired or invalid', { hint: 'refly login' });\n }\n\n ok('whoami', {\n uid: verification.user.uid,\n name: verification.user.name ?? null,\n email: verification.user.email ?? null,\n });\n } catch (error) {\n fail(\n ErrorCodes.AUTH_REQUIRED,\n error instanceof Error ? error.message : 'Failed to get user info',\n { hint: 'refly login' },\n );\n }\n });\n","/**\n * refly upgrade - Reinstall/upgrade skill files\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../utils/output.js';\nimport { installSkill, isSkillInstalled } from '../skill/installer.js';\n\nexport const upgradeCommand = new Command('upgrade')\n .description('Reinstall or upgrade skill files')\n .action(async () => {\n try {\n const beforeStatus = isSkillInstalled();\n const result = installSkill();\n\n ok('upgrade', {\n message: 'Skill files upgraded successfully',\n previousVersion: beforeStatus.currentVersion ?? null,\n newVersion: result.version,\n skillPath: result.skillPath,\n commandsInstalled: result.commandsInstalled,\n });\n } catch (error) {\n return fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to upgrade',\n { hint: 'Check permissions and try again' },\n );\n }\n });\n","/**\n * refly config - Manage CLI configuration\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../utils/output.js';\nimport { loadConfig, saveConfig } from '../config/config.js';\n\nexport const configCommand = new Command('config')\n .description('Manage CLI configuration')\n .addCommand(\n new Command('get')\n .description('Get configuration value')\n .argument('[key]', 'Configuration key (e.g., api.endpoint)')\n .action((key?: string) => {\n const config = loadConfig();\n\n if (!key) {\n // Show all config (mask sensitive values)\n const safeConfig = {\n ...config,\n auth: config.auth\n ? {\n method: config.auth.method,\n provider: config.auth.provider,\n apiKeyId: config.auth.apiKeyId,\n apiKeyName: config.auth.apiKeyName,\n user: config.auth.user,\n // Mask sensitive tokens\n accessToken: config.auth.accessToken ? '***' : undefined,\n refreshToken: config.auth.refreshToken ? '***' : undefined,\n apiKey: config.auth.apiKey ? '***' : undefined,\n }\n : undefined,\n };\n ok('config', safeConfig);\n return;\n }\n\n // Get specific key\n const value = getNestedValue(config, key);\n if (value === undefined) {\n return fail(ErrorCodes.NOT_FOUND, `Configuration key '${key}' not found`);\n }\n\n ok('config', { [key]: value });\n }),\n )\n .addCommand(\n new Command('set')\n .description('Set configuration value')\n .argument('<key>', 'Configuration key (e.g., api.endpoint)')\n .argument('<value>', 'Configuration value')\n .action((key: string, value: string) => {\n const config = loadConfig();\n\n // Only allow setting certain keys\n const allowedKeys = ['api.endpoint'];\n if (!allowedKeys.includes(key)) {\n return fail(ErrorCodes.INVALID_INPUT, `Cannot set '${key}'`, {\n hint: `Allowed keys: ${allowedKeys.join(', ')}`,\n });\n }\n\n setNestedValue(config, key, value);\n saveConfig(config);\n\n ok('config', {\n message: `Set ${key} = ${value}`,\n [key]: value,\n });\n }),\n )\n .addCommand(\n new Command('reset')\n .description('Reset configuration to defaults')\n .option('--api', 'Reset only API endpoint')\n .action((options) => {\n const config = loadConfig();\n\n if (options.api) {\n config.api = { endpoint: 'https://api.refly.ai' };\n saveConfig(config);\n ok('config', {\n message: 'API endpoint reset to default',\n 'api.endpoint': 'https://api.refly.ai',\n });\n } else {\n // Full reset (preserve auth)\n const auth = config.auth;\n saveConfig({\n version: 1,\n api: { endpoint: 'https://api.refly.ai' },\n auth,\n });\n ok('config', { message: 'Configuration reset to defaults (auth preserved)' });\n }\n }),\n )\n .addCommand(\n new Command('path').description('Show configuration file path').action(() => {\n const { getConfigPath } = require('../config/paths.js');\n ok('config', { path: getConfigPath() });\n }),\n );\n\n// Also add shorthand for common operations\nconfigCommand.action(() => {\n // Default action: show current config\n const config = loadConfig();\n const safeConfig = {\n version: config.version,\n api: config.api,\n auth: config.auth\n ? {\n method: config.auth.method,\n provider: config.auth.provider,\n user: config.auth.user,\n }\n : undefined,\n skill: config.skill,\n };\n ok('config', safeConfig);\n});\n\n/**\n * Get nested value from object using dot notation\n */\nfunction getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((current: unknown, key) => {\n if (current && typeof current === 'object' && key in current) {\n return (current as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * Set nested value in object using dot notation\n */\nfunction setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {\n const keys = path.split('.');\n const lastKey = keys.pop()!;\n\n let current = obj;\n for (const key of keys) {\n if (!(key in current) || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n\n current[lastKey] = value;\n}\n","/**\n * refly builder - Builder command group\n */\n\nimport { Command } from 'commander';\nimport { builderStartCommand } from './start.js';\nimport { builderStatusCommand } from './status.js';\nimport { builderAddNodeCommand } from './add-node.js';\nimport { builderUpdateNodeCommand } from './update-node.js';\nimport { builderRemoveNodeCommand } from './remove-node.js';\nimport { builderConnectCommand } from './connect.js';\nimport { builderDisconnectCommand } from './disconnect.js';\nimport { builderGraphCommand } from './graph.js';\nimport { builderValidateCommand } from './validate.js';\nimport { builderCommitCommand } from './commit.js';\nimport { builderAbortCommand } from './abort.js';\n\nexport const builderCommand = new Command('builder')\n .description('Build workflows incrementally with local state')\n .addCommand(builderStartCommand)\n .addCommand(builderStatusCommand)\n .addCommand(builderAddNodeCommand)\n .addCommand(builderUpdateNodeCommand)\n .addCommand(builderRemoveNodeCommand)\n .addCommand(builderConnectCommand)\n .addCommand(builderDisconnectCommand)\n .addCommand(builderGraphCommand)\n .addCommand(builderValidateCommand)\n .addCommand(builderCommitCommand)\n .addCommand(builderAbortCommand);\n","/**\n * refly builder start - Start a new builder session\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { createSession, saveSession, setCurrent, getCurrentSession } from '../../builder/store.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderStartCommand = new Command('start')\n .description('Start a new builder session')\n .requiredOption('--name <name>', 'Workflow name')\n .option('--description <description>', 'Workflow description')\n .option('--force', 'Abort existing session and start new')\n .action(async (options) => {\n try {\n const { name, description, force } = options;\n\n // Check for existing session\n const existing = getCurrentSession();\n if (existing && existing.state !== 'COMMITTED' && existing.state !== 'ABORTED') {\n if (!force) {\n throw new BuilderError(\n ErrorCodes.BUILDER_ALREADY_STARTED,\n `A builder session is already active: ${existing.workflowDraft.name}`,\n { sessionId: existing.id, state: existing.state },\n 'Use --force to abort and start new, or run `refly builder abort`',\n );\n }\n // Force: abort existing\n setCurrent(null);\n }\n\n // Create new session\n const session = createSession(name, description);\n saveSession(session);\n setCurrent(session.id);\n\n ok('builder.start', {\n message: 'Builder session started',\n sessionId: session.id,\n workflowName: name,\n state: session.state,\n nextStep: 'Add nodes with `refly builder add-node --node \\'{\"id\":\"n1\",\"type\":\"...\"}\\'`',\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to start builder',\n );\n }\n });\n","/**\n * Builder session persistence with atomic writes\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as crypto from 'node:crypto';\nimport { getBuilderDir, getCurrentSessionPath, getSessionPath } from '../config/paths.js';\nimport { BuilderSession, BuilderSessionSchema, BuilderState } from './schema.js';\n\n/**\n * Generate a unique session ID\n */\nexport function generateSessionId(): string {\n return crypto.randomUUID();\n}\n\n/**\n * Create a new builder session\n */\nexport function createSession(name: string, description?: string): BuilderSession {\n const now = new Date().toISOString();\n const session: BuilderSession = {\n id: generateSessionId(),\n version: 1,\n state: BuilderState.DRAFT,\n createdAt: now,\n updatedAt: now,\n workflowDraft: {\n name,\n description,\n nodes: [],\n },\n validation: { ok: false, errors: [] },\n };\n\n return session;\n}\n\n/**\n * Save session to disk atomically\n */\nexport function saveSession(session: BuilderSession): void {\n const sessionPath = getSessionPath(session.id);\n const tempPath = path.join(getBuilderDir(), `.session-${session.id}-${Date.now()}.tmp`);\n\n // Update timestamp\n session.updatedAt = new Date().toISOString();\n\n // Validate before saving\n const validated = BuilderSessionSchema.parse(session);\n\n // Write to temp file first\n fs.writeFileSync(tempPath, JSON.stringify(validated, null, 2), {\n mode: 0o600,\n });\n\n // Atomic rename\n fs.renameSync(tempPath, sessionPath);\n}\n\n/**\n * Load session from disk\n */\nexport function loadSession(sessionId: string): BuilderSession | null {\n const sessionPath = getSessionPath(sessionId);\n\n try {\n if (!fs.existsSync(sessionPath)) {\n return null;\n }\n\n const content = fs.readFileSync(sessionPath, 'utf-8');\n const parsed = JSON.parse(content);\n return BuilderSessionSchema.parse(parsed);\n } catch {\n return null;\n }\n}\n\n/**\n * Delete session from disk\n */\nexport function deleteSession(sessionId: string): void {\n const sessionPath = getSessionPath(sessionId);\n\n try {\n if (fs.existsSync(sessionPath)) {\n fs.unlinkSync(sessionPath);\n }\n } catch {\n // Ignore deletion errors\n }\n}\n\n/**\n * Set current session pointer\n */\nexport function setCurrent(sessionId: string | null): void {\n const currentPath = getCurrentSessionPath();\n\n if (sessionId === null) {\n // Clear current pointer\n try {\n if (fs.existsSync(currentPath)) {\n fs.unlinkSync(currentPath);\n }\n } catch {\n // Ignore\n }\n return;\n }\n\n fs.writeFileSync(currentPath, sessionId, { mode: 0o600 });\n}\n\n/**\n * Get current session ID\n */\nexport function getCurrentSessionId(): string | null {\n const currentPath = getCurrentSessionPath();\n\n try {\n if (!fs.existsSync(currentPath)) {\n return null;\n }\n\n return fs.readFileSync(currentPath, 'utf-8').trim();\n } catch {\n return null;\n }\n}\n\n/**\n * Get current session (convenience function)\n */\nexport function getCurrentSession(): BuilderSession | null {\n const sessionId = getCurrentSessionId();\n if (!sessionId) return null;\n\n return loadSession(sessionId);\n}\n\n/**\n * List all sessions\n */\nexport function listSessions(): BuilderSession[] {\n const builderDir = getBuilderDir();\n\n try {\n const files = fs.readdirSync(builderDir);\n const sessions: BuilderSession[] = [];\n\n for (const file of files) {\n if (file.startsWith('session-') && file.endsWith('.json')) {\n const sessionId = file.replace('session-', '').replace('.json', '');\n const session = loadSession(sessionId);\n if (session) {\n sessions.push(session);\n }\n }\n }\n\n return sessions.sort(\n (a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime(),\n );\n } catch {\n return [];\n }\n}\n","/**\n * Builder session schema and types\n */\n\nimport { z } from 'zod';\n\n// Node schema\nexport const NodeSchema = z.object({\n id: z.string().min(1),\n type: z.string().min(1),\n input: z.record(z.unknown()).default({}),\n dependsOn: z.array(z.string()).default([]),\n});\n\nexport type WorkflowNode = z.infer<typeof NodeSchema>;\n\n// Workflow draft schema\nexport const WorkflowDraftSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n nodes: z.array(NodeSchema).default([]),\n metadata: z\n .object({\n tags: z.array(z.string()).optional(),\n owner: z.string().optional(),\n })\n .optional(),\n});\n\nexport type WorkflowDraft = z.infer<typeof WorkflowDraftSchema>;\n\n// Validation result\nexport const ValidationResultSchema = z.object({\n ok: z.boolean(),\n errors: z\n .array(\n z.object({\n code: z.string(),\n message: z.string(),\n nodeId: z.string().optional(),\n details: z.record(z.unknown()).optional(),\n }),\n )\n .default([]),\n});\n\nexport type ValidationResult = z.infer<typeof ValidationResultSchema>;\n\n// Builder state enum\nexport const BuilderState = {\n IDLE: 'IDLE',\n DRAFT: 'DRAFT',\n VALIDATED: 'VALIDATED',\n COMMITTED: 'COMMITTED',\n ABORTED: 'ABORTED',\n} as const;\n\nexport type BuilderStateType = (typeof BuilderState)[keyof typeof BuilderState];\n\n// Commit info\nexport const CommitInfoSchema = z.object({\n workflowId: z.string().optional(),\n committedAt: z.string().optional(),\n});\n\nexport type CommitInfo = z.infer<typeof CommitInfoSchema>;\n\n// Full session schema\nexport const BuilderSessionSchema = z.object({\n id: z.string(),\n version: z.number().default(1),\n state: z.enum(['IDLE', 'DRAFT', 'VALIDATED', 'COMMITTED', 'ABORTED']),\n createdAt: z.string(),\n updatedAt: z.string(),\n workflowDraft: WorkflowDraftSchema,\n validation: ValidationResultSchema.default({ ok: false, errors: [] }),\n commit: CommitInfoSchema.optional(),\n});\n\nexport type BuilderSession = z.infer<typeof BuilderSessionSchema>;\n\n// Diff types for operations\nexport interface NodeDiff {\n action: 'add' | 'update' | 'remove';\n nodeId: string;\n before?: WorkflowNode;\n after?: WorkflowNode;\n}\n\nexport interface ConnectionDiff {\n action: 'connect' | 'disconnect';\n from: string;\n to: string;\n}\n\nexport type Diff = NodeDiff | ConnectionDiff;\n","/**\n * refly builder status - Show current builder session status\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { generateGraph } from '../../builder/graph.js';\n\nexport const builderStatusCommand = new Command('status')\n .description('Show current builder session status')\n .action(async () => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n const graph = generateGraph(session);\n\n ok('builder.status', {\n sessionId: session.id,\n state: session.state,\n workflowName: session.workflowDraft.name,\n description: session.workflowDraft.description ?? null,\n createdAt: session.createdAt,\n updatedAt: session.updatedAt,\n nodes: graph.nodes,\n stats: graph.stats,\n validation: session.validation,\n commit: session.commit ?? null,\n });\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get status',\n );\n }\n });\n","/**\n * Graph utilities for visualizing workflow DAG\n */\n\nimport { BuilderSession, WorkflowNode } from './schema.js';\n\nexport interface Edge {\n from: string;\n to: string;\n}\n\nexport interface GraphOutput {\n nodes: Array<{\n id: string;\n type: string;\n dependsOn: string[];\n }>;\n edges: Edge[];\n stats: {\n nodeCount: number;\n edgeCount: number;\n rootNodes: string[];\n leafNodes: string[];\n };\n}\n\n/**\n * Generate graph representation of the workflow\n */\nexport function generateGraph(session: BuilderSession): GraphOutput {\n const nodes = session.workflowDraft.nodes;\n const edges: Edge[] = [];\n\n // Build edges from dependencies\n for (const node of nodes) {\n for (const depId of node.dependsOn) {\n edges.push({ from: depId, to: node.id });\n }\n }\n\n // Find root nodes (no dependencies)\n const rootNodes = nodes.filter((n) => n.dependsOn.length === 0).map((n) => n.id);\n\n // Find leaf nodes (no one depends on them)\n const hasDependent = new Set<string>();\n for (const node of nodes) {\n for (const depId of node.dependsOn) {\n hasDependent.add(depId);\n }\n }\n const leafNodes = nodes.filter((n) => !hasDependent.has(n.id)).map((n) => n.id);\n\n return {\n nodes: nodes.map((n) => ({\n id: n.id,\n type: n.type,\n dependsOn: n.dependsOn,\n })),\n edges,\n stats: {\n nodeCount: nodes.length,\n edgeCount: edges.length,\n rootNodes,\n leafNodes,\n },\n };\n}\n\n/**\n * Get topological order of nodes (for execution)\n */\nexport function getTopologicalOrder(nodes: WorkflowNode[]): string[] {\n const nodeMap = new Map<string, WorkflowNode>();\n const inDegree = new Map<string, number>();\n const adjacency = new Map<string, string[]>();\n\n // Initialize\n for (const node of nodes) {\n nodeMap.set(node.id, node);\n inDegree.set(node.id, 0);\n adjacency.set(node.id, []);\n }\n\n // Build graph\n for (const node of nodes) {\n for (const depId of node.dependsOn) {\n adjacency.get(depId)?.push(node.id);\n inDegree.set(node.id, (inDegree.get(node.id) ?? 0) + 1);\n }\n }\n\n // Kahn's algorithm\n const queue: string[] = [];\n const result: string[] = [];\n\n // Start with nodes that have no dependencies\n for (const [nodeId, degree] of inDegree) {\n if (degree === 0) {\n queue.push(nodeId);\n }\n }\n\n while (queue.length > 0) {\n const nodeId = queue.shift()!;\n result.push(nodeId);\n\n for (const dependent of adjacency.get(nodeId) ?? []) {\n const newDegree = (inDegree.get(dependent) ?? 1) - 1;\n inDegree.set(dependent, newDegree);\n if (newDegree === 0) {\n queue.push(dependent);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Generate ASCII representation of the graph\n */\nexport function generateAsciiGraph(session: BuilderSession): string {\n const graph = generateGraph(session);\n\n if (graph.nodes.length === 0) {\n return '(empty workflow)';\n }\n\n const lines: string[] = [];\n lines.push(`Workflow: ${session.workflowDraft.name}`);\n lines.push(`Nodes: ${graph.stats.nodeCount}, Edges: ${graph.stats.edgeCount}`);\n lines.push('');\n\n // Get execution order\n const order = getTopologicalOrder(session.workflowDraft.nodes);\n\n for (const nodeId of order) {\n const node = session.workflowDraft.nodes.find((n) => n.id === nodeId);\n if (!node) continue;\n\n const isRoot = graph.stats.rootNodes.includes(nodeId);\n const isLeaf = graph.stats.leafNodes.includes(nodeId);\n\n let prefix = ' ';\n if (isRoot) prefix = '> ';\n if (isLeaf) prefix = '* ';\n\n const deps = node.dependsOn.length > 0 ? ` <- [${node.dependsOn.join(', ')}]` : '';\n lines.push(`${prefix}[${node.id}] ${node.type}${deps}`);\n }\n\n lines.push('');\n lines.push('Legend: > root, * leaf');\n\n return lines.join('\\n');\n}\n","/**\n * refly builder add-node - Add a node to the draft\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { addNode } from '../../builder/ops.js';\nimport { generateGraph } from '../../builder/graph.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderAddNodeCommand = new Command('add-node')\n .description('Add a node to the workflow draft')\n .requiredOption('--node <json>', 'Node definition as JSON')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Parse node JSON\n let nodeData: unknown;\n try {\n nodeData = JSON.parse(options.node);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --node', {\n hint: 'Ensure the node is valid JSON: --node \\'{\"id\":\"n1\",\"type\":\"...\"}\\'',\n });\n }\n\n // Add node\n const { node, diff } = addNode(session, nodeData);\n const graph = generateGraph(session);\n\n ok('builder.add-node', {\n message: `Node \"${node.id}\" added`,\n node,\n diff,\n builder: {\n state: session.state,\n nodeCount: graph.stats.nodeCount,\n },\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to add node',\n );\n }\n });\n","/**\n * Builder operations - add, update, remove, connect nodes\n */\n\nimport { BuilderSession, WorkflowNode, NodeSchema, Diff } from './schema.js';\nimport { invalidate, requireEditable } from './state.js';\nimport { BuilderError } from '../utils/errors.js';\nimport { ErrorCodes } from '../utils/output.js';\n\n/**\n * Add a node to the draft\n */\nexport function addNode(\n session: BuilderSession,\n nodeData: unknown,\n): { node: WorkflowNode; diff: Diff } {\n requireEditable(session);\n\n // Parse and validate node\n const node = NodeSchema.parse(nodeData);\n\n // Check for duplicate ID\n const existing = session.workflowDraft.nodes.find((n) => n.id === node.id);\n if (existing) {\n throw new BuilderError(\n ErrorCodes.DUPLICATE_NODE_ID,\n `Node with ID \"${node.id}\" already exists`,\n { nodeId: node.id },\n 'Use a different node ID or update the existing node',\n );\n }\n\n // Add node\n session.workflowDraft.nodes.push(node);\n\n // Invalidate validation\n invalidate(session);\n\n const diff: Diff = {\n action: 'add',\n nodeId: node.id,\n after: node,\n };\n\n return { node, diff };\n}\n\n/**\n * Update an existing node\n */\nexport function updateNode(\n session: BuilderSession,\n nodeId: string,\n patch: Record<string, unknown>,\n): { node: WorkflowNode; diff: Diff } {\n requireEditable(session);\n\n // Find node\n const index = session.workflowDraft.nodes.findIndex((n) => n.id === nodeId);\n if (index === -1) {\n throw new BuilderError(\n ErrorCodes.NODE_NOT_FOUND,\n `Node \"${nodeId}\" not found`,\n { nodeId },\n 'Check node ID with `refly builder status`',\n );\n }\n\n const before = { ...session.workflowDraft.nodes[index] };\n\n // Apply patch (except ID which cannot be changed)\n const updated = {\n ...before,\n ...patch,\n id: nodeId, // Preserve original ID\n };\n\n // Validate updated node\n const node = NodeSchema.parse(updated);\n session.workflowDraft.nodes[index] = node;\n\n // Invalidate validation\n invalidate(session);\n\n const diff: Diff = {\n action: 'update',\n nodeId: node.id,\n before,\n after: node,\n };\n\n return { node, diff };\n}\n\n/**\n * Remove a node from the draft\n */\nexport function removeNode(\n session: BuilderSession,\n nodeId: string,\n): { removed: WorkflowNode; diff: Diff; cleanedDeps: string[] } {\n requireEditable(session);\n\n // Find node\n const index = session.workflowDraft.nodes.findIndex((n) => n.id === nodeId);\n if (index === -1) {\n throw new BuilderError(\n ErrorCodes.NODE_NOT_FOUND,\n `Node \"${nodeId}\" not found`,\n { nodeId },\n 'Check node ID with `refly builder status`',\n );\n }\n\n const removed = session.workflowDraft.nodes[index];\n\n // Remove the node\n session.workflowDraft.nodes.splice(index, 1);\n\n // Clean up dependencies referencing this node\n const cleanedDeps: string[] = [];\n for (const node of session.workflowDraft.nodes) {\n const depIndex = node.dependsOn.indexOf(nodeId);\n if (depIndex !== -1) {\n node.dependsOn.splice(depIndex, 1);\n cleanedDeps.push(node.id);\n }\n }\n\n // Invalidate validation\n invalidate(session);\n\n const diff: Diff = {\n action: 'remove',\n nodeId: nodeId,\n before: removed,\n };\n\n return { removed, diff, cleanedDeps };\n}\n\n/**\n * Connect two nodes (add dependency)\n */\nexport function connectNodes(\n session: BuilderSession,\n fromId: string,\n toId: string,\n): { diff: Diff } {\n requireEditable(session);\n\n // Find both nodes\n const fromNode = session.workflowDraft.nodes.find((n) => n.id === fromId);\n const toNode = session.workflowDraft.nodes.find((n) => n.id === toId);\n\n if (!fromNode) {\n throw new BuilderError(ErrorCodes.NODE_NOT_FOUND, `Source node \"${fromId}\" not found`, {\n nodeId: fromId,\n });\n }\n\n if (!toNode) {\n throw new BuilderError(ErrorCodes.NODE_NOT_FOUND, `Target node \"${toId}\" not found`, {\n nodeId: toId,\n });\n }\n\n // Prevent self-connection\n if (fromId === toId) {\n throw new BuilderError(ErrorCodes.VALIDATION_ERROR, 'Cannot connect a node to itself', {\n nodeId: fromId,\n });\n }\n\n // Add dependency (toNode depends on fromNode)\n if (!toNode.dependsOn.includes(fromId)) {\n toNode.dependsOn.push(fromId);\n }\n\n // Invalidate validation\n invalidate(session);\n\n const diff: Diff = {\n action: 'connect',\n from: fromId,\n to: toId,\n };\n\n return { diff };\n}\n\n/**\n * Disconnect two nodes (remove dependency)\n */\nexport function disconnectNodes(\n session: BuilderSession,\n fromId: string,\n toId: string,\n): { diff: Diff } {\n requireEditable(session);\n\n // Find target node\n const toNode = session.workflowDraft.nodes.find((n) => n.id === toId);\n\n if (!toNode) {\n throw new BuilderError(ErrorCodes.NODE_NOT_FOUND, `Target node \"${toId}\" not found`, {\n nodeId: toId,\n });\n }\n\n // Remove dependency\n const depIndex = toNode.dependsOn.indexOf(fromId);\n if (depIndex !== -1) {\n toNode.dependsOn.splice(depIndex, 1);\n }\n\n // Invalidate validation\n invalidate(session);\n\n const diff: Diff = {\n action: 'disconnect',\n from: fromId,\n to: toId,\n };\n\n return { diff };\n}\n","/**\n * Builder state machine - manages state transitions\n */\n\nimport { BuilderSession, BuilderState, BuilderStateType } from './schema.js';\nimport { saveSession } from './store.js';\nimport { BuilderError } from '../utils/errors.js';\nimport { ErrorCodes } from '../utils/output.js';\n\n/**\n * Valid state transitions\n */\nconst VALID_TRANSITIONS: Record<BuilderStateType, BuilderStateType[]> = {\n [BuilderState.IDLE]: [BuilderState.DRAFT],\n [BuilderState.DRAFT]: [BuilderState.VALIDATED, BuilderState.ABORTED],\n [BuilderState.VALIDATED]: [BuilderState.DRAFT, BuilderState.COMMITTED, BuilderState.ABORTED],\n [BuilderState.COMMITTED]: [], // Terminal state\n [BuilderState.ABORTED]: [], // Terminal state\n};\n\n/**\n * Check if a state transition is valid\n */\nexport function canTransition(from: BuilderStateType, to: BuilderStateType): boolean {\n return VALID_TRANSITIONS[from]?.includes(to) ?? false;\n}\n\n/**\n * Transition session to a new state\n */\nexport function transitionTo(session: BuilderSession, newState: BuilderStateType): void {\n if (!canTransition(session.state, newState)) {\n throw new BuilderError(\n ErrorCodes.INVALID_STATE,\n `Cannot transition from ${session.state} to ${newState}`,\n { currentState: session.state, targetState: newState },\n `Current state is ${session.state}`,\n );\n }\n\n session.state = newState;\n saveSession(session);\n}\n\n/**\n * Check if session is editable\n */\nexport function isEditable(session: BuilderSession): boolean {\n return session.state === BuilderState.DRAFT || session.state === BuilderState.VALIDATED;\n}\n\n/**\n * Check if session can be validated\n */\nexport function canValidate(session: BuilderSession): boolean {\n return session.state === BuilderState.DRAFT;\n}\n\n/**\n * Check if session can be committed\n */\nexport function canCommit(session: BuilderSession): boolean {\n return session.state === BuilderState.VALIDATED && session.validation.ok;\n}\n\n/**\n * Invalidate session (after any edit operation)\n * Transitions VALIDATED -> DRAFT\n */\nexport function invalidate(session: BuilderSession): void {\n if (session.state === BuilderState.VALIDATED) {\n session.state = BuilderState.DRAFT;\n session.validation = { ok: false, errors: [] };\n }\n // If already DRAFT, just clear validation\n if (session.state === BuilderState.DRAFT) {\n session.validation = { ok: false, errors: [] };\n }\n saveSession(session);\n}\n\n/**\n * Guard: ensure session is started\n */\nexport function requireStarted(session: BuilderSession | null): asserts session is BuilderSession {\n if (!session) {\n throw new BuilderError(\n ErrorCodes.BUILDER_NOT_STARTED,\n 'No active builder session',\n undefined,\n 'refly builder start --name \"your-workflow\"',\n );\n }\n}\n\n/**\n * Guard: ensure session is editable\n */\nexport function requireEditable(session: BuilderSession): void {\n requireStarted(session);\n\n if (!isEditable(session)) {\n throw new BuilderError(\n ErrorCodes.INVALID_STATE,\n `Session is ${session.state} and cannot be edited`,\n { state: session.state },\n session.state === BuilderState.COMMITTED\n ? 'Start a new session with `refly builder start`'\n : 'Abort and start a new session',\n );\n }\n}\n\n/**\n * Guard: ensure session can be validated\n */\nexport function requireValidatable(session: BuilderSession): void {\n requireStarted(session);\n\n if (session.state === BuilderState.VALIDATED) {\n // Already validated, OK to re-validate\n return;\n }\n\n if (session.state !== BuilderState.DRAFT) {\n throw new BuilderError(\n ErrorCodes.INVALID_STATE,\n `Session is ${session.state} and cannot be validated`,\n { state: session.state },\n );\n }\n}\n\n/**\n * Guard: ensure session can be committed\n */\nexport function requireCommittable(session: BuilderSession): void {\n requireStarted(session);\n\n if (session.state !== BuilderState.VALIDATED) {\n throw new BuilderError(\n ErrorCodes.VALIDATION_REQUIRED,\n 'Session must be validated before commit',\n { state: session.state },\n 'refly builder validate',\n );\n }\n\n if (!session.validation.ok) {\n throw new BuilderError(\n ErrorCodes.VALIDATION_ERROR,\n 'Validation has errors',\n { errors: session.validation.errors },\n 'Fix validation errors and run `refly builder validate` again',\n );\n }\n}\n","/**\n * refly builder update-node - Update an existing node\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { updateNode } from '../../builder/ops.js';\nimport { generateGraph } from '../../builder/graph.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderUpdateNodeCommand = new Command('update-node')\n .description('Update an existing node in the workflow draft')\n .requiredOption('--id <nodeId>', 'Node ID to update')\n .requiredOption('--patch <json>', 'Patch to apply as JSON')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Parse patch JSON\n let patch: Record<string, unknown>;\n try {\n patch = JSON.parse(options.patch);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --patch', {\n hint: 'Ensure the patch is valid JSON',\n });\n }\n\n // Update node\n const { node, diff } = updateNode(session, options.id, patch);\n const graph = generateGraph(session);\n\n ok('builder.update-node', {\n message: `Node \"${node.id}\" updated`,\n node,\n diff,\n builder: {\n state: session.state,\n nodeCount: graph.stats.nodeCount,\n },\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to update node',\n );\n }\n });\n","/**\n * refly builder remove-node - Remove a node from the draft\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { removeNode } from '../../builder/ops.js';\nimport { generateGraph } from '../../builder/graph.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderRemoveNodeCommand = new Command('remove-node')\n .description('Remove a node from the workflow draft')\n .requiredOption('--id <nodeId>', 'Node ID to remove')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Remove node\n const { removed, diff, cleanedDeps } = removeNode(session, options.id);\n const graph = generateGraph(session);\n\n ok('builder.remove-node', {\n message: `Node \"${removed.id}\" removed`,\n removed,\n diff,\n cleanedDeps:\n cleanedDeps.length > 0\n ? {\n message: 'Dependencies cleaned from nodes',\n nodes: cleanedDeps,\n }\n : null,\n builder: {\n state: session.state,\n nodeCount: graph.stats.nodeCount,\n },\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to remove node',\n );\n }\n });\n","/**\n * refly builder connect - Connect two nodes\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { connectNodes } from '../../builder/ops.js';\nimport { generateGraph } from '../../builder/graph.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderConnectCommand = new Command('connect')\n .description('Connect two nodes (add dependency)')\n .requiredOption('--from <nodeId>', 'Source node ID')\n .requiredOption('--to <nodeId>', 'Target node ID (will depend on source)')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Connect nodes\n const { diff } = connectNodes(session, options.from, options.to);\n const graph = generateGraph(session);\n\n ok('builder.connect', {\n message: `Connected \"${options.from}\" -> \"${options.to}\"`,\n diff,\n builder: {\n state: session.state,\n edgeCount: graph.stats.edgeCount,\n },\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to connect nodes',\n );\n }\n });\n","/**\n * refly builder disconnect - Disconnect two nodes\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { disconnectNodes } from '../../builder/ops.js';\nimport { generateGraph } from '../../builder/graph.js';\nimport { BuilderError } from '../../utils/errors.js';\n\nexport const builderDisconnectCommand = new Command('disconnect')\n .description('Disconnect two nodes (remove dependency)')\n .requiredOption('--from <nodeId>', 'Source node ID')\n .requiredOption('--to <nodeId>', 'Target node ID')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Disconnect nodes\n const { diff } = disconnectNodes(session, options.from, options.to);\n const graph = generateGraph(session);\n\n ok('builder.disconnect', {\n message: `Disconnected \"${options.from}\" -> \"${options.to}\"`,\n diff,\n builder: {\n state: session.state,\n edgeCount: graph.stats.edgeCount,\n },\n });\n } catch (error) {\n if (error instanceof BuilderError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to disconnect nodes',\n );\n }\n });\n","/**\n * refly builder graph - Show DAG structure\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { generateGraph, generateAsciiGraph } from '../../builder/graph.js';\n\nexport const builderGraphCommand = new Command('graph')\n .description('Show workflow DAG structure')\n .option('--ascii', 'Output ASCII representation')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n const graph = generateGraph(session);\n\n if (options.ascii) {\n // ASCII mode - still JSON but include ASCII representation\n const ascii = generateAsciiGraph(session);\n ok('builder.graph', {\n ascii,\n ...graph,\n });\n } else {\n ok('builder.graph', graph);\n }\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to generate graph',\n );\n }\n });\n","/**\n * refly builder validate - Validate the workflow draft\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { validateDraft } from '../../builder/validate.js';\nimport { generateGraph } from '../../builder/graph.js';\n\nexport const builderValidateCommand = new Command('validate')\n .description('Validate the workflow draft')\n .action(async () => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Validate\n const result = validateDraft(session);\n const graph = generateGraph(session);\n\n if (!result.ok) {\n fail(ErrorCodes.VALIDATION_ERROR, 'Workflow validation failed', {\n details: {\n errors: result.errors,\n graph: graph.stats,\n },\n hint: 'Fix the errors and run validate again',\n });\n }\n\n ok('builder.validate', {\n message: 'Workflow validation passed',\n state: session.state,\n graph: graph.stats,\n nextStep: 'Run `refly builder commit` to create the workflow',\n });\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to validate',\n );\n }\n });\n","/**\n * DAG validation for workflow drafts\n */\n\nimport { BuilderSession, ValidationResult, WorkflowNode, BuilderState } from './schema.js';\nimport { saveSession } from './store.js';\n\ninterface ValidationError {\n code: string;\n message: string;\n nodeId?: string;\n details?: Record<string, unknown>;\n}\n\n/**\n * Validate a workflow draft\n */\nexport function validateDraft(session: BuilderSession): ValidationResult {\n const errors: ValidationError[] = [];\n const nodes = session.workflowDraft.nodes;\n\n // 1. Check workflow name\n if (!session.workflowDraft.name || session.workflowDraft.name.trim() === '') {\n errors.push({\n code: 'MISSING_NAME',\n message: 'Workflow name is required',\n });\n }\n\n // 2. Check for empty nodes\n if (nodes.length === 0) {\n errors.push({\n code: 'EMPTY_WORKFLOW',\n message: 'Workflow must have at least one node',\n });\n }\n\n // 3. Check node ID uniqueness\n const nodeIds = new Set<string>();\n for (const node of nodes) {\n if (nodeIds.has(node.id)) {\n errors.push({\n code: 'DUPLICATE_NODE_ID',\n message: `Duplicate node ID: ${node.id}`,\n nodeId: node.id,\n });\n }\n nodeIds.add(node.id);\n }\n\n // 4. Check required fields\n for (const node of nodes) {\n if (!node.id || node.id.trim() === '') {\n errors.push({\n code: 'MISSING_NODE_ID',\n message: 'Node ID is required',\n details: { node },\n });\n }\n\n if (!node.type || node.type.trim() === '') {\n errors.push({\n code: 'MISSING_NODE_TYPE',\n message: 'Node type is required',\n nodeId: node.id,\n });\n }\n }\n\n // 5. Check dependency references\n for (const node of nodes) {\n for (const depId of node.dependsOn) {\n if (!nodeIds.has(depId)) {\n errors.push({\n code: 'MISSING_DEPENDENCY',\n message: `Node \"${node.id}\" depends on non-existent node \"${depId}\"`,\n nodeId: node.id,\n details: { missingDep: depId },\n });\n }\n\n // Check self-reference\n if (depId === node.id) {\n errors.push({\n code: 'SELF_REFERENCE',\n message: `Node \"${node.id}\" cannot depend on itself`,\n nodeId: node.id,\n });\n }\n }\n }\n\n // 6. Cycle detection\n const cycleResult = detectCycles(nodes);\n if (cycleResult.hasCycle) {\n errors.push({\n code: 'CYCLE_DETECTED',\n message: `Circular dependency detected: ${cycleResult.cycle?.join(' -> ')}`,\n details: { cycle: cycleResult.cycle },\n });\n }\n\n // Build result\n const result: ValidationResult = {\n ok: errors.length === 0,\n errors,\n };\n\n // Update session\n session.validation = result;\n if (result.ok && session.state === BuilderState.DRAFT) {\n session.state = BuilderState.VALIDATED;\n }\n saveSession(session);\n\n return result;\n}\n\n/**\n * Detect cycles in the DAG using DFS\n */\nfunction detectCycles(nodes: WorkflowNode[]): { hasCycle: boolean; cycle?: string[] } {\n const nodeMap = new Map<string, WorkflowNode>();\n for (const node of nodes) {\n nodeMap.set(node.id, node);\n }\n\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n function dfs(nodeId: string): string[] | null {\n if (recursionStack.has(nodeId)) {\n // Found cycle - extract cycle path\n const cycleStart = path.indexOf(nodeId);\n return [...path.slice(cycleStart), nodeId];\n }\n\n if (visited.has(nodeId)) {\n return null;\n }\n\n visited.add(nodeId);\n recursionStack.add(nodeId);\n path.push(nodeId);\n\n const node = nodeMap.get(nodeId);\n if (node) {\n for (const depId of node.dependsOn) {\n const cycle = dfs(depId);\n if (cycle) {\n return cycle;\n }\n }\n }\n\n path.pop();\n recursionStack.delete(nodeId);\n return null;\n }\n\n for (const node of nodes) {\n const cycle = dfs(node.id);\n if (cycle) {\n return { hasCycle: true, cycle };\n }\n }\n\n return { hasCycle: false };\n}\n\n/**\n * Check if a node type is valid\n * TODO: Fetch and cache valid types from API\n */\nexport function isValidNodeType(type: string): boolean {\n // For Phase 1, accept any non-empty type\n // In Phase 2, this should validate against refly node types\n return type.trim().length > 0;\n}\n","/**\n * refly builder commit - Commit the draft and create workflow\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession } from '../../builder/store.js';\nimport { commitSession } from '../../builder/commit.js';\nimport { BuilderError } from '../../utils/errors.js';\nimport { CLIError } from '../../utils/errors.js';\n\nexport const builderCommitCommand = new Command('commit')\n .description('Commit the validated draft and create the workflow')\n .action(async () => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'refly builder start --name \"your-workflow\"',\n });\n }\n\n // Commit\n const result = await commitSession(session);\n\n ok('builder.commit', {\n message: 'Workflow created successfully',\n workflowId: result.workflowId,\n workflowName: result.name,\n createdAt: result.createdAt,\n nextStep: `Run your workflow with \\`refly workflow run ${result.workflowId}\\``,\n });\n } catch (error) {\n if (error instanceof BuilderError || error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Failed to commit');\n }\n });\n","/**\n * Builder commit - create workflow from validated draft\n */\n\nimport { BuilderSession, BuilderState } from './schema.js';\nimport { saveSession, setCurrent } from './store.js';\nimport { requireCommittable } from './state.js';\nimport { apiRequest } from '../api/client.js';\n\nexport interface WorkflowCreateRequest {\n name: string;\n description?: string;\n spec: {\n version: number;\n nodes: Array<{\n id: string;\n type: string;\n input: Record<string, unknown>;\n dependsOn: string[];\n }>;\n metadata?: {\n tags?: string[];\n owner?: string;\n };\n };\n}\n\nexport interface WorkflowCreateResponse {\n workflowId: string;\n name: string;\n createdAt: string;\n}\n\n/**\n * Commit the builder session and create a workflow\n */\nexport async function commitSession(session: BuilderSession): Promise<WorkflowCreateResponse> {\n // Guard: must be validated\n requireCommittable(session);\n\n const draft = session.workflowDraft;\n\n // Build workflow spec\n const request: WorkflowCreateRequest = {\n name: draft.name,\n description: draft.description,\n spec: {\n version: 1,\n nodes: draft.nodes.map((n) => ({\n id: n.id,\n type: n.type,\n input: n.input,\n dependsOn: n.dependsOn,\n })),\n metadata: draft.metadata,\n },\n };\n\n // Call API to create workflow\n const response = await apiRequest<WorkflowCreateResponse>('/v1/cli/workflow', {\n method: 'POST',\n body: request,\n });\n\n // Update session state\n session.state = BuilderState.COMMITTED;\n session.commit = {\n workflowId: response.workflowId,\n committedAt: new Date().toISOString(),\n };\n saveSession(session);\n\n // Clear current pointer\n setCurrent(null);\n\n return response;\n}\n","/**\n * refly builder abort - Abort the current session\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { getCurrentSession, setCurrent, deleteSession } from '../../builder/store.js';\n\nexport const builderAbortCommand = new Command('abort')\n .description('Abort the current builder session')\n .option('--keep', 'Keep session file (do not delete)')\n .action(async (options) => {\n try {\n const session = getCurrentSession();\n\n if (!session) {\n fail(ErrorCodes.BUILDER_NOT_STARTED, 'No active builder session', {\n hint: 'Nothing to abort',\n });\n }\n\n const sessionId = session.id;\n const workflowName = session.workflowDraft.name;\n\n // Clear current pointer\n setCurrent(null);\n\n // Optionally delete session file\n if (!options.keep) {\n deleteSession(sessionId);\n }\n\n ok('builder.abort', {\n message: 'Builder session aborted',\n sessionId,\n workflowName,\n deleted: !options.keep,\n });\n } catch (error) {\n fail(ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Failed to abort');\n }\n });\n","/**\n * refly workflow - Workflow command group\n */\n\nimport { Command } from 'commander';\nimport { workflowCreateCommand } from './create.js';\nimport { workflowGenerateCommand } from './generate.js';\nimport { workflowListCommand } from './list.js';\nimport { workflowGetCommand } from './get.js';\nimport { workflowEditCommand } from './edit.js';\nimport { workflowDeleteCommand } from './delete.js';\nimport { workflowRunCommand } from './run.js';\nimport { workflowAbortCommand } from './abort.js';\nimport { workflowStatusCommand } from './status.js';\nimport { workflowToolsetKeysCommand } from './toolset-keys.js';\nimport { workflowLayoutCommand } from './layout.js';\n\n// The run command is now a command group with subcommands:\n// refly workflow run <workflowId> - Start a workflow\n// refly workflow run detail <runId> - Get detailed run info\n// refly workflow run node <runId> <nodeId> - Get node result\n// refly workflow run toolcalls <runId> - Get tool calls\n\nexport const workflowCommand = new Command('workflow')\n .description('Manage and run workflows')\n .addCommand(workflowCreateCommand)\n .addCommand(workflowGenerateCommand)\n .addCommand(workflowListCommand)\n .addCommand(workflowGetCommand)\n .addCommand(workflowEditCommand)\n .addCommand(workflowDeleteCommand)\n .addCommand(workflowRunCommand)\n .addCommand(workflowAbortCommand)\n .addCommand(workflowStatusCommand)\n .addCommand(workflowToolsetKeysCommand)\n .addCommand(workflowLayoutCommand);\n","/**\n * refly workflow create - Create a workflow directly\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\nexport const workflowCreateCommand = new Command('create')\n .description('Create a workflow from a spec')\n .requiredOption('--name <name>', 'Workflow name')\n .requiredOption('--spec <json>', 'Workflow spec as JSON')\n .option('--description <description>', 'Workflow description')\n .action(async (options) => {\n try {\n // Parse spec JSON\n let spec: unknown;\n try {\n spec = JSON.parse(options.spec);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --spec', {\n hint: 'Ensure the spec is valid JSON',\n });\n }\n\n // Call API\n const result = await apiRequest<{\n workflowId: string;\n name: string;\n createdAt: string;\n }>('/v1/cli/workflow', {\n method: 'POST',\n body: {\n name: options.name,\n description: options.description,\n spec,\n },\n });\n\n ok('workflow.create', {\n message: 'Workflow created successfully',\n workflowId: result.workflowId,\n name: result.name,\n createdAt: result.createdAt,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to create workflow',\n );\n }\n });\n","/**\n * refly workflow generate - Generate a workflow using AI from natural language\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\nimport { getWebUrl } from '../../config/config.js';\n\ninterface GenerateWorkflowResponse {\n workflowId: string;\n canvasId: string;\n sessionId: string;\n resultId: string;\n planId: string;\n workflowPlan: {\n title: string;\n tasks: Array<{\n id: string;\n title: string;\n prompt: string;\n toolsets?: string[];\n dependentTasks?: string[];\n }>;\n variables?: Array<{\n variableId: string;\n name: string;\n description: string;\n variableType: string;\n required?: boolean;\n }>;\n };\n nodesCount: number;\n edgesCount: number;\n}\n\nexport const workflowGenerateCommand = new Command('generate')\n .description('Generate a workflow using AI from natural language description')\n .requiredOption('--query <query>', 'Natural language description of the workflow')\n .option('--canvas-id <canvasId>', 'Optional canvas ID (to update existing workflow)')\n .option('--project-id <projectId>', 'Optional project ID')\n .option('--model-id <modelItemId>', 'Optional model ID to use for generation')\n .option('--locale <locale>', 'Output language locale (e.g., en, zh)')\n .option('--timeout <ms>', 'Timeout in milliseconds (default: 300000)', '300000')\n .option('--variables <json>', 'Predefined workflow variables as JSON')\n .option('--skip-default-nodes', 'Skip creating default nodes (start + skillResponse)')\n .action(async (options) => {\n try {\n // Parse variables JSON if provided\n let variables: unknown[] | undefined;\n if (options.variables) {\n try {\n variables = JSON.parse(options.variables);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --variables', {\n hint: 'Ensure the variables parameter is valid JSON',\n });\n }\n }\n\n // Build request body\n const body: Record<string, unknown> = {\n query: options.query,\n timeout: Number.parseInt(options.timeout, 10),\n };\n\n if (options.canvasId) body.canvasId = options.canvasId;\n if (options.projectId) body.projectId = options.projectId;\n if (options.modelId) body.modelItemId = options.modelId;\n if (options.locale) body.locale = options.locale;\n if (variables) body.variables = variables;\n if (options.skipDefaultNodes) body.skipDefaultNodes = true;\n\n // Call API - this may take a while as it invokes AI\n const result = await apiRequest<GenerateWorkflowResponse>('/v1/cli/workflow/generate', {\n method: 'POST',\n body,\n timeout: Number.parseInt(options.timeout, 10) + 30000, // Add buffer for API processing\n });\n\n // Format output\n ok('workflow.generate', {\n message: 'Workflow generated successfully',\n url: `${getWebUrl()}/workflow/${result.workflowId}`,\n title: result.workflowPlan?.title,\n nodesCount: result.nodesCount,\n workflowId: result.workflowId,\n plan: {\n tasksCount: result.workflowPlan?.tasks?.length ?? 0,\n variablesCount: result.workflowPlan?.variables?.length ?? 0,\n tasks: result.workflowPlan?.tasks?.map((t) => ({\n id: t.id,\n title: t.title,\n toolsets: t.toolsets,\n })),\n },\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to generate workflow',\n {\n hint: 'The AI generation may have timed out. Try increasing --timeout or simplifying your query.',\n },\n );\n }\n });\n","/**\n * refly workflow list - List all workflows\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\nimport { getWebUrl } from '../../config/config.js';\n\ninterface WorkflowSummary {\n workflowId: string;\n name: string;\n description?: string;\n nodeCount: number;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface WorkflowListItem {\n name: string;\n description?: string;\n nodeCount: number;\n createdAt: string;\n updatedAt: string;\n link: string;\n}\n\nexport const workflowListCommand = new Command('list')\n .description('List all workflows')\n .option('--limit <number>', 'Maximum number of workflows to return', '50')\n .option('--offset <number>', 'Offset for pagination', '0')\n .action(async (options) => {\n try {\n const limit = Number.parseInt(options.limit, 10);\n const offset = Number.parseInt(options.offset, 10);\n\n const result = await apiRequest<{\n workflows: WorkflowSummary[];\n total: number;\n }>(`/v1/cli/workflow?limit=${limit}&offset=${offset}`);\n\n const webUrl = getWebUrl();\n const workflows: WorkflowListItem[] = result.workflows.map((w) => ({\n name: w.name,\n description: w.description,\n nodeCount: w.nodeCount,\n createdAt: w.createdAt,\n updatedAt: w.updatedAt,\n link: `${webUrl}/workflow/${w.workflowId}`,\n }));\n\n ok('workflow.list', {\n workflows,\n total: result.total,\n limit,\n offset,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to list workflows',\n );\n }\n });\n","/**\n * refly workflow get - Get workflow details\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface WorkflowDetail {\n workflowId: string;\n name: string;\n description?: string;\n spec: {\n version: number;\n nodes: Array<{\n id: string;\n type: string;\n input: Record<string, unknown>;\n dependsOn: string[];\n }>;\n metadata?: Record<string, unknown>;\n };\n createdAt: string;\n updatedAt: string;\n}\n\nexport const workflowGetCommand = new Command('get')\n .description('Get workflow details')\n .argument('<workflowId>', 'Workflow ID')\n .action(async (workflowId) => {\n try {\n const result = await apiRequest<WorkflowDetail>(`/v1/cli/workflow/${workflowId}`);\n\n ok('workflow.get', result);\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get workflow',\n );\n }\n });\n","/**\n * refly workflow edit - Edit an existing workflow\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface UpdateWorkflowBody {\n name?: string;\n variables?: Array<{ name: string; value: unknown }>;\n operations?: Array<{\n type: 'add_node' | 'remove_node' | 'update_node' | 'add_edge' | 'remove_edge';\n [key: string]: unknown;\n }>;\n}\n\n/**\n * Transform CLI operation format to backend format\n * CLI uses: { op: \"add\", node: {...} }\n * Backend expects: { type: \"add_node\", node: {...} }\n */\nfunction transformOperations(\n ops: Array<{ op: string; [key: string]: unknown }>,\n): UpdateWorkflowBody['operations'] {\n const opMapping: Record<string, string> = {\n add: 'add_node',\n remove: 'remove_node',\n update: 'update_node',\n addEdge: 'add_edge',\n removeEdge: 'remove_edge',\n // Also support direct backend format\n add_node: 'add_node',\n remove_node: 'remove_node',\n update_node: 'update_node',\n add_edge: 'add_edge',\n remove_edge: 'remove_edge',\n };\n\n return ops.map((op) => {\n const { op: opType, ...rest } = op;\n const backendType = opMapping[opType];\n if (!backendType) {\n throw new Error(`Unknown operation type: ${opType}`);\n }\n return {\n type: backendType as 'add_node' | 'remove_node' | 'update_node' | 'add_edge' | 'remove_edge',\n ...rest,\n };\n });\n}\n\nexport const workflowEditCommand = new Command('edit')\n .description('Edit an existing workflow')\n .argument('<workflowId>', 'Workflow ID or URL')\n .option('--name <name>', 'New workflow name')\n .option('--ops <json>', 'Node/edge operations as JSON array')\n .option('--variables <json>', 'Workflow variables as JSON array')\n .option('--toolsets <keys>', 'Toolset inventory keys (comma-separated, e.g., \"tavily,fal_audio\")')\n .option('--auto-layout', 'Enable auto-layout to prevent node overlapping')\n .action(async (workflowIdOrUrl, options) => {\n try {\n // Extract workflowId from URL if needed\n let workflowId = workflowIdOrUrl;\n if (workflowIdOrUrl.includes('/workflow/')) {\n const match = workflowIdOrUrl.match(/\\/workflow\\/(c-[a-z0-9]+)/);\n if (match) {\n workflowId = match[1];\n }\n }\n\n // Build request body\n const body: UpdateWorkflowBody = {};\n\n if (options.name) {\n body.name = options.name;\n }\n\n // Parse toolset keys if provided\n let toolsetKeys: string[] | undefined;\n if (options.toolsets) {\n toolsetKeys = options.toolsets\n .split(',')\n .map((k: string) => k.trim())\n .filter((k: string) => k.length > 0);\n }\n\n if (options.ops) {\n try {\n const rawOps = JSON.parse(options.ops);\n body.operations = transformOperations(rawOps);\n\n // Inject toolsetKeys into add_node operations if --toolsets is provided\n if (toolsetKeys && toolsetKeys.length > 0 && body.operations) {\n body.operations = body.operations.map((op) => {\n if (op.type === 'add_node' && op.node) {\n const node = op.node as Record<string, unknown>;\n const data = (node.data as Record<string, unknown>) || {};\n const metadata = (data.metadata as Record<string, unknown>) || {};\n return {\n ...op,\n node: {\n ...node,\n data: {\n ...data,\n metadata: {\n ...metadata,\n toolsetKeys,\n },\n },\n },\n };\n }\n return op;\n });\n }\n } catch (error) {\n fail(ErrorCodes.INVALID_INPUT, `Invalid operations: ${(error as Error).message}`, {\n hint: 'Ensure the operations are a valid JSON array with correct op types',\n });\n }\n }\n\n if (options.variables) {\n try {\n body.variables = JSON.parse(options.variables);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --variables', {\n hint: 'Ensure the variables are a valid JSON array',\n });\n }\n }\n\n // Check if any update option was provided\n if (!options.name && !options.ops && !options.variables) {\n fail(ErrorCodes.INVALID_INPUT, 'No update options provided', {\n hint: 'Use --name, --ops, --variables, or --toolsets to specify what to update',\n });\n }\n\n // Build API endpoint with query parameters\n let endpoint = `/v1/cli/workflow/${workflowId}`;\n const queryParams: string[] = [];\n if (toolsetKeys && toolsetKeys.length > 0) {\n queryParams.push('resolveToolsetKeys=true');\n }\n if (options.autoLayout) {\n queryParams.push('autoLayout=true');\n }\n if (queryParams.length > 0) {\n endpoint += `?${queryParams.join('&')}`;\n }\n\n await apiRequest<{ success: boolean }>(endpoint, {\n method: 'PATCH',\n body,\n });\n\n ok('workflow.edit', {\n message: 'Workflow updated successfully',\n workflowId,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to edit workflow',\n );\n }\n });\n","/**\n * refly workflow delete - Delete a workflow\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\nexport const workflowDeleteCommand = new Command('delete')\n .description('Delete a workflow')\n .argument('<workflowId>', 'Workflow ID')\n .action(async (workflowId) => {\n try {\n await apiRequest(`/v1/cli/workflow/${workflowId}`, {\n method: 'DELETE',\n });\n\n ok('workflow.delete', {\n message: 'Workflow deleted successfully',\n workflowId,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to delete workflow',\n );\n }\n });\n","/**\n * refly workflow run - Run command group\n * Supports:\n * refly workflow run <workflowId> - Start a workflow\n * refly workflow run detail <runId> - Get detailed run info\n * refly workflow run node <runId> <nodeId> - Get node result\n * refly workflow run toolcalls <runId> - Get tool calls\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\nimport { workflowRunDetailCommand } from './run-detail.js';\nimport { workflowRunNodeCommand } from './run-node.js';\nimport { workflowRunToolcallsCommand } from './run-toolcalls.js';\n\ninterface RunResult {\n runId: string;\n workflowId: string;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'aborted';\n createdAt: string;\n}\n\n// Create the run command group\nexport const workflowRunCommand = new Command('run')\n .description('Run workflows and get execution results')\n .argument('[workflowId]', 'Workflow ID to run')\n .option('--input <json>', 'Input variables as JSON', '{}')\n .action(async (workflowId, options) => {\n // If no workflowId provided, show help\n if (!workflowId) {\n workflowRunCommand.help();\n return;\n }\n\n try {\n // Parse input JSON\n let input: unknown;\n try {\n input = JSON.parse(options.input);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --input', {\n hint: 'Ensure the input is valid JSON',\n });\n }\n\n const result = await apiRequest<RunResult>(`/v1/cli/workflow/${workflowId}/run`, {\n method: 'POST',\n body: { input },\n });\n\n ok('workflow.run', {\n message: 'Workflow run started',\n runId: result.runId,\n workflowId: result.workflowId,\n status: result.status,\n createdAt: result.createdAt,\n nextStep: `Check status with \\`refly workflow run get ${result.runId}\\``,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to run workflow',\n );\n }\n });\n\n// Add subcommands to run command group\nworkflowRunCommand.addCommand(workflowRunDetailCommand);\nworkflowRunCommand.addCommand(workflowRunNodeCommand);\nworkflowRunCommand.addCommand(workflowRunToolcallsCommand);\n","/**\n * refly workflow run detail - Get detailed workflow run information\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolCallSummary {\n callId: string;\n toolName: string;\n toolsetId: string;\n status: 'executing' | 'completed' | 'failed';\n durationMs?: number;\n error?: string;\n}\n\ninterface NodeExecutionDetail {\n nodeId: string;\n nodeExecutionId: string;\n nodeType: string;\n title: string;\n status: 'waiting' | 'executing' | 'finish' | 'failed';\n progress: number;\n startTime?: string;\n endTime?: string;\n durationMs?: number;\n query?: string;\n originalQuery?: string;\n resultId?: string;\n resultVersion?: number;\n outputPreview?: string;\n outputTokens?: number;\n toolCallsCount: number;\n toolCallsSummary?: ToolCallSummary[];\n errorMessage?: string;\n errorType?: string;\n}\n\ninterface WorkflowError {\n nodeId: string;\n nodeTitle: string;\n errorType: string;\n errorMessage: string;\n timestamp: string;\n}\n\ninterface WorkflowRunDetailResponse {\n runId: string;\n workflowId: string;\n title: string;\n status: 'init' | 'executing' | 'finish' | 'failed';\n totalNodes: number;\n executedNodes: number;\n failedNodes: number;\n startedAt: string;\n finishedAt?: string;\n durationMs?: number;\n nodes: NodeExecutionDetail[];\n errors?: WorkflowError[];\n}\n\nexport const workflowRunDetailCommand = new Command('detail')\n .description('Get detailed workflow run information including all node results')\n .argument('<runId>', 'Workflow run ID')\n .option('--no-tool-calls', 'Exclude tool call summaries')\n .option('--preview-length <length>', 'Output preview length (default: 500)', '500')\n .action(async (runId, options) => {\n try {\n const params = new URLSearchParams();\n if (options.toolCalls === false) {\n params.set('includeToolCalls', 'false');\n }\n if (options.previewLength) {\n params.set('outputPreviewLength', options.previewLength);\n }\n\n const queryString = params.toString();\n const url = `/v1/cli/workflow/run/${runId}/detail${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<WorkflowRunDetailResponse>(url);\n\n ok('workflow.run.detail', {\n runId: result.runId,\n workflowId: result.workflowId,\n title: result.title,\n status: result.status,\n progress: {\n total: result.totalNodes,\n executed: result.executedNodes,\n failed: result.failedNodes,\n },\n timing: {\n startedAt: result.startedAt,\n finishedAt: result.finishedAt,\n durationMs: result.durationMs,\n },\n nodes: result.nodes,\n errors: result.errors,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get workflow run detail',\n );\n }\n });\n","/**\n * refly workflow run node - Get detailed node execution result\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolCallDetail {\n callId: string;\n toolsetId: string;\n toolName: string;\n stepName?: string;\n input: Record<string, unknown>;\n output?: Record<string, unknown>;\n status: 'executing' | 'completed' | 'failed';\n error?: string;\n createdAt: string;\n updatedAt: string;\n durationMs?: number;\n}\n\ninterface ActionMessage {\n messageId: string;\n type: 'ai' | 'tool';\n content?: string;\n reasoningContent?: string;\n toolCallId?: string;\n createdAt: string;\n}\n\ninterface NodeResultDetailResponse {\n nodeId: string;\n nodeExecutionId: string;\n nodeType: string;\n title: string;\n status: string;\n startTime?: string;\n endTime?: string;\n durationMs?: number;\n query?: string;\n originalQuery?: string;\n resultId?: string;\n resultVersion?: number;\n output?: {\n content: string;\n reasoningContent?: string;\n artifacts?: unknown[];\n structuredData?: Record<string, unknown>;\n };\n tokenUsage?: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n };\n toolCalls: ToolCallDetail[];\n messages?: ActionMessage[];\n error?: {\n type: string;\n message: string;\n };\n}\n\nexport const workflowRunNodeCommand = new Command('node')\n .description('Get detailed execution result for a specific node')\n .argument('<runId>', 'Workflow run ID')\n .argument('<nodeId>', 'Node ID')\n .option('--include-messages', 'Include AI conversation messages')\n .option('--raw', 'Disable output sanitization (show full tool outputs)')\n .action(async (runId, nodeId, options) => {\n try {\n const params = new URLSearchParams();\n if (options.includeMessages) {\n params.set('includeMessages', 'true');\n }\n if (options.raw) {\n params.set('sanitizeForDisplay', 'false');\n }\n\n const queryString = params.toString();\n const url = `/v1/cli/workflow/run/${runId}/node/${nodeId}${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<NodeResultDetailResponse>(url);\n\n ok('workflow.node.result', {\n nodeId: result.nodeId,\n nodeExecutionId: result.nodeExecutionId,\n nodeType: result.nodeType,\n title: result.title,\n status: result.status,\n timing: {\n startTime: result.startTime,\n endTime: result.endTime,\n durationMs: result.durationMs,\n },\n query: result.query,\n originalQuery: result.originalQuery,\n resultId: result.resultId,\n resultVersion: result.resultVersion,\n output: result.output,\n tokenUsage: result.tokenUsage,\n toolCallsCount: result.toolCalls?.length ?? 0,\n toolCalls: result.toolCalls,\n messages: result.messages,\n error: result.error,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get node result',\n );\n }\n });\n","/**\n * refly workflow run toolcalls - Get all tool calls for a workflow run\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolCallDetail {\n callId: string;\n toolsetId: string;\n toolName: string;\n stepName?: string;\n input: Record<string, unknown>;\n output?: Record<string, unknown>;\n status: 'executing' | 'completed' | 'failed';\n error?: string;\n createdAt: string;\n updatedAt: string;\n durationMs?: number;\n}\n\ninterface WorkflowToolCallsResponse {\n runId: string;\n totalCount: number;\n toolCalls: ToolCallDetail[];\n byStatus: {\n executing: number;\n completed: number;\n failed: number;\n };\n byToolset: Record<string, number>;\n byTool: Record<string, number>;\n}\n\nexport const workflowRunToolcallsCommand = new Command('toolcalls')\n .description('Get all tool calls for a workflow run')\n .argument('<runId>', 'Workflow run ID')\n .option('--node-id <nodeId>', 'Filter by node ID')\n .option('--toolset-id <toolsetId>', 'Filter by toolset ID')\n .option('--tool-name <toolName>', 'Filter by tool name')\n .option('--status <status>', 'Filter by status (executing, completed, failed)')\n .option('--limit <limit>', 'Maximum number of results (default: 100)', '100')\n .option('--offset <offset>', 'Pagination offset (default: 0)', '0')\n .option('--raw', 'Disable output sanitization (show full tool outputs)')\n .action(async (runId, options) => {\n try {\n const params = new URLSearchParams();\n if (options.nodeId) {\n params.set('nodeId', options.nodeId);\n }\n if (options.toolsetId) {\n params.set('toolsetId', options.toolsetId);\n }\n if (options.toolName) {\n params.set('toolName', options.toolName);\n }\n if (options.status) {\n params.set('status', options.status);\n }\n if (options.limit) {\n params.set('limit', options.limit);\n }\n if (options.offset) {\n params.set('offset', options.offset);\n }\n if (options.raw) {\n params.set('sanitizeForDisplay', 'false');\n }\n\n const queryString = params.toString();\n const url = `/v1/cli/workflow/run/${runId}/toolcalls${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<WorkflowToolCallsResponse>(url);\n\n ok('workflow.toolcalls', {\n runId: result.runId,\n totalCount: result.totalCount,\n toolCalls: result.toolCalls,\n summary: {\n byStatus: result.byStatus,\n byToolset: result.byToolset,\n byTool: result.byTool,\n },\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get workflow tool calls',\n );\n }\n });\n","/**\n * refly workflow abort - Abort a running workflow\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\nexport const workflowAbortCommand = new Command('abort')\n .description('Abort a running workflow')\n .argument('<runId>', 'Run ID')\n .action(async (runId) => {\n try {\n await apiRequest(`/v1/cli/workflow/run/${runId}/abort`, {\n method: 'POST',\n });\n\n ok('workflow.abort', {\n message: 'Workflow run aborted',\n runId,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to abort workflow',\n );\n }\n });\n","/**\n * refly workflow status - Get workflow execution status with optional watch mode\n *\n * Smart diff output: Only outputs when status meaningfully changes to reduce\n * output volume for AI agent integration (e.g., Claude Code background tasks).\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, print, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface NodeStatus {\n nodeId: string;\n nodeType: string;\n status: string;\n title: string;\n progress: number;\n errorMessage?: string;\n startTime?: string;\n endTime?: string;\n}\n\ninterface WorkflowRunStatus {\n runId: string;\n workflowId: string;\n status: 'init' | 'executing' | 'finish' | 'failed';\n title: string;\n totalNodes: number;\n executedNodes: number;\n failedNodes: number;\n nodeStatuses: NodeStatus[];\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Check if workflow status has meaningfully changed\n */\nfunction hasStatusChanged(prev: WorkflowRunStatus | null, current: WorkflowRunStatus): boolean {\n if (!prev) return true;\n\n // Check overall status\n if (prev.status !== current.status) return true;\n\n // Check node counts\n if (prev.executedNodes !== current.executedNodes) return true;\n if (prev.failedNodes !== current.failedNodes) return true;\n\n // Check individual node statuses\n const prevNodeMap = new Map(prev.nodeStatuses.map((n) => [n.nodeId, n]));\n for (const node of current.nodeStatuses) {\n const prevNode = prevNodeMap.get(node.nodeId);\n if (!prevNode) return true;\n if (prevNode.status !== node.status) return true;\n // Only report progress changes if significant (>10%)\n if (Math.abs(prevNode.progress - node.progress) >= 10) return true;\n }\n\n return false;\n}\n\n/**\n * Get changed nodes for delta output\n */\nfunction getChangedNodes(prev: WorkflowRunStatus | null, current: WorkflowRunStatus): NodeStatus[] {\n if (!prev) return current.nodeStatuses;\n\n const prevNodeMap = new Map(prev.nodeStatuses.map((n) => [n.nodeId, n]));\n const changedNodes: NodeStatus[] = [];\n\n for (const node of current.nodeStatuses) {\n const prevNode = prevNodeMap.get(node.nodeId);\n if (!prevNode) {\n changedNodes.push(node);\n } else if (\n prevNode.status !== node.status ||\n Math.abs(prevNode.progress - node.progress) >= 10\n ) {\n changedNodes.push(node);\n }\n }\n\n return changedNodes;\n}\n\n/**\n * Generate human-readable summary of status change\n */\nfunction generateSummary(changedNodes: NodeStatus[]): string {\n if (changedNodes.length === 0) return '';\n\n const summaries: string[] = [];\n for (const node of changedNodes) {\n if (node.status === 'finish') {\n summaries.push(`Node '${node.title}' completed`);\n } else if (node.status === 'failed') {\n summaries.push(`Node '${node.title}' failed`);\n } else if (node.status === 'executing') {\n summaries.push(`Node '${node.title}' started`);\n }\n }\n\n return summaries.join('; ') || `${changedNodes.length} node(s) updated`;\n}\n\nexport const workflowStatusCommand = new Command('status')\n .description('Get detailed workflow execution status')\n .argument('<runId>', 'Workflow run ID')\n .option('--watch', 'Watch mode: continuously poll until completion')\n .option('--interval <ms>', 'Poll interval in ms (default: 2000)', '2000')\n .option('--full', 'In watch mode, output full status every time (not just changes)')\n .action(async (runId, options) => {\n try {\n // Validate poll interval\n const pollInterval = Number.parseInt(options.interval, 10);\n if (Number.isNaN(pollInterval) || pollInterval <= 0) {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid poll interval', {\n hint: 'Poll interval must be a positive number in milliseconds',\n });\n }\n\n const fetchStatus = async () => {\n return await apiRequest<WorkflowRunStatus>(`/v1/cli/workflow/run/${runId}`);\n };\n\n if (options.watch) {\n // Watch mode: poll until completion with smart diff output\n let prevStatus: WorkflowRunStatus | null = null;\n let status = await fetchStatus();\n\n // Always output initial status (full)\n print('workflow.status', {\n ...status,\n watching: true,\n isInitial: true,\n });\n prevStatus = status;\n\n while (status.status === 'init' || status.status === 'executing') {\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n status = await fetchStatus();\n\n // Smart diff: only output if status has meaningfully changed\n if (options.full || hasStatusChanged(prevStatus, status)) {\n if (options.full) {\n // Full mode: output complete status every time\n print('workflow.status', {\n ...status,\n watching: true,\n });\n } else {\n // Smart diff mode: output delta with changed nodes only\n const changedNodes = getChangedNodes(prevStatus, status);\n print('workflow.progress', {\n runId: status.runId,\n status: status.status,\n progress: `${status.executedNodes}/${status.totalNodes}`,\n executedNodes: status.executedNodes,\n totalNodes: status.totalNodes,\n failedNodes: status.failedNodes,\n summary: generateSummary(changedNodes),\n changedNodes,\n watching: true,\n });\n }\n prevStatus = status;\n }\n }\n\n // Final output with ok() which exits the process\n ok('workflow.status', {\n ...status,\n watching: false,\n completed: true,\n });\n } else {\n // Single fetch\n const status = await fetchStatus();\n ok('workflow.status', status);\n }\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get workflow status',\n );\n }\n });\n","/**\n * refly workflow toolset-keys - List available toolset inventory keys\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolsetKey {\n key: string;\n name: string;\n type: string;\n requiresAuth: boolean;\n}\n\ninterface ToolsetKeysResponse {\n keys: ToolsetKey[];\n}\n\nexport const workflowToolsetKeysCommand = new Command('toolset-keys')\n .description('List available toolset inventory keys for use with --toolsets')\n .option('--type <type>', 'Filter by toolset type (e.g., \"regular\", \"external_oauth\")')\n .action(async (options) => {\n try {\n const result = await apiRequest<ToolsetKeysResponse>('/v1/cli/workflow/toolset-keys', {\n method: 'GET',\n });\n\n let keys = result.keys;\n\n // Filter by type if specified\n if (options.type) {\n keys = keys.filter((k) => k.type === options.type);\n }\n\n ok('workflow.toolset-keys', {\n message: `Found ${keys.length} available toolset keys`,\n keys: keys.map((k) => ({\n key: k.key,\n name: k.name,\n type: k.type,\n requiresAuth: k.requiresAuth,\n })),\n hint: 'Use these keys with --toolsets option, e.g., --toolsets \"tavily,fal_audio\"',\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to list toolset keys',\n );\n }\n });\n","/**\n * refly workflow layout - Auto-layout workflow nodes\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\nexport const workflowLayoutCommand = new Command('layout')\n .description('Auto-layout workflow nodes to prevent overlapping')\n .argument('<workflowId>', 'Workflow ID or URL')\n .option('--direction <dir>', 'Layout direction: LR (left-right) or TB (top-bottom)', 'LR')\n .action(async (workflowIdOrUrl, options) => {\n try {\n // Extract workflowId from URL if needed\n let workflowId = workflowIdOrUrl;\n if (workflowIdOrUrl.includes('/workflow/')) {\n const match = workflowIdOrUrl.match(/\\/workflow\\/(c-[a-z0-9]+)/);\n if (match) {\n workflowId = match[1];\n }\n }\n\n // Validate direction\n const direction = options.direction?.toUpperCase();\n if (direction && direction !== 'LR' && direction !== 'TB') {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid direction. Use LR or TB', {\n hint: 'LR = left-to-right, TB = top-to-bottom',\n });\n }\n\n // Build API endpoint\n let endpoint = `/v1/cli/workflow/${workflowId}/layout`;\n if (direction) {\n endpoint += `?direction=${direction}`;\n }\n\n await apiRequest<{ success: boolean }>(endpoint, {\n method: 'POST',\n });\n\n ok('workflow.layout', {\n message: 'Workflow layout updated successfully',\n workflowId,\n direction: direction || 'LR',\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to layout workflow',\n );\n }\n });\n","/**\n * refly node - Node command group\n */\n\nimport { Command } from 'commander';\nimport { nodeTypesCommand } from './types.js';\nimport { nodeRunCommand } from './run.js';\nimport { nodeResultCommand } from './result.js';\n\nexport const nodeCommand = new Command('node')\n .description('Node operations: types, run, and execution results')\n .addCommand(nodeTypesCommand)\n .addCommand(nodeRunCommand)\n .addCommand(nodeResultCommand);\n","/**\n * refly node types - List available node types\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { getCacheDir } from '../../config/paths.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface NodeType {\n type: string;\n name: string;\n description: string;\n category: string;\n authorized?: boolean;\n}\n\ninterface NodeTypesResponse {\n nodeTypes: NodeType[];\n total: number;\n}\n\nconst CACHE_FILE = 'node-types.json';\nconst CACHE_TTL = 24 * 60 * 60 * 1000; // 24 hours\n\nexport const nodeTypesCommand = new Command('types')\n .description('List available node types')\n .option('--refresh', 'Force refresh from API')\n .option('--category <category>', 'Filter by category')\n .action(async (options) => {\n try {\n let data: NodeTypesResponse;\n\n // Try cache first\n if (!options.refresh) {\n const cached = loadFromCache();\n if (cached) {\n data = cached;\n } else {\n data = await fetchAndCache();\n }\n } else {\n data = await fetchAndCache();\n }\n\n // Filter by category if specified\n let nodeTypes = data.nodeTypes || [];\n if (options.category) {\n nodeTypes = nodeTypes.filter(\n (t: NodeType) => t.category.toLowerCase() === options.category.toLowerCase(),\n );\n }\n\n ok('node.types', {\n nodeTypes,\n total: nodeTypes.length,\n categories: [...new Set(data.nodeTypes?.map((t: NodeType) => t.category) || [])],\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get node types',\n );\n }\n });\n\nfunction getCachePath(): string {\n return path.join(getCacheDir(), CACHE_FILE);\n}\n\nfunction loadFromCache(): NodeTypesResponse | null {\n try {\n const cachePath = getCachePath();\n if (!fs.existsSync(cachePath)) {\n return null;\n }\n\n const stat = fs.statSync(cachePath);\n const age = Date.now() - stat.mtimeMs;\n if (age > CACHE_TTL) {\n return null;\n }\n\n const content = fs.readFileSync(cachePath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\nasync function fetchAndCache(): Promise<NodeTypesResponse> {\n const data = await apiRequest<NodeTypesResponse>('/v1/cli/node/types');\n\n // Save to cache\n try {\n const cachePath = getCachePath();\n fs.writeFileSync(cachePath, JSON.stringify(data, null, 2));\n } catch {\n // Ignore cache write errors\n }\n\n return data;\n}\n","/**\n * refly node run - Run a single node for debugging\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface NodeRunResult {\n result: unknown;\n metrics: {\n durationMs: number;\n tokensUsed?: number;\n };\n logs?: string[];\n}\n\nexport const nodeRunCommand = new Command('run')\n .description('Run a single node for debugging')\n .requiredOption('--type <nodeType>', 'Node type to run')\n .requiredOption('--input <json>', 'Input data as JSON')\n .action(async (options) => {\n try {\n // Parse input JSON\n let input: unknown;\n try {\n input = JSON.parse(options.input);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --input', {\n hint: 'Ensure the input is valid JSON',\n });\n }\n\n const result = await apiRequest<NodeRunResult>('/v1/cli/node/run', {\n method: 'POST',\n body: {\n type: options.type,\n input,\n },\n });\n\n ok('node.run', {\n type: options.type,\n result: result.result,\n metrics: result.metrics,\n logs: result.logs ?? [],\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to run node',\n );\n }\n });\n","/**\n * refly node result - Get node execution result\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface NodeStep {\n stepIndex: number;\n content: string;\n toolCalls?: unknown[];\n}\n\ninterface NodeResult {\n resultId: string;\n status: string;\n content: string;\n tokenUsage?: {\n input: number;\n output: number;\n total: number;\n };\n steps?: NodeStep[];\n toolCalls?: unknown[];\n messages?: unknown[];\n}\n\nexport const nodeResultCommand = new Command('result')\n .description('Get node execution result')\n .argument('<resultId>', 'Node result ID')\n .option('--include-steps', 'Include detailed step information')\n .option('--include-messages', 'Include chat messages')\n .option('--include-tool-calls', 'Include tool call details')\n .action(async (resultId, options) => {\n try {\n const result = await apiRequest<NodeResult>(`/v1/cli/action/result?resultId=${resultId}`);\n\n // Format output based on options\n const output: Record<string, unknown> = {\n resultId: result.resultId,\n status: result.status,\n content: result.content,\n tokenUsage: result.tokenUsage,\n };\n\n if (options.includeSteps && result.steps) {\n output.steps = result.steps.map((step) => ({\n stepIndex: step.stepIndex,\n content: step.content,\n toolCallsCount: step.toolCalls?.length ?? 0,\n }));\n }\n\n if (options.includeToolCalls && result.toolCalls) {\n output.toolCalls = result.toolCalls;\n }\n\n if (options.includeMessages && result.messages) {\n output.messages = result.messages;\n }\n\n ok('node.result', output);\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get node result',\n );\n }\n });\n","/**\n * refly tool - Tool command group\n */\n\nimport { Command } from 'commander';\nimport { toolCallsCommand } from './calls.js';\nimport { toolGetCommand } from './get.js';\n\nexport const toolCommand = new Command('tool')\n .description('Tool-related operations')\n .addCommand(toolCallsCommand)\n .addCommand(toolGetCommand);\n","/**\n * refly tool calls - Get tool execution results for an action\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolCall {\n callId: string;\n toolName: string;\n toolsetId: string;\n status: string;\n input: string;\n output: string;\n error?: string;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface ToolCallsResponse {\n toolCalls: ToolCall[];\n version: number;\n}\n\nexport const toolCallsCommand = new Command('calls')\n .description('Get tool execution results for an action')\n .requiredOption('--result-id <resultId>', 'Action result ID')\n .option('--version <version>', 'Specific version number')\n .action(async (options) => {\n try {\n const params = new URLSearchParams({ resultId: options.resultId });\n if (options.version) {\n params.set('version', options.version);\n }\n\n const result = await apiRequest<ToolCallsResponse>(`/v1/cli/toolcall?${params}`);\n\n ok('tool.calls', {\n resultId: options.resultId,\n version: result.version,\n count: result.toolCalls?.length ?? 0,\n toolCalls: result.toolCalls?.map((tc) => ({\n callId: tc.callId,\n toolName: tc.toolName,\n toolsetId: tc.toolsetId,\n status: tc.status,\n input: tc.input,\n output: tc.output,\n error: tc.error,\n createdAt: tc.createdAt,\n updatedAt: tc.updatedAt,\n })),\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get tool calls',\n );\n }\n });\n","/**\n * refly tool get - Get full details for a single tool call\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface ToolCallFullDetail {\n callId: string;\n resultId: string;\n resultVersion: number;\n workflowExecutionId?: string;\n nodeId?: string;\n toolsetId: string;\n toolName: string;\n stepName?: string;\n input: Record<string, unknown>;\n output?: Record<string, unknown>;\n status: 'executing' | 'completed' | 'failed';\n error?: string;\n createdAt: string;\n updatedAt: string;\n durationMs?: number;\n}\n\nexport const toolGetCommand = new Command('get')\n .description('Get full details for a single tool call')\n .argument('<callId>', 'Tool call ID')\n .option('--raw', 'Disable output sanitization (show full tool output)')\n .action(async (callId, options) => {\n try {\n const params = new URLSearchParams();\n if (options.raw) {\n params.set('sanitizeForDisplay', 'false');\n }\n\n const queryString = params.toString();\n const url = `/v1/cli/toolcall/${callId}${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<ToolCallFullDetail>(url);\n\n ok('tool.detail', {\n callId: result.callId,\n context: {\n resultId: result.resultId,\n resultVersion: result.resultVersion,\n workflowExecutionId: result.workflowExecutionId,\n nodeId: result.nodeId,\n },\n tool: {\n toolsetId: result.toolsetId,\n toolName: result.toolName,\n stepName: result.stepName,\n },\n input: result.input,\n output: result.output,\n status: result.status,\n error: result.error,\n timing: {\n createdAt: result.createdAt,\n updatedAt: result.updatedAt,\n durationMs: result.durationMs,\n },\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get tool call detail',\n );\n }\n });\n","/**\n * refly file - File command group\n */\n\nimport { Command } from 'commander';\nimport { fileListCommand } from './list.js';\nimport { fileGetCommand } from './get.js';\nimport { fileDownloadCommand } from './download.js';\n\nexport const fileCommand = new Command('file')\n .description('Manage files and documents')\n .addCommand(fileListCommand)\n .addCommand(fileGetCommand)\n .addCommand(fileDownloadCommand);\n","/**\n * refly file list - List files\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface FileInfo {\n fileId: string;\n name: string;\n type: string;\n size?: number;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface ListFilesResponse {\n files: FileInfo[];\n total: number;\n page: number;\n pageSize: number;\n}\n\nexport const fileListCommand = new Command('list')\n .description('List files')\n .option('--page <n>', 'Page number (default: 1)', '1')\n .option('--page-size <n>', 'Number of files per page (default: 20)', '20')\n .option('--canvas-id <id>', 'Filter by canvas ID')\n .option('--result-id <id>', 'Filter by action result ID')\n .option('--include-content', 'Include file content in response')\n .action(async (options) => {\n try {\n const params = new URLSearchParams({\n page: options.page,\n pageSize: options.pageSize,\n });\n if (options.canvasId) {\n params.set('canvasId', options.canvasId);\n }\n if (options.resultId) {\n params.set('resultId', options.resultId);\n }\n if (options.includeContent) {\n params.set('includeContent', 'true');\n }\n\n const result = await apiRequest<ListFilesResponse>(`/v1/cli/drive/files?${params}`);\n\n ok('file.list', {\n total: result.total,\n page: result.page,\n pageSize: result.pageSize,\n files: result.files?.map((f) => ({\n fileId: f.fileId,\n name: f.name,\n type: f.type,\n size: f.size,\n createdAt: f.createdAt,\n updatedAt: f.updatedAt,\n })),\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to list files',\n );\n }\n });\n","/**\n * refly file get - Get file details\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface FileInfo {\n fileId: string;\n name: string;\n type: string;\n size?: number;\n content?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const fileGetCommand = new Command('get')\n .description('Get file details')\n .argument('<fileId>', 'File ID')\n .option('--no-content', 'Exclude file content from response')\n .action(async (fileId, options) => {\n try {\n const includeContent = options.content !== false;\n const result = await apiRequest<FileInfo>(\n `/v1/cli/drive/files/${fileId}?includeContent=${includeContent}`,\n );\n\n ok('file.get', {\n fileId: result.fileId,\n name: result.name,\n type: result.type,\n size: result.size,\n content: includeContent ? result.content : undefined,\n createdAt: result.createdAt,\n updatedAt: result.updatedAt,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get file',\n );\n }\n });\n","/**\n * refly file download - Download file to local filesystem\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequestStream } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nexport const fileDownloadCommand = new Command('download')\n .description('Download file to local filesystem')\n .argument('<fileId>', 'File ID')\n .option('-o, --output <path>', 'Output file path (defaults to original filename)')\n .action(async (fileId, options) => {\n try {\n const { data, filename, contentType, size } = await apiRequestStream(\n `/v1/cli/drive/files/${fileId}/download`,\n );\n\n const outputPath = options.output || filename || `${fileId}`;\n const resolvedPath = path.resolve(outputPath);\n\n // Write buffer to file\n fs.writeFileSync(resolvedPath, data);\n\n ok('file.download', {\n fileId,\n path: resolvedPath,\n filename,\n contentType,\n size,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to download file',\n );\n }\n });\n"],"mappings":"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","names":["exports","CommanderError","InvalidArgumentError","exports","InvalidArgumentError","Argument","exports","Help","cmd","exports","InvalidArgumentError","Option","str","exports","exports","childProcess","path","fs","process","Argument","CommanderError","Help","Option","Command","option","exports","Argument","Command","CommanderError","InvalidArgumentError","Help","Option","fs","path","commander","nodes","fs","path","fs","path","fs","path","os","util","objectUtil","path","errorUtil","path","errorMap","ctx","result","issues","elements","processed","result","r","ZodFirstPartyTypeKind","os","import_node_process","import_node_util","import_node_child_process","import_promises","import_node_process","import_node_fs","import_node_fs","fs","fs","process","os","fs","fs","fsConstants","process","import_node_util","import_node_process","import_node_child_process","import_node_process","process","import_node_process","import_node_util","import_node_child_process","execFileAsync","process","import_node_util","import_node_child_process","execFileAsync","execFileAsync","defaultBrowser","process","execFile","childProcess","__dirname","path","platform","process","defaultBrowser","fs","fsConstants","resolve","platform","path","hostname","resolve","DEFAULT_API_ENDPOINT","isAuthenticated","CLI_VERSION","getConfigPath","path","fs","path","crypto","path","resolve","fs","path","fs","path","VERSION","program","logger"]}
|