@powerformer/refly-cli 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/refly.js +2842 -2043
- package/dist/bin/refly.js.map +1 -1
- package/dist/index.d.ts +1 -370
- package/dist/index.js +64 -329
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
- package/skill/SKILL.md +21 -18
- package/skill/references/file.md +21 -9
- package/skill/references/node.md +64 -40
- package/skill/references/skill.md +376 -31
- package/skill/references/workflow.md +136 -43
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/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/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/skill/installer.ts","../../src/utils/logo.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/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/runs.ts","../../src/commands/workflow/abort.ts","../../src/commands/workflow/status.ts","../../src/commands/workflow/detail.ts","../../src/commands/workflow/toolcalls.ts","../../src/commands/workflow/toolset-keys.ts","../../src/commands/workflow/layout.ts","../../src/commands/workflow/nodes.ts","../../src/commands/workflow/node-get.ts","../../src/commands/node/index.ts","../../src/commands/node/types.ts","../../src/commands/node/run.ts","../../src/commands/node/result.ts","../../src/commands/node/abort.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 CLI version from package.json\n */\nexport function getCliVersion(): string {\n try {\n const pkgPath = path.join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n return pkg.version || '0.1.0';\n } catch {\n return '0.1.0';\n }\n}\n\n/**\n * Get the Refly configuration directory (~/.refly)\n */\nexport function getReflyDir(): string {\n const dir = path.join(os.homedir(), '.refly');\n ensureDir(dir);\n return dir;\n}\n\n/**\n * Get the 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 EXECUTION_FAILED: 'EXECUTION_FAILED',\n\n // Network\n NETWORK_ERROR: 'NETWORK_ERROR',\n TIMEOUT: 'TIMEOUT',\n API_ERROR: 'API_ERROR',\n\n // General\n NOT_FOUND: 'NOT_FOUND',\n CONFLICT: 'CONFLICT',\n PERMISSION_DENIED: 'PERMISSION_DENIED',\n INVALID_INPUT: 'INVALID_INPUT',\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n} 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, auth_status, user, skill } = payload as Record<\n string,\n unknown\n >;\n\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n\n // Header\n console.log(`${sym.DIAMOND} ${UI.bold('Refly CLI')} v${cli_version || '?'}`);\n console.log();\n\n // Auth status\n const authOk = auth_status === 'valid';\n const userObj = user as Record<string, unknown> | null;\n let authText = '';\n if (authOk && userObj?.email) {\n authText = String(userObj.email);\n } else if (auth_status === 'expired') {\n authText = 'Token expired';\n } else {\n authText = 'Not authenticated';\n }\n\n // Skill status\n const skillObj = skill as Record<string, unknown> | null;\n const skillInstalled = skillObj?.installed === true;\n const skillVersion = skillObj?.version ? `v${skillObj.version}` : '';\n const skillUpToDate = skillObj?.up_to_date === true;\n let skillText = '';\n if (skillInstalled) {\n skillText = skillVersion + (skillUpToDate ? ' (up to date)' : ' (update available)');\n } else {\n skillText = 'Not installed';\n }\n\n // Build combined status card\n const authIcon = authOk\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.FAILURE, Style.TEXT_DANGER);\n const connIcon = authOk\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.PENDING, Style.TEXT_DIM);\n const skillIcon = skillInstalled\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.PENDING, Style.TEXT_DIM);\n\n const lines: Array<{ text: string; indent?: boolean; muted?: boolean }> = [\n { text: `${authIcon} Account ${authOk ? authText : authText}`, muted: !authOk },\n { text: `${connIcon} Link https://refly.ai/` },\n { text: `${skillIcon} Version ${skillText}`, muted: !skillInstalled },\n ];\n\n console.log(\n UI.card({\n title: 'Status',\n lines,\n width: 45,\n }),\n );\n console.log();\n }\n\n // === Workflow Status Format ===\n\n private outputWorkflowStatus(payload: SuccessPayload): void {\n const {\n runId,\n status,\n title,\n totalNodes,\n executedNodes,\n failedNodes,\n nodeStatuses,\n createdAt,\n updatedAt,\n watching,\n isInitial,\n completed,\n // For progress updates\n summary,\n changedNodes,\n } = payload as Record<string, unknown>;\n\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n\n // Header with status\n const statusStr = (status as string) || 'unknown';\n const statusIcon = UI.statusIcon(statusStr);\n const statusLabel = this.formatWorkflowStatus(statusStr);\n\n // For progress updates (delta mode), show compact output\n if (changedNodes && !isInitial) {\n const progressStr = UI.progressBar(\n (executedNodes as number) || 0,\n (totalNodes as number) || 1,\n { width: 25 },\n );\n console.log(` ${progressStr} ${statusIcon} ${statusLabel}`);\n\n // Show changed nodes\n const nodes = changedNodes as Array<Record<string, unknown>>;\n if (nodes && nodes.length > 0) {\n for (const node of nodes) {\n const nodeIcon = UI.statusIcon(node.status as string);\n const nodeTitle = (node.title as string) || (node.nodeId as string);\n console.log(` ${nodeIcon} ${nodeTitle}`);\n }\n }\n\n if (summary) {\n console.log(UI.dim(` ${summary}`));\n }\n return;\n }\n\n // Full status output\n console.log(`${statusIcon} ${UI.bold('Workflow')} ${statusLabel}`);\n console.log();\n\n // Progress bar\n const total = (totalNodes as number) || 0;\n const executed = (executedNodes as number) || 0;\n const failed = (failedNodes as number) || 0;\n\n if (total > 0) {\n const progressStr = UI.progressBar(executed, total, { width: 30 });\n console.log(` ${progressStr}`);\n console.log();\n }\n\n // Run info\n console.log(UI.labeledValue('Run ID', (runId as string) || '—'));\n if (title) {\n console.log(UI.labeledValue('Title', title as string));\n }\n\n // Time info\n if (createdAt) {\n const duration = UI.formatDuration(createdAt as string, updatedAt as string);\n console.log(\n UI.labeledValue(\n 'Started',\n UI.formatTime(createdAt as string) + (duration ? ` (${duration})` : ''),\n ),\n );\n }\n\n // Node statuses\n const nodes = nodeStatuses as Array<Record<string, unknown>>;\n if (nodes && nodes.length > 0) {\n console.log();\n console.log(UI.dim(' Nodes:'));\n\n nodes.forEach((node, idx) => {\n const isLast = idx === nodes.length - 1;\n const prefix = isLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n const nodeIcon = UI.statusIcon(node.status as string);\n const nodeTitle = (node.title as string) || (node.nodeId as string);\n const nodeType = (node.nodeType as string) || '';\n const nodeProgress = node.progress as number;\n\n let line = ` ${prefix}${sym.BOX_HORIZONTAL} ${nodeIcon} ${nodeTitle}`;\n if (nodeType) {\n line += ` ${UI.dim(`(${nodeType})`)}`;\n }\n if (nodeProgress !== undefined && nodeProgress < 100 && node.status === 'executing') {\n line += ` ${UI.dim(`${nodeProgress}%`)}`;\n }\n console.log(line);\n\n // Show error message if failed\n if (node.status === 'failed' && node.errorMessage) {\n const errorPrefix = isLast ? ' ' : ` ${sym.BOX_VERTICAL}`;\n // Clean up error message (remove JSON array brackets if present)\n let errorMsg = node.errorMessage as string;\n if (errorMsg.startsWith('[') && errorMsg.endsWith(']')) {\n try {\n const parsed = JSON.parse(errorMsg);\n errorMsg = Array.isArray(parsed) ? parsed.join(', ') : errorMsg;\n } catch {\n // Keep original if not valid JSON\n }\n }\n if (errorMsg && errorMsg !== '[]') {\n console.log(`${errorPrefix} ${UI.error(errorMsg)}`);\n }\n }\n });\n }\n\n // Summary stats\n if (failed > 0) {\n console.log();\n console.log(\n UI.stats([\n { label: 'Completed', value: executed, type: 'success' },\n { label: 'Failed', value: failed, type: 'error' },\n { label: 'Total', value: total },\n ]),\n );\n }\n\n // Watch mode indicator\n if (watching) {\n console.log();\n console.log(UI.dim(` ${sym.RUNNING} Watching for updates...`));\n }\n\n // Completion message\n if (completed) {\n console.log();\n if (statusStr === 'finish') {\n console.log(UI.successMsg('Workflow completed successfully'));\n } else if (statusStr === 'failed') {\n console.log(UI.errorMsg('Workflow failed'));\n }\n }\n\n console.log();\n }\n\n private formatWorkflowStatus(status: string): string {\n const statusMap: Record<string, string> = {\n init: 'Initializing',\n executing: 'Executing',\n finish: 'Completed',\n failed: 'Failed',\n };\n return statusMap[status] || status;\n }\n\n // === Compact Format ===\n\n private outputCompact(type: string, payload: SuccessPayload): void {\n const { message, ...rest } = payload;\n const icon = this.useColor ? styled(Symbols.SUCCESS, Style.TEXT_SUCCESS) : AsciiSymbol.SUCCESS;\n\n const mainMsg = message || this.humanizeType(type);\n const extras = this.extractDisplayFields(rest)\n .slice(0, 3)\n .map(([k, v]) => `${k}=${this.formatValue(v)}`)\n .join(' ');\n\n console.log(`${icon} ${mainMsg}${extras ? ` ${UI.dim(extras)}` : ''}`);\n }\n\n private outputErrorCompact(error: ErrorPayload): void {\n const icon = this.useColor ? styled(Symbols.FAILURE, Style.TEXT_DANGER) : AsciiSymbol.FAILURE;\n\n console.log(`${icon} ${error.message} ${UI.dim(`[${error.code}]`)}`);\n if (error.hint) {\n console.log(UI.dim(` ${error.hint}`));\n }\n }\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\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 {\n getAccessToken,\n getApiEndpoint,\n getApiKey,\n getAuthUser,\n loadConfig,\n saveConfig,\n} from '../config/config.js';\nimport { getReflyDir } from '../config/paths.js';\nimport { installSkill, isSkillInstalled } from '../skill/installer.js';\nimport { printDim, printError, println, printLogo, printSuccess } from '../utils/logo.js';\nimport { ErrorCodes, fail, isPrettyOutput, ok, print } from '../utils/output.js';\nimport { isTTY, shouldUseColor } from '../utils/ui.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 // Use build-time injected endpoint, or --host if explicitly provided\n const apiEndpoint = host || DEFAULT_API_ENDPOINT;\n\n // Determine output mode\n const pretty = isPrettyOutput();\n const tty = isTTY();\n const useColor = shouldUseColor();\n\n // Check current state\n const skillStatus = isSkillInstalled();\n const isAuthenticated = !!(getAccessToken() || getApiKey());\n\n // Already initialized case\n if (skillStatus.installed && skillStatus.upToDate && !force && isAuthenticated) {\n if (pretty && tty) {\n printLogo({ color: useColor });\n println('');\n printSuccess('Already initialized and authenticated');\n const user = getAuthUser();\n if (user?.email) {\n printDim(` Logged in as ${user.email}`);\n }\n println('');\n printDim('Run `refly status` for details.');\n return;\n }\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 // Pretty mode: Show logo and progress\n if (pretty && tty) {\n printLogo({ color: useColor });\n println('');\n println('Initializing Refly CLI...');\n println('');\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 installResult = installSkill();\n\n // Pretty mode: Show installation results\n if (pretty && tty) {\n if (installResult.skillInstalled) {\n printSuccess('Skill files installed');\n } else {\n printError('Skill files installation failed');\n }\n\n if (installResult.commandsInstalled) {\n printSuccess('Slash commands installed');\n } else {\n printError('Slash commands installation failed');\n }\n println('');\n } else if (!pretty) {\n // JSON mode: print install result\n print('init', {\n message: 'Refly CLI initialized successfully',\n configDir: getReflyDir(),\n apiEndpoint: apiEndpoint,\n skillInstalled: installResult.skillInstalled,\n skillPath: installResult.skillPath,\n commandsInstalled: installResult.commandsInstalled,\n commandsPath: installResult.commandsPath,\n version: installResult.version,\n });\n }\n\n // Auto-login unless skipped or already authenticated\n if (!skipLogin && !isAuthenticated) {\n if (pretty && tty) {\n println('Starting authentication...');\n printDim('A browser window will open for login.');\n println('');\n }\n\n // Call loginWithDeviceFlow without emitOutput so we can handle result ourselves\n const loginSuccess = await loginWithDeviceFlow();\n\n if (pretty && tty) {\n if (loginSuccess) {\n printSuccess('Authentication successful');\n const user = getAuthUser();\n if (user?.email) {\n printDim(` Welcome, ${user.email}!`);\n }\n } else {\n printError('Authentication was not completed');\n printDim(' Run `refly login` to authenticate later.');\n }\n println('');\n } else if (!pretty && loginSuccess) {\n // JSON mode: output login success\n print('login', {\n message: 'Successfully authenticated',\n user: getAuthUser(),\n });\n }\n } else if (pretty && tty) {\n if (isAuthenticated) {\n printSuccess('Already authenticated');\n const user = getAuthUser();\n if (user?.email) {\n printDim(` Logged in as ${user.email}`);\n }\n } else {\n printDim('Skipped login. Run `refly login` to authenticate later.');\n }\n println('');\n }\n\n // Final message\n if (pretty && tty) {\n println('Ready to use! Try `refly status` to verify.');\n return;\n }\n\n // JSON mode final output (if not already printed)\n if (!pretty) {\n return ok('init', {\n message: 'Refly CLI initialized successfully',\n configDir: getReflyDir(),\n apiEndpoint: apiEndpoint,\n skillInstalled: installResult.skillInstalled,\n commandsInstalled: installResult.commandsInstalled,\n version: installResult.version,\n authenticated: !!(getAccessToken() || getApiKey()),\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 * 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 * 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';\nimport { logger } from '../utils/logger.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: dist/bin/../../skill\n path.join(__dirname, '..', '..', '..', 'skill'), // Development: dist/bin/../../../skill\n path.join(__dirname, '..', 'skill'), // Alternative: dist/../skill\n ];\n\n logger.debug('Looking for skill files, __dirname:', __dirname);\n\n for (const p of possiblePaths) {\n const resolved = path.resolve(p);\n const exists = fs.existsSync(resolved);\n logger.debug(` Checking path: ${resolved} - exists: ${exists}`);\n if (exists) {\n return resolved;\n }\n }\n\n throw new Error(`Skill files not found in package. Searched paths from __dirname=${__dirname}`);\n}\n\nexport interface InstallResult {\n skillInstalled: boolean;\n skillPath: string | null;\n 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 logger.debug('Source skill directory:', sourceDir);\n\n // Install SKILL.md and references\n // Always try to create skills directory\n const targetDir = getClaudeSkillDir();\n logger.debug('Target skill directory:', targetDir);\n\n try {\n ensureDir(targetDir);\n ensureDir(path.join(targetDir, 'references'));\n logger.debug('Created target directories');\n } catch (err) {\n logger.error('Failed to create target directories:', err);\n throw err;\n }\n\n // Copy SKILL.md\n const skillSource = path.join(sourceDir, 'SKILL.md');\n const skillTarget = path.join(targetDir, 'SKILL.md');\n logger.debug(`Copying SKILL.md: ${skillSource} -> ${skillTarget}`);\n if (fs.existsSync(skillSource)) {\n fs.copyFileSync(skillSource, skillTarget);\n result.skillInstalled = true;\n result.skillPath = targetDir;\n logger.debug('SKILL.md copied successfully');\n } else {\n logger.warn('SKILL.md source not found:', skillSource);\n }\n\n // Copy references\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 logger.debug(`Copying ${files.length} reference files`);\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 logger.debug('Commands directory:', commandsDir);\n ensureDir(commandsDir);\n result.commandsInstalled = installSlashCommands(sourceDir, commandsDir);\n if (result.commandsInstalled) {\n result.commandsPath = commandsDir;\n }\n logger.debug('Commands installed:', result.commandsInstalled);\n\n // Update config with installation info\n updateSkillInfo(result.version);\n\n logger.info('Skill installation complete:', {\n skillInstalled: result.skillInstalled,\n commandsInstalled: result.commandsInstalled,\n });\n\n return result;\n}\n\n/**\n * Install slash command files\n */\nfunction installSlashCommands(sourceDir: string, targetDir: string): boolean {\n const commandsSource = path.join(sourceDir, '..', 'commands');\n if (!fs.existsSync(commandsSource)) {\n return false;\n }\n\n try {\n const files = fs.readdirSync(commandsSource);\n for (const file of files) {\n if (file.endsWith('.md')) {\n fs.copyFileSync(path.join(commandsSource, file), path.join(targetDir, file));\n }\n }\n return files.length > 0;\n } catch {\n return false;\n }\n}\n\n/**\n * Get skill version from SKILL.md\n */\nfunction getSkillVersion(): string {\n try {\n const skillPath = path.join(getPackageSkillDir(), 'SKILL.md');\n const content = fs.readFileSync(skillPath, 'utf-8');\n // Extract version from frontmatter if present, otherwise use package version\n const versionMatch = content.match(/version:\\s*(\\d+\\.\\d+\\.\\d+)/);\n if (versionMatch) {\n return versionMatch[1];\n }\n } catch {\n // Fall through to package version\n }\n\n // Use CLI package version\n try {\n const pkgPath = path.join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n return pkg.version;\n } catch {\n return '0.1.0';\n }\n}\n\n/**\n * Check if skill is installed and up to date\n */\nexport function isSkillInstalled(): {\n installed: boolean;\n upToDate: boolean;\n currentVersion?: string;\n} {\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 ASCII Logo\n * Used by init command for branding display\n */\n\nimport { shouldUseColor, isTTY, Style, UI } from './ui.js';\n\n/**\n * REFLY.AI ASCII Logo (Gradient Block Style)\n */\nexport const REFLY_LOGO = `█▀█ █▀▀ █▀▀ █ █ █ █▀█ █\n█▀▄ █▀▀ █▀▀ █ █▄█ ▀ █▀█ █\n▀ ▀ ▀▀▀ ▀ ▀▀▀ ▀ ▀ ▀ ▀`;\n\n/**\n * Print the Refly logo to stderr\n * Only prints if TTY and colors are enabled\n */\nexport function printLogo(options?: { color?: boolean; force?: boolean }): void {\n const useColor = options?.color ?? shouldUseColor();\n const tty = isTTY();\n\n // Skip logo if not TTY (unless forced)\n if (!tty && !options?.force) {\n return;\n }\n\n if (useColor) {\n // Print with green color\n process.stderr.write(`${Style.TEXT_SUCCESS}${REFLY_LOGO}${Style.RESET}\\n`);\n } else {\n process.stderr.write(`${REFLY_LOGO}\\n`);\n }\n}\n\n/**\n * Print a success message with checkmark\n */\nexport function printSuccess(message: string): void {\n process.stderr.write(`${UI.successMsg(message)}\\n`);\n}\n\n/**\n * Print an error message with cross\n */\nexport function printError(message: string): void {\n process.stderr.write(`${UI.errorMsg(message)}\\n`);\n}\n\n/**\n * Print a dimmed/muted message\n */\nexport function printDim(message: string): void {\n process.stderr.write(`${UI.dim(message)}\\n`);\n}\n\n/**\n * Print a plain message\n */\nexport function println(message: string): void {\n process.stderr.write(`${message}\\n`);\n}\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';\nimport { styled, Style } from '../utils/ui.js';\nimport { getCliVersion } from '../config/paths.js';\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 userCode?: 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: getCliVersion(),\n host: hostname,\n },\n requireAuth: false,\n });\n\n const { deviceId, expiresAt, userCode } = initResponse;\n\n // Set up cleanup handler for when process is interrupted or exits\n const cleanup = async (deviceIdToCancel: string = deviceId) => {\n try {\n logger.debug('Cleaning up device session...');\n await apiRequest('/v1/auth/cli/device/cancel', {\n method: 'POST',\n body: { device_id: deviceIdToCancel },\n requireAuth: false,\n });\n logger.debug('Device session cancelled');\n } catch (error) {\n logger.debug('Failed to cancel device session during cleanup:', error);\n }\n };\n\n // Handle process termination signals\n process.on('SIGINT', async () => {\n logger.debug('Received SIGINT, cleaning up...');\n await cleanup();\n process.exit(130); // 128 + SIGINT(2)\n });\n\n process.on('SIGTERM', async () => {\n logger.debug('Received SIGTERM, cleaning up...');\n await cleanup();\n process.exit(143); // 128 + SIGTERM(15)\n });\n\n // Handle uncaught exceptions and unhandled rejections\n process.on('uncaughtException', async (error) => {\n logger.debug('Uncaught exception, cleaning up:', error);\n await cleanup();\n process.exit(1);\n });\n\n process.on('unhandledRejection', async (reason) => {\n logger.debug('Unhandled rejection, cleaning up:', reason);\n await cleanup();\n process.exit(1);\n });\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(getCliVersion())}&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 if (userCode) {\n process.stderr.write(`Verification Code: ${styled(userCode, Style.TEXT_HIGHLIGHT_BOLD)}\\n`);\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 try {\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n await sleep(pollInterval);\n\n const statusResponse = await apiRequest<DeviceSessionWithTokens>(\n '/v1/auth/cli/device/status',\n {\n method: 'GET',\n query: { device_id: deviceId },\n requireAuth: false,\n },\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 - update device status before showing error\n logger.debug('Authorization timeout, updating device status...');\n await cleanup(deviceId);\n printError(ErrorCodes.TIMEOUT, 'Authorization timeout', {\n hint: 'Complete authorization in the browser within 5 minutes',\n });\n return false;\n } finally {\n // Remove signal handlers when done\n process.removeAllListeners('SIGINT');\n process.removeAllListeners('SIGTERM');\n process.removeAllListeners('uncaughtException');\n process.removeAllListeners('unhandledRejection');\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 * 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, getCliVersion } from '../config/paths.js';\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: getCliVersion(),\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 - Upgrade CLI and reinstall skill files\n */\n\nimport { Command } from 'commander';\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { ok, fail, print, ErrorCodes } from '../utils/output.js';\nimport { installSkill, isSkillInstalled } from '../skill/installer.js';\nimport { logger } from '../utils/logger.js';\n\n// Package name on npm\nconst PACKAGE_NAME = '@powerformer/refly-cli';\n\ninterface VersionInfo {\n current: string;\n latest: string | null;\n updateAvailable: boolean;\n}\n\n/**\n * Get current CLI version from package.json\n */\nfunction getCurrentVersion(): string {\n // This is injected at build time or read from package\n try {\n // Try to get version from the running package\n const pkgPath = path.join(__dirname, '..', '..', 'package.json');\n const pkgContent = fs.readFileSync(pkgPath, { encoding: 'utf-8' });\n const pkg = JSON.parse(pkgContent);\n return pkg.version;\n } catch {\n return '0.1.0';\n }\n}\n\n/**\n * Get latest version from npm registry\n */\nasync function getLatestVersion(): Promise<string | null> {\n try {\n const result = execSync(`npm view ${PACKAGE_NAME} version 2>/dev/null`, {\n encoding: 'utf-8',\n timeout: 10000,\n });\n return result.trim();\n } catch (error) {\n logger.debug('Failed to get latest version from npm:', error);\n return null;\n }\n}\n\n/**\n * Check version info\n */\nasync function checkVersion(): Promise<VersionInfo> {\n const current = getCurrentVersion();\n const latest = await getLatestVersion();\n\n return {\n current,\n latest,\n updateAvailable: latest !== null && latest !== current,\n };\n}\n\n/**\n * Upgrade CLI package via npm\n */\nfunction upgradeCli(): { success: boolean; error?: string } {\n try {\n logger.info('Upgrading CLI via npm...');\n\n // Use npm to install the latest version globally\n execSync(`npm install -g ${PACKAGE_NAME}@latest`, {\n encoding: 'utf-8',\n stdio: 'pipe',\n timeout: 120000, // 2 minutes\n });\n\n return { success: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n logger.error('Failed to upgrade CLI:', message);\n return { success: false, error: message };\n }\n}\n\nexport const upgradeCommand = new Command('upgrade')\n .description('Upgrade CLI to latest version and reinstall skill files')\n .option('--check', 'Only check for updates without installing')\n .option('--skill-only', 'Only reinstall skill files without upgrading CLI')\n .option('--cli-only', 'Only upgrade CLI without reinstalling skill files')\n .action(async (options) => {\n try {\n const { check, skillOnly, cliOnly } = options;\n\n // Check for updates\n const versionInfo = await checkVersion();\n\n // Check only mode\n if (check) {\n return ok('upgrade.check', {\n currentVersion: versionInfo.current,\n latestVersion: versionInfo.latest,\n updateAvailable: versionInfo.updateAvailable,\n message: versionInfo.updateAvailable\n ? `Update available: ${versionInfo.current} → ${versionInfo.latest}`\n : 'Already on latest version',\n });\n }\n\n // Skill only mode\n if (skillOnly) {\n const beforeStatus = isSkillInstalled();\n const result = installSkill();\n\n return ok('upgrade', {\n message: 'Skill files updated successfully',\n cliUpgraded: false,\n skillUpdated: true,\n previousVersion: beforeStatus.currentVersion ?? null,\n newVersion: result.version,\n skillPath: result.skillPath,\n commandsInstalled: result.commandsInstalled,\n });\n }\n\n // CLI upgrade\n let cliUpgraded = false;\n let cliError: string | undefined;\n\n if (!cliOnly) {\n // Show current status\n print('upgrade.progress', {\n step: 'checking',\n currentVersion: versionInfo.current,\n latestVersion: versionInfo.latest,\n });\n }\n\n if (!skillOnly) {\n if (versionInfo.updateAvailable) {\n print('upgrade.progress', {\n step: 'upgrading',\n from: versionInfo.current,\n to: versionInfo.latest,\n });\n\n const upgradeResult = upgradeCli();\n cliUpgraded = upgradeResult.success;\n cliError = upgradeResult.error;\n\n if (!cliUpgraded) {\n return fail(ErrorCodes.INTERNAL_ERROR, 'Failed to upgrade CLI', {\n hint: cliError || 'Try running: npm install -g @powerformer/refly-cli@latest',\n });\n }\n } else {\n logger.info('CLI is already on latest version');\n }\n }\n\n // Reinstall skill files (unless cli-only)\n let skillResult = null;\n if (!cliOnly) {\n skillResult = installSkill();\n }\n\n // Final output\n const newVersionInfo = await checkVersion();\n\n // Determine message based on what was updated\n let message: string;\n if (cliUpgraded && skillResult) {\n message = 'CLI and skill files updated successfully';\n } else if (cliUpgraded) {\n message = 'CLI updated successfully';\n } else if (skillResult) {\n message = 'Skill files updated (CLI already on latest version)';\n } else {\n message = 'Already on latest version';\n }\n\n ok('upgrade', {\n message,\n cliUpgraded,\n skillUpdated: !!skillResult,\n previousVersion: versionInfo.current,\n currentVersion: newVersionInfo.current,\n latestVersion: newVersionInfo.latest,\n skillPath: skillResult?.skillPath ?? null,\n commandsInstalled: skillResult?.commandsInstalled ?? false,\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 * All commands use workflowId (not runId) for simplicity.\n * The backend automatically finds the current/latest execution.\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 { workflowRunsCommand } from './runs.js';\nimport { workflowAbortCommand } from './abort.js';\nimport { workflowStatusCommand } from './status.js';\nimport { workflowDetailCommand } from './detail.js';\nimport { workflowToolcallsCommand } from './toolcalls.js';\nimport { workflowToolsetKeysCommand } from './toolset-keys.js';\nimport { workflowLayoutCommand } from './layout.js';\nimport { workflowNodesCommand } from './nodes.js';\nimport { workflowNodeGetCommand } from './node-get.js';\n\nexport const workflowCommand = new Command('workflow')\n .description('Manage and run workflows')\n // Workflow management\n .addCommand(workflowCreateCommand)\n .addCommand(workflowGenerateCommand)\n .addCommand(workflowListCommand)\n .addCommand(workflowGetCommand)\n .addCommand(workflowEditCommand)\n .addCommand(workflowDeleteCommand)\n // Workflow execution\n .addCommand(workflowRunCommand)\n .addCommand(workflowRunsCommand)\n .addCommand(workflowStatusCommand)\n .addCommand(workflowDetailCommand)\n .addCommand(workflowToolcallsCommand)\n .addCommand(workflowAbortCommand)\n // Workflow utilities\n .addCommand(workflowToolsetKeysCommand)\n .addCommand(workflowLayoutCommand)\n .addCommand(workflowNodesCommand)\n .addCommand(workflowNodeGetCommand);\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\n// Supported node types in simplified format\nconst SUPPORTED_NODE_TYPES = ['skill', 'agent'];\n\n// Unsupported fields that indicate advanced format\nconst UNSUPPORTED_NODE_FIELDS = ['prompt', 'instruction', 'content', 'input'];\n\n// Pattern for variable interpolation syntax\nconst VARIABLE_PATTERN = /\\{\\{[^}]+\\}\\}/;\n\ninterface SimpleNode {\n id: string;\n type: string;\n query?: string;\n toolsetKeys?: string[];\n dependsOn?: string[];\n [key: string]: unknown;\n}\n\ninterface WorkflowSpec {\n nodes?: SimpleNode[];\n edges?: unknown[];\n version?: number;\n metadata?: unknown;\n [key: string]: unknown;\n}\n\n/**\n * Validate that the spec follows the simplified format.\n * Returns an error message if invalid, or null if valid.\n */\nfunction validateSimplifiedSpec(spec: WorkflowSpec): string | null {\n // Check for unsupported top-level fields\n if (spec.version !== undefined) {\n return 'Field \"version\" is not supported in simplified format';\n }\n if (spec.metadata !== undefined) {\n return 'Field \"metadata\" is not supported in simplified format';\n }\n\n const nodes = spec.nodes;\n if (!nodes || !Array.isArray(nodes)) {\n return 'Spec must contain a \"nodes\" array';\n }\n\n if (nodes.length === 0) {\n return 'Spec must contain at least one node';\n }\n\n for (const node of nodes) {\n // Check required fields\n if (!node.id || typeof node.id !== 'string') {\n return 'Each node must have a string \"id\" field';\n }\n if (!node.type || typeof node.type !== 'string') {\n return `Node \"${node.id}\": must have a string \"type\" field`;\n }\n\n // Check node type\n if (node.type.startsWith('tool:')) {\n return `Node \"${node.id}\": type \"tool:xxx\" is not supported. Use type \"skill\" with toolsetKeys instead. Example: {\"type\":\"skill\",\"toolsetKeys\":[\"${node.type.replace('tool:', '')}\"]}`;\n }\n if (node.type === 'start') {\n return `Node \"${node.id}\": type \"start\" is not supported. Start node is automatically created`;\n }\n if (!SUPPORTED_NODE_TYPES.includes(node.type)) {\n return `Node \"${node.id}\": type \"${node.type}\" is not supported. Use one of: ${SUPPORTED_NODE_TYPES.join(', ')}`;\n }\n\n // Check for unsupported fields\n for (const field of UNSUPPORTED_NODE_FIELDS) {\n if (node[field] !== undefined) {\n if (field === 'prompt') {\n return `Node \"${node.id}\": field \"prompt\" is not supported. Use \"query\" instead`;\n }\n if (field === 'input') {\n return `Node \"${node.id}\": field \"input\" is not supported. Use top-level \"query\" and \"toolsetKeys\" instead`;\n }\n return `Node \"${node.id}\": field \"${field}\" is not supported in simplified format`;\n }\n }\n\n // Check for variable interpolation syntax\n if (node.query && typeof node.query === 'string' && VARIABLE_PATTERN.test(node.query)) {\n return `Node \"${node.id}\": variable syntax \"{{...}}\" is not supported in query field`;\n }\n\n // Validate toolsetKeys if present\n if (node.toolsetKeys !== undefined) {\n if (!Array.isArray(node.toolsetKeys)) {\n return `Node \"${node.id}\": \"toolsetKeys\" must be an array`;\n }\n for (const key of node.toolsetKeys) {\n if (typeof key !== 'string') {\n return `Node \"${node.id}\": each item in \"toolsetKeys\" must be a string`;\n }\n }\n }\n\n // Validate dependsOn if present\n if (node.dependsOn !== undefined) {\n if (!Array.isArray(node.dependsOn)) {\n return `Node \"${node.id}\": \"dependsOn\" must be an array`;\n }\n for (const dep of node.dependsOn) {\n if (typeof dep !== 'string') {\n return `Node \"${node.id}\": each item in \"dependsOn\" must be a string`;\n }\n }\n }\n }\n\n // Validate dependsOn references\n const nodeIds = new Set(nodes.map((n) => n.id));\n for (const node of nodes) {\n if (node.dependsOn) {\n for (const dep of node.dependsOn) {\n if (!nodeIds.has(dep)) {\n return `Node \"${node.id}\": dependsOn references unknown node \"${dep}\"`;\n }\n }\n }\n }\n\n return null;\n}\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 // Supports both formats:\n // - Array shorthand: [node1, node2] -> { nodes: [node1, node2] }\n // - Full object: { nodes: [...], edges: [...] } -> as-is\n let spec: WorkflowSpec;\n try {\n const parsed = JSON.parse(options.spec);\n spec = Array.isArray(parsed) ? { nodes: parsed } : parsed;\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --spec', {\n hint: 'Ensure the spec is valid JSON',\n });\n return;\n }\n\n // Validate simplified format\n const validationError = validateSimplifiedSpec(spec);\n if (validationError) {\n fail(ErrorCodes.INVALID_INPUT, validationError, {\n hint: 'Use simplified format: [{\"id\":\"node1\",\"type\":\"skill\",\"query\":\"...\",\"toolsetKeys\":[\"tool_name\"],\"dependsOn\":[\"other_node\"]}]',\n });\n return;\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 - Start a workflow execution\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('Start a workflow execution')\n .argument('<workflowId>', 'Workflow ID to run')\n .option('--input <json>', 'Input variables as JSON', '{}')\n .option('--from-node <nodeId>', 'Start workflow execution from a specific node (Run From Here)')\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 // Build request body with optional startNodes\n const body: { input?: unknown; startNodes?: string[] } = { input };\n if (options.fromNode) {\n body.startNodes = [options.fromNode];\n }\n\n const result = await apiRequest<RunResult>(`/v1/cli/workflow/${workflowId}/run`, {\n method: 'POST',\n body,\n });\n\n ok('workflow.run', {\n message: options.fromNode\n ? `Workflow run started from node ${options.fromNode}`\n : 'Workflow run started',\n runId: result.runId,\n workflowId: result.workflowId,\n status: result.status,\n startNode: options.fromNode || undefined,\n createdAt: result.createdAt,\n nextStep: `Check status with \\`refly workflow status ${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 run workflow',\n );\n }\n });\n","/**\n * refly workflow runs - List workflow execution history\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 WorkflowRun {\n runId: 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}\n\ninterface WorkflowRunsResponse {\n workflowId: string;\n runs: WorkflowRun[];\n total: number;\n hasActiveRun: boolean;\n activeRunId?: string;\n}\n\nexport const workflowRunsCommand = new Command('runs')\n .description('List workflow execution history')\n .argument('<workflowId>', 'Workflow ID')\n .option('--limit <limit>', 'Maximum number of runs to return (default: 20)', '20')\n .option('--offset <offset>', 'Pagination offset (default: 0)', '0')\n .option('--status <status>', 'Filter by status (init, executing, finish, failed)')\n .action(async (workflowId, options) => {\n try {\n const params = new URLSearchParams();\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.status) {\n params.set('status', options.status);\n }\n\n const queryString = params.toString();\n const url = `/v1/cli/workflow/${workflowId}/runs${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<WorkflowRunsResponse>(url);\n\n ok('workflow.runs', {\n workflowId: result.workflowId,\n total: result.total,\n hasActiveRun: result.hasActiveRun,\n activeRunId: result.activeRunId,\n runs: result.runs.map((run) => ({\n runId: run.runId,\n status: run.status,\n progress: `${run.executedNodes}/${run.totalNodes}`,\n failedNodes: run.failedNodes,\n startedAt: run.startedAt,\n finishedAt: run.finishedAt,\n durationMs: run.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 workflow runs',\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('<workflowId>', 'Workflow ID')\n .action(async (workflowId) => {\n try {\n await apiRequest(`/v1/cli/workflow/${workflowId}/abort`, {\n method: 'POST',\n });\n\n ok('workflow.abort', {\n message: 'Workflow run aborted',\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 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('<workflowId>', 'Workflow 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 (workflowId, 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/${workflowId}/status`);\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 detail - Get detailed workflow execution 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 WorkflowDetailResponse {\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 workflowDetailCommand = new Command('detail')\n .description('Get detailed workflow execution information including all node results')\n .argument('<workflowId>', 'Workflow ID')\n .option('--no-tool-calls', 'Exclude tool call summaries')\n .option('--preview-length <length>', 'Output preview length (default: 500)', '500')\n .action(async (workflowId, 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/${workflowId}/detail${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<WorkflowDetailResponse>(url);\n\n ok('workflow.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 detail',\n );\n }\n });\n","/**\n * refly workflow toolcalls - Get all tool calls for the current workflow execution\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 workflowId: 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 workflowToolcallsCommand = new Command('toolcalls')\n .description('Get all tool calls for the current workflow execution')\n .argument('<workflowId>', 'Workflow 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 (workflowId, 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/${workflowId}/toolcalls${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<WorkflowToolCallsResponse>(url);\n\n ok('workflow.toolcalls', {\n runId: result.runId,\n workflowId: result.workflowId,\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 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 workflow nodes - List all nodes in 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 NodeData {\n id: string;\n type: string;\n data?: {\n title?: string;\n metadata?: Record<string, unknown>;\n [key: string]: unknown;\n };\n position?: { x: number; y: number };\n}\n\ninterface EdgeData {\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n}\n\ninterface WorkflowData {\n workflowId: string;\n name: string;\n nodes: NodeData[];\n edges: EdgeData[];\n}\n\nexport const workflowNodesCommand = new Command('nodes')\n .description('List all nodes in a workflow')\n .argument('<workflowId>', 'Workflow ID')\n .option('--include-edges', 'Include edge/connection information')\n .option('--include-position', 'Include node position coordinates')\n .option('--include-metadata', 'Include full node metadata')\n .action(async (workflowId, options) => {\n try {\n const result = await apiRequest<WorkflowData>(`/v1/cli/workflow/${workflowId}`);\n\n // Format nodes for output\n const nodes = result.nodes.map((node) => {\n const output: Record<string, unknown> = {\n id: node.id,\n type: node.type,\n title: node.data?.title || node.data?.metadata?.title || undefined,\n };\n\n if (options.includePosition && node.position) {\n output.position = node.position;\n }\n\n if (options.includeMetadata && node.data?.metadata) {\n output.metadata = node.data.metadata;\n }\n\n return output;\n });\n\n const output: Record<string, unknown> = {\n workflowId: result.workflowId,\n workflowName: result.name,\n nodeCount: nodes.length,\n nodes,\n };\n\n if (options.includeEdges && result.edges?.length) {\n output.edges = result.edges.map((edge) => ({\n id: edge.id,\n source: edge.source,\n target: edge.target,\n sourceHandle: edge.sourceHandle,\n targetHandle: edge.targetHandle,\n }));\n output.edgeCount = result.edges.length;\n }\n\n ok('workflow.nodes', 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 workflow nodes',\n );\n }\n });\n","/**\n * refly workflow node - Get single node information from 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 NodeData {\n id: string;\n type: string;\n data?: {\n title?: string;\n metadata?: Record<string, unknown>;\n [key: string]: unknown;\n };\n position?: { x: number; y: number };\n}\n\ninterface EdgeData {\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n}\n\ninterface WorkflowData {\n workflowId: string;\n name: string;\n nodes: NodeData[];\n edges: EdgeData[];\n}\n\nexport const workflowNodeGetCommand = new Command('node')\n .description('Get single node information from a workflow')\n .argument('<workflowId>', 'Workflow ID')\n .argument('<nodeId>', 'Node ID')\n .option('--include-connections', 'Include incoming and outgoing connections')\n .action(async (workflowId, nodeId, options) => {\n try {\n const result = await apiRequest<WorkflowData>(`/v1/cli/workflow/${workflowId}`);\n\n // Find the specific node\n const node = result.nodes.find((n) => n.id === nodeId);\n\n if (!node) {\n fail(ErrorCodes.NODE_NOT_FOUND, `Node ${nodeId} not found in workflow ${workflowId}`, {\n hint: `Use 'refly workflow nodes ${workflowId}' to list all nodes`,\n });\n }\n\n // Build output\n const output: Record<string, unknown> = {\n workflowId: result.workflowId,\n workflowName: result.name,\n node: {\n id: node.id,\n type: node.type,\n title: node.data?.title || node.data?.metadata?.title || undefined,\n position: node.position,\n metadata: node.data?.metadata || {},\n data: node.data,\n },\n };\n\n // Find connections if requested\n if (options.includeConnections && result.edges?.length) {\n const incoming = result.edges\n .filter((e) => e.target === nodeId)\n .map((e) => ({\n from: e.source,\n sourceHandle: e.sourceHandle,\n targetHandle: e.targetHandle,\n }));\n\n const outgoing = result.edges\n .filter((e) => e.source === nodeId)\n .map((e) => ({\n to: e.target,\n sourceHandle: e.sourceHandle,\n targetHandle: e.targetHandle,\n }));\n\n output.connections = {\n incoming,\n outgoing,\n incomingCount: incoming.length,\n outgoingCount: outgoing.length,\n };\n }\n\n ok('workflow.node', 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 information',\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';\nimport { nodeAbortCommand } from './abort.js';\n\nexport const nodeCommand = new Command('node')\n .description('Node operations: types, run, abort, and execution results')\n .addCommand(nodeTypesCommand)\n .addCommand(nodeRunCommand)\n .addCommand(nodeResultCommand)\n .addCommand(nodeAbortCommand);\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 * Currently supports skillResponse node type.\n * Uses Redis distributed lock to prevent concurrent execution.\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 nodeType: string;\n status: 'completed' | 'failed';\n output?: {\n resultId: string;\n version: number;\n status: string;\n message?: string;\n hint?: string;\n };\n tokenUsage?: {\n input: number;\n output: number;\n total: number;\n };\n duration?: number;\n error?: string;\n}\n\nexport const nodeRunCommand = new Command('run')\n .description('Run a single node for debugging (currently supports skillResponse only)')\n .requiredOption('--type <nodeType>', 'Node type to run (e.g., \"skillResponse\")')\n .option('--query <query>', 'Query text for skillResponse node')\n .option('--input <json>', 'Full input data as JSON (alternative to --query)')\n .option('--config <json>', 'Node configuration as JSON (e.g., {\"modelItemId\": \"...\"})')\n .action(async (options) => {\n try {\n // Build input from query or JSON\n let input: Record<string, unknown> = {};\n if (options.query) {\n input = { query: options.query };\n } else if (options.input) {\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 return;\n }\n }\n\n // Parse config if provided\n let config: Record<string, unknown> = {};\n if (options.config) {\n try {\n config = JSON.parse(options.config);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --config', {\n hint: 'Ensure the config is valid JSON',\n });\n return;\n }\n }\n\n const result = await apiRequest<NodeRunResult>('/v1/cli/node/run', {\n method: 'POST',\n body: {\n nodeType: options.type,\n input,\n config,\n },\n });\n\n if (result.status === 'completed') {\n ok('node.run', {\n nodeType: result.nodeType,\n status: result.status,\n output: result.output,\n duration: result.duration,\n tokenUsage: result.tokenUsage,\n });\n } else {\n fail(ErrorCodes.EXECUTION_FAILED, result.error || 'Node execution failed', {\n details: {\n nodeType: result.nodeType,\n output: result.output,\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 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 TokenUsage {\n inputTokens: number;\n outputTokens: number;\n reasoningTokens?: number;\n}\n\ninterface ToolCallResult {\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}\n\ninterface NodeStep {\n name: string;\n content: string;\n reasoningContent?: string;\n tokenUsage?: TokenUsage[];\n toolCalls?: ToolCallResult[];\n}\n\ninterface NodeMessage {\n messageId: string;\n type: string;\n content: string;\n reasoningContent?: string;\n}\n\ninterface NodeResult {\n resultId: string;\n version: number;\n title: string;\n status: string;\n steps?: NodeStep[];\n messages?: NodeMessage[];\n errors?: unknown[];\n createdAt: string;\n updatedAt: string;\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 // Calculate total token usage from all steps\n let totalTokenUsage: { input: number; output: number; reasoning: number } | undefined;\n if (result.steps?.length) {\n totalTokenUsage = { input: 0, output: 0, reasoning: 0 };\n for (const step of result.steps) {\n if (step.tokenUsage?.length) {\n for (const usage of step.tokenUsage) {\n totalTokenUsage.input += usage.inputTokens || 0;\n totalTokenUsage.output += usage.outputTokens || 0;\n totalTokenUsage.reasoning += usage.reasoningTokens || 0;\n }\n }\n }\n }\n\n // Get the last step content as the main result content\n const lastStep = result.steps?.[result.steps.length - 1];\n const content = lastStep?.content;\n\n // Format output based on options\n const output: Record<string, unknown> = {\n resultId: result.resultId,\n version: result.version,\n title: result.title,\n status: result.status,\n content,\n tokenUsage: totalTokenUsage,\n createdAt: result.createdAt,\n updatedAt: result.updatedAt,\n };\n\n if (options.includeSteps && result.steps) {\n output.steps = result.steps.map((step, index) => ({\n stepIndex: index,\n name: step.name,\n content: step.content,\n reasoningContent: step.reasoningContent,\n toolCallsCount: step.toolCalls?.length ?? 0,\n }));\n }\n\n if (options.includeToolCalls && result.steps) {\n // Collect all tool calls from all steps\n const allToolCalls: unknown[] = [];\n for (const step of result.steps) {\n if (step.toolCalls?.length) {\n for (const tc of step.toolCalls) {\n allToolCalls.push({\n callId: tc.callId,\n toolName: tc.toolName,\n status: tc.status,\n error: tc.error,\n });\n }\n }\n }\n output.toolCalls = allToolCalls;\n }\n\n if (options.includeMessages && result.messages) {\n output.messages = result.messages.map((msg) => ({\n messageId: msg.messageId,\n type: msg.type,\n content: msg.content,\n }));\n }\n\n if (result.errors?.length) {\n output.errors = result.errors;\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 node abort - Abort a running node execution\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 AbortResult {\n message: string;\n resultId: string;\n}\n\nexport const nodeAbortCommand = new Command('abort')\n .description('Abort a running node execution')\n .argument('<resultId>', 'Node result ID to abort')\n .option('--version <number>', 'Specific version to abort', Number.parseInt)\n .action(async (resultId, options) => {\n try {\n const body: { resultId: string; version?: number } = { resultId };\n if (options.version !== undefined) {\n body.version = options.version;\n }\n\n const result = await apiRequest<AbortResult>('/v1/cli/action/abort', {\n method: 'POST',\n body,\n });\n\n ok('node.abort', {\n message: result.message,\n resultId: result.resultId,\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 node execution',\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/tool-call?${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/tool-call/${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","os","util","objectUtil","path","errorUtil","path","errorMap","ctx","result","issues","elements","processed","result","r","ZodFirstPartyTypeKind","fs","path","printError","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","printError","import_node_child_process","import_node_fs","import_node_path","path","fs","getConfigPath","path","fs","path","crypto","path","resolve","output","fs","path","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/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/skill/installer.ts","../../src/utils/logo.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/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/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/utils/prompt.ts","../../src/utils/file-type.ts","../../src/commands/workflow/runs.ts","../../src/commands/workflow/abort.ts","../../src/commands/workflow/status.ts","../../src/commands/workflow/detail.ts","../../src/commands/workflow/utils.ts","../../src/commands/workflow/toolcalls.ts","../../src/commands/workflow/toolset-keys.ts","../../src/commands/workflow/layout.ts","../../src/commands/workflow/nodes.ts","../../src/commands/workflow/node-get.ts","../../src/commands/workflow/node-output.ts","../../src/commands/workflow/patch.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","../../src/commands/file/upload.ts","../../src/commands/skill/index.ts","../../src/commands/skill/list.ts","../../src/commands/skill/get.ts","../../src/commands/skill/create.ts","../../src/skill/storage.ts","../../src/skill/types.ts","../../src/skill/registry.ts","../../src/commands/skill/delete.ts","../../src/commands/skill/publish.ts","../../src/commands/skill/unpublish.ts","../../src/commands/skill/run.ts","../../src/commands/skill/search.ts","../../src/commands/skill/install.ts","../../src/commands/skill/uninstall.ts","../../src/commands/skill/installations.ts","../../src/commands/skill/validate.ts","../../src/skill/loader.ts","../../src/commands/skill/sync.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 CLI version from package.json\n */\nexport function getCliVersion(): string {\n try {\n const pkgPath = path.join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n return pkg.version || '0.1.0';\n } catch {\n return '0.1.0';\n }\n}\n\n/**\n * Get the Refly configuration directory (~/.refly)\n */\nexport function getReflyDir(): string {\n const dir = path.join(os.homedir(), '.refly');\n ensureDir(dir);\n return dir;\n}\n\n/**\n * Get the legacy builder data directory (~/.refly/builder)\n * @deprecated Builder functionality has been removed. This is only used for cleanup.\n */\nexport function getLegacyBuilderDir(): string {\n return path.join(getReflyDir(), 'builder');\n}\n\n/**\n * Get the cache directory (~/.refly/cache)\n */\nexport function getCacheDir(): string {\n const dir = path.join(getReflyDir(), 'cache');\n ensureDir(dir);\n return dir;\n}\n\n/**\n * Get the Claude skills directory (~/.claude/skills/refly)\n */\nexport function getClaudeSkillDir(): string {\n return path.join(os.homedir(), '.claude', 'skills', 'refly');\n}\n\n/**\n * Get the Claude commands directory (~/.claude/commands)\n */\nexport function getClaudeCommandsDir(): string {\n return path.join(os.homedir(), '.claude', 'commands');\n}\n\n/**\n * Check if Claude directories exist\n */\nexport function claudeDirectoriesExist(): { skills: boolean; commands: boolean } {\n const skillsDir = path.join(os.homedir(), '.claude', 'skills');\n const commandsDir = getClaudeCommandsDir();\n\n return {\n skills: fs.existsSync(skillsDir),\n commands: fs.existsSync(commandsDir),\n };\n}\n\n/**\n * Ensure a directory exists with proper permissions\n */\nexport function ensureDir(dir: string): void {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n}\n\n/**\n * Get the config file path\n */\nexport function getConfigPath(): string {\n return path.join(getReflyDir(), 'config.json');\n}\n\n/**\n * Get the skills directory (~/.refly/skills)\n */\nexport function getSkillsDir(): string {\n return path.join(getReflyDir(), 'skills');\n}\n\n/**\n * Ensure the skills directory exists\n */\nexport async function ensureSkillsDir(): Promise<void> {\n const dir = getSkillsDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n}\n","/**\n * 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 { workflowCommand } from '../commands/workflow/index.js';\nimport { toolCommand } from '../commands/tool/index.js';\nimport { fileCommand } from '../commands/file/index.js';\nimport { skillCommand } from '../commands/skill/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(workflowCommand);\nprogram.addCommand(toolCommand);\nprogram.addCommand(fileCommand);\nprogram.addCommand(skillCommand);\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 EXECUTION_FAILED: 'EXECUTION_FAILED',\n\n // Network\n NETWORK_ERROR: 'NETWORK_ERROR',\n TIMEOUT: 'TIMEOUT',\n API_ERROR: 'API_ERROR',\n\n // General\n NOT_FOUND: 'NOT_FOUND',\n CONFLICT: 'CONFLICT',\n PERMISSION_DENIED: 'PERMISSION_DENIED',\n INVALID_INPUT: 'INVALID_INPUT',\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n} 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, auth_status, user, skill, api_endpoint } = payload as Record<\n string,\n unknown\n >;\n\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n\n // Header\n console.log(`${sym.DIAMOND} ${UI.bold('Refly CLI')} v${cli_version || '?'}`);\n console.log();\n\n // Auth status\n const authOk = auth_status === 'valid';\n const userObj = user as Record<string, unknown> | null;\n let authText = '';\n if (authOk && userObj?.email) {\n authText = String(userObj.email);\n } else if (auth_status === 'expired') {\n authText = 'Token expired';\n } else {\n authText = 'Not authenticated';\n }\n\n // Skill status\n const skillObj = skill as Record<string, unknown> | null;\n const skillInstalled = skillObj?.installed === true;\n const skillVersion = skillObj?.version ? `v${skillObj.version}` : '';\n const skillUpToDate = skillObj?.up_to_date === true;\n let skillText = '';\n if (skillInstalled) {\n skillText = skillVersion + (skillUpToDate ? ' (up to date)' : ' (update available)');\n } else {\n skillText = 'Not installed';\n }\n\n // Build combined status card\n const authIcon = authOk\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.FAILURE, Style.TEXT_DANGER);\n const connIcon = authOk\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.PENDING, Style.TEXT_DIM);\n const skillIcon = skillInstalled\n ? styled(sym.SUCCESS, Style.TEXT_SUCCESS)\n : styled(sym.PENDING, Style.TEXT_DIM);\n\n const displayEndpoint = api_endpoint ? String(api_endpoint) : 'https://refly.ai';\n const lines: Array<{ text: string; indent?: boolean; muted?: boolean }> = [\n { text: `${authIcon} Account ${authOk ? authText : authText}`, muted: !authOk },\n { text: `${connIcon} Link ${displayEndpoint}` },\n { text: `${skillIcon} Version ${skillText}`, muted: !skillInstalled },\n ];\n\n console.log(\n UI.card({\n title: 'Status',\n lines,\n width: 45,\n }),\n );\n console.log();\n }\n\n // === Workflow Status Format ===\n\n private outputWorkflowStatus(payload: SuccessPayload): void {\n const {\n runId,\n status,\n title,\n totalNodes,\n executedNodes,\n failedNodes,\n nodeStatuses,\n createdAt,\n updatedAt,\n watching,\n isInitial,\n completed,\n // For progress updates\n summary,\n changedNodes,\n } = payload as Record<string, unknown>;\n\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n\n // Header with status\n const statusStr = (status as string) || 'unknown';\n const statusIcon = UI.statusIcon(statusStr);\n const statusLabel = this.formatWorkflowStatus(statusStr);\n\n // For progress updates (delta mode), show compact output\n if (changedNodes && !isInitial) {\n const progressStr = UI.progressBar(\n (executedNodes as number) || 0,\n (totalNodes as number) || 1,\n { width: 25 },\n );\n console.log(` ${progressStr} ${statusIcon} ${statusLabel}`);\n\n // Show changed nodes\n const nodes = changedNodes as Array<Record<string, unknown>>;\n if (nodes && nodes.length > 0) {\n for (const node of nodes) {\n const nodeIcon = UI.statusIcon(node.status as string);\n const nodeTitle = (node.title as string) || (node.nodeId as string);\n console.log(` ${nodeIcon} ${nodeTitle}`);\n }\n }\n\n if (summary) {\n console.log(UI.dim(` ${summary}`));\n }\n return;\n }\n\n // Full status output\n console.log(`${statusIcon} ${UI.bold('Workflow')} ${statusLabel}`);\n console.log();\n\n // Progress bar\n const total = (totalNodes as number) || 0;\n const executed = (executedNodes as number) || 0;\n const failed = (failedNodes as number) || 0;\n\n if (total > 0) {\n const progressStr = UI.progressBar(executed, total, { width: 30 });\n console.log(` ${progressStr}`);\n console.log();\n }\n\n // Run info\n console.log(UI.labeledValue('Run ID', (runId as string) || '—'));\n if (title) {\n console.log(UI.labeledValue('Title', title as string));\n }\n\n // Time info\n if (createdAt) {\n const duration = UI.formatDuration(createdAt as string, updatedAt as string);\n console.log(\n UI.labeledValue(\n 'Started',\n UI.formatTime(createdAt as string) + (duration ? ` (${duration})` : ''),\n ),\n );\n }\n\n // Node statuses\n const nodes = nodeStatuses as Array<Record<string, unknown>>;\n if (nodes && nodes.length > 0) {\n console.log();\n console.log(UI.dim(' Nodes:'));\n\n nodes.forEach((node, idx) => {\n const isLast = idx === nodes.length - 1;\n const prefix = isLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n const nodeIcon = UI.statusIcon(node.status as string);\n const nodeTitle = (node.title as string) || (node.nodeId as string);\n const nodeType = (node.nodeType as string) || '';\n const nodeProgress = node.progress as number;\n\n let line = ` ${prefix}${sym.BOX_HORIZONTAL} ${nodeIcon} ${nodeTitle}`;\n if (nodeType) {\n line += ` ${UI.dim(`(${nodeType})`)}`;\n }\n if (nodeProgress !== undefined && nodeProgress < 100 && node.status === 'executing') {\n line += ` ${UI.dim(`${nodeProgress}%`)}`;\n }\n console.log(line);\n\n // Show error message if failed\n if (node.status === 'failed' && node.errorMessage) {\n const errorPrefix = isLast ? ' ' : ` ${sym.BOX_VERTICAL}`;\n // Clean up error message (remove JSON array brackets if present)\n let errorMsg = node.errorMessage as string;\n if (errorMsg.startsWith('[') && errorMsg.endsWith(']')) {\n try {\n const parsed = JSON.parse(errorMsg);\n errorMsg = Array.isArray(parsed) ? parsed.join(', ') : errorMsg;\n } catch {\n // Keep original if not valid JSON\n }\n }\n if (errorMsg && errorMsg !== '[]') {\n console.log(`${errorPrefix} ${UI.error(errorMsg)}`);\n }\n }\n });\n }\n\n // Summary stats\n if (failed > 0) {\n console.log();\n console.log(\n UI.stats([\n { label: 'Completed', value: executed, type: 'success' },\n { label: 'Failed', value: failed, type: 'error' },\n { label: 'Total', value: total },\n ]),\n );\n }\n\n // Watch mode indicator\n if (watching) {\n console.log();\n console.log(UI.dim(` ${sym.RUNNING} Watching for updates...`));\n }\n\n // Completion message\n if (completed) {\n console.log();\n if (statusStr === 'finish') {\n console.log(UI.successMsg('Workflow completed successfully'));\n } else if (statusStr === 'failed') {\n console.log(UI.errorMsg('Workflow failed'));\n }\n }\n\n console.log();\n }\n\n private formatWorkflowStatus(status: string): string {\n const statusMap: Record<string, string> = {\n init: 'Initializing',\n executing: 'Executing',\n finish: 'Completed',\n failed: 'Failed',\n };\n return statusMap[status] || status;\n }\n\n // === Compact Format ===\n\n private outputCompact(type: string, payload: SuccessPayload): void {\n const { message, ...rest } = payload;\n const icon = this.useColor ? styled(Symbols.SUCCESS, Style.TEXT_SUCCESS) : AsciiSymbol.SUCCESS;\n\n const mainMsg = message || this.humanizeType(type);\n const extras = this.extractDisplayFields(rest)\n .slice(0, 3)\n .map(([k, v]) => `${k}=${this.formatValue(v)}`)\n .join(' ');\n\n console.log(`${icon} ${mainMsg}${extras ? ` ${UI.dim(extras)}` : ''}`);\n }\n\n private outputErrorCompact(error: ErrorPayload): void {\n const icon = this.useColor ? styled(Symbols.FAILURE, Style.TEXT_DANGER) : AsciiSymbol.FAILURE;\n\n console.log(`${icon} ${error.message} ${UI.dim(`[${error.code}]`)}`);\n if (error.hint) {\n console.log(UI.dim(` ${error.hint}`));\n }\n }\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 this.formatBooleanValue(value);\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return value;\n }\n if (Array.isArray(value)) {\n // For simple arrays, join with comma\n if (value.every((v) => typeof v !== 'object' || v === null)) {\n return value.map((v) => this.formatValue(v)).join(', ');\n }\n // For arrays of objects, format each on new line\n return value.map((v) => this.formatValue(v, indent)).join(', ');\n }\n // For objects, format as key-value pairs\n if (typeof value === 'object') {\n return this.formatObject(value as Record<string, unknown>, indent);\n }\n return JSON.stringify(value);\n }\n\n private formatBooleanValue(value: boolean): string {\n if (value) {\n return this.useColor ? styled(Symbols.SUCCESS, Style.TEXT_SUCCESS) : 'yes';\n }\n return this.useColor ? styled(Symbols.FAILURE, Style.TEXT_DANGER) : 'no';\n }\n\n /**\n * Format an object as readable key-value pairs\n */\n private formatObject(obj: Record<string, unknown>, indent = 0): string {\n const entries = Object.entries(obj).filter(([, v]) => v !== null && v !== undefined);\n\n if (entries.length === 0) {\n return UI.dim('{}');\n }\n\n // For compact display (3 or fewer simple fields), show inline\n const simpleEntries = entries.filter(([, v]) => typeof v !== 'object');\n if (simpleEntries.length === entries.length && entries.length <= 3) {\n const parts = entries.map(([k, v]) => `${this.humanizeKey(k)}: ${this.formatValue(v)}`);\n return parts.join(', ');\n }\n\n // For larger objects, show as tree structure\n const lines: string[] = [];\n const sym = this.useUnicode ? Symbols : AsciiSymbol;\n const padding = ' '.repeat(indent);\n\n entries.forEach(([key, val], idx) => {\n const isLast = idx === entries.length - 1;\n const prefix = isLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n const humanKey = this.humanizeKey(key);\n\n if (typeof val === 'object' && val !== null && !Array.isArray(val)) {\n // Nested object - show header then recurse\n lines.push(`${padding}${prefix}${sym.BOX_HORIZONTAL} ${UI.dim(humanKey)}:`);\n const nestedStr = this.formatObject(val as Record<string, unknown>, indent + 3);\n lines.push(nestedStr);\n } else {\n lines.push(\n `${padding}${prefix}${sym.BOX_HORIZONTAL} ${UI.dim(humanKey)}: ${this.formatValue(val)}`,\n );\n }\n });\n\n return lines.join('\\n');\n }\n\n private extractDisplayFields(obj: Record<string, unknown>): Array<[string, unknown]> {\n return Object.entries(obj).filter(\n ([key, value]) =>\n value !== null && value !== undefined && typeof value !== 'object' && key !== 'nextStep',\n );\n }\n\n private extractNestedObjects(obj: Record<string, unknown>): Array<[string, unknown]> {\n return Object.entries(obj).filter(\n ([key, value]) =>\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n key !== 'node' && // Skip raw node data in pretty mode\n key !== 'diff',\n );\n }\n}\n\n/**\n * Global formatter instance\n */\nlet globalFormatter: OutputFormatter | null = null;\n\n/**\n * Initialize the global formatter\n */\nexport function initFormatter(options: Partial<FormatterOptions> = {}): OutputFormatter {\n globalFormatter = new OutputFormatter(options);\n return globalFormatter;\n}\n\n/**\n * Get the global formatter (initializes with defaults if not set)\n */\nexport function getFormatter(): OutputFormatter {\n if (!globalFormatter) {\n globalFormatter = new OutputFormatter({ format: resolveFormat() });\n }\n return globalFormatter;\n}\n\nexport default OutputFormatter;\n","/**\n * UI utilities for CLI output styling.\n * Reference: OpenCode CLI ui.ts\n */\n\n/**\n * ANSI color and style codes\n */\nexport const Style = {\n // Reset\n RESET: '\\x1b[0m',\n\n // Text styles\n BOLD: '\\x1b[1m',\n DIM: '\\x1b[2m',\n ITALIC: '\\x1b[3m',\n UNDERLINE: '\\x1b[4m',\n\n // Text colors\n TEXT_HIGHLIGHT: '\\x1b[96m', // Bright Cyan\n TEXT_HIGHLIGHT_BOLD: '\\x1b[96m\\x1b[1m',\n TEXT_DIM: '\\x1b[90m', // Gray\n TEXT_DIM_BOLD: '\\x1b[90m\\x1b[1m',\n TEXT_NORMAL: '\\x1b[0m',\n TEXT_NORMAL_BOLD: '\\x1b[1m',\n\n // Status colors\n TEXT_SUCCESS: '\\x1b[92m', // Bright Green\n TEXT_SUCCESS_BOLD: '\\x1b[92m\\x1b[1m',\n TEXT_WARNING: '\\x1b[93m', // Bright Yellow\n TEXT_WARNING_BOLD: '\\x1b[93m\\x1b[1m',\n TEXT_DANGER: '\\x1b[91m', // Bright Red\n TEXT_DANGER_BOLD: '\\x1b[91m\\x1b[1m',\n TEXT_INFO: '\\x1b[94m', // Bright Blue\n TEXT_INFO_BOLD: '\\x1b[94m\\x1b[1m',\n\n // Additional colors\n TEXT_MAGENTA: '\\x1b[95m',\n TEXT_MAGENTA_BOLD: '\\x1b[95m\\x1b[1m',\n TEXT_WHITE: '\\x1b[97m',\n TEXT_WHITE_BOLD: '\\x1b[97m\\x1b[1m',\n} as const;\n\n/**\n * Unicode symbols for pretty output\n */\nexport const Symbols = {\n // Status\n SUCCESS: '✓',\n FAILURE: '✗',\n WARNING: '⚠',\n INFO: 'ℹ',\n PENDING: '○',\n RUNNING: '◐',\n ARROW_RIGHT: '→',\n ARROW_DOWN: '↓',\n PLAY: '▶',\n STOP: '■',\n\n // Box drawing\n BOX_TOP_LEFT: '┌',\n BOX_TOP_RIGHT: '┐',\n BOX_BOTTOM_LEFT: '└',\n BOX_BOTTOM_RIGHT: '┘',\n BOX_HORIZONTAL: '─',\n BOX_VERTICAL: '│',\n BOX_VERTICAL_RIGHT: '├',\n BOX_VERTICAL_LEFT: '┤',\n\n // Bullets\n BULLET: '•',\n DIAMOND: '◆',\n} as const;\n\n/**\n * ASCII fallback symbols for plain/no-color mode\n */\nexport const AsciiSymbol = {\n SUCCESS: '[ok]',\n FAILURE: '[err]',\n WARNING: '[warn]',\n INFO: '[info]',\n PENDING: '[ ]',\n RUNNING: '[..]',\n ARROW_RIGHT: '->',\n ARROW_DOWN: 'v',\n PLAY: '>',\n STOP: 'x',\n\n BOX_TOP_LEFT: '+',\n BOX_TOP_RIGHT: '+',\n BOX_BOTTOM_LEFT: '+',\n BOX_BOTTOM_RIGHT: '+',\n BOX_HORIZONTAL: '-',\n BOX_VERTICAL: '|',\n BOX_VERTICAL_RIGHT: '+',\n BOX_VERTICAL_LEFT: '+',\n\n BULLET: '*',\n DIAMOND: '*',\n} as const;\n\n/**\n * Tool display styles mapping\n * Format: [displayLabel, colorStyle]\n */\nexport const TOOL_STYLES: Record<string, [string, string]> = {\n // Workflow node types\n 'knowledge.search': ['Search', Style.TEXT_INFO_BOLD],\n 'llm.generate': ['Generate', Style.TEXT_SUCCESS_BOLD],\n 'notification.email': ['Email', Style.TEXT_WARNING_BOLD],\n 'code.executor': ['Code', Style.TEXT_DANGER_BOLD],\n 'web.search': ['Web', Style.TEXT_HIGHLIGHT_BOLD],\n 'document.read': ['Read', Style.TEXT_HIGHLIGHT_BOLD],\n 'document.write': ['Write', Style.TEXT_SUCCESS_BOLD],\n\n // Builder operations\n 'builder.start': ['Builder', Style.TEXT_INFO_BOLD],\n 'builder.add-node': ['AddNode', Style.TEXT_SUCCESS_BOLD],\n 'builder.remove-node': ['RemoveNode', Style.TEXT_WARNING_BOLD],\n 'builder.connect': ['Connect', Style.TEXT_INFO_BOLD],\n 'builder.validate': ['Validate', Style.TEXT_HIGHLIGHT_BOLD],\n 'builder.commit': ['Commit', Style.TEXT_SUCCESS_BOLD],\n\n // Workflow operations\n 'workflow.create': ['Create', Style.TEXT_SUCCESS_BOLD],\n 'workflow.run': ['Run', Style.TEXT_INFO_BOLD],\n 'workflow.list': ['List', Style.TEXT_DIM_BOLD],\n 'workflow.get': ['Get', Style.TEXT_DIM_BOLD],\n 'workflow.delete': ['Delete', Style.TEXT_DANGER_BOLD],\n};\n\n/**\n * Check if colors should be enabled\n */\nexport function shouldUseColor(): boolean {\n // Check NO_COLOR environment variable (https://no-color.org/)\n if (process.env.NO_COLOR !== undefined) {\n return false;\n }\n\n // Check REFLY_NO_COLOR\n if (process.env.REFLY_NO_COLOR === '1') {\n return false;\n }\n\n // Check FORCE_COLOR\n if (process.env.FORCE_COLOR !== undefined) {\n return true;\n }\n\n // Check if stdout is a TTY\n return process.stdout.isTTY === true;\n}\n\n/**\n * Check if output is going to a TTY\n */\nexport function isTTY(): boolean {\n return process.stdout.isTTY === true;\n}\n\n/**\n * Get the appropriate symbol based on color mode\n */\nexport function getSymbol(key: keyof typeof Symbols, useColor: boolean = shouldUseColor()): string {\n return useColor ? Symbols[key] : AsciiSymbol[key];\n}\n\n/**\n * Apply style to text if colors are enabled\n */\nexport function styled(text: string, style: string, useColor: boolean = shouldUseColor()): string {\n if (!useColor) {\n return text;\n }\n return `${style}${text}${Style.RESET}`;\n}\n\n/**\n * Format a stat value with the appropriate style based on type.\n */\nfunction formatStatValue(value: string, type?: 'success' | 'error' | 'warning' | 'info'): string {\n if (!type) {\n return UI.bold(value);\n }\n\n switch (type) {\n case 'success':\n return UI.success(value);\n case 'error':\n return UI.error(value);\n case 'warning':\n return UI.warning(value);\n case 'info':\n return UI.info(value);\n }\n}\n\n/**\n * Helper functions for common styles\n */\nexport const UI = {\n // Styled text helpers\n success: (text: string) => styled(text, Style.TEXT_SUCCESS),\n error: (text: string) => styled(text, Style.TEXT_DANGER),\n warning: (text: string) => styled(text, Style.TEXT_WARNING),\n info: (text: string) => styled(text, Style.TEXT_INFO),\n highlight: (text: string) => styled(text, Style.TEXT_HIGHLIGHT),\n dim: (text: string) => styled(text, Style.TEXT_DIM),\n bold: (text: string) => styled(text, Style.BOLD),\n\n // Success/error icons with text\n successIcon: () => styled(getSymbol('SUCCESS'), Style.TEXT_SUCCESS),\n errorIcon: () => styled(getSymbol('FAILURE'), Style.TEXT_DANGER),\n warningIcon: () => styled(getSymbol('WARNING'), Style.TEXT_WARNING),\n infoIcon: () => styled(getSymbol('INFO'), Style.TEXT_INFO),\n\n // Formatted messages\n successMsg: (msg: string) => `${UI.successIcon()} ${msg}`,\n errorMsg: (msg: string) => `${UI.errorIcon()} ${msg}`,\n warningMsg: (msg: string) => `${UI.warningIcon()} ${msg}`,\n infoMsg: (msg: string) => `${UI.infoIcon()} ${msg}`,\n\n // Box drawing\n box: (title: string, content: string, width = 40) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const titlePart = title ? `${sym.BOX_HORIZONTAL} ${title} ` : '';\n const remainingWidth = Math.max(0, width - titlePart.length - 2);\n\n const lines = [\n ` ${sym.BOX_TOP_LEFT}${titlePart}${sym.BOX_HORIZONTAL.repeat(remainingWidth)}${sym.BOX_TOP_RIGHT}`,\n ...content\n .split('\\n')\n .map((line) => ` ${sym.BOX_VERTICAL} ${line.padEnd(width - 4)}${sym.BOX_VERTICAL}`),\n ` ${sym.BOX_BOTTOM_LEFT}${sym.BOX_HORIZONTAL.repeat(width - 2)}${sym.BOX_BOTTOM_RIGHT}`,\n ];\n\n return lines.join('\\n');\n },\n\n // Indentation\n indent: (text: string, spaces = 2) => {\n const pad = ' '.repeat(spaces);\n return text\n .split('\\n')\n .map((line) => `${pad}${line}`)\n .join('\\n');\n },\n\n // Key-value display\n keyValue: (key: string, value: string, keyWidth = 12) => {\n return ` ${UI.dim(key.padEnd(keyWidth))} ${value}`;\n },\n\n // Labeled value with icon (more visual than keyValue)\n labeledValue: (label: string, value: string, icon?: string) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const displayIcon = icon || sym.BULLET;\n return ` ${displayIcon} ${UI.dim(`${label}:`)} ${value}`;\n },\n\n // Flow diagram for dependencies (e.g., input → search → generate)\n flowDiagram: (nodes: string[], highlight?: string) => {\n const useColor = shouldUseColor();\n const arrow = useColor ? ` ${Symbols.ARROW_RIGHT} ` : ' -> ';\n\n return nodes\n .map((node, idx) => {\n if (highlight && node === highlight) {\n return UI.highlight(UI.bold(node));\n }\n // First node is dimmed (usually input), last highlighted (output)\n if (idx === 0) {\n return UI.dim(node);\n }\n return node;\n })\n .join(arrow);\n },\n\n // Dependency display with visual arrow\n dependency: (from: string, to: string) => {\n const useColor = shouldUseColor();\n const arrow = useColor ? Symbols.ARROW_RIGHT : '->';\n return ` ${UI.dim(from)} ${arrow} ${UI.bold(to)}`;\n },\n\n // Multiple dependencies display\n dependencies: (deps: string[], nodeName: string) => {\n if (deps.length === 0) {\n return ` ${UI.dim('(no dependencies)')}`;\n }\n const useColor = shouldUseColor();\n const arrow = useColor ? Symbols.ARROW_RIGHT : '->';\n const depList = deps.map((d) => UI.dim(d)).join(', ');\n return ` ${depList} ${arrow} ${UI.bold(nodeName)}`;\n },\n\n // Tree structure for hierarchical data\n tree: (items: Array<{ label: string; children?: string[] }>) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const lines: string[] = [];\n\n items.forEach((item, idx) => {\n const isLast = idx === items.length - 1;\n const prefix = isLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n lines.push(` ${prefix}${sym.BOX_HORIZONTAL} ${item.label}`);\n\n if (item.children) {\n const childPrefix = isLast ? ' ' : ` ${sym.BOX_VERTICAL}`;\n item.children.forEach((child, childIdx) => {\n const childIsLast = childIdx === item.children!.length - 1;\n const childBranch = childIsLast ? sym.BOX_BOTTOM_LEFT : sym.BOX_VERTICAL_RIGHT;\n lines.push(`${childPrefix} ${childBranch}${sym.BOX_HORIZONTAL} ${UI.dim(child)}`);\n });\n }\n });\n\n return lines.join('\\n');\n },\n\n // Node card display (compact visual representation)\n nodeCard: (node: { id: string; type: string; dependsOn?: string[] }) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const [label, colorStyle] = TOOL_STYLES[node.type] || [node.type, Style.TEXT_INFO];\n const styledType = useColor ? `${colorStyle}${label}${Style.RESET}` : label;\n\n const lines: string[] = [];\n lines.push(` ${sym.DIAMOND} ${UI.bold(node.id)} ${UI.dim('(')}${styledType}${UI.dim(')')}`);\n\n if (node.dependsOn && node.dependsOn.length > 0) {\n const arrow = useColor ? Symbols.ARROW_RIGHT : '->';\n const deps = node.dependsOn.join(', ');\n lines.push(` ${UI.dim(deps)} ${arrow} ${node.id}`);\n }\n\n return lines.join('\\n');\n },\n\n // Status badge\n badge: (text: string, type: 'success' | 'error' | 'warning' | 'info' | 'dim' = 'info') => {\n const useColor = shouldUseColor();\n if (!useColor) {\n return `[${text}]`;\n }\n\n const styles: Record<string, string> = {\n success: Style.TEXT_SUCCESS,\n error: Style.TEXT_DANGER,\n warning: Style.TEXT_WARNING,\n info: Style.TEXT_INFO,\n dim: Style.TEXT_DIM,\n };\n\n return `${styles[type]}[${text}]${Style.RESET}`;\n },\n\n // Summary stats line\n stats: (\n items: Array<{\n label: string;\n value: string | number;\n type?: 'success' | 'error' | 'warning' | 'info';\n }>,\n ) => {\n const parts = items.map((item) => {\n const value = String(item.value);\n const styledValue = formatStatValue(value, item.type);\n return `${UI.dim(`${item.label}:`)} ${styledValue}`;\n });\n return ` ${parts.join(' ')}`;\n },\n\n // Progress bar\n progressBar: (\n current: number,\n total: number,\n options?: {\n width?: number;\n showPercent?: boolean;\n showCount?: boolean;\n filledChar?: string;\n emptyChar?: string;\n },\n ) => {\n const useColor = shouldUseColor();\n const width = options?.width ?? 20;\n const showPercent = options?.showPercent ?? true;\n const showCount = options?.showCount ?? true;\n const filledChar = options?.filledChar ?? (useColor ? '█' : '#');\n const emptyChar = options?.emptyChar ?? (useColor ? '░' : '-');\n\n const percent = total > 0 ? Math.round((current / total) * 100) : 0;\n const filled = total > 0 ? Math.round((current / total) * width) : 0;\n const empty = width - filled;\n\n const bar = filledChar.repeat(filled) + emptyChar.repeat(empty);\n const coloredBar = useColor\n ? styled(bar, percent === 100 ? Style.TEXT_SUCCESS : Style.TEXT_INFO)\n : bar;\n\n const parts: string[] = [`[${coloredBar}]`];\n if (showPercent) {\n parts.push(`${percent.toString().padStart(3)}%`);\n }\n if (showCount) {\n parts.push(UI.dim(`${current}/${total}`));\n }\n\n return parts.join(' ');\n },\n\n // Status icon based on status string\n statusIcon: (status: string) => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n\n switch (status) {\n case 'finish':\n case 'completed':\n case 'success':\n return styled(sym.SUCCESS, Style.TEXT_SUCCESS);\n case 'failed':\n case 'error':\n return styled(sym.FAILURE, Style.TEXT_DANGER);\n case 'executing':\n case 'running':\n case 'in_progress':\n return styled(sym.RUNNING, Style.TEXT_INFO);\n case 'init':\n case 'pending':\n case 'waiting':\n return styled(sym.PENDING, Style.TEXT_DIM);\n default:\n return styled(sym.INFO, Style.TEXT_DIM);\n }\n },\n\n // Format duration in human readable form\n formatDuration: (startTime?: string, endTime?: string) => {\n if (!startTime) return '';\n const start = new Date(startTime).getTime();\n const end = endTime ? new Date(endTime).getTime() : Date.now();\n const durationMs = end - start;\n\n if (durationMs < 1000) return `${durationMs}ms`;\n if (durationMs < 60000) return `${(durationMs / 1000).toFixed(1)}s`;\n const minutes = Math.floor(durationMs / 60000);\n const seconds = Math.round((durationMs % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n },\n\n // Format timestamp\n formatTime: (timestamp?: string) => {\n if (!timestamp) return UI.dim('—');\n const date = new Date(timestamp);\n return date.toLocaleTimeString('en-US', { hour12: false });\n },\n\n // Tool execution line\n toolLine: (toolType: string, message: string, duration?: number): string => {\n const useColor = shouldUseColor();\n const [label, colorStyle] = TOOL_STYLES[toolType] || [toolType, Style.TEXT_INFO_BOLD];\n const sym = useColor ? Symbols : AsciiSymbol;\n const styledLabel = useColor\n ? `${colorStyle}${label.padEnd(8)}${Style.RESET}`\n : label.padEnd(8);\n const durationStr = duration !== undefined ? UI.dim(` [${duration.toFixed(1)}s]`) : '';\n\n return `${sym.BOX_VERTICAL} ${styledLabel} ${message}${durationStr}`;\n },\n\n // ============================================================\n // Phase 1: Charm-style Card Component\n // ============================================================\n\n /**\n * Charm-style card with box border\n * @param options Card configuration\n * @returns Formatted card string\n */\n card: (options: {\n icon?: string;\n title: string;\n status?: 'success' | 'error' | 'warning' | 'info' | 'pending';\n lines: Array<{ text: string; indent?: boolean; muted?: boolean }>;\n width?: number;\n }): string => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const maxWidth = Math.min(options.width ?? 50, 100);\n const innerWidth = maxWidth - 4; // Account for borders and padding\n\n // Determine status icon\n let statusIcon = options.icon ?? '';\n if (!statusIcon && options.status) {\n const iconMap: Record<string, string> = {\n success: sym.SUCCESS,\n error: sym.FAILURE,\n warning: sym.PENDING,\n info: sym.RUNNING,\n pending: sym.PENDING,\n };\n statusIcon = iconMap[options.status] || '';\n if (useColor && options.status) {\n const styleMap: Record<string, string> = {\n success: Style.TEXT_SUCCESS,\n error: Style.TEXT_DANGER,\n warning: Style.TEXT_WARNING,\n info: Style.TEXT_INFO,\n pending: Style.TEXT_DIM,\n };\n statusIcon = styled(statusIcon, styleMap[options.status]);\n }\n }\n\n // Build title line\n const titleText = statusIcon ? `${statusIcon} ${options.title}` : options.title;\n\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape codes need control characters\n const ansiRegex = /\\x1b\\[[0-9;]*m/g;\n\n // Truncate or wrap text to fit within card\n const truncate = (text: string, maxLen: number): string => {\n // Strip ANSI codes for length calculation\n const stripped = text.replace(ansiRegex, '');\n if (stripped.length <= maxLen) return text;\n // Find where to cut (accounting for ANSI codes)\n let visibleLen = 0;\n let cutIndex = 0;\n for (let i = 0; i < text.length; i++) {\n if (text[i] === '\\x1b') {\n // Skip ANSI sequence\n const end = text.indexOf('m', i);\n if (end !== -1) {\n i = end;\n continue;\n }\n }\n visibleLen++;\n if (visibleLen >= maxLen - 1) {\n cutIndex = i + 1;\n break;\n }\n }\n return `${text.slice(0, cutIndex)}…`;\n };\n\n const padRight = (text: string, width: number): string => {\n const stripped = text.replace(ansiRegex, '');\n const padding = Math.max(0, width - stripped.length);\n return text + ' '.repeat(padding);\n };\n\n const lines: string[] = [];\n\n // Top border\n lines.push(`${sym.BOX_TOP_LEFT}${sym.BOX_HORIZONTAL.repeat(maxWidth - 2)}${sym.BOX_TOP_RIGHT}`);\n\n // Title line\n const titleDisplay = truncate(titleText, innerWidth);\n lines.push(`${sym.BOX_VERTICAL} ${padRight(titleDisplay, innerWidth)} ${sym.BOX_VERTICAL}`);\n\n // Content lines\n for (const line of options.lines) {\n const prefix = line.indent ? ' ' : '';\n let content = prefix + line.text;\n if (line.muted && useColor) {\n content = prefix + UI.dim(line.text);\n }\n const displayContent = truncate(content, innerWidth);\n lines.push(`${sym.BOX_VERTICAL} ${padRight(displayContent, innerWidth)} ${sym.BOX_VERTICAL}`);\n }\n\n // Bottom border\n lines.push(\n `${sym.BOX_BOTTOM_LEFT}${sym.BOX_HORIZONTAL.repeat(maxWidth - 2)}${sym.BOX_BOTTOM_RIGHT}`,\n );\n\n return lines.join('\\n');\n },\n\n // ============================================================\n // Phase 1: Docker-style Table Component\n // ============================================================\n\n /**\n * Docker-style table with header and rows\n * @param options Table configuration\n * @returns Formatted table string\n */\n table: (options: {\n title?: string;\n columns: Array<{\n key: string;\n label: string;\n width?: number;\n align?: 'left' | 'right';\n }>;\n rows: Array<Record<string, unknown>>;\n maxWidth?: number;\n }): string => {\n const useColor = shouldUseColor();\n const sym = useColor ? Symbols : AsciiSymbol;\n const maxTotalWidth = options.maxWidth ?? 100;\n\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape codes need control characters\n const ansiStripRegex = /\\x1b\\[[0-9;]*m/g;\n\n // Calculate column widths\n const columns = options.columns.map((col) => {\n // Find max content width for this column\n let maxContentWidth = col.label.length;\n for (const row of options.rows) {\n const value = String(row[col.key] ?? '');\n // Strip ANSI codes and status icons for width calculation\n const stripped = value.replace(ansiStripRegex, '').replace(/^[✓✗◐○] /, '');\n maxContentWidth = Math.max(maxContentWidth, stripped.length);\n }\n return {\n ...col,\n calculatedWidth: col.width ?? Math.min(maxContentWidth, 40),\n };\n });\n\n // Adjust widths if total exceeds maxWidth\n const totalWidth = columns.reduce((sum, col) => sum + col.calculatedWidth + 2, 0);\n if (totalWidth > maxTotalWidth) {\n const scale = maxTotalWidth / totalWidth;\n for (const col of columns) {\n col.calculatedWidth = Math.max(5, Math.floor(col.calculatedWidth * scale));\n }\n }\n\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape codes need control characters\n const ansiRegex = /\\x1b\\[[0-9;]*m/g;\n\n const truncate = (text: string, maxLen: number): string => {\n const stripped = text.replace(ansiRegex, '');\n if (stripped.length <= maxLen) return text;\n let visibleLen = 0;\n let cutIndex = 0;\n for (let i = 0; i < text.length; i++) {\n if (text[i] === '\\x1b') {\n const end = text.indexOf('m', i);\n if (end !== -1) {\n i = end;\n continue;\n }\n }\n visibleLen++;\n if (visibleLen >= maxLen - 1) {\n cutIndex = i + 1;\n break;\n }\n }\n return `${text.slice(0, cutIndex)}…`;\n };\n\n const pad = (text: string, width: number, align: 'left' | 'right' = 'left'): string => {\n const stripped = text.replace(ansiRegex, '');\n const padding = Math.max(0, width - stripped.length);\n return align === 'right' ? ' '.repeat(padding) + text : text + ' '.repeat(padding);\n };\n\n const lines: string[] = [];\n\n // Title (if provided)\n if (options.title) {\n lines.push(`${sym.DIAMOND} ${useColor ? UI.bold(options.title) : options.title}`);\n }\n\n // Header row\n const headerCells = columns.map((col) => {\n const label = useColor ? col.label.toUpperCase() : col.label.toUpperCase();\n return pad(label, col.calculatedWidth, col.align);\n });\n lines.push(headerCells.join(' '));\n\n // Divider\n const dividerCells = columns.map((col) => '─'.repeat(col.calculatedWidth));\n lines.push(useColor ? UI.dim(dividerCells.join(' ')) : dividerCells.join(' '));\n\n // Data rows\n for (const row of options.rows) {\n const cells = columns.map((col) => {\n let value = String(row[col.key] ?? '—');\n value = truncate(value, col.calculatedWidth);\n return pad(value, col.calculatedWidth, col.align);\n });\n lines.push(cells.join(' '));\n }\n\n return lines.join('\\n');\n },\n\n // ============================================================\n // Phase 2/3 Extension Points (interfaces only)\n // ============================================================\n\n /**\n * Wizard step indicator (Phase 3)\n * Placeholder for future wizard-style login flow\n */\n wizardStep: (current: number, total: number, label: string): string => {\n const useColor = shouldUseColor();\n const stepText = `(${current}/${total})`;\n return useColor ? `${UI.dim(stepText)} ${label}` : `${stepText} ${label}`;\n },\n\n /**\n * Format relative time (e.g., \"2h ago\", \"5m ago\")\n */\n relativeTime: (date: Date | string): string => {\n const now = Date.now();\n const then = typeof date === 'string' ? new Date(date).getTime() : date.getTime();\n const diffMs = now - then;\n\n if (diffMs < 60000) return 'just now';\n if (diffMs < 3600000) return `${Math.floor(diffMs / 60000)}m ago`;\n if (diffMs < 86400000) return `${Math.floor(diffMs / 3600000)}h ago`;\n return `${Math.floor(diffMs / 86400000)}d ago`;\n },\n\n /**\n * Format time remaining (e.g., \"23h left\", \"5m left\")\n */\n timeRemaining: (expiresAt: Date | string | number): string => {\n const now = Date.now();\n const expiry = parseExpiryTimestamp(expiresAt);\n const diffMs = expiry - now;\n\n if (diffMs <= 0) return 'expired';\n if (diffMs < 60000) return `${Math.floor(diffMs / 1000)}s left`;\n if (diffMs < 3600000) return `${Math.floor(diffMs / 60000)}m left`;\n if (diffMs < 86400000) return `${Math.floor(diffMs / 3600000)}h left`;\n return `${Math.floor(diffMs / 86400000)}d left`;\n },\n};\n\n/**\n * Parse expiry timestamp from various formats to milliseconds.\n */\nfunction parseExpiryTimestamp(expiresAt: Date | string | number): number {\n if (typeof expiresAt === 'number') {\n return expiresAt * 1000; // Assume Unix timestamp in seconds\n }\n if (typeof expiresAt === 'string') {\n return new Date(expiresAt).getTime();\n }\n return expiresAt.getTime();\n}\n\nexport default UI;\n","/**\n * refly init - Initialize CLI, install skill files, and authenticate\n */\n\nimport { Command } from 'commander';\nimport {\n getAccessToken,\n getApiEndpoint,\n getApiKey,\n getAuthUser,\n loadConfig,\n saveConfig,\n} from '../config/config.js';\nimport { getReflyDir } from '../config/paths.js';\nimport { installSkill, isSkillInstalled } from '../skill/installer.js';\nimport { printDim, printError, println, printLogo, printSuccess } from '../utils/logo.js';\nimport { ErrorCodes, fail, isPrettyOutput, ok, print } from '../utils/output.js';\nimport { isTTY, shouldUseColor } from '../utils/ui.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 // Use build-time injected endpoint, or --host if explicitly provided\n const apiEndpoint = host || DEFAULT_API_ENDPOINT;\n\n // Determine output mode\n const pretty = isPrettyOutput();\n const tty = isTTY();\n const useColor = shouldUseColor();\n\n // Check current state\n const skillStatus = isSkillInstalled();\n const isAuthenticated = !!(getAccessToken() || getApiKey());\n\n // Already initialized case\n if (skillStatus.installed && skillStatus.upToDate && !force && isAuthenticated) {\n if (pretty && tty) {\n printLogo({ color: useColor });\n println('');\n printSuccess('Already initialized and authenticated');\n const user = getAuthUser();\n if (user?.email) {\n printDim(` Logged in as ${user.email}`);\n }\n println('');\n printDim('Run `refly status` for details.');\n return;\n }\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 // Pretty mode: Show logo and progress\n if (pretty && tty) {\n printLogo({ color: useColor });\n println('');\n println('Initializing Refly CLI...');\n println('');\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 installResult = installSkill();\n\n // Pretty mode: Show installation results\n if (pretty && tty) {\n if (installResult.skillInstalled) {\n printSuccess('Skill files installed');\n } else {\n printError('Skill files installation failed');\n }\n\n if (installResult.commandsInstalled) {\n printSuccess('Slash commands installed');\n } else {\n printError('Slash commands installation failed');\n }\n println('');\n } else if (!pretty) {\n // JSON mode: print install result\n print('init', {\n message: 'Refly CLI initialized successfully',\n configDir: getReflyDir(),\n apiEndpoint: apiEndpoint,\n skillInstalled: installResult.skillInstalled,\n skillPath: installResult.skillPath,\n commandsInstalled: installResult.commandsInstalled,\n commandsPath: installResult.commandsPath,\n version: installResult.version,\n });\n }\n\n // Auto-login unless skipped or already authenticated\n if (!skipLogin && !isAuthenticated) {\n if (pretty && tty) {\n println('Starting authentication...');\n printDim('A browser window will open for login.');\n println('');\n }\n\n // Call loginWithDeviceFlow with emitOutput=false so we can handle result ourselves\n const loginSuccess = await loginWithDeviceFlow(false);\n\n if (pretty && tty) {\n if (loginSuccess) {\n printSuccess('Authentication successful');\n const user = getAuthUser();\n if (user?.email) {\n printDim(` Welcome, ${user.email}!`);\n }\n } else {\n printError('Authentication was not completed');\n printDim(' Run `refly login` to authenticate later.');\n }\n println('');\n } else if (!pretty && loginSuccess) {\n // JSON mode: output login success\n print('login', {\n message: 'Successfully authenticated',\n user: getAuthUser(),\n });\n }\n } else if (pretty && tty) {\n if (isAuthenticated) {\n printSuccess('Already authenticated');\n const user = getAuthUser();\n if (user?.email) {\n printDim(` Logged in as ${user.email}`);\n }\n } else {\n printDim('Skipped login. Run `refly login` to authenticate later.');\n }\n println('');\n }\n\n // Final message\n if (pretty && tty) {\n println('Ready to use! Try `refly status` to verify.');\n return;\n }\n\n // JSON mode final output (if not already printed)\n if (!pretty) {\n return ok('init', {\n message: 'Refly CLI initialized successfully',\n configDir: getReflyDir(),\n apiEndpoint: apiEndpoint,\n skillInstalled: installResult.skillInstalled,\n commandsInstalled: installResult.commandsInstalled,\n version: installResult.version,\n authenticated: !!(getAccessToken() || getApiKey()),\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 * 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 * 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';\nimport { logger } from '../utils/logger.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: dist/bin/../../skill\n path.join(__dirname, '..', '..', '..', 'skill'), // Development: dist/bin/../../../skill\n path.join(__dirname, '..', 'skill'), // Alternative: dist/../skill\n ];\n\n logger.debug('Looking for skill files, __dirname:', __dirname);\n\n for (const p of possiblePaths) {\n const resolved = path.resolve(p);\n const exists = fs.existsSync(resolved);\n logger.debug(` Checking path: ${resolved} - exists: ${exists}`);\n if (exists) {\n return resolved;\n }\n }\n\n throw new Error(`Skill files not found in package. Searched paths from __dirname=${__dirname}`);\n}\n\nexport interface InstallResult {\n skillInstalled: boolean;\n skillPath: string | null;\n 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 logger.debug('Source skill directory:', sourceDir);\n\n // Install SKILL.md and references\n // Always try to create skills directory\n const targetDir = getClaudeSkillDir();\n logger.debug('Target skill directory:', targetDir);\n\n try {\n ensureDir(targetDir);\n ensureDir(path.join(targetDir, 'references'));\n logger.debug('Created target directories');\n } catch (err) {\n logger.error('Failed to create target directories:', err);\n throw err;\n }\n\n // Copy SKILL.md\n const skillSource = path.join(sourceDir, 'SKILL.md');\n const skillTarget = path.join(targetDir, 'SKILL.md');\n logger.debug(`Copying SKILL.md: ${skillSource} -> ${skillTarget}`);\n if (fs.existsSync(skillSource)) {\n fs.copyFileSync(skillSource, skillTarget);\n result.skillInstalled = true;\n result.skillPath = targetDir;\n logger.debug('SKILL.md copied successfully');\n } else {\n logger.warn('SKILL.md source not found:', skillSource);\n }\n\n // Copy references\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 logger.debug(`Copying ${files.length} reference files`);\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 logger.debug('Commands directory:', commandsDir);\n ensureDir(commandsDir);\n result.commandsInstalled = installSlashCommands(sourceDir, commandsDir);\n if (result.commandsInstalled) {\n result.commandsPath = commandsDir;\n }\n logger.debug('Commands installed:', result.commandsInstalled);\n\n // Update config with installation info\n updateSkillInfo(result.version);\n\n logger.info('Skill installation complete:', {\n skillInstalled: result.skillInstalled,\n commandsInstalled: result.commandsInstalled,\n });\n\n return result;\n}\n\n/**\n * Install slash command files\n */\nfunction installSlashCommands(sourceDir: string, targetDir: string): boolean {\n const commandsSource = path.join(sourceDir, '..', 'commands');\n if (!fs.existsSync(commandsSource)) {\n return false;\n }\n\n try {\n const files = fs.readdirSync(commandsSource);\n for (const file of files) {\n if (file.endsWith('.md')) {\n fs.copyFileSync(path.join(commandsSource, file), path.join(targetDir, file));\n }\n }\n return files.length > 0;\n } catch {\n return false;\n }\n}\n\n/**\n * Get skill version from SKILL.md\n */\nfunction getSkillVersion(): string {\n try {\n const skillPath = path.join(getPackageSkillDir(), 'SKILL.md');\n const content = fs.readFileSync(skillPath, 'utf-8');\n // Extract version from frontmatter if present, otherwise use package version\n const versionMatch = content.match(/version:\\s*(\\d+\\.\\d+\\.\\d+)/);\n if (versionMatch) {\n return versionMatch[1];\n }\n } catch {\n // Fall through to package version\n }\n\n // Use CLI package version\n try {\n const pkgPath = path.join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n return pkg.version;\n } catch {\n return '0.1.0';\n }\n}\n\n/**\n * Check if skill is installed and up to date\n */\nexport function isSkillInstalled(): {\n installed: boolean;\n upToDate: boolean;\n currentVersion?: string;\n} {\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 ASCII Logo\n * Used by init command for branding display\n */\n\nimport { shouldUseColor, isTTY, Style, UI } from './ui.js';\n\n/**\n * REFLY.AI ASCII Logo (Gradient Block Style)\n */\nexport const REFLY_LOGO = `█▀█ █▀▀ █▀▀ █ █ █ █▀█ █\n█▀▄ █▀▀ █▀▀ █ █▄█ ▀ █▀█ █\n▀ ▀ ▀▀▀ ▀ ▀▀▀ ▀ ▀ ▀ ▀`;\n\n/**\n * Print the Refly logo to stderr\n * Only prints if TTY and colors are enabled\n */\nexport function printLogo(options?: { color?: boolean; force?: boolean }): void {\n const useColor = options?.color ?? shouldUseColor();\n const tty = isTTY();\n\n // Skip logo if not TTY (unless forced)\n if (!tty && !options?.force) {\n return;\n }\n\n if (useColor) {\n // Print with green color\n process.stderr.write(`${Style.TEXT_SUCCESS}${REFLY_LOGO}${Style.RESET}\\n`);\n } else {\n process.stderr.write(`${REFLY_LOGO}\\n`);\n }\n}\n\n/**\n * Print a success message with checkmark\n */\nexport function printSuccess(message: string): void {\n process.stderr.write(`${UI.successMsg(message)}\\n`);\n}\n\n/**\n * Print an error message with cross\n */\nexport function printError(message: string): void {\n process.stderr.write(`${UI.errorMsg(message)}\\n`);\n}\n\n/**\n * Print a dimmed/muted message\n */\nexport function printDim(message: string): void {\n process.stderr.write(`${UI.dim(message)}\\n`);\n}\n\n/**\n * Print a plain message\n */\nexport function println(message: string): void {\n process.stderr.write(`${message}\\n`);\n}\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';\nimport { styled, Style } from '../utils/ui.js';\nimport { getCliVersion } from '../config/paths.js';\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 userCode?: 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 * @param emitOutput - Whether to call ok() on success (default: true). Set to false when called from init.\n */\nexport async function loginWithDeviceFlow(emitOutput = true): 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: getCliVersion(),\n host: hostname,\n },\n requireAuth: false,\n });\n\n const { deviceId, expiresAt, userCode } = initResponse;\n\n // Set up cleanup handler for when process is interrupted or exits\n const cleanup = async (deviceIdToCancel: string = deviceId) => {\n try {\n logger.debug('Cleaning up device session...');\n await apiRequest('/v1/auth/cli/device/cancel', {\n method: 'POST',\n body: { device_id: deviceIdToCancel },\n requireAuth: false,\n });\n logger.debug('Device session cancelled');\n } catch (error) {\n logger.debug('Failed to cancel device session during cleanup:', error);\n }\n };\n\n // Handle process termination signals\n process.on('SIGINT', async () => {\n logger.debug('Received SIGINT, cleaning up...');\n await cleanup();\n process.exit(130); // 128 + SIGINT(2)\n });\n\n process.on('SIGTERM', async () => {\n logger.debug('Received SIGTERM, cleaning up...');\n await cleanup();\n process.exit(143); // 128 + SIGTERM(15)\n });\n\n // Handle uncaught exceptions and unhandled rejections\n process.on('uncaughtException', async (error) => {\n logger.debug('Uncaught exception, cleaning up:', error);\n await cleanup();\n process.exit(1);\n });\n\n process.on('unhandledRejection', async (reason) => {\n logger.debug('Unhandled rejection, cleaning up:', reason);\n await cleanup();\n process.exit(1);\n });\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(getCliVersion())}&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 if (userCode) {\n process.stderr.write(`Verification Code: ${styled(userCode, Style.TEXT_HIGHLIGHT_BOLD)}\\n`);\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 try {\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n await sleep(pollInterval);\n\n const statusResponse = await apiRequest<DeviceSessionWithTokens>(\n '/v1/auth/cli/device/status',\n {\n method: 'GET',\n query: { device_id: deviceId },\n requireAuth: false,\n },\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 // Only emit output when called directly (not from init command)\n if (emitOutput) {\n ok('login', {\n message: 'Successfully authenticated via device authorization',\n user: userInfo,\n method: 'device',\n });\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 - update device status before showing error\n logger.debug('Authorization timeout, updating device status...');\n await cleanup(deviceId);\n printError(ErrorCodes.TIMEOUT, 'Authorization timeout', {\n hint: 'Complete authorization in the browser within 5 minutes',\n });\n return false;\n } finally {\n // Remove signal handlers when done\n process.removeAllListeners('SIGINT');\n process.removeAllListeners('SIGTERM');\n process.removeAllListeners('uncaughtException');\n process.removeAllListeners('unhandledRejection');\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 * API client for Refly backend communication.\n * Handles authentication, retries, and error mapping.\n * Supports both OAuth tokens and API Keys for authentication.\n */\n\nimport * as fs from 'node:fs';\nimport { statSync } from 'node:fs';\nimport * as path from 'node:path';\nimport mime from 'mime';\nimport {\n getApiEndpoint,\n getAccessToken,\n getRefreshToken,\n getTokenExpiresAt,\n setOAuthTokens,\n getOAuthProvider,\n getAuthUser,\n getAuthMethod,\n getApiKey,\n} from '../config/config.js';\nimport { ErrorCodes, type ErrorCode } from '../utils/output.js';\nimport { CLIError, AuthError, NetworkError } from '../utils/errors.js';\nimport { logger } from '../utils/logger.js';\n\nexport interface APIResponse<T = unknown> {\n success: boolean;\n data?: T;\n errCode?: string;\n errMsg?: string;\n // Alternative error format used by some API responses\n error?: string;\n message?: string;\n}\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n body?: unknown;\n query?: Record<string, string>;\n timeout?: number;\n requireAuth?: boolean;\n}\n\nconst DEFAULT_TIMEOUT = 30000; // 30 seconds\n\n/**\n * Make an authenticated API request with automatic token refresh (for OAuth)\n * or API Key authentication\n */\nexport async function apiRequest<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = 'GET', body, query, timeout = DEFAULT_TIMEOUT, requireAuth = true } = options;\n\n const endpoint = getApiEndpoint();\n let url = `${endpoint}${path}`;\n\n // Add query parameters\n if (query && Object.keys(query).length > 0) {\n const params = new URLSearchParams(query);\n url = `${url}?${params.toString()}`;\n }\n\n // Build headers\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'User-Agent': 'refly-cli/0.1.0',\n };\n\n // Handle authentication based on method\n if (requireAuth) {\n const authMethod = getAuthMethod();\n\n if (authMethod === 'apikey') {\n // Use API Key authentication\n const apiKey = getApiKey();\n if (!apiKey) {\n throw new AuthError('Not authenticated');\n }\n headers['X-API-Key'] = apiKey;\n } else {\n // Use OAuth authentication (default)\n let accessToken = getAccessToken();\n\n if (!accessToken) {\n throw new AuthError('Not authenticated');\n }\n\n // Check if OAuth token is expired and refresh if needed\n const expiresAt = getTokenExpiresAt();\n if (expiresAt && new Date(expiresAt) < new Date()) {\n logger.debug('Access token expired, refreshing...');\n try {\n accessToken = await refreshAccessToken();\n } catch (error) {\n logger.error('Failed to refresh token:', error);\n throw new AuthError('Session expired, please login again');\n }\n }\n\n headers.Authorization = `Bearer ${accessToken}`;\n }\n }\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n logger.debug(`API Request: ${method} ${path}`);\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n // Handle empty responses (e.g., 204 No Content for DELETE)\n const contentLength = response.headers.get('content-length');\n const contentType = response.headers.get('content-type');\n if (\n response.status === 204 ||\n contentLength === '0' ||\n (!contentType?.includes('application/json') &&\n response.status >= 200 &&\n response.status < 300)\n ) {\n if (!response.ok) {\n throw new CLIError(ErrorCodes.API_ERROR, `HTTP ${response.status}: ${response.statusText}`);\n }\n return undefined as T;\n }\n\n // Parse response\n const data = (await response.json()) as APIResponse<T>;\n const hasSuccessFlag = typeof data === 'object' && data !== null && 'success' in data;\n\n // Handle API-level errors\n if (!response.ok) {\n throw mapAPIError(response.status, data);\n }\n\n if (hasSuccessFlag) {\n if (data.success) {\n return data.data as T;\n }\n throw mapAPIError(response.status, data);\n }\n\n // Non-wrapped responses (raw DTOs)\n return data as T;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof CLIError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CLIError(ErrorCodes.TIMEOUT, 'Request timed out', undefined, 'Try again later');\n }\n\n if (error.message.includes('fetch')) {\n throw new NetworkError('Cannot connect to API');\n }\n }\n\n throw new CLIError(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Unknown error',\n );\n }\n}\n\n/**\n * Refresh access token using refresh token (OAuth only)\n */\nasync function refreshAccessToken(): Promise<string> {\n const refreshToken = getRefreshToken();\n if (!refreshToken) {\n throw new AuthError('No refresh token available');\n }\n\n const provider = getOAuthProvider();\n const user = getAuthUser();\n\n if (!provider || !user) {\n throw new AuthError('Invalid OAuth state');\n }\n\n const endpoint = getApiEndpoint();\n const url = `${endpoint}/v1/auth/cli/oauth/refresh`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'refly-cli/0.1.0',\n },\n body: JSON.stringify({ refreshToken }),\n });\n\n if (!response.ok) {\n throw new AuthError('Failed to refresh token');\n }\n\n const data = (await response.json()) as APIResponse<{\n accessToken: string;\n refreshToken: string;\n }>;\n\n if (!data.success || !data.data) {\n throw new AuthError('Failed to refresh token');\n }\n\n // Update stored tokens\n setOAuthTokens({\n accessToken: data.data.accessToken,\n refreshToken: data.data.refreshToken,\n expiresAt: new Date(Date.now() + 3600000).toISOString(), // 1 hour\n provider,\n user,\n });\n\n logger.debug('Access token refreshed successfully');\n return data.data.accessToken;\n}\n\n/**\n * Map API error response to CLIError\n */\nfunction mapAPIError(status: number, response: APIResponse): CLIError {\n // Handle CLI error format: { ok: false, type: 'error', error: { code, message, hint } }\n if (response.error && typeof response.error === 'object') {\n const cliError = response.error as { code?: string; message?: string; hint?: string };\n return new CLIError(\n (cliError.code || 'UNKNOWN') as ErrorCode,\n cliError.message || 'Unknown error',\n undefined,\n cliError.hint,\n );\n }\n\n // Handle legacy format\n const errCode = response.errCode ?? response.error ?? 'UNKNOWN';\n const errMsg = response.errMsg ?? response.message ?? 'Unknown error';\n\n // Map HTTP status codes\n if (status === 401 || status === 403) {\n return new AuthError(errMsg);\n }\n\n if (status === 404) {\n return new CLIError(ErrorCodes.NOT_FOUND, errMsg, undefined, 'Check the resource ID');\n }\n\n if (status === 409) {\n return new CLIError(ErrorCodes.CONFLICT, errMsg, undefined, 'Refresh and try again');\n }\n\n if (status === 422) {\n return new CLIError(ErrorCodes.INVALID_INPUT, errMsg, undefined, 'Check input format');\n }\n\n if (status >= 500) {\n return new CLIError(ErrorCodes.API_ERROR, errMsg, undefined, 'Try again later');\n }\n\n // Map API error codes to ErrorCode type\n return new CLIError(errCode as ErrorCode, errMsg);\n}\n\n/**\n * Stream response interface for file downloads\n */\nexport interface StreamResponse {\n data: Buffer;\n filename: string;\n contentType: string;\n size: number;\n}\n\n/**\n * Make an authenticated streaming API request for file downloads.\n * Reuses the same auth logic as apiRequest() for OAuth/API Key support.\n */\nexport async function apiRequestStream(\n path: string,\n options: { timeout?: number } = {},\n): Promise<StreamResponse> {\n const { timeout = 300000 } = options; // 5 min default for downloads\n\n const endpoint = getApiEndpoint();\n const url = `${endpoint}${path}`;\n\n // Build headers with authentication (same logic as apiRequest)\n const headers: Record<string, string> = {\n 'User-Agent': 'refly-cli/0.1.0',\n };\n\n const authMethod = getAuthMethod();\n\n if (authMethod === 'apikey') {\n // Use API Key authentication\n const apiKey = getApiKey();\n if (!apiKey) {\n throw new AuthError('Not authenticated');\n }\n headers['X-API-Key'] = apiKey;\n } else {\n // Use OAuth authentication (default)\n let accessToken = getAccessToken();\n\n if (!accessToken) {\n throw new AuthError('Not authenticated');\n }\n\n // Check if OAuth token is expired and refresh if needed\n const expiresAt = getTokenExpiresAt();\n if (expiresAt && new Date(expiresAt) < new Date()) {\n logger.debug('Access token expired, refreshing...');\n try {\n accessToken = await refreshAccessToken();\n } catch (error) {\n logger.error('Failed to refresh token:', error);\n throw new AuthError('Session expired, please login again');\n }\n }\n\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n logger.debug(`API Stream Request: GET ${path}`);\n\n const response = await fetch(url, {\n method: 'GET',\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n // Try to parse error response\n try {\n const errorData = (await response.json()) as APIResponse;\n throw mapAPIError(response.status, errorData);\n } catch (e) {\n if (e instanceof CLIError) throw e;\n throw new CLIError(ErrorCodes.API_ERROR, `HTTP ${response.status}: ${response.statusText}`);\n }\n }\n\n // Parse filename from Content-Disposition header\n const contentDisposition = response.headers.get('content-disposition');\n let filename = 'download';\n if (contentDisposition) {\n // Handle both: filename=\"name.ext\" and filename*=UTF-8''name.ext\n const match = contentDisposition.match(/filename\\*?=(?:UTF-8'')?[\"']?([^\"';\\n]+)[\"']?/i);\n if (match) {\n filename = decodeURIComponent(match[1]);\n }\n }\n\n // Get the response as ArrayBuffer and convert to Buffer\n const arrayBuffer = await response.arrayBuffer();\n const data = Buffer.from(arrayBuffer);\n\n return {\n data,\n filename,\n contentType: response.headers.get('content-type') || 'application/octet-stream',\n size: data.length,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof CLIError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CLIError(ErrorCodes.TIMEOUT, 'Download timed out', undefined, 'Try again later');\n }\n\n if (error.message.includes('fetch')) {\n throw new NetworkError('Cannot connect to API');\n }\n }\n\n throw new CLIError(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Unknown error',\n );\n }\n}\n\n/**\n * Verify API connection and authentication\n */\nexport async function verifyConnection(): Promise<{\n connected: boolean;\n authenticated: boolean;\n authMethod?: 'oauth' | 'apikey';\n user?: { uid: string; name?: string; email?: string };\n}> {\n try {\n const authMethod = getAuthMethod();\n\n // Check if we have any credentials\n if (authMethod === 'apikey') {\n const apiKey = getApiKey();\n if (!apiKey) {\n return { connected: true, authenticated: false };\n }\n } else {\n const accessToken = getAccessToken();\n if (!accessToken) {\n return { connected: true, authenticated: false };\n }\n }\n\n const user = await apiRequest<{ uid: string; name?: string; email?: string }>('/v1/user/me', {\n requireAuth: true,\n });\n\n return { connected: true, authenticated: true, authMethod, user };\n } catch (error) {\n if (error instanceof AuthError) {\n return { connected: true, authenticated: false };\n }\n if (error instanceof NetworkError) {\n return { connected: false, authenticated: false };\n }\n // For other errors, assume connection works but auth failed\n return { connected: true, authenticated: false };\n }\n}\n\n/**\n * Result of a drive file upload\n */\nexport interface DriveFileUploadResult {\n fileId: string;\n name: string;\n type: string;\n size: number;\n storageKey: string;\n url?: string;\n}\n\n/**\n * Presigned upload URL response\n */\ninterface PresignedUploadResponse {\n uploadId: string;\n presignedUrl: string;\n expiresIn: number;\n}\n\n/**\n * Get MIME type for a file path\n */\nfunction getMimeType(filePath: string): string {\n return mime.getType(filePath) || 'application/octet-stream';\n}\n\n/**\n * Step 1: Get a presigned URL for file upload\n */\nasync function getPresignedUploadUrl(\n canvasId: string,\n filename: string,\n size: number,\n contentType: string,\n): Promise<PresignedUploadResponse> {\n return apiRequest<PresignedUploadResponse>('/v1/cli/drive/file/upload/presign', {\n method: 'POST',\n body: { canvasId, filename, size, contentType },\n });\n}\n\n/**\n * Step 2: Upload file to presigned URL with retry\n */\nasync function uploadToPresignedUrl(\n presignedUrl: string,\n filePath: string,\n contentType: string,\n retryCount = 1,\n): Promise<void> {\n const fileStats = statSync(filePath);\n const timeout = 300000; // 5 min timeout for upload\n\n for (let attempt = 0; attempt <= retryCount; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n // Read file as buffer for presigned PUT\n const fileBuffer = await fs.promises.readFile(filePath);\n\n const response = await fetch(presignedUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': contentType,\n 'Content-Length': fileStats.size.toString(),\n },\n body: fileBuffer,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => '');\n throw new CLIError(\n ErrorCodes.API_ERROR,\n `Upload to storage failed: HTTP ${response.status} ${response.statusText}${errorText ? ` - ${errorText}` : ''}`,\n );\n }\n\n return; // Success\n } catch (error) {\n clearTimeout(timeoutId);\n\n // Don't retry on auth or validation errors\n if (error instanceof CLIError) {\n throw error;\n }\n\n // Retry on network errors\n if (attempt < retryCount) {\n logger.debug(`Upload attempt ${attempt + 1} failed, retrying...`);\n continue;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CLIError(\n ErrorCodes.TIMEOUT,\n 'Upload timed out',\n undefined,\n 'Try a smaller file or check network',\n );\n }\n\n if (error.message.includes('fetch')) {\n throw new NetworkError('Cannot connect to storage');\n }\n }\n\n throw new CLIError(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Unknown upload error',\n );\n }\n }\n}\n\n/**\n * Step 3: Confirm upload completion\n */\nasync function confirmUpload(uploadId: string): Promise<DriveFileUploadResult> {\n return apiRequest<DriveFileUploadResult>('/v1/cli/drive/file/upload/confirm', {\n method: 'POST',\n body: { uploadId },\n });\n}\n\n/**\n * Upload a file to a canvas using presigned URL flow.\n * 3-step process: presign -> PUT to OSS -> confirm\n * @param filePath - Absolute path to the file to upload\n * @param canvasId - Canvas ID to associate the file with\n * @param options - Optional configuration including progress callback\n * @returns Upload result with file metadata\n */\n/**\n * Workflow variable definition\n */\nexport interface WorkflowVariable {\n variableId?: string;\n name: string;\n variableType?: string;\n value?: unknown[];\n required?: boolean;\n isSingle?: boolean;\n resourceTypes?: string[];\n}\n\n/**\n * Workflow info returned from GET /v1/cli/workflow/:id\n */\nexport interface WorkflowInfo {\n workflowId: string;\n name: string;\n nodes: unknown[];\n edges: unknown[];\n variables: WorkflowVariable[];\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Fetch workflow details by ID\n * @param workflowId - The workflow ID to fetch\n * @returns Workflow details including variables\n */\nexport async function apiGetWorkflow(workflowId: string): Promise<WorkflowInfo> {\n return apiRequest<WorkflowInfo>(`/v1/cli/workflow/${workflowId}`);\n}\n\nexport async function apiUploadDriveFile(\n filePath: string,\n canvasId: string,\n options?: {\n timeout?: number;\n onProgress?: (stage: 'presign' | 'upload' | 'confirm') => void;\n },\n): Promise<DriveFileUploadResult> {\n const filename = path.basename(filePath);\n const mimeType = getMimeType(filePath);\n const fileStats = statSync(filePath);\n\n logger.debug(`Starting presigned upload: ${filename} (${fileStats.size} bytes)`);\n\n // Step 1: Get presigned URL\n options?.onProgress?.('presign');\n let presignResponse: PresignedUploadResponse;\n try {\n presignResponse = await getPresignedUploadUrl(canvasId, filename, fileStats.size, mimeType);\n logger.debug(`Got presigned URL, uploadId: ${presignResponse.uploadId}`);\n } catch (error) {\n logger.error('Failed to get presigned URL:', error);\n throw error;\n }\n\n // Step 2: Upload to presigned URL\n options?.onProgress?.('upload');\n try {\n await uploadToPresignedUrl(presignResponse.presignedUrl, filePath, mimeType);\n logger.debug('File uploaded to presigned URL');\n } catch (error) {\n logger.error('Failed to upload to presigned URL:', error);\n throw error;\n }\n\n // Step 3: Confirm upload\n options?.onProgress?.('confirm');\n try {\n const result = await confirmUpload(presignResponse.uploadId);\n logger.debug(`Upload confirmed, fileId: ${result.fileId}`);\n return result;\n } catch (error) {\n logger.error('Failed to confirm upload:', error);\n throw error;\n }\n}\n","/**\n * 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 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, getCliVersion } from '../config/paths.js';\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: getCliVersion(),\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 - Upgrade CLI and reinstall skill files\n */\n\nimport { Command } from 'commander';\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport { ok, fail, print, ErrorCodes } from '../utils/output.js';\nimport { installSkill, isSkillInstalled } from '../skill/installer.js';\nimport { logger } from '../utils/logger.js';\nimport { getLegacyBuilderDir } from '../config/paths.js';\n\n// Build-time injected constants\nconst CLI_VERSION = process.env.REFLY_BUILD_CLI_VERSION || '0.0.0';\nconst NPM_TAG = process.env.REFLY_BUILD_NPM_TAG || 'latest';\n\n/**\n * Compare two semver versions\n * Returns: 1 if a > b, -1 if a < b, 0 if equal\n */\nfunction compareSemver(a: string, b: string): number {\n const parseVersion = (v: string) => {\n const parts = v.replace(/^v/, '').split('-')[0].split('.');\n return parts.map((p) => Number.parseInt(p, 10) || 0);\n };\n\n const aParts = parseVersion(a);\n const bParts = parseVersion(b);\n\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n const aVal = aParts[i] || 0;\n const bVal = bParts[i] || 0;\n if (aVal > bVal) return 1;\n if (aVal < bVal) return -1;\n }\n return 0;\n}\n\n// Package name on npm\nconst PACKAGE_NAME = '@powerformer/refly-cli';\n\ninterface VersionInfo {\n current: string;\n latest: string | null;\n tag: string;\n updateAvailable: boolean;\n}\n\n/**\n * Get current CLI version (injected at build time)\n */\nfunction getCurrentVersion(): string {\n return CLI_VERSION;\n}\n\n/**\n * Get current npm tag (injected at build time)\n */\nfunction getCurrentTag(): string {\n return NPM_TAG;\n}\n\n/**\n * Get latest version from npm registry for the current tag\n */\nasync function getLatestVersion(): Promise<string | null> {\n const tag = getCurrentTag();\n try {\n // Use dist-tag to get version for the specific tag\n const result = execSync(`npm view ${PACKAGE_NAME}@${tag} version 2>/dev/null`, {\n encoding: 'utf-8',\n timeout: 10000,\n });\n return result.trim();\n } catch (error) {\n logger.debug(`Failed to get version for tag '${tag}' from npm:`, error);\n return null;\n }\n}\n\n/**\n * Check version info\n */\nasync function checkVersion(): Promise<VersionInfo> {\n const current = getCurrentVersion();\n const tag = getCurrentTag();\n const latest = await getLatestVersion();\n\n // Only show update available if latest version is actually newer (not just different)\n const updateAvailable = latest !== null && compareSemver(latest, current) > 0;\n\n return {\n current,\n latest,\n tag,\n updateAvailable,\n };\n}\n\n/**\n * Upgrade CLI package via npm\n */\nfunction upgradeCli(): { success: boolean; error?: string } {\n const tag = getCurrentTag();\n try {\n logger.info(`Upgrading CLI via npm (tag: ${tag})...`);\n\n // Use npm to install the version for the current tag globally\n execSync(`npm install -g ${PACKAGE_NAME}@${tag}`, {\n encoding: 'utf-8',\n stdio: 'pipe',\n timeout: 120000, // 2 minutes\n });\n\n return { success: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n logger.error('Failed to upgrade CLI:', message);\n return { success: false, error: message };\n }\n}\n\n/**\n * Clean up legacy data directories that are no longer used\n */\nfunction cleanupLegacyData(): { builderCleaned: boolean } {\n const result = { builderCleaned: false };\n\n // Clean up legacy builder directory (~/.refly/builder)\n const builderDir = getLegacyBuilderDir();\n if (fs.existsSync(builderDir)) {\n try {\n fs.rmSync(builderDir, { recursive: true, force: true });\n result.builderCleaned = true;\n logger.info('Cleaned up legacy builder directory');\n } catch (error) {\n logger.debug('Failed to clean up legacy builder directory:', error);\n }\n }\n\n return result;\n}\n\nexport const upgradeCommand = new Command('upgrade')\n .description('Upgrade CLI to latest version and reinstall skill files')\n .option('--check', 'Only check for updates without installing')\n .option('--skill-only', 'Only reinstall skill files without upgrading CLI')\n .option('--cli-only', 'Only upgrade CLI without reinstalling skill files')\n .action(async (options) => {\n try {\n const { check, skillOnly, cliOnly } = options;\n\n // Check for updates\n const versionInfo = await checkVersion();\n\n // Check only mode\n if (check) {\n return ok('upgrade.check', {\n currentVersion: versionInfo.current,\n latestVersion: versionInfo.latest,\n tag: versionInfo.tag,\n updateAvailable: versionInfo.updateAvailable,\n message: versionInfo.updateAvailable\n ? `Update available: ${versionInfo.current} → ${versionInfo.latest} (tag: ${versionInfo.tag})`\n : `Already on latest version (tag: ${versionInfo.tag})`,\n });\n }\n\n // Skill only mode\n if (skillOnly) {\n const beforeStatus = isSkillInstalled();\n const result = installSkill();\n\n return ok('upgrade', {\n message: 'Skill files updated successfully',\n cliUpgraded: false,\n skillUpdated: true,\n previousVersion: beforeStatus.currentVersion ?? null,\n newVersion: result.version,\n skillPath: result.skillPath,\n commandsInstalled: result.commandsInstalled,\n });\n }\n\n // CLI upgrade\n let cliUpgraded = false;\n let cliError: string | undefined;\n\n if (!cliOnly) {\n // Show current status\n print('upgrade.progress', {\n step: 'checking',\n currentVersion: versionInfo.current,\n latestVersion: versionInfo.latest,\n });\n }\n\n if (!skillOnly) {\n if (versionInfo.updateAvailable) {\n print('upgrade.progress', {\n step: 'upgrading',\n from: versionInfo.current,\n to: versionInfo.latest,\n });\n\n const upgradeResult = upgradeCli();\n cliUpgraded = upgradeResult.success;\n cliError = upgradeResult.error;\n\n if (!cliUpgraded) {\n return fail(ErrorCodes.INTERNAL_ERROR, 'Failed to upgrade CLI', {\n hint: cliError || `Try running: npm install -g ${PACKAGE_NAME}@${versionInfo.tag}`,\n });\n }\n } else {\n logger.info('CLI is already on latest version');\n }\n }\n\n // Reinstall skill files (unless cli-only)\n let skillResult = null;\n if (!cliOnly) {\n skillResult = installSkill();\n }\n\n // Clean up legacy data\n const cleanupResult = cleanupLegacyData();\n\n // Final output\n const newVersionInfo = await checkVersion();\n\n // Determine message based on what was updated\n let message: string;\n if (cliUpgraded && skillResult) {\n message = 'CLI and skill files updated successfully';\n } else if (cliUpgraded) {\n message = 'CLI updated successfully';\n } else if (skillResult) {\n message = 'Skill files updated (CLI already on latest version)';\n } else {\n message = 'Already on latest version';\n }\n\n ok('upgrade', {\n message,\n cliUpgraded,\n skillUpdated: !!skillResult,\n previousVersion: versionInfo.current,\n currentVersion: newVersionInfo.current,\n latestVersion: newVersionInfo.latest,\n tag: newVersionInfo.tag,\n skillPath: skillResult?.skillPath ?? null,\n commandsInstalled: skillResult?.commandsInstalled ?? false,\n legacyDataCleaned: cleanupResult.builderCleaned,\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 workflow - Workflow command group\n *\n * Most commands support both workflowId (c-xxx) and runId (we-xxx):\n * - workflowId: operates on the latest run\n * - runId: operates on the specific run\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 { workflowRunsCommand } from './runs.js';\nimport { workflowAbortCommand } from './abort.js';\nimport { workflowStatusCommand } from './status.js';\nimport { workflowDetailCommand } from './detail.js';\nimport { workflowToolcallsCommand } from './toolcalls.js';\nimport { workflowToolsetKeysCommand } from './toolset-keys.js';\nimport { workflowLayoutCommand } from './layout.js';\nimport { workflowNodesCommand } from './nodes.js';\nimport { workflowNodeGetCommand } from './node-get.js';\nimport { workflowNodeOutputCommand } from './node-output.js';\nimport { workflowPatchCommand } from './patch.js';\n\nexport const workflowCommand = new Command('workflow')\n .description('Manage and run workflows')\n // Workflow management\n .addCommand(workflowCreateCommand)\n .addCommand(workflowGenerateCommand)\n .addCommand(workflowListCommand)\n .addCommand(workflowGetCommand)\n .addCommand(workflowEditCommand)\n .addCommand(workflowDeleteCommand)\n // Workflow execution\n .addCommand(workflowRunCommand)\n .addCommand(workflowRunsCommand)\n .addCommand(workflowStatusCommand)\n .addCommand(workflowDetailCommand)\n .addCommand(workflowToolcallsCommand)\n .addCommand(workflowAbortCommand)\n // Workflow utilities\n .addCommand(workflowToolsetKeysCommand)\n .addCommand(workflowLayoutCommand)\n .addCommand(workflowNodesCommand)\n .addCommand(workflowNodeGetCommand)\n .addCommand(workflowNodeOutputCommand)\n // Workflow plan operations\n .addCommand(workflowPatchCommand);\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\n// Supported node types in simplified format\nconst SUPPORTED_NODE_TYPES = ['skill', 'agent'];\n\n// Unsupported fields that indicate advanced format\nconst UNSUPPORTED_NODE_FIELDS = ['prompt', 'instruction', 'content', 'input'];\n\n// Pattern for variable interpolation syntax\nconst VARIABLE_PATTERN = /\\{\\{[^}]+\\}\\}/;\n\ninterface SimpleNode {\n id: string;\n type: string;\n query?: string;\n toolsetKeys?: string[];\n dependsOn?: string[];\n [key: string]: unknown;\n}\n\ninterface WorkflowSpec {\n nodes?: SimpleNode[];\n edges?: unknown[];\n version?: number;\n metadata?: unknown;\n [key: string]: unknown;\n}\n\n/**\n * Validate that the spec follows the simplified format.\n * Returns an error message if invalid, or null if valid.\n */\nfunction validateSimplifiedSpec(spec: WorkflowSpec): string | null {\n // Check for unsupported top-level fields\n if (spec.version !== undefined) {\n return 'Field \"version\" is not supported in simplified format';\n }\n if (spec.metadata !== undefined) {\n return 'Field \"metadata\" is not supported in simplified format';\n }\n\n const nodes = spec.nodes;\n if (!nodes || !Array.isArray(nodes)) {\n return 'Spec must contain a \"nodes\" array';\n }\n\n if (nodes.length === 0) {\n return 'Spec must contain at least one node';\n }\n\n for (const node of nodes) {\n // Check required fields\n if (!node.id || typeof node.id !== 'string') {\n return 'Each node must have a string \"id\" field';\n }\n if (!node.type || typeof node.type !== 'string') {\n return `Node \"${node.id}\": must have a string \"type\" field`;\n }\n\n // Check node type\n if (node.type.startsWith('tool:')) {\n return `Node \"${node.id}\": type \"tool:xxx\" is not supported. Use type \"skill\" with toolsetKeys instead. Example: {\"type\":\"skill\",\"toolsetKeys\":[\"${node.type.replace('tool:', '')}\"]}`;\n }\n if (node.type === 'start') {\n return `Node \"${node.id}\": type \"start\" is not supported. Start node is automatically created`;\n }\n if (!SUPPORTED_NODE_TYPES.includes(node.type)) {\n return `Node \"${node.id}\": type \"${node.type}\" is not supported. Use one of: ${SUPPORTED_NODE_TYPES.join(', ')}`;\n }\n\n // Check for unsupported fields\n for (const field of UNSUPPORTED_NODE_FIELDS) {\n if (node[field] !== undefined) {\n if (field === 'prompt') {\n return `Node \"${node.id}\": field \"prompt\" is not supported. Use \"query\" instead`;\n }\n if (field === 'input') {\n return `Node \"${node.id}\": field \"input\" is not supported. Use top-level \"query\" and \"toolsetKeys\" instead`;\n }\n return `Node \"${node.id}\": field \"${field}\" is not supported in simplified format`;\n }\n }\n\n // Check for variable interpolation syntax\n if (node.query && typeof node.query === 'string' && VARIABLE_PATTERN.test(node.query)) {\n return `Node \"${node.id}\": variable syntax \"{{...}}\" is not supported in query field`;\n }\n\n // Validate toolsetKeys if present\n if (node.toolsetKeys !== undefined) {\n if (!Array.isArray(node.toolsetKeys)) {\n return `Node \"${node.id}\": \"toolsetKeys\" must be an array`;\n }\n for (const key of node.toolsetKeys) {\n if (typeof key !== 'string') {\n return `Node \"${node.id}\": each item in \"toolsetKeys\" must be a string`;\n }\n }\n }\n\n // Validate dependsOn if present\n if (node.dependsOn !== undefined) {\n if (!Array.isArray(node.dependsOn)) {\n return `Node \"${node.id}\": \"dependsOn\" must be an array`;\n }\n for (const dep of node.dependsOn) {\n if (typeof dep !== 'string') {\n return `Node \"${node.id}\": each item in \"dependsOn\" must be a string`;\n }\n }\n }\n }\n\n // Validate dependsOn references\n const nodeIds = new Set(nodes.map((n) => n.id));\n for (const node of nodes) {\n if (node.dependsOn) {\n for (const dep of node.dependsOn) {\n if (!nodeIds.has(dep)) {\n return `Node \"${node.id}\": dependsOn references unknown node \"${dep}\"`;\n }\n }\n }\n }\n\n return null;\n}\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 // Supports both formats:\n // - Array shorthand: [node1, node2] -> { nodes: [node1, node2] }\n // - Full object: { nodes: [...], edges: [...] } -> as-is\n let spec: WorkflowSpec;\n try {\n const parsed = JSON.parse(options.spec);\n spec = Array.isArray(parsed) ? { nodes: parsed } : parsed;\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --spec', {\n hint: 'Ensure the spec is valid JSON',\n });\n return;\n }\n\n // Validate simplified format\n const validationError = validateSimplifiedSpec(spec);\n if (validationError) {\n fail(ErrorCodes.INVALID_INPUT, validationError, {\n hint: 'Use simplified format: [{\"id\":\"node1\",\"type\":\"skill\",\"query\":\"...\",\"toolsetKeys\":[\"tool_name\"],\"dependsOn\":[\"other_node\"]}]',\n });\n return;\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 return;\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 * Includes auto-cleanup: if generation fails (timeout/error), attempts to find\n * and delete any partially created workflow to avoid orphaned resources.\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';\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\ninterface WorkflowListItem {\n name: string;\n link: string;\n createdAt: string;\n}\n\ninterface WorkflowListResponse {\n workflows: WorkflowListItem[];\n total: number;\n}\n\n/**\n * Extract workflow ID from link URL\n * e.g., \"http://localhost:5173/workflow/c-xxx\" -> \"c-xxx\"\n */\nfunction extractWorkflowId(link: string): string | null {\n const match = link.match(/\\/workflow\\/(c-[a-z0-9]+)$/);\n return match ? match[1] : null;\n}\n\n/**\n * Cleanup orphaned workflows created after startTime that match the query\n * This handles cases where the API created a workflow but CLI timed out\n */\nasync function cleanupOrphanedWorkflows(\n startTime: number,\n query: string,\n): Promise<{ deleted: string[]; errors: string[] }> {\n const deleted: string[] = [];\n const errors: string[] = [];\n\n try {\n // Get recent workflows\n const listResult = await apiRequest<WorkflowListResponse>('/v1/cli/workflow/list', {\n timeout: 10000,\n });\n\n if (!listResult.workflows?.length) {\n return { deleted, errors };\n }\n\n // Find workflows created after startTime with matching name\n // Use first 30 chars of query for matching (workflow names are truncated)\n const queryPrefix = query.substring(0, 30).toLowerCase();\n\n for (const workflow of listResult.workflows) {\n const createdAt = new Date(workflow.createdAt).getTime();\n\n // Only check workflows created after our request started\n if (createdAt < startTime) {\n continue;\n }\n\n // Check if name contains query prefix (case-insensitive)\n const nameLower = workflow.name.toLowerCase();\n if (nameLower.includes(queryPrefix) || nameLower.includes('workflow:')) {\n const workflowId = extractWorkflowId(workflow.link);\n if (workflowId) {\n try {\n await apiRequest(`/v1/cli/workflow/${workflowId}`, {\n method: 'DELETE',\n timeout: 5000,\n });\n deleted.push(workflowId);\n } catch {\n errors.push(workflowId);\n }\n }\n }\n }\n } catch {\n // Silently fail cleanup - don't block the main error\n }\n\n return { deleted, errors };\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 .option('--no-cleanup', 'Disable auto-cleanup of orphaned workflows on failure')\n .action(async (options) => {\n // Record start time for cleanup logic\n const startTime = Date.now();\n const query = options.query as string;\n\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,\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 planId: result.planId,\n sessionId: result.sessionId,\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 // Auto-cleanup orphaned workflows on failure (unless disabled)\n let cleanupResult: { deleted: string[]; errors: string[] } | null = null;\n if (options.cleanup !== false) {\n cleanupResult = await cleanupOrphanedWorkflows(startTime, query);\n if (cleanupResult.deleted.length > 0) {\n print('workflow.cleanup', {\n message: 'Cleaned up orphaned workflow(s) created during failed generation',\n deleted: cleanupResult.deleted,\n hint: 'Use --no-cleanup to disable this behavior',\n });\n }\n }\n\n if (error instanceof CLIError) {\n fail(error.code, error.message, {\n details: { ...error.details, cleanedUp: cleanupResult?.deleted },\n hint: error.hint,\n });\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 details: { cleanedUp: cleanupResult?.deleted },\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 - Start a workflow execution\n */\n\nimport { Command } from 'commander';\nimport open from 'open';\nimport * as readline from 'node:readline/promises';\nimport { stdin as input, stdout as output } from 'node:process';\nimport * as path from 'node:path';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport {\n apiRequest,\n apiGetWorkflow,\n apiUploadDriveFile,\n type WorkflowVariable,\n type WorkflowInfo,\n} from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\nimport { getWebUrl } from '../../config/config.js';\nimport { promptForFilePath, isInteractive } from '../../utils/prompt.js';\nimport { determineFileType } from '../../utils/file-type.js';\n\ninterface RunResult {\n runId: string;\n workflowId: string;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'aborted' | 'init';\n startedAt: string;\n unauthorizedTools?: Array<{\n toolset: {\n type: string;\n id: string;\n name: string;\n builtin?: boolean;\n toolset?: {\n key?: string;\n };\n mcpServer?: {\n name?: string;\n };\n };\n referencedNodes: Array<{\n id: string;\n entityId: string;\n title: string;\n type: string;\n }>;\n }>;\n installToolsUrl?: string;\n}\n\ninterface ToolsStatusResult {\n authorized: boolean;\n unauthorizedTools: Array<{\n toolset: {\n type: string;\n id: string;\n name: string;\n builtin?: boolean;\n toolset?: {\n key?: string;\n };\n mcpServer?: {\n name?: string;\n };\n };\n referencedNodes: Array<{\n id: string;\n entityId: string;\n title: string;\n type: string;\n }>;\n }>;\n}\n\n/**\n * Prompt user for confirmation with y/N defaulting to N\n */\nasync function confirmAction(question: string): Promise<boolean> {\n const rl = readline.createInterface({ input, output });\n try {\n const answer = await rl.question(`${question} (y/N): `);\n return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';\n } finally {\n rl.close();\n }\n}\n\n/**\n * Poll tools status until all tools are authorized or timeout\n */\nasync function pollToolsStatus(\n workflowId: string,\n maxWaitTime: number = 15 * 60 * 1000, // 15 minutes\n pollInterval = 2000, // 2 seconds\n): Promise<boolean> {\n const startTime = Date.now();\n\n console.log('\\nWaiting for tool authorization...');\n console.log('This may take a few minutes. You can complete the authorization in your browser.');\n\n let previousRemainingCount = -1; // Track previous count to only log when it changes\n\n while (Date.now() - startTime < maxWaitTime) {\n try {\n const result = await apiRequest<ToolsStatusResult>(\n `/v1/cli/workflow/${workflowId}/tools-status`,\n );\n\n if (result.authorized) {\n console.log('\\n✅ All required tools are now authorized!');\n return true;\n }\n\n const remainingCount = result.unauthorizedTools.length;\n if (remainingCount !== previousRemainingCount) {\n console.log(\n `⏳ Still waiting... ${remainingCount} tool${remainingCount > 1 ? 's' : ''} remaining to authorize.`,\n );\n previousRemainingCount = remainingCount;\n }\n\n // Wait before next poll\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n } catch (error) {\n console.log(`\\n⚠️ Failed to check authorization status: ${(error as Error).message}`);\n console.log('Continuing to wait...');\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n }\n\n console.log('\\n⏰ Timeout waiting for tool authorization.');\n return false;\n}\n\nconst promptToOpenBrowser = async (installUrl: string): Promise<boolean> => {\n const isInteractive = process.stdin?.isTTY ?? false;\n if (!isInteractive) {\n return false;\n }\n\n const rl = readline.createInterface({ input, output });\n try {\n const answer = await rl.question(\n `${installUrl}\\nOpen browser to view workflow tools? (y/N) > `,\n );\n const normalized = answer.trim().toLowerCase();\n return normalized === 'y' || normalized === 'yes';\n } finally {\n rl.close();\n }\n};\n\nconst buildInstallUrl = (workflowId: string): string => {\n const webUrl = getWebUrl();\n return `${webUrl}/workflow/${workflowId}/install-tools`;\n};\n\n/**\n * Resource value structure for file variables\n */\ninterface ResourceValue {\n type: 'resource';\n resource: {\n name: string;\n fileType: string;\n fileId: string;\n storageKey: string;\n };\n}\n\n/**\n * Collect file variables interactively by prompting for file paths.\n * Only prompts for required resource variables that don't have values in existingInput.\n *\n * @param workflowId - The workflow ID to fetch variables from\n * @param existingInput - Variables already provided via --input\n * @param noPrompt - If true, fail instead of prompting for missing required variables\n * @returns Array of workflow variables with uploaded file bindings\n */\nasync function collectFileVariables(\n workflowId: string,\n existingInput: WorkflowVariable[],\n noPrompt: boolean,\n): Promise<WorkflowVariable[]> {\n // 1. Fetch workflow details to get variable definitions\n let workflow: WorkflowInfo;\n try {\n workflow = await apiGetWorkflow(workflowId);\n } catch (_error) {\n // If we can't fetch the workflow, let the run endpoint handle it\n return [];\n }\n\n // 2. Find required resource variables\n const resourceVars = (workflow.variables ?? []).filter(\n (v) => v.variableType === 'resource' && v.required === true,\n );\n\n if (resourceVars.length === 0) {\n return [];\n }\n\n // 3. Filter out variables already provided in --input\n // Check by both variableId and name for maximum compatibility\n const providedIds = new Set(existingInput.map((v) => v.variableId).filter(Boolean));\n const providedNames = new Set(existingInput.map((v) => v.name).filter(Boolean));\n\n const missingVars = resourceVars.filter((v) => {\n // Variable is provided if its ID or name matches\n if (v.variableId && providedIds.has(v.variableId)) return false;\n if (v.name && providedNames.has(v.name)) return false;\n return true;\n });\n\n if (missingVars.length === 0) {\n return [];\n }\n\n // 4. Check if we can prompt\n if (noPrompt || !isInteractive()) {\n const names = missingVars.map((v) => v.name).join(', ');\n throw new CLIError(\n ErrorCodes.INVALID_INPUT,\n `Missing required file variables: ${names}`,\n undefined,\n 'Provide files via --input or run interactively without --no-prompt',\n );\n }\n\n // 5. Prompt for each variable\n console.log('');\n console.log('This workflow requires file inputs:');\n const uploadedVars: WorkflowVariable[] = [];\n\n for (const variable of missingVars) {\n const filePath = await promptForFilePath(\n variable.name,\n variable.resourceTypes ?? ['document'],\n true,\n );\n\n if (!filePath) {\n // This shouldn't happen for required variables, but just in case\n continue;\n }\n\n // Upload file\n const filename = path.basename(filePath);\n process.stdout.write(` Uploading ${filename}...`);\n\n try {\n const uploadResult = await apiUploadDriveFile(filePath, workflowId);\n console.log(' done');\n\n // Build variable binding with resource value\n const resourceValue: ResourceValue = {\n type: 'resource',\n resource: {\n name: uploadResult.name,\n fileType: determineFileType(filePath, uploadResult.type),\n fileId: uploadResult.fileId,\n storageKey: uploadResult.storageKey,\n },\n };\n\n uploadedVars.push({\n variableId: variable.variableId,\n name: variable.name,\n variableType: 'resource',\n value: [resourceValue],\n required: variable.required,\n isSingle: variable.isSingle,\n resourceTypes: variable.resourceTypes,\n });\n } catch (error) {\n console.log(' failed');\n throw new CLIError(\n ErrorCodes.API_ERROR,\n `Failed to upload file ${filename}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n undefined,\n 'Check your network connection and try again',\n );\n }\n }\n\n console.log('');\n return uploadedVars;\n}\n\n/**\n * Main workflow execution logic\n */\nasync function runWorkflow(workflowId: string, options: any): Promise<void> {\n // Parse input JSON to extract variables\n let inputVars: WorkflowVariable[] = [];\n try {\n const parsed = JSON.parse(options?.input ?? '{}');\n // Support both { variables: [...] } and raw array format\n if (Array.isArray(parsed)) {\n inputVars = parsed;\n } else if (parsed.variables && Array.isArray(parsed.variables)) {\n inputVars = parsed.variables;\n }\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON in --input', {\n hint: 'Ensure the input is valid JSON, e.g., {\"variables\":[...]}',\n });\n return; // TypeScript flow control\n }\n\n // Collect file variables interactively (if needed)\n const uploadedVars = await collectFileVariables(\n workflowId,\n inputVars,\n options?.noPrompt ?? false,\n );\n\n // Merge: uploaded vars first, then input vars (input takes precedence)\n const allVars = [...uploadedVars, ...inputVars];\n\n // Build request body with variables and optional startNodes\n const body: { variables?: WorkflowVariable[]; startNodes?: string[] } = {};\n if (allVars.length > 0) {\n body.variables = allVars;\n }\n if (options?.fromNode) {\n body.startNodes = [options?.fromNode];\n }\n\n const result = await apiRequest<RunResult>(`/v1/cli/workflow/${workflowId}/run`, {\n method: 'POST',\n body,\n });\n\n // Check if there are unauthorized tools\n const unauthorizedTools = Array.isArray(result?.unauthorizedTools)\n ? result.unauthorizedTools\n : [];\n\n if (unauthorizedTools.length > 0) {\n const toolNames = unauthorizedTools\n .map((tool) => tool.toolset?.name ?? 'Unknown tool')\n .join(', ');\n const installUrl = buildInstallUrl(workflowId);\n const shouldOpenBrowser = await promptToOpenBrowser(installUrl);\n\n if (shouldOpenBrowser) {\n try {\n await open(installUrl);\n console.log('✅ Browser opened successfully!');\n console.log('');\n console.log('Please install any required tools in your browser.');\n console.log('You can close the browser tab and return here when done.');\n console.log('');\n\n // start polling tool authorization status\n const allAuthorized = await pollToolsStatus(workflowId);\n\n if (allAuthorized) {\n // confirm again whether to run the workflow immediately\n console.log('');\n const shouldRunNow = await confirmAction(\n 'All required tools are authorized now. Run workflow now?',\n );\n\n if (shouldRunNow) {\n console.log('');\n console.log('Running workflow...');\n // recursively call itself, but there should be no unauthorized tools now\n return await runWorkflow(workflowId, options);\n } else {\n console.log('');\n console.log('Workflow is ready to run. You can run it later with:');\n console.log(` refly workflow run ${workflowId}`);\n return;\n }\n } else {\n // poll timeout\n console.log('');\n console.log(\n 'Authorization timed out. You can try again later or install tools manually:',\n );\n console.log(` ${installUrl}`);\n console.log('');\n console.log('Then run the workflow with:');\n console.log(` refly workflow run ${workflowId}`);\n process.exit(1);\n }\n } catch {\n console.log('❌ Could not open browser automatically.');\n console.log('Please visit this URL manually:');\n console.log(` ${installUrl}`);\n process.exit(1);\n }\n }\n\n fail(ErrorCodes.EXECUTION_FAILED, `Workflow contains unauthorized tools: ${toolNames}`, {\n hint: 'Open browser to view all workflow tools and install the ones you need',\n details: {\n installUrl,\n unauthorizedTools: unauthorizedTools.map((tool) => ({\n name: tool.toolset?.name ?? 'Unknown tool',\n type: tool.toolset?.type ?? 'unknown',\n referencedNodes: Array.isArray(tool.referencedNodes) ? tool.referencedNodes.length : 0,\n })),\n },\n });\n }\n\n ok('workflow.run', {\n message: options?.fromNode\n ? `Workflow run started from node ${options?.fromNode}`\n : 'Workflow run started',\n runId: result.runId,\n workflowId: result.workflowId,\n status: result.status,\n startNode: options?.fromNode || undefined,\n startedAt: result.startedAt,\n nextStep: `Check status with \\`refly workflow status ${workflowId}\\``,\n });\n}\n\nexport const workflowRunCommand = new Command('run')\n .description('Start a workflow execution')\n .argument('<workflowId>', 'Workflow ID to run')\n .option('--input <json>', 'Input variables as JSON', '{}')\n .option('--from-node <nodeId>', 'Start workflow execution from a specific node (Run From Here)')\n .option('--no-prompt', 'Disable interactive prompts (fail if required variables are missing)')\n .action(async (workflowId, options) => {\n try {\n await runWorkflow(workflowId, options);\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 * Interactive prompt utilities for CLI user input.\n */\n\nimport * as readline from 'node:readline/promises';\nimport { stdin as input, stdout as output } from 'node:process';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/**\n * Check if the current session is running in an interactive terminal (TTY).\n * Non-interactive contexts include piped input, CI environments, etc.\n */\nexport function isInteractive(): boolean {\n return process.stdin?.isTTY ?? false;\n}\n\n/**\n * Prompt the user for a file path with validation.\n * Re-prompts on invalid input until a valid file is provided or user skips (for optional variables).\n *\n * @param variableName - Name of the variable (for display)\n * @param resourceTypes - Allowed file types (e.g., ['document', 'image'])\n * @param isRequired - Whether the variable is required\n * @returns Resolved absolute file path, or null if skipped (optional only)\n */\nexport async function promptForFilePath(\n variableName: string,\n resourceTypes: string[],\n isRequired: boolean,\n): Promise<string | null> {\n const rl = readline.createInterface({ input, output });\n const typeHint = resourceTypes.length > 0 ? resourceTypes.join('/') : 'file';\n const requiredHint = isRequired ? 'required' : 'optional, press Enter to skip';\n\n try {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const answer = await rl.question(` ${variableName} (${requiredHint}, ${typeHint}): `);\n\n const trimmed = answer.trim();\n\n // Handle empty input\n if (!trimmed) {\n if (!isRequired) {\n return null;\n }\n console.log(' This variable is required. Please enter a file path.');\n continue;\n }\n\n // Expand ~ to home directory\n let resolvedPath = trimmed;\n if (resolvedPath.startsWith('~')) {\n const homeDir = process.env.HOME || process.env.USERPROFILE || '';\n resolvedPath = resolvedPath.replace('~', homeDir);\n }\n\n // Resolve to absolute path\n resolvedPath = path.resolve(resolvedPath);\n\n // Validate file exists\n if (!fs.existsSync(resolvedPath)) {\n console.log(` File not found: ${resolvedPath}`);\n continue;\n }\n\n // Validate it's a file (not a directory)\n const stats = fs.statSync(resolvedPath);\n if (!stats.isFile()) {\n console.log(` Not a file: ${resolvedPath}`);\n continue;\n }\n\n return resolvedPath;\n }\n } finally {\n rl.close();\n }\n}\n","/**\n * File type detection utilities for resource variables.\n * Maps file extensions and MIME types to Refly resource types.\n */\n\nimport * as path from 'node:path';\n\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico', 'tiff', 'tif'];\nconst VIDEO_EXTENSIONS = ['mp4', 'webm', 'mov', 'avi', 'mkv', 'flv', 'wmv', 'm4v'];\nconst AUDIO_EXTENSIONS = ['mp3', 'wav', 'ogg', 'flac', 'm4a', 'aac', 'wma', 'opus'];\n\n/**\n * Refly resource file types\n */\nexport type ResourceFileType = 'document' | 'image' | 'video' | 'audio';\n\n/**\n * Determine the Refly resource file type based on file path and optional MIME type.\n * Defaults to 'document' for unrecognized types.\n *\n * @param filePath - Path to the file\n * @param mimeType - Optional MIME type (used as fallback)\n * @returns The determined file type\n */\nexport function determineFileType(filePath: string, mimeType?: string): ResourceFileType {\n // Extract extension without the dot, lowercase\n const ext = path.extname(filePath).slice(1).toLowerCase();\n\n // Check extension first (most reliable)\n if (IMAGE_EXTENSIONS.includes(ext)) {\n return 'image';\n }\n if (VIDEO_EXTENSIONS.includes(ext)) {\n return 'video';\n }\n if (AUDIO_EXTENSIONS.includes(ext)) {\n return 'audio';\n }\n\n // Check MIME type as fallback\n if (mimeType) {\n if (mimeType.startsWith('image/')) {\n return 'image';\n }\n if (mimeType.startsWith('video/')) {\n return 'video';\n }\n if (mimeType.startsWith('audio/')) {\n return 'audio';\n }\n }\n\n // Default to document for all other types (PDF, text, office docs, etc.)\n return 'document';\n}\n","/**\n * refly workflow runs - List workflow execution history\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 WorkflowRun {\n runId: 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}\n\ninterface WorkflowRunsResponse {\n workflowId: string;\n runs: WorkflowRun[];\n total: number;\n hasActiveRun: boolean;\n activeRunId?: string;\n}\n\nexport const workflowRunsCommand = new Command('runs')\n .description('List workflow execution history')\n .argument('<workflowId>', 'Workflow ID')\n .option('--limit <limit>', 'Maximum number of runs to return (default: 20)', '20')\n .option('--offset <offset>', 'Pagination offset (default: 0)', '0')\n .option('--status <status>', 'Filter by status (init, executing, finish, failed)')\n .action(async (workflowId, options) => {\n try {\n const params = new URLSearchParams();\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.status) {\n params.set('status', options.status);\n }\n\n const queryString = params.toString();\n const url = `/v1/cli/workflow/${workflowId}/runs${queryString ? `?${queryString}` : ''}`;\n const result = await apiRequest<WorkflowRunsResponse>(url);\n\n ok('workflow.runs', {\n workflowId: result.workflowId,\n total: result.total,\n hasActiveRun: result.hasActiveRun,\n activeRunId: result.activeRunId,\n runs: result.runs.map((run) => ({\n runId: run.runId,\n status: run.status,\n progress: `${run.executedNodes}/${run.totalNodes}`,\n failedNodes: run.failedNodes,\n startedAt: run.startedAt,\n finishedAt: run.finishedAt,\n durationMs: run.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 workflow runs',\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('<workflowId>', 'Workflow ID')\n .action(async (workflowId) => {\n try {\n await apiRequest(`/v1/cli/workflow/${workflowId}/abort`, {\n method: 'POST',\n });\n\n ok('workflow.abort', {\n message: 'Workflow run aborted',\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 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\n/**\n * Detect ID type based on prefix\n * - workflowId: starts with 'c-' (canvas)\n * - runId: starts with 'we-' (workflow execution)\n */\nfunction detectIdType(id: string): 'workflow' | 'run' {\n if (id.startsWith('we-')) {\n return 'run';\n }\n // Default to workflow (c- prefix or other)\n return 'workflow';\n}\n\nexport const workflowStatusCommand = new Command('status')\n .description('Get detailed workflow execution status')\n .argument('<id>', 'Workflow ID (c-xxx) or Run ID (we-xxx)')\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 (id, 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 // Auto-detect ID type and use appropriate endpoint\n const idType = detectIdType(id);\n const fetchStatus = async () => {\n if (idType === 'run') {\n // Use run-specific endpoint for runId (deprecated but functional)\n return await apiRequest<WorkflowRunStatus>(`/v1/cli/workflow/run/${id}`);\n }\n // Use workflow status endpoint for workflowId\n return await apiRequest<WorkflowRunStatus>(`/v1/cli/workflow/${id}/status`);\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 detail - Get detailed workflow execution information\n *\n * Supports both workflowId (c-xxx) and runId (we-xxx).\n * - workflowId: gets detail for the latest run\n * - runId: gets detail for the specific 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';\nimport { buildWorkflowApiUrl, detectIdType } from './utils.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 WorkflowDetailResponse {\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 workflowDetailCommand = new Command('detail')\n .description('Get detailed workflow execution information including all node results')\n .argument('<id>', 'Workflow ID (c-xxx) or Run ID (we-xxx)')\n .option('--no-tool-calls', 'Exclude tool call summaries')\n .option('--preview-length <length>', 'Output preview length (default: 500)', '500')\n .action(async (id, 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 // Auto-detect ID type and build appropriate URL\n const idType = detectIdType(id);\n const url = buildWorkflowApiUrl(id, 'detail', params);\n const result = await apiRequest<WorkflowDetailResponse>(url);\n\n ok('workflow.detail', {\n runId: result.runId,\n workflowId: result.workflowId,\n title: result.title,\n status: result.status,\n idType, // Include ID type in output for clarity\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 detail',\n );\n }\n });\n","/**\n * Shared utilities for workflow commands\n */\n\n/**\n * ID type detection based on prefix:\n * - workflowId: starts with 'c-' (canvas)\n * - runId: starts with 'we-' (workflow execution)\n */\nexport type IdType = 'workflow' | 'run';\n\n/**\n * Detect ID type based on prefix\n */\nexport function detectIdType(id: string): IdType {\n if (id.startsWith('we-')) {\n return 'run';\n }\n // Default to workflow (c- prefix or other)\n return 'workflow';\n}\n\n/**\n * Build API URL that supports both workflowId and runId\n *\n * For workflowId (c-xxx): uses /v1/cli/workflow/{workflowId}/{endpoint}\n * For runId (we-xxx): uses /v1/cli/workflow/run/{runId}/{endpoint}\n */\nexport function buildWorkflowApiUrl(\n id: string,\n endpoint: string,\n params?: URLSearchParams,\n): string {\n const idType = detectIdType(id);\n let basePath: string;\n\n if (idType === 'run') {\n // Run-specific endpoint\n basePath = `/v1/cli/workflow/run/${id}`;\n if (endpoint) {\n basePath += `/${endpoint}`;\n }\n } else {\n // Workflow-based endpoint (uses latest run)\n basePath = `/v1/cli/workflow/${id}`;\n if (endpoint) {\n basePath += `/${endpoint}`;\n }\n }\n\n const queryString = params?.toString();\n return queryString ? `${basePath}?${queryString}` : basePath;\n}\n\n/**\n * Format ID for display, showing the type\n */\nexport function formatIdForDisplay(id: string): string {\n const idType = detectIdType(id);\n return idType === 'run' ? `Run ${id}` : `Workflow ${id}`;\n}\n","/**\n * refly workflow toolcalls - Get all tool calls for workflow execution\n *\n * Supports both workflowId (c-xxx) and runId (we-xxx).\n * - workflowId: gets tool calls for the latest run\n * - runId: gets tool calls for the specific 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';\nimport { buildWorkflowApiUrl, detectIdType } from './utils.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 workflowId: 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 workflowToolcallsCommand = new Command('toolcalls')\n .description('Get all tool calls for workflow execution')\n .argument('<id>', 'Workflow ID (c-xxx) or Run ID (we-xxx)')\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 (id, 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 // Auto-detect ID type and build appropriate URL\n const idType = detectIdType(id);\n const url = buildWorkflowApiUrl(id, 'toolcalls', params);\n const result = await apiRequest<WorkflowToolCallsResponse>(url);\n\n ok('workflow.toolcalls', {\n runId: result.runId,\n workflowId: result.workflowId,\n idType,\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 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 workflow nodes - List all nodes in 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 NodeData {\n id: string;\n type: string;\n data?: {\n title?: string;\n metadata?: Record<string, unknown>;\n [key: string]: unknown;\n };\n position?: { x: number; y: number };\n}\n\ninterface EdgeData {\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n}\n\ninterface WorkflowData {\n workflowId: string;\n name: string;\n nodes: NodeData[];\n edges: EdgeData[];\n}\n\nexport const workflowNodesCommand = new Command('nodes')\n .description('List all nodes in a workflow')\n .argument('<workflowId>', 'Workflow ID')\n .option('--include-edges', 'Include edge/connection information')\n .option('--include-position', 'Include node position coordinates')\n .option('--include-metadata', 'Include full node metadata')\n .action(async (workflowId, options) => {\n try {\n const result = await apiRequest<WorkflowData>(`/v1/cli/workflow/${workflowId}`);\n\n // Format nodes for output\n const nodes = result.nodes.map((node) => {\n const output: Record<string, unknown> = {\n id: node.id,\n type: node.type,\n title: node.data?.title || node.data?.metadata?.title || undefined,\n };\n\n if (options.includePosition && node.position) {\n output.position = node.position;\n }\n\n if (options.includeMetadata && node.data?.metadata) {\n output.metadata = node.data.metadata;\n }\n\n return output;\n });\n\n const output: Record<string, unknown> = {\n workflowId: result.workflowId,\n workflowName: result.name,\n nodeCount: nodes.length,\n nodes,\n };\n\n if (options.includeEdges && result.edges?.length) {\n output.edges = result.edges.map((edge) => ({\n id: edge.id,\n source: edge.source,\n target: edge.target,\n sourceHandle: edge.sourceHandle,\n targetHandle: edge.targetHandle,\n }));\n output.edgeCount = result.edges.length;\n }\n\n ok('workflow.nodes', 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 workflow nodes',\n );\n }\n });\n","/**\n * refly workflow node - Get single node information from a workflow\n *\n * Supports both workflowId (c-xxx) and runId (we-xxx).\n * - workflowId: gets node definition from workflow\n * - runId: gets node definition from the workflow associated with the 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';\nimport { detectIdType } from './utils.js';\n\ninterface NodeData {\n id: string;\n type: string;\n data?: {\n title?: string;\n metadata?: Record<string, unknown>;\n [key: string]: unknown;\n };\n position?: { x: number; y: number };\n}\n\ninterface EdgeData {\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n}\n\ninterface WorkflowData {\n workflowId: string;\n name: string;\n nodes: NodeData[];\n edges: EdgeData[];\n}\n\nexport const workflowNodeGetCommand = new Command('node')\n .description('Get single node information from a workflow')\n .argument('<id>', 'Workflow ID (c-xxx) or Run ID (we-xxx)')\n .argument('<nodeId>', 'Node ID')\n .option('--include-connections', 'Include incoming and outgoing connections')\n .action(async (id, nodeId, options) => {\n try {\n // Auto-detect ID type\n const idType = detectIdType(id);\n\n // For runId, we need to first get the workflowId from the run\n let workflowId = id;\n if (idType === 'run') {\n // Get run info to extract workflowId\n const runInfo = await apiRequest<{ workflowId: string }>(`/v1/cli/workflow/run/${id}`);\n workflowId = runInfo.workflowId;\n }\n\n const result = await apiRequest<WorkflowData>(`/v1/cli/workflow/${workflowId}`);\n\n // Find the specific node\n const node = result.nodes.find((n) => n.id === nodeId);\n\n if (!node) {\n fail(ErrorCodes.NODE_NOT_FOUND, `Node ${nodeId} not found in workflow ${workflowId}`, {\n hint: `Use 'refly workflow nodes ${id}' to list all nodes`,\n });\n }\n\n // Build output\n const output: Record<string, unknown> = {\n workflowId: result.workflowId,\n workflowName: result.name,\n idType,\n ...(idType === 'run' ? { runId: id } : {}),\n node: {\n id: node.id,\n type: node.type,\n title: node.data?.title || node.data?.metadata?.title || undefined,\n position: node.position,\n metadata: node.data?.metadata || {},\n data: node.data,\n },\n };\n\n // Find connections if requested\n if (options.includeConnections && result.edges?.length) {\n const incoming = result.edges\n .filter((e) => e.target === nodeId)\n .map((e) => ({\n from: e.source,\n sourceHandle: e.sourceHandle,\n targetHandle: e.targetHandle,\n }));\n\n const outgoing = result.edges\n .filter((e) => e.source === nodeId)\n .map((e) => ({\n to: e.target,\n sourceHandle: e.sourceHandle,\n targetHandle: e.targetHandle,\n }));\n\n output.connections = {\n incoming,\n outgoing,\n incomingCount: incoming.length,\n outgoingCount: outgoing.length,\n };\n }\n\n ok('workflow.node', 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 information',\n );\n }\n });\n","/**\n * refly workflow node-output - Get node execution output content\n *\n * Supports both workflowId (c-xxx) and runId (we-xxx).\n * - workflowId: gets output for the latest run\n * - runId: gets output for the specific run\n *\n * This command retrieves the actual execution result/content of a node,\n * not just its definition.\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 { buildWorkflowApiUrl, detectIdType } from './utils.js';\n\ninterface NodeOutputResponse {\n runId: string;\n workflowId: string;\n nodeId: string;\n nodeTitle: string;\n nodeType: string;\n status: 'waiting' | 'executing' | 'finish' | 'failed';\n content?: string;\n contentType?: string;\n outputTokens?: number;\n toolCalls?: Array<{\n callId: string;\n toolName: string;\n status: string;\n output?: unknown;\n }>;\n error?: {\n type: string;\n message: string;\n };\n timing?: {\n startTime?: string;\n endTime?: string;\n durationMs?: number;\n };\n}\n\nexport const workflowNodeOutputCommand = new Command('node-output')\n .description('Get node execution output content')\n .argument('<id>', 'Workflow ID (c-xxx) or Run ID (we-xxx)')\n .argument('<nodeId>', 'Node ID')\n .option('--include-tool-calls', 'Include tool call details in output')\n .option('--raw', 'Output raw content without formatting')\n .action(async (id, nodeId, options) => {\n try {\n const params = new URLSearchParams();\n if (options.includeToolCalls) {\n params.set('includeToolCalls', 'true');\n }\n if (options.raw) {\n params.set('raw', 'true');\n }\n\n // Auto-detect ID type and build appropriate URL\n const idType = detectIdType(id);\n const url = buildWorkflowApiUrl(id, `node/${nodeId}/output`, params);\n const result = await apiRequest<NodeOutputResponse>(url);\n\n ok('workflow.nodeOutput', {\n runId: result.runId,\n workflowId: result.workflowId,\n idType,\n node: {\n id: result.nodeId,\n title: result.nodeTitle,\n type: result.nodeType,\n status: result.status,\n },\n output: {\n content: result.content,\n contentType: result.contentType,\n outputTokens: result.outputTokens,\n },\n toolCalls: result.toolCalls,\n error: result.error,\n timing: result.timing,\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 output',\n {\n hint: 'Ensure the node has completed execution. Use `refly workflow status <id>` to check.',\n },\n );\n }\n });\n","/**\n * refly workflow patch - Apply semantic patch operations to a workflow plan\n *\n * Unlike `workflow edit` which operates on low-level canvas nodes/edges,\n * `workflow patch` operates on semantic WorkflowPlan (tasks, variables).\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\n\ninterface WorkflowPatchOperation {\n op:\n | 'updateTitle'\n | 'createTask'\n | 'updateTask'\n | 'deleteTask'\n | 'createVariable'\n | 'updateVariable'\n | 'deleteVariable';\n title?: string;\n taskId?: string;\n task?: {\n id: string;\n title: string;\n prompt: string;\n dependentTasks?: string[];\n toolsets: string[];\n };\n variableId?: string;\n variable?: {\n variableId: string;\n variableType?: 'string' | 'resource';\n name: string;\n description: string;\n required?: boolean;\n value?: Array<{ type?: string; text?: string }>;\n };\n data?: {\n title?: string;\n prompt?: string;\n dependentTasks?: string[];\n toolsets?: string[];\n variableType?: 'string' | 'resource';\n name?: string;\n description?: string;\n required?: boolean;\n value?: Array<{ type?: string; text?: string }>;\n };\n}\n\ninterface PatchWorkflowPlanRequest {\n planId: string;\n operations: WorkflowPatchOperation[];\n}\n\ninterface WorkflowPlan {\n title: string;\n tasks: Array<{\n id: string;\n title: string;\n prompt: string;\n dependentTasks?: string[];\n toolsets: string[];\n }>;\n variables: Array<{\n variableId: string;\n variableType?: string;\n name: string;\n description: string;\n required?: boolean;\n value?: unknown[];\n }>;\n}\n\ninterface PatchWorkflowPlanResponse {\n success: boolean;\n data: WorkflowPlan;\n}\n\nexport const workflowPatchCommand = new Command('patch')\n .description('Apply semantic patch operations to a workflow plan')\n .argument('<planId>', 'Workflow Plan ID')\n .option('--ops <json>', 'Operations array as JSON')\n .option('--ops-file <path>', 'Read operations from file')\n .option('--update-title <title>', 'Shortcut: update workflow title')\n .option('--delete-task <taskId>', 'Shortcut: delete a task')\n .option('--delete-variable <variableId>', 'Shortcut: delete a variable')\n .action(async (planId, options) => {\n try {\n // Build operations array from options\n const operations: WorkflowPatchOperation[] = [];\n\n // Handle --ops-file\n if (options.opsFile) {\n try {\n const filePath = options.opsFile;\n if (!fs.existsSync(filePath)) {\n fail(ErrorCodes.NOT_FOUND, `Operations file not found: ${filePath}`);\n }\n const fileContent = fs.readFileSync(filePath, 'utf-8');\n const fileOps = JSON.parse(fileContent);\n if (Array.isArray(fileOps)) {\n operations.push(...fileOps);\n } else {\n fail(ErrorCodes.INVALID_INPUT, 'Operations file must contain a JSON array');\n }\n } catch (error) {\n if (error instanceof CLIError) throw error;\n fail(\n ErrorCodes.INVALID_INPUT,\n `Failed to parse operations file: ${(error as Error).message}`,\n );\n }\n }\n\n // Handle --ops\n if (options.ops) {\n try {\n const jsonOps = JSON.parse(options.ops);\n if (Array.isArray(jsonOps)) {\n operations.push(...jsonOps);\n } else {\n fail(ErrorCodes.INVALID_INPUT, '--ops must be a JSON array');\n }\n } catch (error) {\n fail(ErrorCodes.INVALID_INPUT, `Invalid JSON in --ops: ${(error as Error).message}`, {\n hint: 'Ensure the operations are a valid JSON array',\n });\n }\n }\n\n // Handle shortcut options\n if (options.updateTitle) {\n operations.push({\n op: 'updateTitle',\n title: options.updateTitle,\n });\n }\n\n if (options.deleteTask) {\n operations.push({\n op: 'deleteTask',\n taskId: options.deleteTask,\n });\n }\n\n if (options.deleteVariable) {\n operations.push({\n op: 'deleteVariable',\n variableId: options.deleteVariable,\n });\n }\n\n // Validate at least one operation\n if (operations.length === 0) {\n fail(ErrorCodes.INVALID_INPUT, 'No operations provided', {\n hint: 'Use --ops, --ops-file, or shortcut options (--update-title, --delete-task, --delete-variable)',\n });\n }\n\n // Call API\n const body: PatchWorkflowPlanRequest = {\n planId,\n operations,\n };\n\n const response = await apiRequest<PatchWorkflowPlanResponse>('/v1/cli/workflow-plan/patch', {\n method: 'POST',\n body,\n });\n\n // Extract plan from response (API returns { success: true, data: plan })\n const plan = response.data ?? response;\n\n ok('workflow.patch', {\n planId,\n operationsApplied: operations.length,\n plan: {\n title: plan.title,\n taskCount: plan.tasks?.length ?? 0,\n variableCount: plan.variables?.length ?? 0,\n tasks: plan.tasks?.map((t) => ({\n id: t.id,\n title: t.title,\n })),\n variables: plan.variables?.map((v) => ({\n variableId: v.variableId,\n name: v.name,\n })),\n },\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to patch workflow plan',\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/tool-call?${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/tool-call/${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';\nimport { fileUploadCommand } from './upload.js';\n\nexport const fileCommand = new Command('file')\n .description('Manage files and documents')\n .addCommand(fileListCommand)\n .addCommand(fileGetCommand)\n .addCommand(fileDownloadCommand)\n .addCommand(fileUploadCommand);\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","/**\n * refly file upload - Upload file(s) to a canvas\n * Uses presigned URL flow: presign -> PUT to OSS -> confirm\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { ok, fail, ErrorCodes, isPrettyOutput } from '../../utils/output.js';\nimport { apiUploadDriveFile, type DriveFileUploadResult } from '../../api/client.js';\nimport { CLIError } from '../../utils/errors.js';\nimport { getFormatter } from '../../utils/formatter.js';\n\nconst MAX_FILES = 10;\n\n/**\n * Format file size for display\n */\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\nexport const fileUploadCommand = new Command('upload')\n .description('Upload file(s) to a canvas')\n .argument('<path>', 'File or directory path')\n .requiredOption('--canvas-id <id>', 'Canvas ID (required)')\n .option('--filter <extensions>', 'Filter by extensions (e.g., pdf,docx,png)')\n .action(async (inputPath: string, options: { canvasId: string; filter?: string }) => {\n const formatter = getFormatter();\n\n try {\n // Resolve and validate path\n const resolvedPath = path.resolve(inputPath);\n\n if (!fs.existsSync(resolvedPath)) {\n fail(ErrorCodes.NOT_FOUND, `Path not found: ${inputPath}`, {\n hint: 'Check if the file or directory exists',\n });\n }\n\n // Get list of files to upload\n const files = resolveFilesToUpload(resolvedPath, options.filter);\n\n if (files.length === 0) {\n fail(ErrorCodes.NOT_FOUND, 'No files found to upload', {\n hint: options.filter\n ? `No files matching filter: ${options.filter}`\n : 'Directory is empty or contains no files',\n });\n }\n\n if (isPrettyOutput()) {\n console.log(`Found ${files.length} file(s) to upload`);\n }\n\n // Upload files sequentially\n const results: DriveFileUploadResult[] = [];\n const errors: Array<{ file: string; error: string }> = [];\n\n for (let i = 0; i < files.length; i++) {\n const filePath = files[i];\n const filename = path.basename(filePath);\n const fileStats = fs.statSync(filePath);\n const sizeStr = formatSize(fileStats.size);\n\n // Track current stage for progress display\n let currentStage: 'presign' | 'upload' | 'confirm' = 'presign';\n\n const updateProgress = () => {\n if (!isPrettyOutput()) return;\n\n let stageText: string;\n switch (currentStage) {\n case 'presign':\n stageText = `Getting upload URL for ${filename}...`;\n break;\n case 'upload':\n stageText = `Uploading ${filename} (${sizeStr})...`;\n break;\n case 'confirm':\n stageText = 'Confirming upload...';\n break;\n }\n formatter.progress(`[${i + 1}/${files.length}] ${stageText}`);\n };\n\n updateProgress();\n\n try {\n const result = await apiUploadDriveFile(filePath, options.canvasId, {\n onProgress: (stage) => {\n currentStage = stage;\n updateProgress();\n },\n });\n results.push(result);\n\n if (isPrettyOutput()) {\n formatter.clearProgress();\n console.log(\n `[${i + 1}/${files.length}] Uploading ${filename} (${sizeStr})... ✓ ${result.fileId}`,\n );\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'Unknown error';\n errors.push({ file: filename, error: errorMsg });\n\n if (isPrettyOutput()) {\n formatter.clearProgress();\n console.log(\n `[${i + 1}/${files.length}] Uploading ${filename} (${sizeStr})... ✗ ${errorMsg}`,\n );\n }\n }\n }\n\n formatter.clearProgress();\n\n // Determine exit status and message\n if (results.length === 0) {\n // All failed\n fail(ErrorCodes.INTERNAL_ERROR, 'All uploads failed', {\n details: { errors },\n hint: 'Check file permissions and network connection',\n });\n }\n\n // At least one success - show summary\n const message =\n errors.length > 0\n ? `Uploaded ${results.length} of ${files.length} file(s)`\n : `Successfully uploaded ${results.length} file(s)`;\n\n ok('file.upload', {\n message,\n canvasId: options.canvasId,\n uploaded: results.length,\n failed: errors.length,\n files: results.map((r) => ({\n fileId: r.fileId,\n name: r.name,\n type: r.type,\n size: r.size,\n })),\n ...(errors.length > 0 && { 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 upload files',\n );\n }\n });\n\n/**\n * Resolve files to upload from a path.\n * - Single file: returns [filePath]\n * - Directory: returns up to MAX_FILES files, sorted by size (ascending)\n */\nfunction resolveFilesToUpload(inputPath: string, filter?: string): string[] {\n const stats = fs.statSync(inputPath);\n\n if (stats.isFile()) {\n // Single file - check filter if specified\n if (filter) {\n const filterExts = filter.split(',').map((e) => e.trim().toLowerCase());\n const ext = path.extname(inputPath).slice(1).toLowerCase();\n if (!filterExts.includes(ext)) {\n return []; // File doesn't match filter\n }\n }\n return [inputPath];\n }\n\n if (stats.isDirectory()) {\n const entries = fs.readdirSync(inputPath);\n const filterExts = filter?.split(',').map((e) => e.trim().toLowerCase());\n\n const files = entries\n .map((e) => path.join(inputPath, e))\n .filter((p) => {\n try {\n return fs.statSync(p).isFile();\n } catch {\n return false;\n }\n })\n .filter((p) => {\n if (!filterExts) return true;\n const ext = path.extname(p).slice(1).toLowerCase();\n return filterExts.includes(ext);\n })\n // Sort by file size ascending (smaller files first)\n .sort((a, b) => {\n try {\n return fs.statSync(a).size - fs.statSync(b).size;\n } catch {\n return 0;\n }\n })\n .slice(0, MAX_FILES);\n\n return files;\n }\n\n return [];\n}\n","/**\n * refly skill - Skill command group\n *\n * Manages skill packages (cloud) and local skills.\n */\n\nimport { Command } from 'commander';\nimport { skillListCommand } from './list.js';\nimport { skillGetCommand } from './get.js';\nimport { skillCreateCommand } from './create.js';\nimport { skillDeleteCommand } from './delete.js';\nimport { skillPublishCommand } from './publish.js';\nimport { skillUnpublishCommand } from './unpublish.js';\nimport { skillRunCommand } from './run.js';\nimport { skillSearchCommand } from './search.js';\nimport { skillInstallCommand } from './install.js';\nimport { skillUninstallCommand } from './uninstall.js';\nimport { skillInstallationsCommand } from './installations.js';\nimport { skillValidateCommand } from './validate.js';\nimport { skillSyncCommand } from './sync.js';\n\nexport const skillCommand = new Command('skill')\n .description('Manage skill packages and local skills')\n // Skill management\n .addCommand(skillListCommand)\n .addCommand(skillGetCommand)\n .addCommand(skillCreateCommand)\n .addCommand(skillDeleteCommand)\n .addCommand(skillPublishCommand)\n .addCommand(skillUnpublishCommand)\n // Skill discovery\n .addCommand(skillSearchCommand)\n // Skill installation (cloud skills)\n .addCommand(skillInstallCommand)\n .addCommand(skillUninstallCommand)\n .addCommand(skillInstallationsCommand)\n // Skill execution\n .addCommand(skillRunCommand)\n // Skill validation (local skills)\n .addCommand(skillValidateCommand)\n // Skill registry sync\n .addCommand(skillSyncCommand);\n","/**\n * refly skill list - List all skill packages\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 SkillPackageSummary {\n skillId: string;\n name: string;\n version: string;\n description?: string;\n status: string;\n isPublic: boolean;\n downloadCount: number;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const skillListCommand = new Command('list')\n .description('List skill packages')\n .option('--status <status>', 'Filter by status (draft, published, deprecated)')\n .option('--mine', 'Show only my skill packages')\n .option('--tags <tags>', 'Filter by tags (comma-separated)')\n .option('--page <number>', 'Page number', '1')\n .option('--page-size <number>', 'Page size', '20')\n .action(async (options) => {\n try {\n const params = new URLSearchParams();\n if (options.status) params.set('status', options.status);\n if (options.mine) params.set('mine', 'true');\n if (options.tags) params.set('tags', options.tags);\n params.set('page', options.page);\n params.set('pageSize', options.pageSize);\n\n const result = await apiRequest<{\n items: SkillPackageSummary[];\n total: number;\n page: number;\n pageSize: number;\n hasMore: boolean;\n }>(`/v1/skill-packages?${params.toString()}`);\n\n ok('skill.list', {\n skills: result.items.map((s) => ({\n skillId: s.skillId,\n name: s.name,\n version: s.version,\n description: s.description,\n status: s.status,\n isPublic: s.isPublic,\n downloadCount: s.downloadCount,\n createdAt: s.createdAt,\n })),\n total: result.total,\n page: result.page,\n pageSize: result.pageSize,\n hasMore: result.hasMore,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to list skill packages',\n );\n }\n });\n","/**\n * refly skill get - Get skill package 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 SkillPackageDetail {\n skillId: string;\n name: string;\n version: string;\n description?: string;\n uid: string;\n triggers: string[];\n tags: string[];\n status: string;\n isPublic: boolean;\n downloadCount: number;\n shareId?: string;\n createdAt: string;\n updatedAt: string;\n workflows?: Array<{\n skillWorkflowId: string;\n name: string;\n description?: string;\n isEntry: boolean;\n }>;\n}\n\nexport const skillGetCommand = new Command('get')\n .description('Get skill package details')\n .argument('<skillId>', 'Skill package ID')\n .option('--include-workflows', 'Include workflow details')\n .option('--share-id <shareId>', 'Share ID for accessing private skills')\n .action(async (skillId, options) => {\n try {\n const params = new URLSearchParams();\n if (options.includeWorkflows) params.set('includeWorkflows', 'true');\n if (options.shareId) params.set('shareId', options.shareId);\n\n const queryString = params.toString();\n const url = queryString\n ? `/v1/skill-packages/${skillId}?${queryString}`\n : `/v1/skill-packages/${skillId}`;\n\n const result = await apiRequest<SkillPackageDetail>(url);\n\n ok('skill.get', {\n skill: {\n skillId: result.skillId,\n name: result.name,\n version: result.version,\n description: result.description,\n triggers: result.triggers,\n tags: result.tags,\n status: result.status,\n isPublic: result.isPublic,\n downloadCount: result.downloadCount,\n shareId: result.shareId,\n createdAt: result.createdAt,\n updatedAt: result.updatedAt,\n workflows: result.workflows,\n },\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to get skill package',\n );\n }\n });\n","/**\n * refly skill create - Create a new skill package\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { apiRequest } from '../../api/client.js';\nimport { getWebUrl } from '../../config/config.js';\nimport { CLIError } from '../../utils/errors.js';\nimport { syncCloudSkillToLocal, skillExists } from '../../skill/storage.js';\nimport { addSkill, findSkill } from '../../skill/registry.js';\nimport { logger } from '../../utils/logger.js';\n\ninterface CreateSkillPayload {\n skillId: string;\n name: string;\n status: string;\n createdAt: string;\n workflowId?: string;\n workflowIds?: string[];\n workflows?: Array<{\n workflowId: string;\n name?: string;\n description?: string;\n }>;\n}\n\ninterface CreateSkillResponse {\n ok: boolean;\n type: string;\n version: string;\n payload: CreateSkillPayload;\n}\n\nexport const skillCreateCommand = new Command('create')\n .description('Create a new skill package with workflow')\n .requiredOption('--name <name>', 'Skill package name')\n .option('--version <version>', 'Semantic version', '1.0.0')\n .option('--description <description>', 'Skill description')\n .option('--triggers <triggers>', 'Trigger phrases (comma-separated)')\n .option('--tags <tags>', 'Category tags (comma-separated)')\n .option('--workflow <workflowId>', 'Bind existing workflow ID')\n .option('--workflow-ids <workflowIds>', 'Bind multiple workflow IDs (comma-separated)')\n .option('--workflow-spec <json>', 'Workflow spec JSON (structured)')\n .option('--workflow-query <query>', 'Natural language workflow description (be specific)')\n .option('--verbose', 'Include workflow details in output')\n .action(async (options) => {\n try {\n // Validate: must provide at least one workflow option\n const hasWorkflowOption =\n options.workflow || options.workflowIds || options.workflowSpec || options.workflowQuery;\n\n if (!hasWorkflowOption) {\n ok('skill.create.needs_workflow', {\n status: 'pending',\n name: options.name,\n message: 'Skill requires a workflow definition. Please provide more details.',\n questions: [\n 'What should this skill do? Please describe the workflow functionality in detail.',\n 'Or do you have an existing workflow ID to bind to this skill?',\n ],\n options: {\n bindExisting: '--workflow <workflowId>',\n generateNew: '--workflow-query \"<detailed description>\"',\n },\n example:\n 'refly skill create --name \"web-search\" --workflow-query \"Search the web for a given topic using Exa, then summarize the top 5 results into a markdown document\"',\n });\n return;\n }\n\n const input: Record<string, unknown> = {\n name: options.name,\n version: options.version,\n };\n\n if (options.description) input.description = options.description;\n if (options.triggers)\n input.triggers = options.triggers.split(',').map((t: string) => t.trim());\n if (options.tags) input.tags = options.tags.split(',').map((t: string) => t.trim());\n if (options.workflow) input.workflowId = options.workflow;\n if (options.workflowIds) {\n input.workflowIds = options.workflowIds\n .split(',')\n .map((t: string) => t.trim())\n .filter(Boolean);\n }\n if (options.workflowSpec) {\n input.workflowSpec = JSON.parse(options.workflowSpec);\n }\n if (options.workflowQuery) input.workflowQuery = options.workflowQuery;\n\n const response = await apiRequest<CreateSkillResponse>('/v1/cli/skill-packages', {\n method: 'POST',\n body: input,\n });\n\n // Extract payload from wrapped CLI response\n const result = response.payload;\n\n // Sync to local domain skill if workflow was created\n let localSkillPath: string | undefined;\n if (result.workflowId) {\n try {\n // Normalize skill name for local file system (lowercase, hyphens)\n const localName = options.name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n\n // Check if local skill already exists\n if (findSkill(localName) || skillExists(localName)) {\n logger.debug(`Local skill '${localName}' already exists, skipping sync`);\n } else {\n // Create local skill.md and registry entry\n const { filePath, registryEntry } = syncCloudSkillToLocal({\n name: localName,\n description: (input.description as string) || `Skill: ${options.name}`,\n workflowId: result.workflowId,\n triggers: input.triggers as string[] | undefined,\n tags: input.tags as string[] | undefined,\n version: options.version,\n skillId: result.skillId,\n });\n\n // Add to registry\n addSkill(registryEntry);\n localSkillPath = filePath;\n logger.info(`Created local domain skill: ${localName}`);\n }\n } catch (syncError) {\n // Log but don't fail - cloud skill was created successfully\n logger.warn(`Failed to sync to local: ${(syncError as Error).message}`);\n }\n }\n\n const payload: Record<string, unknown> = {\n skillId: result.skillId,\n name: result.name,\n status: result.status,\n createdAt: result.createdAt,\n workflowId: result.workflowId,\n url: `${getWebUrl()}/skill/${result.skillId}`,\n };\n\n if (localSkillPath) {\n payload.localSkillPath = localSkillPath;\n }\n\n if (options.verbose) {\n payload.workflowIds = result.workflowIds;\n payload.workflows = result.workflows;\n }\n\n ok('skill.create', payload);\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to create skill package',\n );\n }\n });\n","/**\n * Skill storage module - file system operations for skill files.\n *\n * Directory structure:\n * ~/.claude/skills/refly/\n * ├── SKILL.md\n * ├── registry.json\n * ├── references/\n * └── domain-skills/\n * └── <skill-name>/\n * └── skill.md\n *\n * Implements:\n * - getSkillDir(name) - Get skill directory path\n * - skillExists(name) - Check if skill directory exists\n * - createSkillDir(name) - Create skill directory\n * - deleteSkillDir(name) - Remove skill directory\n * - writeSkillFile(name, content) - Write skill.md\n * - readSkillFile(name) - Read skill.md content\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { getClaudeSkillDir, ensureDir } from '../config/paths.js';\nimport { logger } from '../utils/logger.js';\nimport { SkillErrorCode, createSkillError, isValidSkillName } from './types.js';\n\n/**\n * Get the domain-skills directory path.\n */\nexport function getDomainSkillsDir(): string {\n return path.join(getClaudeSkillDir(), 'domain-skills');\n}\n\n/**\n * Get the skill directory path for a given skill name.\n * Returns: ~/.claude/skills/refly/domain-skills/<skill-name>\n */\nexport function getSkillDir(name: string): string {\n if (!isValidSkillName(name)) {\n throw createSkillError(SkillErrorCode.INVALID_NAME, `Invalid skill name: ${name}`, {\n suggestions: [\n 'Skill name must match pattern ^[a-z0-9]([a-z0-9-]*[a-z0-9])?$',\n 'Use lowercase letters, numbers, and hyphens only',\n 'Name must be 1-64 characters',\n ],\n });\n }\n return path.join(getDomainSkillsDir(), name);\n}\n\n/**\n * Get the skill.md file path for a given skill name.\n * Returns: ~/.claude/skills/refly/domain-skills/<skill-name>/skill.md\n */\nexport function getSkillFilePath(name: string): string {\n return path.join(getSkillDir(name), 'skill.md');\n}\n\n/**\n * Get the relative path for a skill (used in registry).\n * Returns: domain-skills/<skill-name>\n */\nexport function getSkillRelativePath(name: string): string {\n return `domain-skills/${name}`;\n}\n\n/**\n * Check if a skill directory exists.\n */\nexport function skillExists(name: string): boolean {\n try {\n const skillDir = getSkillDir(name);\n return fs.existsSync(skillDir);\n } catch {\n return false;\n }\n}\n\n/**\n * Check if a skill.md file exists.\n */\nexport function skillFileExists(name: string): boolean {\n try {\n const skillFile = getSkillFilePath(name);\n return fs.existsSync(skillFile);\n } catch {\n return false;\n }\n}\n\n/**\n * Create a skill directory.\n * Ensures domain-skills parent directory exists.\n */\nexport function createSkillDir(name: string): string {\n const skillDir = getSkillDir(name);\n const domainSkillsDir = getDomainSkillsDir();\n\n // Ensure parent directories exist\n ensureDir(domainSkillsDir);\n\n // Check if directory already exists\n if (fs.existsSync(skillDir)) {\n throw createSkillError(SkillErrorCode.SKILL_EXISTS, `Skill directory already exists: ${name}`, {\n suggestions: ['Choose a different name or delete the existing skill first'],\n });\n }\n\n // Create skill directory\n fs.mkdirSync(skillDir, { recursive: true, mode: 0o755 });\n logger.debug(`Created skill directory: ${skillDir}`);\n\n return skillDir;\n}\n\n/**\n * Delete a skill directory and all its contents.\n * Returns true if deleted, false if not found.\n */\nexport function deleteSkillDir(name: string): boolean {\n const skillDir = getSkillDir(name);\n\n if (!fs.existsSync(skillDir)) {\n logger.debug(`Skill directory not found: ${skillDir}`);\n return false;\n }\n\n // Remove directory recursively\n fs.rmSync(skillDir, { recursive: true, force: true });\n logger.info(`Deleted skill directory: ${skillDir}`);\n\n return true;\n}\n\n/**\n * Write skill.md content to a skill directory.\n * Creates the skill directory if it doesn't exist.\n */\nexport function writeSkillFile(name: string, content: string): string {\n const skillDir = getSkillDir(name);\n const skillFile = getSkillFilePath(name);\n\n // Ensure skill directory exists\n if (!fs.existsSync(skillDir)) {\n createSkillDir(name);\n }\n\n // Write skill.md file\n fs.writeFileSync(skillFile, content, { encoding: 'utf-8', mode: 0o644 });\n logger.debug(`Wrote skill file: ${skillFile}`);\n\n return skillFile;\n}\n\n/**\n * Read skill.md content from a skill directory.\n * Throws if file doesn't exist.\n */\nexport function readSkillFile(name: string): string {\n const skillFile = getSkillFilePath(name);\n\n if (!fs.existsSync(skillFile)) {\n throw createSkillError(SkillErrorCode.SKILL_DIR_NOT_FOUND, `Skill file not found: ${name}`, {\n details: { path: skillFile },\n suggestions: [\n 'Check if the skill exists with `refly skill list`',\n 'Create a new skill with `refly skill create`',\n ],\n });\n }\n\n return fs.readFileSync(skillFile, 'utf-8');\n}\n\n/**\n * List all skill directories in domain-skills.\n * Returns array of skill names.\n */\nexport function listSkillDirectories(): string[] {\n const domainSkillsDir = getDomainSkillsDir();\n\n if (!fs.existsSync(domainSkillsDir)) {\n return [];\n }\n\n const entries = fs.readdirSync(domainSkillsDir, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .filter((name) => isValidSkillName(name));\n}\n\n/**\n * Find orphan skills (directories without registry entry).\n */\nexport function findOrphanSkillDirs(registeredNames: Set<string>): string[] {\n const allDirs = listSkillDirectories();\n return allDirs.filter((name) => !registeredNames.has(name));\n}\n\n/**\n * Initialize the domain-skills directory.\n * Used during `refly init`.\n */\nexport function initializeDomainSkillsDir(): boolean {\n const domainSkillsDir = getDomainSkillsDir();\n\n if (fs.existsSync(domainSkillsDir)) {\n logger.debug('Domain skills directory already exists');\n return false;\n }\n\n ensureDir(domainSkillsDir);\n logger.info('Initialized domain-skills directory');\n return true;\n}\n\n/**\n * Generate skill.md template content.\n */\nexport function generateSkillTemplate(options: {\n name: string;\n description: string;\n workflowId: string;\n triggers: string[];\n tags?: string[];\n author?: string;\n version?: string;\n}): string {\n const { name, description, workflowId, triggers, tags, author, version } = options;\n\n // Build frontmatter\n const frontmatterLines = [\n '---',\n `name: ${name}`,\n `description: ${description}`,\n `workflowId: ${workflowId}`,\n 'triggers:',\n ...triggers.map((t) => ` - ${t}`),\n ];\n\n if (tags && tags.length > 0) {\n frontmatterLines.push('tags:');\n frontmatterLines.push(...tags.map((t) => ` - ${t}`));\n }\n\n if (author) {\n frontmatterLines.push(`author: ${author}`);\n }\n\n if (version) {\n frontmatterLines.push(`version: ${version}`);\n }\n\n frontmatterLines.push('---');\n\n // Build content\n const titleName = name\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\n const content = `\n# ${titleName}\n\n## Overview\n\n${description}\n\n## Quick Start\n\n\\`\\`\\`bash\nrefly skill run ${name} --input '{}'\n\\`\\`\\`\n\n## Workflow\n\nThis skill executes workflow \\`${workflowId}\\`.\n\n## Input\n\nProvide input as JSON:\n\n\\`\\`\\`json\n{\n // Add your input parameters here\n}\n\\`\\`\\`\n\n## Output\n\nThe skill returns the workflow execution result.\n`;\n\n return frontmatterLines.join('\\n') + content;\n}\n\n/**\n * Sync a cloud skill to local domain skill.\n * Creates skill.md file and adds entry to registry.\n *\n * @param options - Cloud skill details\n * @returns Object with created file path and registry entry\n */\nexport function syncCloudSkillToLocal(options: {\n name: string;\n description: string;\n workflowId: string;\n triggers?: string[];\n tags?: string[];\n version?: string;\n skillId: string;\n}): { filePath: string; registryEntry: import('./types.js').SkillEntry } {\n const { name, description, workflowId, triggers = [], tags, version, skillId } = options;\n\n // Ensure we have at least one trigger\n const finalTriggers = triggers.length > 0 ? triggers : [name];\n\n // Generate skill.md content\n const content = generateSkillTemplate({\n name,\n description: description || `Skill: ${name}`,\n workflowId,\n triggers: finalTriggers,\n tags,\n version,\n });\n\n // Write skill.md file (creates directory if needed)\n const filePath = writeSkillFile(name, content);\n\n // Create registry entry\n const registryEntry: import('./types.js').SkillEntry = {\n name,\n description: description || `Skill: ${name}`,\n workflowId,\n triggers: finalTriggers,\n path: getSkillRelativePath(name),\n createdAt: new Date().toISOString(),\n source: 'refly-cloud',\n tags,\n version,\n skillId,\n };\n\n logger.info(`Synced cloud skill '${name}' to local: ${filePath}`);\n\n return { filePath, registryEntry };\n}\n","/**\n * Skill system TypeScript types for Refly CLI.\n *\n * Based on:\n * - execution-plan.md (Step 1.1)\n * - techinique_plan/04-typescript-interfaces.md\n */\n\n// ============================================================================\n// Registry Types\n// ============================================================================\n\n/**\n * Skill source type\n */\nexport type SkillSource = 'local' | 'refly-cloud';\n\n/**\n * Skill entry in the registry.\n * Lightweight version for listing and searching.\n *\n * Field requirements:\n * - name: Required, format: ^[a-z0-9]([a-z0-9-]*[a-z0-9])?$ (1-64 chars)\n * - description: Required, max 200 chars\n * - workflowId: Required, bound workflow ID\n * - triggers: Required, 1-10 intent matching phrases\n * - path: Required, relative path to skill directory\n * - createdAt: Required, ISO 8601 timestamp\n * - source: Required, 'local' or 'refly-cloud'\n * - tags: Optional, categorization tags\n * - author: Optional, skill author\n * - version: Optional, semver version\n * - updatedAt: Optional, last update timestamp\n */\nexport interface SkillEntry {\n /** Unique identifier (format: ^[a-z0-9]([a-z0-9-]*[a-z0-9])?$, 1-64 chars) */\n name: string;\n\n /** One-line description (max 200 chars) */\n description: string;\n\n /** Bound workflow ID */\n workflowId: string;\n\n /** Keywords/phrases that activate this skill (1-10 items) */\n triggers: string[];\n\n /** Relative path to skill directory (e.g., \"domain-skills/skill-name\") */\n path: string;\n\n /** Creation timestamp (ISO 8601) */\n createdAt: string;\n\n /** Skill source */\n source: SkillSource;\n\n // Optional fields\n\n /** Categorization tags */\n tags?: string[];\n\n /** Skill author */\n author?: string;\n\n /** Semantic version (x.y.z) */\n version?: string;\n\n /** Last update timestamp (ISO 8601) */\n updatedAt?: string;\n\n /** Cloud skill ID (for refly-cloud source) */\n skillId?: string;\n}\n\n/**\n * Skill registry root structure.\n * Stored at ~/.claude/skills/refly/registry.json\n */\nexport interface SkillRegistry {\n /** Registry schema version (currently 1) */\n version: number;\n\n /** Last update timestamp (ISO 8601) */\n updatedAt: string;\n\n /** Registered skills */\n skills: SkillEntry[];\n}\n\n// ============================================================================\n// Frontmatter Types\n// ============================================================================\n\n/**\n * Skill frontmatter parsed from skill.md YAML header.\n *\n * Example:\n * ```markdown\n * ---\n * name: my-skill\n * description: Does something useful\n * workflowId: wf_xxx\n * triggers:\n * - do something\n * - process data\n * ---\n * ```\n */\nexport interface SkillFrontmatter {\n /** Skill name (required) */\n name: string;\n\n /** Description (required) */\n description: string;\n\n /** Bound workflow ID (required) */\n workflowId: string;\n\n /** Trigger phrases (required, 1-10 items) */\n triggers: string[];\n\n // Optional fields\n\n /** Categorization tags */\n tags?: string[];\n\n /** Skill author */\n author?: string;\n\n /** Semantic version */\n version?: string;\n}\n\n/**\n * Loaded skill with frontmatter and content.\n */\nexport interface LoadedSkill {\n /** Parsed frontmatter */\n frontmatter: SkillFrontmatter;\n\n /** Markdown content after frontmatter */\n content: string;\n\n /** File path of the skill.md */\n filePath: string;\n}\n\n// ============================================================================\n// Search Types\n// ============================================================================\n\n/**\n * Match type for skill search results.\n */\nexport type SkillMatchType =\n | 'exact' // Exact name match (100 points)\n | 'trigger' // Full trigger match (80 points)\n | 'partial' // Partial trigger match (64 points)\n | 'description' // Description contains (60 points)\n | 'tag'; // Tag contains (40 points)\n\n/**\n * Skill search result with scoring.\n */\nexport interface SkillSearchResult {\n /** Matched skill entry */\n skill: SkillEntry;\n\n /** Match score (0-100) */\n score: number;\n\n /** How the skill was matched */\n matchType: SkillMatchType;\n}\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\n/**\n * Skill error codes for CLI commands.\n */\nexport enum SkillErrorCode {\n /** Skill not found in registry */\n SKILL_NOT_FOUND = 'SKILL_NOT_FOUND',\n\n /** Skill name already exists in registry */\n SKILL_EXISTS = 'SKILL_EXISTS',\n\n /** Bound workflow not found */\n WORKFLOW_NOT_FOUND = 'WORKFLOW_NOT_FOUND',\n\n /** Invalid input JSON or format */\n INVALID_INPUT = 'INVALID_INPUT',\n\n /** Registry file corrupted or unparseable */\n REGISTRY_CORRUPTED = 'REGISTRY_CORRUPTED',\n\n /** skill.md frontmatter parse failed */\n INVALID_FRONTMATTER = 'INVALID_FRONTMATTER',\n\n /** Skill name format invalid */\n INVALID_NAME = 'INVALID_NAME',\n\n /** Skill directory not found */\n SKILL_DIR_NOT_FOUND = 'SKILL_DIR_NOT_FOUND',\n\n /** General validation error */\n VALIDATION_ERROR = 'VALIDATION_ERROR',\n\n /** File system operation failed */\n FILE_ERROR = 'FILE_ERROR',\n\n /** Unknown error */\n UNKNOWN_ERROR = 'UNKNOWN_ERROR',\n}\n\n/**\n * Skill error with code and suggestions.\n */\nexport interface SkillError {\n /** Error code */\n code: SkillErrorCode;\n\n /** Human-readable error message */\n message: string;\n\n /** Additional error details */\n details?: Record<string, unknown>;\n\n /** Suggestions for resolving the error */\n suggestions?: string[];\n}\n\n// ============================================================================\n// Validation Types\n// ============================================================================\n\n/**\n * Validation issue found during skill validation.\n */\nexport interface ValidationIssue {\n /** Field or path with issue */\n path: string;\n\n /** Issue description */\n message: string;\n\n /** Current value (if applicable) */\n value?: unknown;\n\n /** Expected value or format (if applicable) */\n expected?: unknown;\n}\n\n/**\n * Validation result from `refly skill validate`.\n */\nexport interface ValidationResult {\n /** Overall validity */\n valid: boolean;\n\n /** Critical errors that must be fixed */\n errors: ValidationIssue[];\n\n /** Warnings that should be addressed */\n warnings: ValidationIssue[];\n\n /** Issues that were auto-fixed (when --fix is used) */\n fixed: ValidationIssue[];\n}\n\n// ============================================================================\n// CLI Command Types\n// ============================================================================\n\n/**\n * Skill list filter options.\n */\nexport interface SkillListFilter {\n /** Filter by tags */\n tags?: string[];\n\n /** Filter by source */\n source?: SkillSource;\n}\n\n/**\n * Create skill input options.\n */\nexport interface CreateSkillInput {\n /** Skill name (required if not auto-generated) */\n name?: string;\n\n /** Workflow ID to bind (required) */\n workflowId: string;\n\n /** Description (optional, can be auto-generated) */\n description?: string;\n\n /** Trigger phrases (optional, can be auto-generated) */\n triggers?: string[];\n\n /** Categorization tags */\n tags?: string[];\n\n /** Skill author */\n author?: string;\n\n /** Semantic version */\n version?: string;\n}\n\n/**\n * Skill run input.\n */\nexport interface SkillRunInput {\n /** Skill name */\n skillName: string;\n\n /** JSON input for the workflow */\n input: Record<string, unknown>;\n\n /** Run asynchronously */\n async?: boolean;\n\n /** Execution timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Skill run result.\n */\nexport interface SkillRunResult {\n /** Skill name */\n skillName: string;\n\n /** Workflow run ID */\n runId: string;\n\n /** Execution status */\n status: 'running' | 'finish' | 'failed';\n\n /** Result data (if completed) */\n result?: unknown;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Skill name validation regex.\n * Allows: lowercase letters, numbers, hyphens (not at start/end).\n * Supports single character names like \"a\".\n */\nexport const SKILL_NAME_REGEX = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;\n\n/**\n * Maximum skill name length.\n */\nexport const SKILL_NAME_MAX_LENGTH = 64;\n\n/**\n * Maximum description length.\n */\nexport const SKILL_DESCRIPTION_MAX_LENGTH = 200;\n\n/**\n * Minimum triggers count.\n */\nexport const SKILL_TRIGGERS_MIN = 1;\n\n/**\n * Maximum triggers count.\n */\nexport const SKILL_TRIGGERS_MAX = 10;\n\n/**\n * Current registry schema version.\n */\nexport const REGISTRY_VERSION = 1;\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Type guard for SkillEntry.\n */\nexport function isSkillEntry(obj: unknown): obj is SkillEntry {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n typeof (obj as SkillEntry).name === 'string' &&\n typeof (obj as SkillEntry).description === 'string' &&\n typeof (obj as SkillEntry).workflowId === 'string' &&\n Array.isArray((obj as SkillEntry).triggers) &&\n typeof (obj as SkillEntry).path === 'string' &&\n typeof (obj as SkillEntry).createdAt === 'string' &&\n typeof (obj as SkillEntry).source === 'string'\n );\n}\n\n/**\n * Type guard for SkillRegistry.\n */\nexport function isSkillRegistry(obj: unknown): obj is SkillRegistry {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n typeof (obj as SkillRegistry).version === 'number' &&\n typeof (obj as SkillRegistry).updatedAt === 'string' &&\n Array.isArray((obj as SkillRegistry).skills)\n );\n}\n\n/**\n * Type guard for SkillFrontmatter.\n */\nexport function isSkillFrontmatter(obj: unknown): obj is SkillFrontmatter {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n typeof (obj as SkillFrontmatter).name === 'string' &&\n typeof (obj as SkillFrontmatter).description === 'string' &&\n typeof (obj as SkillFrontmatter).workflowId === 'string' &&\n Array.isArray((obj as SkillFrontmatter).triggers)\n );\n}\n\n/**\n * Type guard for SkillError.\n */\nexport function isSkillError(obj: unknown): obj is SkillError {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n typeof (obj as SkillError).code === 'string' &&\n typeof (obj as SkillError).message === 'string'\n );\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Validate skill name format.\n */\nexport function isValidSkillName(name: string): boolean {\n return (\n typeof name === 'string' &&\n name.length >= 1 &&\n name.length <= SKILL_NAME_MAX_LENGTH &&\n SKILL_NAME_REGEX.test(name)\n );\n}\n\n/**\n * Create a SkillError object.\n */\nexport function createSkillError(\n code: SkillErrorCode,\n message: string,\n options?: { details?: Record<string, unknown>; suggestions?: string[] },\n): SkillError {\n return {\n code,\n message,\n details: options?.details,\n suggestions: options?.suggestions,\n };\n}\n\n// ============================================================================\n// Shared Validation Helpers\n// ============================================================================\n\n/**\n * Validate common skill fields (name, description, workflowId, triggers).\n * Used by both loader and registry validation.\n */\nexport function validateCommonSkillFields(\n data: Record<string, unknown>,\n issues: ValidationIssue[],\n): void {\n // Required: name\n if (typeof data.name !== 'string') {\n issues.push({ path: 'name', message: 'Name is required', value: data.name });\n } else if (!isValidSkillName(data.name)) {\n issues.push({\n path: 'name',\n message: `Name must match pattern ^[a-z0-9]([a-z0-9-]*[a-z0-9])?$ and be 1-${SKILL_NAME_MAX_LENGTH} chars`,\n value: data.name,\n });\n }\n\n // Required: description\n if (typeof data.description !== 'string') {\n issues.push({\n path: 'description',\n message: 'Description is required',\n value: data.description,\n });\n } else if (data.description.length > SKILL_DESCRIPTION_MAX_LENGTH) {\n issues.push({\n path: 'description',\n message: `Description must be <= ${SKILL_DESCRIPTION_MAX_LENGTH} chars`,\n value: data.description.length,\n });\n }\n\n // Required: workflowId\n if (typeof data.workflowId !== 'string' || data.workflowId.trim() === '') {\n issues.push({ path: 'workflowId', message: 'WorkflowId is required', value: data.workflowId });\n }\n\n // Required: triggers (array of 1-10 strings)\n validateTriggers(data.triggers, issues);\n}\n\n/**\n * Validate triggers array.\n */\nexport function validateTriggers(triggers: unknown, issues: ValidationIssue[]): void {\n if (!Array.isArray(triggers)) {\n issues.push({ path: 'triggers', message: 'Triggers must be an array', value: triggers });\n return;\n }\n\n if (triggers.length < SKILL_TRIGGERS_MIN || triggers.length > SKILL_TRIGGERS_MAX) {\n issues.push({\n path: 'triggers',\n message: `Triggers must have ${SKILL_TRIGGERS_MIN}-${SKILL_TRIGGERS_MAX} items`,\n value: triggers.length,\n });\n }\n\n for (let i = 0; i < triggers.length; i++) {\n if (typeof triggers[i] !== 'string' || (triggers[i] as string).trim() === '') {\n issues.push({\n path: `triggers[${i}]`,\n message: 'Each trigger must be a non-empty string',\n value: triggers[i],\n });\n }\n }\n}\n\n/**\n * Validate optional skill fields (tags, author, version).\n */\nexport function validateOptionalSkillFields(\n data: Record<string, unknown>,\n issues: ValidationIssue[],\n): void {\n // Optional: tags (array of strings if present)\n if (data.tags !== undefined) {\n if (!Array.isArray(data.tags)) {\n issues.push({ path: 'tags', message: 'Tags must be an array if provided', value: data.tags });\n } else {\n for (let i = 0; i < data.tags.length; i++) {\n if (typeof data.tags[i] !== 'string') {\n issues.push({\n path: `tags[${i}]`,\n message: 'Each tag must be a string',\n value: data.tags[i],\n });\n }\n }\n }\n }\n\n // Optional: author (string if present)\n if (data.author !== undefined && typeof data.author !== 'string') {\n issues.push({\n path: 'author',\n message: 'Author must be a string if provided',\n value: data.author,\n });\n }\n\n // Optional: version (string if present)\n if (data.version !== undefined && typeof data.version !== 'string') {\n issues.push({\n path: 'version',\n message: 'Version must be a string if provided',\n value: data.version,\n });\n }\n}\n","/**\n * Skill registry module - manages ~/.claude/skills/refly/registry.json\n *\n * Implements:\n * - readRegistry() - Load registry with validation\n * - writeRegistry() - Save with atomic write (temp + rename)\n * - findSkill(name) - Get skill by exact name\n * - addSkill(entry) - Add with uniqueness check\n * - removeSkill(name) - Remove by name\n * - updateSkill(name, updates) - Partial update\n * - validateRegistry() - Schema integrity check\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as crypto from 'node:crypto';\nimport { getClaudeSkillDir, ensureDir } from '../config/paths.js';\nimport { logger } from '../utils/logger.js';\nimport {\n type SkillEntry,\n type SkillRegistry,\n type ValidationIssue,\n SkillErrorCode,\n REGISTRY_VERSION,\n isSkillRegistry,\n createSkillError,\n validateCommonSkillFields,\n validateOptionalSkillFields,\n} from './types.js';\n\n/**\n * Get the registry file path.\n */\nexport function getRegistryPath(): string {\n return path.join(getClaudeSkillDir(), 'registry.json');\n}\n\n/**\n * Create an empty registry structure.\n */\nexport function createEmptyRegistry(): SkillRegistry {\n return {\n version: REGISTRY_VERSION,\n updatedAt: new Date().toISOString(),\n skills: [],\n };\n}\n\n/**\n * Read the registry from disk.\n * Returns an empty registry if file doesn't exist.\n * Throws if file exists but is corrupted.\n */\nexport function readRegistry(): SkillRegistry {\n const registryPath = getRegistryPath();\n\n if (!fs.existsSync(registryPath)) {\n logger.debug('Registry file not found, returning empty registry');\n return createEmptyRegistry();\n }\n\n try {\n const content = fs.readFileSync(registryPath, 'utf-8');\n const data = JSON.parse(content);\n\n if (!isSkillRegistry(data)) {\n throw createSkillError(SkillErrorCode.REGISTRY_CORRUPTED, 'Registry structure is invalid', {\n suggestions: ['Run `refly skill validate --fix` to repair the registry'],\n });\n }\n\n logger.debug(`Registry loaded with ${data.skills.length} skills`);\n return data;\n } catch (err) {\n if (err instanceof SyntaxError) {\n throw createSkillError(SkillErrorCode.REGISTRY_CORRUPTED, 'Registry JSON is malformed', {\n details: { error: err.message },\n suggestions: ['Run `refly skill validate --fix` to repair the registry'],\n });\n }\n throw err;\n }\n}\n\n/**\n * Write the registry to disk using atomic write (temp + rename).\n * This prevents corruption if write is interrupted.\n */\nexport function writeRegistry(registry: SkillRegistry): void {\n const registryPath = getRegistryPath();\n const registryDir = path.dirname(registryPath);\n\n // Ensure directory exists\n ensureDir(registryDir);\n\n // Update timestamp\n registry.updatedAt = new Date().toISOString();\n\n // Serialize with pretty printing\n const content = JSON.stringify(registry, null, 2);\n\n // Atomic write: write to temp file, then rename\n const tempPath = path.join(registryDir, `.registry-${crypto.randomUUID()}.tmp`);\n\n try {\n // Write to temporary file\n fs.writeFileSync(tempPath, content, { encoding: 'utf-8', mode: 0o600 });\n\n // Atomic rename\n fs.renameSync(tempPath, registryPath);\n\n logger.debug(`Registry saved with ${registry.skills.length} skills`);\n } catch (err) {\n // Clean up temp file if it exists\n try {\n if (fs.existsSync(tempPath)) {\n fs.unlinkSync(tempPath);\n }\n } catch {\n // Ignore cleanup errors\n }\n throw err;\n }\n}\n\n/**\n * Find a skill by exact name.\n * Returns null if not found.\n */\nexport function findSkill(name: string): SkillEntry | null {\n const registry = readRegistry();\n return registry.skills.find((s) => s.name === name) ?? null;\n}\n\n/**\n * Add a skill to the registry.\n * Throws if skill name already exists.\n */\nexport function addSkill(entry: SkillEntry): void {\n const registry = readRegistry();\n\n // Check for duplicate name\n if (registry.skills.some((s) => s.name === entry.name)) {\n throw createSkillError(SkillErrorCode.SKILL_EXISTS, `Skill '${entry.name}' already exists`, {\n suggestions: ['Choose a different name or use `refly skill delete` first'],\n });\n }\n\n // Validate entry\n const validationErrors = validateSkillEntry(entry);\n if (validationErrors.length > 0) {\n throw createSkillError(SkillErrorCode.VALIDATION_ERROR, 'Invalid skill entry', {\n details: { errors: validationErrors },\n suggestions: validationErrors.map((e) => e.message),\n });\n }\n\n // Add skill\n registry.skills.push(entry);\n writeRegistry(registry);\n\n logger.info(`Skill '${entry.name}' added to registry`);\n}\n\n/**\n * Remove a skill from the registry by name.\n * Returns true if removed, false if not found.\n */\nexport function removeSkill(name: string): boolean {\n const registry = readRegistry();\n const initialLength = registry.skills.length;\n\n registry.skills = registry.skills.filter((s) => s.name !== name);\n\n if (registry.skills.length === initialLength) {\n return false;\n }\n\n writeRegistry(registry);\n logger.info(`Skill '${name}' removed from registry`);\n return true;\n}\n\n/**\n * Update a skill in the registry.\n * Throws if skill not found.\n */\nexport function updateSkill(name: string, updates: Partial<Omit<SkillEntry, 'name'>>): SkillEntry {\n const registry = readRegistry();\n const index = registry.skills.findIndex((s) => s.name === name);\n\n if (index === -1) {\n throw createSkillError(SkillErrorCode.SKILL_NOT_FOUND, `Skill '${name}' not found`, {\n suggestions: ['Use `refly skill list` to see available skills'],\n });\n }\n\n // Merge updates\n const updatedEntry: SkillEntry = {\n ...registry.skills[index],\n ...updates,\n updatedAt: new Date().toISOString(),\n };\n\n // Validate updated entry\n const validationErrors = validateSkillEntry(updatedEntry);\n if (validationErrors.length > 0) {\n throw createSkillError(SkillErrorCode.VALIDATION_ERROR, 'Invalid skill update', {\n details: { errors: validationErrors },\n suggestions: validationErrors.map((e) => e.message),\n });\n }\n\n registry.skills[index] = updatedEntry;\n writeRegistry(registry);\n\n logger.info(`Skill '${name}' updated`);\n return updatedEntry;\n}\n\n/**\n * Validate a single skill entry.\n * Returns array of validation issues.\n */\nexport function validateSkillEntry(entry: unknown): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n if (!entry || typeof entry !== 'object') {\n issues.push({ path: '', message: 'Entry must be an object', value: entry });\n return issues;\n }\n\n const e = entry as Record<string, unknown>;\n\n // Validate common fields (name, description, workflowId, triggers)\n validateCommonSkillFields(e, issues);\n\n // Registry-specific required fields\n if (typeof e.path !== 'string' || e.path.trim() === '') {\n issues.push({ path: 'path', message: 'Path is required', value: e.path });\n }\n\n if (typeof e.createdAt !== 'string') {\n issues.push({ path: 'createdAt', message: 'CreatedAt is required', value: e.createdAt });\n }\n\n if (e.source !== 'local' && e.source !== 'refly-cloud') {\n issues.push({\n path: 'source',\n message: \"Source must be 'local' or 'refly-cloud'\",\n value: e.source,\n });\n }\n\n // Validate optional fields (tags, author, version)\n validateOptionalSkillFields(e, issues);\n\n return issues;\n}\n\n/**\n * Validate the entire registry.\n * Returns validation result with errors, warnings, and fixes.\n */\nexport function validateRegistry(): {\n valid: boolean;\n errors: ValidationIssue[];\n warnings: ValidationIssue[];\n} {\n const errors: ValidationIssue[] = [];\n const warnings: ValidationIssue[] = [];\n\n let registry: SkillRegistry;\n try {\n registry = readRegistry();\n } catch (err) {\n if ((err as { code?: string }).code === SkillErrorCode.REGISTRY_CORRUPTED) {\n errors.push({ path: '', message: 'Registry file is corrupted', value: err });\n return { valid: false, errors, warnings };\n }\n throw err;\n }\n\n // Check version\n if (registry.version !== REGISTRY_VERSION) {\n warnings.push({\n path: 'version',\n message: `Registry version ${registry.version} may be outdated`,\n expected: REGISTRY_VERSION,\n });\n }\n\n // Validate each skill\n const seenNames = new Set<string>();\n for (let i = 0; i < registry.skills.length; i++) {\n const skill = registry.skills[i];\n const skillIssues = validateSkillEntry(skill);\n\n for (const issue of skillIssues) {\n errors.push({\n ...issue,\n path: `skills[${i}].${issue.path}`,\n });\n }\n\n // Check for duplicate names\n if (typeof skill.name === 'string') {\n if (seenNames.has(skill.name)) {\n errors.push({\n path: `skills[${i}].name`,\n message: `Duplicate skill name: ${skill.name}`,\n value: skill.name,\n });\n }\n seenNames.add(skill.name);\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n}\n\n/**\n * Initialize an empty registry if it doesn't exist.\n * Used during `refly init`.\n */\nexport function initializeRegistry(): boolean {\n const registryPath = getRegistryPath();\n\n if (fs.existsSync(registryPath)) {\n logger.debug('Registry already exists');\n return false;\n }\n\n writeRegistry(createEmptyRegistry());\n logger.info('Initialized empty skill registry');\n return true;\n}\n\n/**\n * Get all skills from the registry.\n */\nexport function getAllSkills(): SkillEntry[] {\n return readRegistry().skills;\n}\n\n/**\n * Get skills filtered by criteria.\n */\nexport function getFilteredSkills(filter?: {\n tags?: string[];\n source?: 'local' | 'refly-cloud';\n}): SkillEntry[] {\n let skills = getAllSkills();\n\n if (filter?.source) {\n skills = skills.filter((s) => s.source === filter.source);\n }\n\n if (filter?.tags && filter.tags.length > 0) {\n const filterTags = new Set(filter.tags.map((t) => t.toLowerCase()));\n skills = skills.filter((s) => s.tags?.some((t) => filterTags.has(t.toLowerCase())));\n }\n\n return skills;\n}\n","/**\n * refly skill delete - Delete a skill package\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 skillDeleteCommand = new Command('delete')\n .description('Delete a skill package')\n .argument('<skillId>', 'Skill package ID to delete')\n .option('--force', 'Skip confirmation')\n .action(async (skillId, _options) => {\n try {\n await apiRequest(`/v1/skill-packages/${skillId}`, {\n method: 'DELETE',\n });\n\n ok('skill.delete', {\n skillId,\n deleted: true,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to delete skill package',\n );\n }\n });\n","/**\n * refly skill publish - Publish a skill package\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 SkillPackageResponse {\n skillId: string;\n name: string;\n version: string;\n description?: string;\n status: string;\n isPublic: boolean;\n shareId?: string;\n triggers: string[];\n tags: string[];\n downloadCount: number;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const skillPublishCommand = new Command('publish')\n .description('Publish a skill package to make it publicly available')\n .argument('<skillId>', 'Skill package ID to publish')\n .action(async (skillId) => {\n try {\n const result = await apiRequest<SkillPackageResponse>(\n `/v1/skill-packages/${skillId}/publish`,\n {\n method: 'POST',\n },\n );\n\n ok('skill.publish', {\n skillId: result.skillId,\n name: result.name,\n version: result.version,\n status: result.status,\n isPublic: result.isPublic,\n shareId: result.shareId,\n shareUrl: result.shareId ? `https://refly.ai/skill/${result.shareId}` : undefined,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to publish skill package',\n );\n }\n });\n","/**\n * refly skill unpublish - Unpublish a skill package\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 skillUnpublishCommand = new Command('unpublish')\n .description('Unpublish a skill package to make it private')\n .argument('<skillId>', 'Skill package ID to unpublish')\n .action(async (skillId) => {\n try {\n await apiRequest(`/v1/skill-packages/${skillId}/unpublish`, {\n method: 'POST',\n });\n\n ok('skill.unpublish', {\n skillId,\n status: 'draft',\n isPublic: false,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to unpublish skill package',\n );\n }\n });\n","/**\n * refly skill run - Run an installed skill\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 SkillExecutionResult {\n executionId: string;\n installationId: string;\n status: string;\n workflowExecutions: Array<{\n skillWorkflowId: string;\n workflowId: string;\n status: string;\n }>;\n result?: unknown;\n error?: string;\n}\n\nexport const skillRunCommand = new Command('run')\n .description('Run an installed skill')\n .argument('<installationId>', 'Installation ID')\n .option('--input <json>', 'Input JSON for the skill')\n .option('--workflow <skillWorkflowId>', 'Run specific workflow only')\n .option('--async', 'Run asynchronously')\n .action(async (installationId, options) => {\n try {\n // Parse and validate input JSON\n let input: Record<string, unknown> = {};\n if (options.input) {\n try {\n input = JSON.parse(options.input);\n if (typeof input !== 'object' || input === null || Array.isArray(input)) {\n fail(ErrorCodes.INVALID_INPUT, 'Input must be a JSON object');\n return;\n }\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid JSON input');\n return;\n }\n }\n\n const body: Record<string, unknown> = { input };\n if (options.workflow) body.workflowId = options.workflow;\n if (options.async) body.async = true;\n\n const result = await apiRequest<SkillExecutionResult>(\n `/v1/skill-installations/${installationId}/run`,\n {\n method: 'POST',\n body,\n },\n );\n\n ok('skill.run', {\n executionId: result.executionId,\n installationId: result.installationId,\n status: result.status,\n workflowExecutions: result.workflowExecutions,\n result: result.result,\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 return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to run skill',\n );\n }\n });\n","/**\n * refly skill search - Search public skill packages\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 SkillPackageSummary {\n skillId: string;\n name: string;\n version: string;\n description?: string;\n uid: string;\n triggers: string[];\n tags: string[];\n downloadCount: number;\n createdAt: string;\n}\n\nexport const skillSearchCommand = new Command('search')\n .description('Search public skill packages')\n .argument('<query>', 'Search query')\n .option('--tags <tags>', 'Filter by tags (comma-separated)')\n .option('--page <number>', 'Page number', '1')\n .option('--page-size <number>', 'Page size', '20')\n .action(async (query, options) => {\n try {\n const params = new URLSearchParams();\n params.set('query', query);\n if (options.tags) params.set('tags', options.tags);\n params.set('page', options.page);\n params.set('pageSize', options.pageSize);\n\n const result = await apiRequest<{\n items: SkillPackageSummary[];\n total: number;\n page: number;\n pageSize: number;\n hasMore: boolean;\n }>(`/v1/skill-packages/public/search?${params.toString()}`);\n\n ok('skill.search', {\n query,\n skills: result.items.map((s) => ({\n skillId: s.skillId,\n name: s.name,\n version: s.version,\n description: s.description,\n triggers: s.triggers,\n tags: s.tags,\n downloadCount: s.downloadCount,\n })),\n total: result.total,\n page: result.page,\n pageSize: result.pageSize,\n hasMore: result.hasMore,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to search skill packages',\n );\n }\n });\n","/**\n * refly skill install - Install a skill package\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 SkillInstallationResponse {\n installationId: string;\n skillId: string;\n installedVersion: string;\n status: string;\n userConfig?: Record<string, unknown>;\n createdAt: string;\n updatedAt: string;\n skillPackage?: {\n name: string;\n version: string;\n };\n}\n\nexport const skillInstallCommand = new Command('install')\n .description('Install a skill package')\n .argument('<skillId>', 'Skill package ID to install')\n .option('--version <version>', 'Specific version to install')\n .option('--share-id <shareId>', 'Share ID for private skills')\n .option('--config <json>', 'Installation config JSON')\n .action(async (skillId, options) => {\n try {\n const body: Record<string, unknown> = { skillId };\n if (options.version) body.version = options.version;\n if (options.shareId) body.shareId = options.shareId;\n\n if (options.config) {\n try {\n body.config = JSON.parse(options.config);\n } catch {\n fail(ErrorCodes.INVALID_INPUT, 'Invalid config JSON');\n return;\n }\n }\n\n const result = await apiRequest<SkillInstallationResponse>(\n '/v1/skill-installations/install',\n {\n method: 'POST',\n body,\n },\n );\n\n ok('skill.install', {\n installationId: result.installationId,\n skillId: result.skillId,\n skillName: result.skillPackage?.name,\n skillVersion: result.installedVersion,\n status: result.status,\n config: result.userConfig,\n installedAt: result.createdAt,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to install skill',\n );\n }\n });\n","/**\n * refly skill uninstall - Uninstall a skill\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 skillUninstallCommand = new Command('uninstall')\n .description('Uninstall a skill')\n .argument('<installationId>', 'Installation ID to uninstall')\n .option('--force', 'Skip confirmation')\n .action(async (installationId, _options) => {\n try {\n await apiRequest(`/v1/skill-installations/${installationId}`, {\n method: 'DELETE',\n });\n\n ok('skill.uninstall', {\n installationId,\n uninstalled: true,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to uninstall skill',\n );\n }\n });\n","/**\n * refly skill installations - List installed skills\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 SkillInstallationSummary {\n installationId: string;\n skillId: string;\n installedVersion: string;\n status: string;\n createdAt: string;\n updatedAt: string;\n skillPackage?: {\n name: string;\n version: string;\n };\n}\n\nexport const skillInstallationsCommand = new Command('installations')\n .description('List installed skills')\n .option(\n '--status <status>',\n 'Filter by status (downloading, initializing, ready, error, disabled)',\n )\n .option('--page <number>', 'Page number', '1')\n .option('--page-size <number>', 'Page size', '20')\n .action(async (options) => {\n try {\n const params = new URLSearchParams();\n if (options.status) params.set('status', options.status);\n params.set('page', options.page);\n params.set('pageSize', options.pageSize);\n\n const result = await apiRequest<{\n items: SkillInstallationSummary[];\n total: number;\n page: number;\n pageSize: number;\n hasMore: boolean;\n }>(`/v1/skill-installations?${params.toString()}`);\n\n ok('skill.installations', {\n installations: result.items.map((i) => ({\n installationId: i.installationId,\n skillId: i.skillId,\n skillName: i.skillPackage?.name,\n skillVersion: i.installedVersion,\n status: i.status,\n installedAt: i.createdAt,\n })),\n total: result.total,\n page: result.page,\n pageSize: result.pageSize,\n hasMore: result.hasMore,\n });\n } catch (error) {\n if (error instanceof CLIError) {\n fail(error.code, error.message, { details: error.details, hint: error.hint });\n return;\n }\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to list installed skills',\n );\n }\n });\n","/**\n * refly skill validate - Validate local skill files\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { extractSkillMetadata } from '../../skill/loader.js';\nimport { getSkillsDir, ensureSkillsDir } from '../../config/paths.js';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\ninterface ValidationResult {\n path: string;\n valid: boolean;\n errors: string[];\n warnings: string[];\n}\n\nexport const skillValidateCommand = new Command('validate')\n .description('Validate local skill files')\n .argument('[skillPath]', 'Path to skill file or directory (defaults to ~/.refly/skills)')\n .option('--fix', 'Attempt to fix common issues')\n .action(async (skillPath, _options) => {\n try {\n const results: ValidationResult[] = [];\n\n // Determine path to validate\n let targetPath: string;\n if (skillPath) {\n targetPath = path.resolve(skillPath);\n } else {\n await ensureSkillsDir();\n targetPath = getSkillsDir();\n }\n\n // Check if path exists\n if (!fs.existsSync(targetPath)) {\n fail(ErrorCodes.NOT_FOUND, `Path not found: ${targetPath}`);\n return;\n }\n\n const stats = fs.statSync(targetPath);\n\n if (stats.isFile()) {\n // Validate single file\n const result = validateSkillFile(targetPath);\n results.push(result);\n } else if (stats.isDirectory()) {\n // Validate all .md files in directory (recursively)\n const files = findSkillFiles(targetPath);\n for (const file of files) {\n const result = validateSkillFile(file);\n results.push(result);\n }\n }\n\n // Summary\n const validCount = results.filter((r) => r.valid).length;\n const invalidCount = results.filter((r) => !r.valid).length;\n const warningCount = results.reduce((sum, r) => sum + r.warnings.length, 0);\n\n ok('skill.validate', {\n path: targetPath,\n results,\n summary: {\n total: results.length,\n valid: validCount,\n invalid: invalidCount,\n warnings: warningCount,\n },\n });\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to validate skills',\n );\n }\n });\n\nfunction validateSkillFile(filePath: string): ValidationResult {\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n const { frontmatter, issues } = extractSkillMetadata(content);\n\n const errors = issues.map((i) => `${i.path}: ${i.message}`);\n const warnings: string[] = [];\n\n // Add warnings for optional best practices\n if (frontmatter && !frontmatter.version) {\n warnings.push('version: Consider adding a version field');\n }\n if (frontmatter && !frontmatter.author) {\n warnings.push('author: Consider adding an author field');\n }\n\n return {\n path: filePath,\n valid: issues.length === 0,\n errors,\n warnings,\n };\n } catch (error) {\n return {\n path: filePath,\n valid: false,\n errors: [error instanceof Error ? error.message : 'Failed to read file'],\n warnings: [],\n };\n }\n}\n\nfunction findSkillFiles(dir: string, files: string[] = []): string[] {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n // Skip hidden directories\n if (!entry.name.startsWith('.')) {\n findSkillFiles(fullPath, files);\n }\n } else if (entry.isFile() && entry.name.endsWith('.md')) {\n files.push(fullPath);\n }\n }\n\n return files;\n}\n","/**\n * Skill loader module - parsing and loading skill.md files.\n *\n * Uses gray-matter for frontmatter extraction.\n *\n * Implements:\n * - parseFrontmatter(content) - Extract YAML frontmatter\n * - loadSkill(name) - Load and parse skill.md\n * - validateSkillFrontmatter(frontmatter) - Validate required fields\n * - getSkillWithWorkflow(name) - Load skill with workflow details\n */\n\nimport matter from 'gray-matter';\nimport { logger } from '../utils/logger.js';\nimport {\n type SkillFrontmatter,\n type LoadedSkill,\n type ValidationIssue,\n SkillErrorCode,\n createSkillError,\n validateCommonSkillFields,\n validateOptionalSkillFields,\n} from './types.js';\nimport { readSkillFile, getSkillFilePath, skillFileExists } from './storage.js';\nimport { findSkill } from './registry.js';\n\n/**\n * Parse frontmatter from skill.md content.\n * Returns the parsed frontmatter data and markdown content.\n */\nexport function parseFrontmatter(content: string): {\n data: Record<string, unknown>;\n content: string;\n} {\n try {\n const result = matter(content);\n return {\n data: result.data as Record<string, unknown>,\n content: result.content,\n };\n } catch (err) {\n throw createSkillError(SkillErrorCode.INVALID_FRONTMATTER, 'Failed to parse frontmatter', {\n details: { error: (err as Error).message },\n suggestions: [\n 'Ensure frontmatter is valid YAML',\n 'Check that frontmatter is enclosed in --- delimiters',\n ],\n });\n }\n}\n\n/**\n * Validate skill frontmatter fields.\n * Returns array of validation issues.\n */\nexport function validateSkillFrontmatter(data: Record<string, unknown>): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n validateCommonSkillFields(data, issues);\n validateOptionalSkillFields(data, issues);\n\n return issues;\n}\n\n/**\n * Convert raw frontmatter data to typed SkillFrontmatter.\n * Throws if validation fails.\n */\nexport function toSkillFrontmatter(data: Record<string, unknown>): SkillFrontmatter {\n const issues = validateSkillFrontmatter(data);\n\n if (issues.length > 0) {\n throw createSkillError(SkillErrorCode.INVALID_FRONTMATTER, 'Invalid skill frontmatter', {\n details: { errors: issues },\n suggestions: issues.map((i) => i.message),\n });\n }\n\n return {\n name: data.name as string,\n description: data.description as string,\n workflowId: data.workflowId as string,\n triggers: data.triggers as string[],\n tags: data.tags as string[] | undefined,\n author: data.author as string | undefined,\n version: data.version as string | undefined,\n };\n}\n\n/**\n * Load a skill by name.\n * Reads skill.md file and parses frontmatter.\n */\nexport function loadSkill(name: string): LoadedSkill {\n logger.debug(`Loading skill: ${name}`);\n\n // Read skill file\n const content = readSkillFile(name);\n const filePath = getSkillFilePath(name);\n\n // Parse frontmatter\n const parsed = parseFrontmatter(content);\n const frontmatter = toSkillFrontmatter(parsed.data);\n\n // Verify name matches\n if (frontmatter.name !== name) {\n logger.warn(\n `Skill name mismatch: file path says '${name}', frontmatter says '${frontmatter.name}'`,\n );\n }\n\n return {\n frontmatter,\n content: parsed.content,\n filePath,\n };\n}\n\n/**\n * Load a skill by name, with validation that it exists in registry.\n * Returns skill with registry entry information.\n */\nexport function loadSkillWithRegistry(\n name: string,\n): LoadedSkill & { registryEntry: ReturnType<typeof findSkill> } {\n const registryEntry = findSkill(name);\n\n if (!registryEntry) {\n throw createSkillError(\n SkillErrorCode.SKILL_NOT_FOUND,\n `Skill '${name}' not found in registry`,\n {\n suggestions: [\n 'Use `refly skill list` to see available skills',\n 'Use `refly skill create` to create a new skill',\n ],\n },\n );\n }\n\n // Check if skill file exists\n if (!skillFileExists(name)) {\n throw createSkillError(\n SkillErrorCode.SKILL_DIR_NOT_FOUND,\n `Skill '${name}' is in registry but skill.md file is missing`,\n {\n suggestions: [\n 'Run `refly skill validate --fix` to repair the registry',\n 'Recreate the skill with `refly skill create`',\n ],\n },\n );\n }\n\n const loadedSkill = loadSkill(name);\n\n return {\n ...loadedSkill,\n registryEntry,\n };\n}\n\n/**\n * Try to load a skill, returning null if it doesn't exist.\n */\nexport function tryLoadSkill(name: string): LoadedSkill | null {\n try {\n return loadSkill(name);\n } catch (err) {\n if (\n (err as { code?: string }).code === SkillErrorCode.SKILL_DIR_NOT_FOUND ||\n (err as { code?: string }).code === SkillErrorCode.SKILL_NOT_FOUND\n ) {\n return null;\n }\n throw err;\n }\n}\n\n/**\n * Extract skill metadata from skill.md content without loading from disk.\n * Useful for validation and preview.\n */\nexport function extractSkillMetadata(content: string): {\n frontmatter: SkillFrontmatter | null;\n issues: ValidationIssue[];\n content: string;\n} {\n try {\n const parsed = parseFrontmatter(content);\n const issues = validateSkillFrontmatter(parsed.data);\n\n if (issues.length > 0) {\n return {\n frontmatter: null,\n issues,\n content: parsed.content,\n };\n }\n\n return {\n frontmatter: toSkillFrontmatter(parsed.data),\n issues: [],\n content: parsed.content,\n };\n } catch (err) {\n return {\n frontmatter: null,\n issues: [\n {\n path: '',\n message: (err as Error).message,\n },\n ],\n content: '',\n };\n }\n}\n\n/**\n * Validate that a skill's workflow exists (placeholder for API integration).\n * Phase 1: Just validates the workflowId is not empty.\n * Phase 2: Will call API to verify workflow exists.\n */\nexport function validateWorkflowExists(workflowId: string): boolean {\n // Phase 1: Basic validation only\n return typeof workflowId === 'string' && workflowId.trim().length > 0;\n}\n\n/**\n * Get skill with workflow details (placeholder for API integration).\n * Phase 1: Returns skill only, workflow field is null.\n * Phase 2: Will fetch workflow details from API.\n */\nexport function getSkillWithWorkflow(name: string): LoadedSkill & { workflow: null } {\n const skill = loadSkill(name);\n\n // Phase 1: workflow details not implemented yet\n // Phase 2: will fetch workflow from API\n return {\n ...skill,\n workflow: null,\n };\n}\n","/**\n * refly skill sync - Sync local skill registry with filesystem\n */\n\nimport { Command } from 'commander';\nimport { ok, fail, ErrorCodes } from '../../utils/output.js';\nimport { readRegistry, writeRegistry } from '../../skill/registry.js';\nimport { listSkillDirectories, getSkillRelativePath } from '../../skill/storage.js';\nimport { loadSkill } from '../../skill/loader.js';\nimport { SkillEntry } from '../../skill/types.js';\n\ninterface SyncSummary {\n scanned: number;\n added: number;\n updated: number;\n unchanged: number;\n skipped: number;\n pruned: number;\n warnings: number;\n}\n\nexport const skillSyncCommand = new Command('sync')\n .description('Sync local skill registry with filesystem')\n .option('--dry-run', 'Show changes without writing registry')\n .option('--prune', 'Remove registry entries that have no local files')\n .action(async (options) => {\n try {\n const registry = readRegistry();\n const now = new Date().toISOString();\n\n const existingLocal = new Map(\n registry.skills.filter((s) => s.source === 'local').map((s) => [s.name, s]),\n );\n const nonLocal = registry.skills.filter((s) => s.source !== 'local');\n\n const skillDirs = listSkillDirectories();\n const warnings: string[] = [];\n const errors: string[] = [];\n\n const updatedLocal: SkillEntry[] = [];\n let added = 0;\n let updated = 0;\n let unchanged = 0;\n let skipped = 0;\n\n for (const dirName of skillDirs) {\n try {\n const loaded = loadSkill(dirName);\n const frontmatter = loaded.frontmatter;\n\n if (frontmatter.name !== dirName) {\n warnings.push(`Skill name mismatch: dir=${dirName}, frontmatter=${frontmatter.name}`);\n skipped += 1;\n continue;\n }\n\n const prev = existingLocal.get(frontmatter.name);\n const entry: SkillEntry = {\n name: frontmatter.name,\n description: frontmatter.description,\n workflowId: frontmatter.workflowId,\n triggers: frontmatter.triggers,\n path: getSkillRelativePath(frontmatter.name),\n createdAt: prev?.createdAt ?? now,\n updatedAt: now,\n source: 'local',\n tags: frontmatter.tags,\n author: frontmatter.author,\n version: frontmatter.version,\n };\n\n updatedLocal.push(entry);\n\n if (!prev) {\n added += 1;\n } else if (\n prev.description !== entry.description ||\n prev.workflowId !== entry.workflowId ||\n JSON.stringify(prev.triggers) !== JSON.stringify(entry.triggers) ||\n JSON.stringify(prev.tags ?? []) !== JSON.stringify(entry.tags ?? []) ||\n prev.author !== entry.author ||\n prev.version !== entry.version ||\n prev.path !== entry.path\n ) {\n updated += 1;\n } else {\n unchanged += 1;\n }\n } catch (err) {\n errors.push(err instanceof Error ? err.message : 'Failed to load skill');\n skipped += 1;\n }\n }\n\n const updatedNames = new Set(updatedLocal.map((s) => s.name));\n const orphans = Array.from(existingLocal.keys()).filter((name) => !updatedNames.has(name));\n\n const pruned = options.prune ? orphans.length : 0;\n if (!options.prune && orphans.length > 0) {\n warnings.push(`Orphan registry entries (no local files): ${orphans.join(', ')}`);\n }\n\n const preservedLocal = options.prune\n ? []\n : registry.skills.filter((s) => s.source === 'local' && orphans.includes(s.name));\n\n const finalSkills: SkillEntry[] = [...nonLocal, ...updatedLocal, ...preservedLocal];\n\n if (!options.dryRun) {\n writeRegistry({\n ...registry,\n skills: finalSkills,\n updatedAt: now,\n });\n }\n\n const summary: SyncSummary = {\n scanned: skillDirs.length,\n added,\n updated,\n unchanged,\n skipped,\n pruned,\n warnings: warnings.length,\n };\n\n ok('skill.sync', {\n dryRun: Boolean(options.dryRun),\n summary,\n warnings: warnings.length ? warnings : undefined,\n errors: errors.length ? errors : undefined,\n });\n } catch (error) {\n fail(\n ErrorCodes.INTERNAL_ERROR,\n error instanceof Error ? error.message : 'Failed to sync skills',\n );\n }\n });\n"],"mappings":"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","names":["exports","CommanderError","InvalidArgumentError","exports","InvalidArgumentError","Argument","exports","Help","cmd","output","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","os","util","objectUtil","path","errorUtil","path","errorMap","input","ctx","result","issues","elements","processed","input","result","r","ZodFirstPartyTypeKind","fs","path","printError","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","fs","import_node_fs","path","path","mime","hostname","resolve","DEFAULT_API_ENDPOINT","isAuthenticated","printError","import_node_child_process","import_node_fs","fs","getConfigPath","path","readline","import_node_process","path","import_node_process","fs","path","input","output","path","input","output","resolve","isInteractive","resolve","detectIdType","detectIdType","detectIdType","output","detectIdType","output","detectIdType","fs","fs","path","fs","path","fs","path","fs","path","crypto","input","input","matter","fs","path","VERSION","program","logger"]}
|