{"version":3,"sources":["../../../node_modules/commander/lib/error.js","../../../node_modules/commander/lib/argument.js","../../../node_modules/commander/lib/help.js","../../../node_modules/commander/lib/option.js","../../../node_modules/commander/lib/suggestSimilar.js","../../../node_modules/commander/lib/command.js","../../../node_modules/commander/index.js","../../../node_modules/commander/esm.mjs","../../../src/services/pathname-service.ts","../../../src/utils/logger.ts","../../../src/services/intent-service.ts","../../../src/services/file-service.ts","../../../src/utils/config-validator.ts","../../../src/utils/config.ts","../../../src/utils/id-generator.ts","../../../src/validation/file-format-validator.ts","../../../src/validation/metadata-format-validator.ts","../../../src/validation/file-system-validator.ts","../../../src/utils/doc-sections.ts","../../../src/services/issue-service.ts","../../../src/utils/file-system-adapter.ts","../../../src/services/plugin-service.ts","../../../src/utils/plugin-loader.ts","../../../src/LLMail.ts","../../../src/api/new.ts"],"names":["CommanderError","InvalidArgumentError","Argument","Help","cmd","Option","str","path","fs","process","Command","combine","option","commander","winston","chalk","load","customAlphabet","dump","DEFAULT_SCHEMA","_a","timestamp","join","createReadStream","createWriteStream","require","createRequire"],"mappings":"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","file":"new.cjs","sourcesContent":["/**\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.minWidthToWrap = 40;\n    this.sortSubcommands = false;\n    this.sortOptions = false;\n    this.showGlobalOptions = false;\n  }\n\n  /**\n   * prepareContext is called by Commander after applying overrides from `Command.configureHelp()`\n   * and just before calling `formatHelp()`.\n   *\n   * Commander just uses the helpWidth and the rest is provided for optional use by more complex subclasses.\n   *\n   * @param {{ error?: boolean, helpWidth?: number, outputHasColors?: boolean }} contextOptions\n   */\n  prepareContext(contextOptions) {\n    this.helpWidth = this.helpWidth ?? contextOptions.helpWidth ?? 80;\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(\n        max,\n        this.displayWidth(\n          helper.styleSubcommandTerm(helper.subcommandTerm(command)),\n        ),\n      );\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(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\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(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\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(\n        max,\n        this.displayWidth(\n          helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        ),\n      );\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 extraDescription = `(${extraInfo.join(', ')})`;\n      if (argument.description) {\n        return `${argument.description} ${extraDescription}`;\n      }\n      return extraDescription;\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; // in case prepareContext() was not called\n\n    function callFormatItem(term, description) {\n      return helper.formatItem(term, termWidth, description, helper);\n    }\n\n    // Usage\n    let output = [\n      `${helper.styleTitle('Usage:')} ${helper.styleUsage(helper.commandUsage(cmd))}`,\n      '',\n    ];\n\n    // Description\n    const commandDescription = helper.commandDescription(cmd);\n    if (commandDescription.length > 0) {\n      output = output.concat([\n        helper.boxWrap(\n          helper.styleCommandDescription(commandDescription),\n          helpWidth,\n        ),\n        '',\n      ]);\n    }\n\n    // Arguments\n    const argumentList = helper.visibleArguments(cmd).map((argument) => {\n      return callFormatItem(\n        helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        helper.styleArgumentDescription(helper.argumentDescription(argument)),\n      );\n    });\n    if (argumentList.length > 0) {\n      output = output.concat([\n        helper.styleTitle('Arguments:'),\n        ...argumentList,\n        '',\n      ]);\n    }\n\n    // Options\n    const optionList = helper.visibleOptions(cmd).map((option) => {\n      return callFormatItem(\n        helper.styleOptionTerm(helper.optionTerm(option)),\n        helper.styleOptionDescription(helper.optionDescription(option)),\n      );\n    });\n    if (optionList.length > 0) {\n      output = output.concat([\n        helper.styleTitle('Options:'),\n        ...optionList,\n        '',\n      ]);\n    }\n\n    if (helper.showGlobalOptions) {\n      const globalOptionList = helper\n        .visibleGlobalOptions(cmd)\n        .map((option) => {\n          return callFormatItem(\n            helper.styleOptionTerm(helper.optionTerm(option)),\n            helper.styleOptionDescription(helper.optionDescription(option)),\n          );\n        });\n      if (globalOptionList.length > 0) {\n        output = output.concat([\n          helper.styleTitle('Global Options:'),\n          ...globalOptionList,\n          '',\n        ]);\n      }\n    }\n\n    // Commands\n    const commandList = helper.visibleCommands(cmd).map((cmd) => {\n      return callFormatItem(\n        helper.styleSubcommandTerm(helper.subcommandTerm(cmd)),\n        helper.styleSubcommandDescription(helper.subcommandDescription(cmd)),\n      );\n    });\n    if (commandList.length > 0) {\n      output = output.concat([\n        helper.styleTitle('Commands:'),\n        ...commandList,\n        '',\n      ]);\n    }\n\n    return output.join('\\n');\n  }\n\n  /**\n   * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n   *\n   * @param {string} str\n   * @returns {number}\n   */\n  displayWidth(str) {\n    return stripColor(str).length;\n  }\n\n  /**\n   * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n   *\n   * @param {string} str\n   * @returns {string}\n   */\n  styleTitle(str) {\n    return str;\n  }\n\n  styleUsage(str) {\n    // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n    //    command subcommand [options] [command] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word === '[command]') return this.styleSubcommandText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleCommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleCommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleOptionDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleSubcommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleArgumentDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleDescriptionText(str) {\n    return str;\n  }\n  styleOptionTerm(str) {\n    return this.styleOptionText(str);\n  }\n  styleSubcommandTerm(str) {\n    // This is very like usage with lots of parts! Assume default string which is formed like:\n    //    subcommand [options] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleSubcommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleArgumentTerm(str) {\n    return this.styleArgumentText(str);\n  }\n  styleOptionText(str) {\n    return str;\n  }\n  styleArgumentText(str) {\n    return str;\n  }\n  styleSubcommandText(str) {\n    return str;\n  }\n  styleCommandText(str) {\n    return str;\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   * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n   *\n   * @param {string} str\n   * @returns {boolean}\n   */\n  preformatted(str) {\n    return /\\n[^\\S\\r\\n]/.test(str);\n  }\n\n  /**\n   * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n   *\n   * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n   *   TTT  DDD DDDD\n   *        DD DDD\n   *\n   * @param {string} term\n   * @param {number} termWidth\n   * @param {string} description\n   * @param {Help} helper\n   * @returns {string}\n   */\n  formatItem(term, termWidth, description, helper) {\n    const itemIndent = 2;\n    const itemIndentStr = ' '.repeat(itemIndent);\n    if (!description) return itemIndentStr + term;\n\n    // Pad the term out to a consistent width, so descriptions are aligned.\n    const paddedTerm = term.padEnd(\n      termWidth + term.length - helper.displayWidth(term),\n    );\n\n    // Format the description.\n    const spacerWidth = 2; // between term and description\n    const helpWidth = this.helpWidth ?? 80; // in case prepareContext() was not called\n    const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent;\n    let formattedDescription;\n    if (\n      remainingWidth < this.minWidthToWrap ||\n      helper.preformatted(description)\n    ) {\n      formattedDescription = description;\n    } else {\n      const wrappedDescription = helper.boxWrap(description, remainingWidth);\n      formattedDescription = wrappedDescription.replace(\n        /\\n/g,\n        '\\n' + ' '.repeat(termWidth + spacerWidth),\n      );\n    }\n\n    // Construct and overall indent.\n    return (\n      itemIndentStr +\n      paddedTerm +\n      ' '.repeat(spacerWidth) +\n      formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n    );\n  }\n\n  /**\n   * Wrap a string at whitespace, preserving existing line breaks.\n   * Wrapping is skipped if the width is less than `minWidthToWrap`.\n   *\n   * @param {string} str\n   * @param {number} width\n   * @returns {string}\n   */\n  boxWrap(str, width) {\n    if (width < this.minWidthToWrap) return str;\n\n    const rawLines = str.split(/\\r\\n|\\n/);\n    // split up text by whitespace\n    const chunkPattern = /[\\s]*[^\\s]+/g;\n    const wrappedLines = [];\n    rawLines.forEach((line) => {\n      const chunks = line.match(chunkPattern);\n      if (chunks === null) {\n        wrappedLines.push('');\n        return;\n      }\n\n      let sumChunks = [chunks.shift()];\n      let sumWidth = this.displayWidth(sumChunks[0]);\n      chunks.forEach((chunk) => {\n        const visibleWidth = this.displayWidth(chunk);\n        // Accumulate chunks while they fit into width.\n        if (sumWidth + visibleWidth <= width) {\n          sumChunks.push(chunk);\n          sumWidth += visibleWidth;\n          return;\n        }\n        wrappedLines.push(sumChunks.join(''));\n\n        const nextChunk = chunk.trimStart(); // trim space at line break\n        sumChunks = [nextChunk];\n        sumWidth = this.displayWidth(nextChunk);\n      });\n      wrappedLines.push(sumChunks.join(''));\n    });\n\n    return wrappedLines.join('\\n');\n  }\n}\n\n/**\n * Strip style ANSI escape sequences from the string. In particular, SGR (Select Graphic Rendition) codes.\n *\n * @param {string} str\n * @returns {string}\n * @package\n */\n\nfunction stripColor(str) {\n  // eslint-disable-next-line no-control-regex\n  const sgrPattern = /\\x1b\\[\\d*(;\\d*)*m/g;\n  return str.replace(sgrPattern, '');\n}\n\nexports.Help = Help;\nexports.stripColor = stripColor;\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 an object attribute key.\n   *\n   * @return {string}\n   */\n\n  attributeName() {\n    if (this.negate) {\n      return camelcase(this.name().replace(/^no-/, ''));\n    }\n    return camelcase(this.name());\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  // short flag, single dash and single character\n  const shortFlagExp = /^-[^-]$/;\n  // long flag, double dash and at least one character\n  const longFlagExp = /^--[^-]/;\n\n  const flagParts = flags.split(/[ |,]+/).concat('guard');\n  if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n  if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();\n\n  // Check for some unsupported flags that people try.\n  if (/^-[^-][^-]/.test(flagParts[0]))\n    throw new Error(\n      `invalid Option flags, short option is dash and single character: '${flags}'`,\n    );\n  if (shortFlag && shortFlagExp.test(flagParts[0]))\n    throw new Error(\n      `invalid Option flags, more than one short flag: '${flags}'`,\n    );\n  if (longFlag && longFlagExp.test(flagParts[0]))\n    throw new Error(\n      `invalid Option flags, more than one long flag: '${flags}'`,\n    );\n  // Generic error if failed to find a flag or an unexpected flag left over.\n  if (!(shortFlag || longFlag) || flagParts[0].startsWith('-'))\n    throw new Error(`invalid Option flags: '${flags}'`);\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, stripColor } = 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 = false;\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    this._savedState = null; // used in save/restoreStateBeforeParse\n\n    // see configureOutput() for docs\n    this._outputConfiguration = {\n      writeOut: (str) => process.stdout.write(str),\n      writeErr: (str) => process.stderr.write(str),\n      outputError: (str, write) => write(str),\n      getOutHelpWidth: () =>\n        process.stdout.isTTY ? process.stdout.columns : undefined,\n      getErrHelpWidth: () =>\n        process.stderr.isTTY ? process.stderr.columns : undefined,\n      getOutHasColors: () =>\n        useColor() ?? (process.stdout.isTTY && process.stdout.hasColors?.()),\n      getErrHasColors: () =>\n        useColor() ?? (process.stderr.isTTY && process.stderr.hasColors?.()),\n      stripColor: (str) => stripColor(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   *     // change how output being written, defaults to stdout and stderr\n   *     writeOut(str)\n   *     writeErr(str)\n   *     // change how output being written for errors, defaults to writeErr\n   *     outputError(str, write) // used for displaying errors and not used for displaying help\n   *     // specify width for wrapping help\n   *     getOutHelpWidth()\n   *     getErrHelpWidth()\n   *     // color support, currently only used with Help\n   *     getOutHasColors()\n   *     getErrHasColors()\n   *     stripColor() // used to remove ANSI escape codes if output does not have colors\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    this._prepareForParse();\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    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    await this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  _prepareForParse() {\n    if (this._savedState === null) {\n      this.saveStateBeforeParse();\n    } else {\n      this.restoreStateBeforeParse();\n    }\n  }\n\n  /**\n   * Called the first time parse is called to save state and allow a restore before subsequent calls to parse.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state saved.\n   */\n  saveStateBeforeParse() {\n    this._savedState = {\n      // name is stable if supplied by author, but may be unspecified for root command and deduced during parsing\n      _name: this._name,\n      // option values before parse have default values (including false for negated options)\n      // shallow clones\n      _optionValues: { ...this._optionValues },\n      _optionValueSources: { ...this._optionValueSources },\n    };\n  }\n\n  /**\n   * Restore state before parse for calls after the first.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state restored.\n   */\n  restoreStateBeforeParse() {\n    if (this._storeOptionsAsProperties)\n      throw new Error(`Can not call parse again when storeOptionsAsProperties is true.\n- either make a new Command for each call to parse, or stop storing options as properties`);\n\n    // clear state from _prepareUserArgs\n    this._name = this._savedState._name;\n    this._scriptPath = null;\n    this.rawArgs = [];\n    // clear state from setOptionValueWithSource\n    this._optionValues = { ...this._savedState._optionValues };\n    this._optionValueSources = { ...this._savedState._optionValueSources };\n    // clear state from _parseCommand\n    this.args = [];\n    // clear state from _processArguments\n    this.processedArgs = [];\n  }\n\n  /**\n   * Throw if expected executable is missing. Add lots of help for author.\n   *\n   * @param {string} executableFile\n   * @param {string} executableDir\n   * @param {string} subcommandName\n   */\n  _checkForMissingExecutable(executableFile, executableDir, subcommandName) {\n    if (fs.existsSync(executableFile)) return;\n\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 '${subcommandName}' 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  }\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 {\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      this._checkForMissingExecutable(\n        executableFile,\n        executableDir,\n        subcommand._name,\n      );\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        this._checkForMissingExecutable(\n          executableFile,\n          executableDir,\n          subcommand._name,\n        );\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    subCommand._prepareForParse();\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   * Side effects: modifies command by storing options. Does not reset state if called again.\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    const context = this._getOutputContext(contextOptions);\n    helper.prepareContext({\n      error: context.error,\n      helpWidth: context.helpWidth,\n      outputHasColors: context.hasColors,\n    });\n    const text = helper.formatHelp(this, helper);\n    if (context.hasColors) return text;\n    return this._outputConfiguration.stripColor(text);\n  }\n\n  /**\n   * @typedef HelpContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {number} helpWidth\n   * @property {boolean} hasColors\n   * @property {function} write - includes stripColor if needed\n   *\n   * @returns {HelpContext}\n   * @private\n   */\n\n  _getOutputContext(contextOptions) {\n    contextOptions = contextOptions || {};\n    const error = !!contextOptions.error;\n    let baseWrite;\n    let hasColors;\n    let helpWidth;\n    if (error) {\n      baseWrite = (str) => this._outputConfiguration.writeErr(str);\n      hasColors = this._outputConfiguration.getErrHasColors();\n      helpWidth = this._outputConfiguration.getErrHelpWidth();\n    } else {\n      baseWrite = (str) => this._outputConfiguration.writeOut(str);\n      hasColors = this._outputConfiguration.getOutHasColors();\n      helpWidth = this._outputConfiguration.getOutHelpWidth();\n    }\n    const write = (str) => {\n      if (!hasColors) str = this._outputConfiguration.stripColor(str);\n      return baseWrite(str);\n    };\n    return { error, write, hasColors, helpWidth };\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\n    const outputContext = this._getOutputContext(contextOptions);\n    /** @type {HelpTextEventContext} */\n    const eventContext = {\n      error: outputContext.error,\n      write: outputContext.write,\n      command: this,\n    };\n\n    this._getCommandAndAncestors()\n      .reverse()\n      .forEach((command) => command.emit('beforeAllHelp', eventContext));\n    this.emit('beforeHelp', eventContext);\n\n    let helpInformation = this.helpInformation({ error: outputContext.error });\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    outputContext.write(helpInformation);\n\n    if (this._getHelpOption()?.long) {\n      this.emit(this._getHelpOption().long); // deprecated\n    }\n    this.emit('afterHelp', eventContext);\n    this._getCommandAndAncestors().forEach((command) =>\n      command.emit('afterAllHelp', eventContext),\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      // true is not an expected value. Do something sensible but no unit-test.\n      // istanbul ignore if\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 = Number(process.exitCode ?? 0); // process.exitCode does allow a string or an integer, but we prefer just a number\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   * // Do a little typing to coordinate emit and listener for the help text events.\n   * @typedef HelpTextEventContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {Command} command\n   * @property {function} write\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\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\n    const helpEvent = `${position}Help`;\n    this.on(helpEvent, (/** @type {HelpTextEventContext} */ 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\n/**\n * @returns {boolean | undefined}\n * @package\n */\nfunction useColor() {\n  // Test for common conventions.\n  // NB: the observed behaviour is in combination with how author adds color! For example:\n  //   - we do not test NODE_DISABLE_COLORS, but util:styletext does\n  //   - we do test NO_COLOR, but Chalk does not\n  //\n  // References:\n  // https://no-color.org\n  // https://bixense.com/clicolors/\n  // https://github.com/nodejs/node/blob/0a00217a5f67ef4a22384cfc80eb6dd9a917fdc1/lib/internal/tty.js#L109\n  // https://github.com/chalk/supports-color/blob/c214314a14bcb174b12b3014b2b0a8de375029ae/index.js#L33\n  // (https://force-color.org recent web page from 2023, does not match major javascript implementations)\n\n  if (\n    process.env.NO_COLOR ||\n    process.env.FORCE_COLOR === '0' ||\n    process.env.FORCE_COLOR === 'false'\n  )\n    return false;\n  if (process.env.FORCE_COLOR || process.env.CLICOLOR_FORCE !== undefined)\n    return true;\n  return undefined;\n}\n\nexports.Command = Command;\nexports.useColor = useColor; // exporting for tests\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","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","import path from 'path';\nimport { FrontmatterMetadata } from '../types.js';\nimport { ResolvedConfig } from '../utils/config.js';\nimport { IntentService } from './intent-service.js';\n\nexport interface ParsedPathname {\n  type: string;\n  id: string;\n  extension?: string;\n  active?: boolean;\n  state?: string;\n}\n\nexport interface FileLocation {\n  dirname: string;\n  basename: string;\n}\n\n/**\n * Service for path manipulation and location determination.\n * Does NOT handle any filesystem operations.\n */\nexport class PathnameService {\n  constructor(\n    private config: ResolvedConfig,\n    private intentService: IntentService\n  ) {}\n\n  // Public getter for config\n  getConfig(): ResolvedConfig {\n    return this.config;\n  }\n\n  // Core Path Operations\n  deriveFileLocation(metadata: FrontmatterMetadata): FileLocation {\n    const interpretation = this.intentService.interpretIntent({\n      pathname: '',  // Empty pathname since we're just interpreting metadata\n      metadata\n    });\n\n    // Always return relative paths by stripping any leading slashes\n    const dirname = interpretation.targetLocation.dirname.replace(/^\\/+/, '');\n    const basename = interpretation.targetLocation.basename;\n\n    return {\n      dirname,\n      basename\n    };\n  }\n\n  joinPath(...parts: string[]): string {\n    // Ensure all parts are relative paths by removing any leading slashes\n    const relativeParts = parts.map(part => part.replace(/^\\/+/, ''));\n    return path.join(...relativeParts);\n  }\n\n  resolvePath(pathname: string, from?: string): string {\n    // Always work with relative paths\n    const relativePath = pathname.replace(/^\\/+/, '');\n    const relativeFrom = from?.replace(/^\\/+/, '') || '';\n    \n    // If from is provided, resolve relative to it, otherwise just normalize the path\n    return from ? path.join(relativeFrom, relativePath) : relativePath;\n  }\n\n  toCanonicalPath(pathname: string): string {\n    // Ensure we're working with a relative path\n    const relativePath = pathname.replace(/^\\/+/, '');\n    return path.normalize(relativePath);\n  }\n\n  // Directory Structure\n  getActivityDirectories(): string[] {\n    const dirs = [\n      this.config.inbox_dir || 'inbox',\n      this.config.issues_dir || 'issues'\n    ];\n\n    // Add active state directories\n    for (const state of this.config.active_states) {\n      if (state !== 'inbox') {\n        dirs.push(path.join(this.config.issues_dir || 'issues', `_${state}`));\n      }\n    }\n\n    // Add type directories only for types that were explicitly configured\n    // Note: We use config.types_list directly since it's no longer modified by IntentService\n    for (const type of this.config.types_list) {\n      dirs.push(path.join(this.config.issues_dir || 'issues', type));\n    }\n\n    return dirs;\n  }\n\n  getStateFullPath(state: string): string {\n    if (state === 'inbox') {\n      return this.config.inbox_dir || 'inbox';\n    }\n    return path.join(this.config.issues_dir || 'issues', `_${state}`);\n  }\n\n  getTypeDirs(): string[] {\n    return this.config.types_list.map(type => \n      path.join(this.config.issues_dir || 'issues', type)\n    );\n  }\n\n  // Path Parsing\n  parsePathname(pathname: string): ParsedPathname | null {\n    const parts = pathname.split('/');\n    const dirname = parts.slice(0, -1).join('/');\n    const basename = parts[parts.length - 1];\n\n    // Check if in active state directory\n    const isInActiveStateDir = parts.some(part => part.startsWith('_'));\n    const activeState = isInActiveStateDir ? parts.find(part => part.startsWith('_'))?.substring(1) : undefined;\n\n    // Match type and id from basename\n    const match = basename.match(/^(?:([a-zA-Z0-9]+)-)?([a-zA-Z0-9]+)-([a-zA-Z0-9]+)\\..*$/i);\n    if (!match) {\n      // Special case for filenames without extension\n      if (basename.match(/^[a-zA-Z0-9]+$/i)) {\n        return {\n          id: basename,\n          type: '',\n          active: this.isInboxDirectory(dirname)\n        };\n      }\n      return null;\n    }\n\n    const prefix = match[1];\n    const type = match[2];\n    const id = match[3];\n    const extension = path.extname(basename);\n\n    // If in active state directory, use that state\n    if (activeState) {\n      return {\n        type,\n        id,\n        extension,\n        active: true,\n        state: activeState\n      };\n    }\n\n    // If prefix is an inactive reason, use that\n    if (prefix && this.config.inactive_reasons.includes(prefix)) {\n      return {\n        type,\n        id,\n        extension,\n        active: false,\n        state: prefix\n      };\n    }\n\n    // If in inbox directory, mark as active\n    if (this.isInboxDirectory(dirname)) {\n      return {\n        type,\n        id,\n        extension,\n        active: true,\n        state: 'inbox'\n      };\n    }\n\n    // Default case - in type directory means inactive\n    return {\n      type,\n      id,\n      extension,\n      active: false\n    };\n  }\n\n  parseBasename(basename: string): ParsedPathname | null {\n    // Match state/reason, type and id from basename\n    const match = basename.match(/^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)\\..*$/i);\n    if (match) {\n      const prefix = match[1];\n      const type = match[2];\n      const id = match[3];\n\n      // If prefix is a known inactive reason, treat it as such\n      if (this.config.inactive_reasons.includes(prefix)) {\n        return {\n          state: prefix,\n          type,\n          id,\n          active: false\n        };\n      }\n\n      // If prefix is a known active state, treat it as such\n      if (this.config.active_states.includes(prefix)) {\n        return {\n          state: prefix,\n          type,\n          id,\n          active: true\n        };\n      }\n\n      // Otherwise treat first part as type\n      return {\n        type: prefix,\n        id: type\n      };\n    }\n\n    // Match type and id without state/reason\n    const simpleMatch = basename.match(/^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)\\..*$/i);\n    if (simpleMatch) {\n      return {\n        type: simpleMatch[1],\n        id: simpleMatch[2]\n      };\n    }\n\n    // Special case for filenames without extension\n    if (basename.match(/^[a-zA-Z0-9]+$/i)) {\n      return {\n        id: basename,\n        type: ''\n      };\n    }\n\n    return null;\n  }\n\n  // Path Generation\n  getNewPath(pathname: string, metadata: FrontmatterMetadata): string {\n    const location = this.deriveFileLocation(metadata);\n    return this.joinPath(location.dirname, location.basename);\n  }\n\n  // Directory Type Checks\n  isInboxDirectory(dirname: string): boolean {\n    return dirname.toLowerCase() === (this.config.inbox_dir || 'inbox').toLowerCase();\n  }\n\n  isTypeDirectory(dirname: string): boolean {\n    return this.config.types_list.some(type => type.toLowerCase() === dirname.toLowerCase());\n  }\n\n  // Path Matching\n  matchesId(filename: string, id: string): boolean {\n    const parsed = this.parsePathname(filename);\n    return parsed ? parsed.id.toLowerCase() === id.toLowerCase() : false;\n  }\n\n  // Search Path Generation\n  getPossiblePathsForId(id: string): string[] {\n    const paths: string[] = [\n      this.config.inbox_dir || 'inbox',\n      this.config.issues_dir || 'issues',\n      ...this.config.active_states\n        .filter(state => state !== 'inbox')\n        .map(state => path.join(this.config.issues_dir || 'issues', `_${state}`))\n    ];\n\n    // Add type directories only for types that were explicitly configured\n    // Note: We use config.types_list directly since it's no longer modified by IntentService\n    for (const type of this.config.types_list) {\n      paths.push(path.join(this.config.issues_dir || 'issues', type));\n    }\n\n    return paths;\n  }\n\n  getPossiblePathsForType(type: string): string[] {\n    return [\n      this.config.inbox_dir || 'inbox',\n      ...this.config.active_states\n        .filter(state => state !== 'inbox')\n        .map(state => path.join(this.config.issues_dir || 'issues', `_${state}`)),\n      path.join(this.config.issues_dir || 'issues', type)\n    ];\n  }\n\n  getPossiblePathsForState(state: string): string[] {\n    if (state === 'inbox') {\n      return [this.config.inbox_dir || 'inbox'];\n    }\n\n    // For active states, look in _state directory\n    if (this.config.active_states.includes(state)) {\n      return [path.join(this.config.issues_dir || 'issues', `_${state}`)];\n    }\n\n    // For inactive states (reasons), look in each type directory\n    if (this.config.inactive_reasons.includes(state)) {\n      return this.config.types_list.map(type => \n        path.join(this.config.issues_dir || 'issues', type)\n      );\n    }\n\n    // For unknown states, look everywhere\n    return this.getActivityDirectories();\n  }\n\n  /**\n   * Get the canonical path where a NEW file with this ID should be located.\n   * This returns the default location for new files (inbox).\n   * \n   * To find an existing file by ID, use IssueService.findFileById() instead,\n   * as that method handles all the necessary validation and error checking.\n   * \n   * @param id The ID to get the path for\n   * @returns The canonical path where a new file with this ID should be created\n   */\n  getPathForId(id: string): string {\n    // By default, new IDs go to inbox\n    return path.join(this.config.inbox_dir || 'inbox', `${id}.md`);\n  }\n}","import winston from 'winston';\nimport chalk from 'chalk';\nimport { IssueError, FileNotFoundError, InvalidFilenameError, InvalidTargetError, FileExistsError, handleError } from '../errors/errors.js';\n\n// Define our custom logger interface\nexport interface CustomLogger extends winston.Logger {\n  success(message: any, ...meta: any[]): winston.Logger;\n  debug(message: any, ...meta: any[]): winston.Logger;\n}\n\nconst { format, createLogger, transports } = winston;\nconst { combine, timestamp, printf } = format;\n\n// Custom format for different log levels\nconst customFormat = printf((info: winston.Logform.TransformableInfo) => {\n  const ts = new Date(info.timestamp?.toString() || Date.now()).toLocaleTimeString();\n  \n  switch (info.level) {\n    case 'error':\n      return `${chalk.gray(ts)} ${chalk.red('✖')} ${chalk.red(info.message)}`;\n    case 'warn':\n      return `${chalk.gray(ts)} ${chalk.yellow('⚠')} ${chalk.yellow(info.message)}`;\n    case 'info':\n      return `${chalk.gray(ts)} ${chalk.blue('ℹ')} ${info.message}`;\n    case 'debug':\n      return `${chalk.gray(ts)} ${chalk.gray('🔍')} ${chalk.gray(info.message)}`;\n    case 'success':\n      return `${chalk.gray(ts)} ${chalk.green('✔')} ${chalk.green(info.message)}`;\n    default:\n      return `${chalk.gray(ts)} ${info.message}`;\n  }\n});\n\n// Create custom success level\nconst customLevels = {\n  levels: {\n    error: 0,\n    warn: 1,\n    info: 2,\n    debug: 3,\n    success: 4\n  },\n  colors: {\n    error: 'red',\n    warn: 'yellow',\n    info: 'blue',\n    debug: 'gray',\n    success: 'green'\n  }\n};\n\n// Create a filter to completely silence debug messages unless explicitly enabled\nconst silenceDebug = format((info) => {\n  if (info.level === 'debug' && !process.env.DEBUG_ENABLED) {\n    return false;\n  }\n  return info;\n});\n\n// Create the logger with silent debug by default\nconst baseLogger = createLogger({\n  levels: customLevels.levels,\n  format: combine(\n    silenceDebug(),\n    timestamp(),\n    customFormat\n  ),\n  transports: [\n    new transports.Console({\n      level: 'info'\n    })\n  ]\n});\n\n// Add success method to match our interface\n(baseLogger as any).success = baseLogger.info;\n\nexport const logger = baseLogger as CustomLogger;\n\n// Add colors to winston\nwinston.addColors(customLevels.colors);\n\n// Function to configure logger based on debug flag\nexport function configureLogger(debug: boolean = false) {\n  process.env.DEBUG_ENABLED = debug ? 'true' : '';\n  const level = debug ? 'debug' : 'info';\n  logger.transports.forEach(transport => {\n    if (transport instanceof winston.transports.Console) {\n      transport.level = level;\n    }\n  });\n}\n\n// Re-export error types for convenience\nexport { IssueError, FileNotFoundError, InvalidFilenameError, InvalidTargetError, FileExistsError, handleError }; ","import { ResolvedConfig } from '../utils/config.js';\nimport path from 'path';\nimport { FrontmatterMetadata, ValidationResult } from '../types.js';\nimport { PluginService } from './plugin-service.js';\nimport { logger } from '../utils/logger.js';\n\nexport interface FileLocation {\n  dirname: string;\n  basename: string;\n}\n\nexport interface FileState {\n  pathname: string;\n  metadata: FrontmatterMetadata;\n}\n\nexport interface FileIntent {\n  targetDir: string;\n  metadata: FrontmatterMetadata;\n}\n\nexport interface InterpretedIntent {\n  targetLocation: FileLocation;\n  targetMetadata: FrontmatterMetadata;\n  reason: string;\n}\n\nexport interface LocationPattern {\n  inDirectory?: string | ((dir: string) => boolean);\n  hasTypeDir?: boolean;\n}\n\nexport interface MetadataPattern {\n  hasState?: boolean;\n  specificState?: string | ((state: string) => boolean);\n}\n\nexport interface IntentPattern {\n  pattern: {\n    location?: LocationPattern;\n    metadata?: MetadataPattern;\n  };\n  interpretation: (state: FileState) => InterpretedIntent;\n}\n\nexport class IntentService {\n  private intentPatterns: IntentPattern[];\n  private validTypes: string[];\n\n  constructor(\n    private config: ResolvedConfig,\n    private pluginService?: PluginService\n  ) {\n    this.intentPatterns = [];\n    \n    // Initialize valid types from config first\n    this.validTypes = [...config.types_list];\n    logger.debug('Initial validTypes:', this.validTypes);\n    \n    // Ensure 'issue' is a valid type if no types are configured\n    if (this.validTypes.length === 0) {\n      this.validTypes = ['issue'];\n      logger.debug('No types configured, using default:', this.validTypes);\n    }\n    // Add 'issue' as a default type if not already present\n    else if (!this.validTypes.includes('issue')) {\n      this.validTypes.push('issue');\n      logger.debug('Added issue type:', this.validTypes);\n    }\n    \n    // Initialize plugin service with core states if provided\n    if (this.pluginService) {\n      logger.debug('Registering core types with plugin service:', this.validTypes);\n      // Register core states from config\n      this.pluginService.registerCoreTypes(this.validTypes);\n      this.pluginService.registerCoreActiveStates(this.config.active_states);\n      this.pluginService.registerCoreInactiveReasons(this.config.inactive_reasons);\n      \n      // Get plugin types and combine with our existing types\n      const pluginTypes = this.pluginService.getValidTypes();\n      logger.debug('Plugin types:', pluginTypes);\n      \n      // Combine all types while preserving uniqueness\n      this.validTypes = [...new Set([...this.validTypes, ...pluginTypes])];\n      logger.debug('Final validTypes:', this.validTypes);\n      \n      // Apply plugin patterns\n      this.intentPatterns = this.pluginService.applyPluginIntents(this.intentPatterns);\n    }\n  }\n\n  /**\n   * Get all registered intent patterns, including plugin-provided ones\n   */\n  getIntentPatterns(): IntentPattern[] {\n    return [...this.intentPatterns];\n  }\n\n  isValidState(state: string): boolean {\n    if (!state) return false;\n\n    // Get all valid states including plugin-provided ones\n    const validActiveStates = this.pluginService \n      ? this.pluginService.getValidActiveStates()\n      : this.config.active_states;\n\n    const validInactiveReasons = this.pluginService\n      ? this.pluginService.getValidInactiveReasons()\n      : this.config.inactive_reasons;\n\n    const normalizedState = state.toLowerCase();\n    logger.debug('isValidState - Checking state:', state);\n    logger.debug('isValidState - Valid active states:', validActiveStates);\n    logger.debug('isValidState - Valid inactive reasons:', validInactiveReasons);\n    \n    return validActiveStates.includes(normalizedState) || validInactiveReasons.includes(normalizedState);\n  }\n\n  private isValidInactiveReason(reason: string): boolean {\n    // Get all valid inactive reasons including plugin-provided ones\n    const validReasons = this.pluginService\n      ? this.pluginService.getValidInactiveReasons()\n      : this.config.inactive_reasons;\n\n    return validReasons.includes(reason.toLowerCase());\n  }\n\n  private isValidType(type: string): boolean {\n    if (!type) return false;\n    \n    // Always allow 'issue' type\n    if (type.toLowerCase() === 'issue') return true;\n    \n    // Normalize the type for comparison\n    const normalizedType = type.toLowerCase();\n    logger.debug('isValidType - Checking type:', type);\n    logger.debug('isValidType - Valid types:', this.validTypes);\n    \n    // Check against our combined list of valid types\n    return this.validTypes.some(t => t.toLowerCase() === normalizedType);\n  }\n\n  isActiveState(state: string): boolean {\n    if (!state) return false;\n    \n    // Check if it's an active state from config or plugins\n    const validStates = this.pluginService \n      ? this.pluginService.getValidActiveStates()\n      : this.config.active_states;\n\n    logger.debug('isActiveState - Checking state:', state);\n    logger.debug('isActiveState - Valid states:', validStates);\n    \n    return validStates.includes(state.toLowerCase());\n  }\n\n  isInactiveReason(state: string): boolean {\n    if (!state) return false;\n\n    // Check if it's an inactive reason from config or plugins\n    const validReasons = this.pluginService\n      ? this.pluginService.getValidInactiveReasons()\n      : this.config.inactive_reasons;\n\n    logger.debug('isInactiveReason - Checking state:', state);\n    logger.debug('isInactiveReason - Valid reasons:', validReasons);\n    \n    return validReasons.includes(state.toLowerCase());\n  }\n\n  getCanonicalState(state: string): string {\n    // Get all valid states including plugin-provided ones\n    const validActiveStates = this.pluginService \n      ? this.pluginService.getValidActiveStates()\n      : this.config.active_states;\n\n    const validInactiveReasons = this.pluginService\n      ? this.pluginService.getValidInactiveReasons()\n      : this.config.inactive_reasons;\n\n    // Preserve user's case if it exactly matches a configured state\n    const exactActiveMatch = validActiveStates.find(s => s === state);\n    if (exactActiveMatch) return exactActiveMatch;\n\n    const exactInactiveMatch = validInactiveReasons.find(r => r === state);\n    if (exactInactiveMatch) return exactInactiveMatch;\n\n    // Otherwise find case-insensitive match\n    const activeMatch = validActiveStates.find(s => s.toLowerCase() === state.toLowerCase());\n    if (activeMatch) return activeMatch;\n\n    const inactiveMatch = validInactiveReasons.find(r => r.toLowerCase() === state.toLowerCase());\n    if (inactiveMatch) return inactiveMatch;\n\n    return state; // Let validation catch invalid states\n  }\n\n  getTargetDirForState(state: string, type: string): string {\n    // Ensure we're working with relative paths\n    const rootDir = this.config.issues_dir.replace(/^\\/+/, '');\n    const inboxDir = this.config.inbox_dir.replace(/^\\/+/, '');\n\n    // For active states, use the state directory\n    if (this.isActiveState(state)) {\n      return path.join(rootDir, `_${state}`);\n    }\n\n    // For inactive states, use the type archive directory\n    if (this.isInactiveReason(state)) {\n      return path.join(rootDir, type);\n    }\n\n    // Default to inbox\n    return inboxDir;\n  }\n\n  getTypeArchiveDir(type: string): string {\n    // Ensure we're working with relative paths\n    const rootDir = this.config.issues_dir.replace(/^\\/+/, '');\n    return path.join(rootDir, type);\n  }\n\n  matchState(state: FileState): { matches: boolean; state?: string } {\n    if (!state.pathname || !state.metadata) {\n      return { matches: false };\n    }\n\n    const normalizedPathname = state.pathname.toLowerCase();\n\n    // First check metadata state if present\n    if (state.metadata.state) {\n      const canonicalState = this.getCanonicalState(state.metadata.state);\n      const isActive = this.isActiveState(canonicalState);\n\n      // For active states, check if in correct directory\n      if (isActive) {\n        if (normalizedPathname.includes(`_${canonicalState.toLowerCase()}/`)) {\n          return { matches: true, state: canonicalState };\n        }\n      } else {\n        // For inactive states, check if in type directory\n        if (normalizedPathname.includes(`/${state.metadata.type}/`)) {\n          return { matches: true, state: canonicalState };\n        }\n      }\n      return { matches: false };\n    }\n\n    // If no metadata state, check pathname patterns\n    // Special case for inbox\n    if (normalizedPathname === 'inbox' || normalizedPathname.includes('inbox/')) {\n      return { matches: true, state: 'inbox' };\n    }\n\n    // Check for active states in underscore-prefixed directories\n    for (const activeState of this.config.active_states) {\n      const normalizedState = activeState.toLowerCase();\n      if (normalizedPathname.includes(`_${normalizedState}/`)) {\n        return { matches: true, state: activeState };\n      }\n    }\n\n    // Check for inactive states in type subdirectories\n    for (const inactiveReason of this.config.inactive_reasons) {\n      const normalizedReason = inactiveReason.toLowerCase();\n      if (normalizedPathname.includes(`/${normalizedReason}/`)) {\n        return { matches: true, state: inactiveReason };\n      }\n    }\n\n    return { matches: false };\n  }\n\n  interpretState(state: string): { canonicalState?: string; isActive: boolean } {\n    // Handle inbox state - it's a special case that maps to active with no state\n    if (state.toLowerCase() === 'inbox') {\n      return { canonicalState: undefined, isActive: true };\n    }\n\n    // Get canonical form of state\n    const canonicalState = this.getCanonicalState(state);\n\n    // Check if it's an inactive reason - always set the state and mark as inactive\n    if (this.isInactiveReason(canonicalState)) {\n      return { canonicalState, isActive: false };\n    }\n\n    // Check if it's an active state\n    if (this.isActiveState(canonicalState)) {\n      return { canonicalState, isActive: true };\n    }\n\n    // If it's neither, return the state as is but mark as inactive\n    return { canonicalState, isActive: false };\n  }\n\n  matchesState(metadata: FrontmatterMetadata, stateInfo: { isActive: boolean; canonicalState?: string }): boolean {\n    // Special handling for inbox state\n    if (stateInfo.canonicalState === undefined && stateInfo.isActive) {\n      return metadata.active === true && !metadata.state;\n    }\n\n    // For states, check both the state field and active status\n    return metadata.state === stateInfo.canonicalState && metadata.active === stateInfo.isActive;\n  }\n\n  interpretIntent(state: FileState): InterpretedIntent {\n    const { type } = state.metadata;\n\n    // Handle state-based intents first\n    if (state.metadata.state) {\n      // Special handling for inbox state\n      if (state.metadata.state.toLowerCase() === 'inbox') {\n        const inboxIntent = {\n          targetLocation: {\n            dirname: this.config.inbox_dir || 'inbox',\n            basename: `${type}-${state.metadata.id}.md`\n          },\n          targetMetadata: {\n            ...state.metadata,\n            type,  // Ensure type is set\n            state: undefined,\n            active: true\n          },\n          reason: 'Inbox state specified - normalizing to active with no state'\n        };\n        return inboxIntent;\n      }\n\n      // Get target directory based on state\n      const targetDir = this.getTargetDirForState(state.metadata.state, type);\n      const isActive = this.isActiveState(state.metadata.state);\n\n      return {\n        targetLocation: {\n          dirname: targetDir,\n          basename: `${state.metadata.state}-${type}-${state.metadata.id}.md`\n        },\n        targetMetadata: {\n          ...state.metadata,\n          type,  // Ensure type is set\n          state: state.metadata.state,\n          active: isActive\n        },\n        reason: `File has state '${state.metadata.state}' - moving to appropriate directory`\n      };\n    }\n\n    // For items with no state, check active flag\n    if (state.metadata.active === true) {\n      // Active items with no state go to inbox\n      return {\n        targetLocation: {\n          dirname: this.config.inbox_dir || 'inbox',\n          basename: `${type}-${state.metadata.id}.md`\n        },\n        targetMetadata: {\n          ...state.metadata,\n          type,  // Ensure type is set\n          state: undefined,\n          active: true\n        },\n        reason: 'Active item with no state - moving to inbox'\n      };\n    }\n\n    // For inactive items with no state, move to type directory\n    if (state.metadata.active === false) {\n      const baseDir = this.config.issues_dir || 'issues';\n      return {\n        targetLocation: {\n          dirname: path.join(baseDir, type),\n          basename: `${type}-${state.metadata.id}.md`\n        },\n        targetMetadata: {\n          ...state.metadata,\n          type,  // Ensure type is set\n          active: false,\n          state: undefined\n        },\n        reason: 'Inactive item with no state - moving to type archive'\n      };\n    }\n\n    // Default to inbox for new items\n    return {\n      targetLocation: {\n        dirname: this.config.inbox_dir || 'inbox',\n        basename: `${type}-${state.metadata.id}.md`\n      },\n      targetMetadata: {\n        ...state.metadata,\n        type,  // Ensure type is set\n        state: undefined,\n        active: true\n      },\n      reason: 'New item - moving to inbox'\n    };\n  }\n\n  validateFinalState(state: FileState): ValidationResult {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n\n    // Validate metadata has required fields\n    if (!state.metadata.id) {\n      errors.push('Missing required field: id');\n    }\n    if (!state.metadata.type) {\n      errors.push('Missing required field: type');\n    }\n\n    // Validate type is valid\n    if (state.metadata.type && !this.isValidType(state.metadata.type)) {\n      errors.push(`Invalid type: ${state.metadata.type}`);\n    }\n\n    // Validate state if present\n    if (state.metadata.state && !this.isValidState(state.metadata.state)) {\n      errors.push(`Invalid state: ${state.metadata.state}`);\n    }\n\n    // Validate active status is consistent with state\n    if (state.metadata.state) {\n      const isActive = this.isActiveState(state.metadata.state);\n      if (state.metadata.active === undefined) {\n        warnings.push('Active status not explicitly set - inferring from state');\n      } else if (state.metadata.active !== isActive) {\n        errors.push(`Active status (${state.metadata.active}) does not match state type (${isActive ? 'active' : 'inactive'})`);\n      }\n\n      // Check if file location matches state\n      const targetDir = this.getTargetDirForState(state.metadata.state, state.metadata.type);\n      const currentDir = path.dirname(state.pathname);\n      if (currentDir !== targetDir) {\n        warnings.push('File location does not match state');\n      }\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings\n    };\n  }\n\n  validateStateTransition(initialState: FileState, targetState: FileState): ValidationResult {\n    const result: ValidationResult = {\n      valid: true,\n      errors: [],\n      warnings: [],\n      guidance: []\n    };\n\n    // First validate the target state\n    const finalStateValidation = this.validateFinalState(targetState);\n    if (finalStateValidation.warnings) {\n      result.warnings!.push(...finalStateValidation.warnings);\n    }\n\n    // Check metadata preservation\n    const preservedFields = ['id', 'type', 'title', 'created'];\n    for (const field of preservedFields) {\n      if (initialState.metadata[field] && initialState.metadata[field] !== targetState.metadata[field]) {\n        result.errors.push(`Field '${field}' must be preserved during state transition`);\n        result.valid = false;\n      }\n    }\n\n    // Check filename pattern\n    const expectedBasename = targetState.metadata.state\n      ? `${targetState.metadata.state}-${targetState.metadata.type}-${targetState.metadata.id}`\n      : `${targetState.metadata.type}-${targetState.metadata.id}`;\n\n    if (targetState.pathname !== expectedBasename) {\n      result.guidance!.push(`Filename '${targetState.pathname}' doesn't match expected pattern '${expectedBasename}' - will be renamed`);\n    }\n\n    return result;\n  }\n\n  validateMetadataAgainstConfig(metadata: FrontmatterMetadata): ValidationResult {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n\n    // Validate type is valid\n    if (metadata.type && !this.isValidType(metadata.type)) {\n      errors.push(`Invalid type: ${metadata.type}`);\n    }\n\n    // Validate state if present\n    if (metadata.state && !this.isValidState(metadata.state)) {\n      errors.push(`Invalid state: ${metadata.state}`);\n    }\n\n    // Validate active status is consistent with state\n    if (metadata.state) {\n      const isActive = this.isActiveState(metadata.state);\n      if (metadata.active === undefined) {\n        warnings.push('Active status not explicitly set - inferring from state');\n      } else if (metadata.active !== isActive) {\n        errors.push(`Active status (${metadata.active}) does not match state type (${isActive ? 'active' : 'inactive'})`);\n      }\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings\n    };\n  }\n\n  validateMove(sourcePath: string, targetPath: string, metadata: FrontmatterMetadata): ValidationResult {\n    // Get current metadata from source path\n    const sourceState: FileState = {\n      pathname: sourcePath,\n      metadata: { ...metadata }  // Use current metadata as base\n    };\n\n    // Create target state with new metadata\n    const targetState: FileState = {\n      pathname: targetPath,\n      metadata\n    };\n\n    // First validate both states individually\n    const sourceValidation = this.validateFinalState(sourceState);\n    if (!sourceValidation.valid) {\n      return sourceValidation;\n    }\n\n    const targetValidation = this.validateFinalState(targetState);\n    if (!targetValidation.valid) {\n      return targetValidation;\n    }\n\n    // Then validate the transition between them\n    const transitionValidation = this.validateStateTransition(sourceState, targetState);\n    \n    // Combine warnings from all validations\n    const allWarnings = [\n      ...(sourceValidation.warnings || []),\n      ...(targetValidation.warnings || []),\n      ...(transitionValidation.guidance || [])\n    ];\n\n    return {\n      valid: transitionValidation.valid,\n      errors: transitionValidation.errors,\n      warnings: [],  // Add empty warnings array since it's required\n      guidance: allWarnings.length > 0 ? allWarnings : undefined\n    };\n  }\n\n  /**\n   * Clean state transition by removing invalid fields and normalizing values\n   */\n  cleanStateTransition(current: FrontmatterMetadata, next: Partial<FrontmatterMetadata>): FrontmatterMetadata {\n    logger.debug('cleanStateTransition - Current metadata:', current);\n    logger.debug('cleanStateTransition - Next metadata:', next);\n    \n    // Start with current metadata to preserve all fields\n    const result = { ...current };\n\n    // Handle active flag first\n    if (next.active !== undefined) {\n      logger.debug('cleanStateTransition - Setting active:', next.active);\n      result.active = next.active;\n\n      // If setting to active\n      if (next.active === true) {\n        // Clear any existing state when setting to active\n        result.state = undefined;\n      }\n    }\n\n    // Then handle state changes\n    if (next.state !== undefined) {\n      logger.debug('cleanStateTransition - Processing state:', next.state);\n      const state = this.getCanonicalState(next.state);\n      logger.debug('cleanStateTransition - Canonical state:', state);\n      result.state = state;\n      \n      // If transitioning to an inactive reason, always set active to false\n      if (this.isInactiveReason(state)) {\n        logger.debug('cleanStateTransition - State is inactive reason, setting active to false');\n        result.active = false;\n      } else if (this.isActiveState(state)) {\n        logger.debug('cleanStateTransition - State is active state, setting active to true');\n        result.active = true;\n      }\n    }\n\n    // Then process other required fields to ensure they're normalized\n    if (next.type !== undefined) {\n      logger.debug('cleanStateTransition - Setting type:', next.type);\n      result.type = next.type?.toLowerCase();\n    }\n    if (next.id !== undefined) {\n      logger.debug('cleanStateTransition - Setting id:', next.id);\n      result.id = next.id;\n    }\n\n    logger.debug('cleanStateTransition - Final result:', result);\n    return result;\n  }\n\n  /**\n   * Interprets metadata and infers active state\n   */\n  interpretMetadata(metadata: Partial<FrontmatterMetadata>): FrontmatterMetadata {\n    // Create a copy to avoid modifying input\n    const result = { ...metadata } as FrontmatterMetadata;\n\n    // Handle state interpretation\n    if (result.state) {\n      const { canonicalState, isActive } = this.interpretState(result.state);\n      result.state = canonicalState;\n      result.active = isActive;\n    }\n\n    // Handle type interpretation\n    if (!result.type) {\n      // If no type is provided, use 'issue' as default\n      result.type = 'issue';\n    } else {\n      // Normalize type to lowercase\n      result.type = result.type.toLowerCase();\n    }\n\n    // Validate type\n    if (!this.isValidType(result.type)) {\n      throw new Error(`Invalid type: ${result.type}`);\n    }\n\n    return result;\n  }\n\n  /**\n   * Interprets a state transition and returns the necessary metadata updates\n   */\n  interpretStateTransition(targetState: string, options: { reason?: string } = {}): Partial<FrontmatterMetadata> {\n    const stateInfo = this.interpretState(targetState);\n    \n    return {\n      active: stateInfo.isActive,\n      state: stateInfo.canonicalState\n    };\n  }\n\n  // Add a method to get the valid types\n  getValidTypes(): string[] {\n    return this.validTypes;\n  }\n}","import { FileSystemAdapter } from '../utils/file-system-adapter.js';\nimport path from 'path';\nimport { PathnameService } from './pathname-service.js';\n\n/**\n * Centralizes all filesystem operations with atomic guarantees and proper error handling.\n * This service is responsible for:\n * - Atomic file operations\n * - Directory management\n * - File search operations\n * - Temporary file handling\n * - Backup management\n */\nexport class FileService {\n  constructor(\n    private fs: FileSystemAdapter,\n    private pathnameService: PathnameService\n  ) {}\n\n  // Core Operations\n\n  async readFile(filePath: string): Promise<string> {\n    if (!await this.fs.exists(filePath)) {\n      throw new Error(`File not found: ${filePath}`);\n    }\n    return this.fs.readFile(filePath);\n  }\n\n  async writeFile(filePath: string, content: string): Promise<void> {\n    // Use temp file for atomic write\n    return this.withTempFile(filePath, async (tempPath) => {\n      await this.fs.writeFile(tempPath, content);\n    });\n  }\n\n  async moveFile(sourcePath: string, targetPath: string): Promise<void> {\n    // Validate paths\n    if (!await this.fs.exists(sourcePath)) {\n      throw new Error(`Source file not found: ${sourcePath}`);\n    }\n    if (await this.fs.exists(targetPath)) {\n      throw new Error(`Target file already exists: ${targetPath}`);\n    }\n\n    // Ensure target directory exists\n    await this.ensureParentDir(targetPath);\n\n    // Use temp file for atomic move\n    const tempPath = `${targetPath}.tmp`;\n    try {\n      // First copy to temp file\n      await this.fs.move(sourcePath, tempPath);\n      // Then move temp file to target\n      await this.fs.move(tempPath, targetPath);\n    } catch (error) {\n      // Clean up temp file on error\n      try {\n        if (await this.fs.exists(tempPath)) {\n          await this.fs.remove(tempPath);\n        }\n      } catch (cleanupError) {\n        // Ignore cleanup errors\n      }\n      throw error;\n    }\n  }\n\n  async atomicMove(sourcePath: string, targetPath: string, content: string): Promise<void> {\n    // Ensure source file exists\n    if (!await this.fs.exists(sourcePath)) {\n      throw new Error(`File not found: ${sourcePath}`);\n    }\n\n    // Create temp file with new content\n    const tempPath = `${targetPath}.tmp`;\n    try {\n      // Write new content to temp file\n      await this.fs.writeFile(tempPath, content);\n      \n      // Move temp file to target\n      await this.fs.move(tempPath, targetPath);\n      \n      // Remove source file after successful move\n      if (await this.fs.exists(sourcePath)) {\n        await this.fs.remove(sourcePath);\n      }\n    } catch (error) {\n      // Clean up temp file on error\n      try {\n        if (await this.fs.exists(tempPath)) {\n          await this.fs.remove(tempPath);\n        }\n      } catch (cleanupError) {\n        // Ignore cleanup errors\n      }\n      throw error;\n    }\n  }\n\n  // Atomic Operations\n\n  async withTempFile<T>(filePath: string, operation: (tempPath: string) => Promise<T>): Promise<T> {\n    const tempPath = `${filePath}.tmp`;\n    try {\n      const result = await operation(tempPath);\n      if (await this.fs.exists(tempPath)) {\n        await this.fs.move(tempPath, filePath);\n      }\n      return result;\n    } finally {\n      // Always try to cleanup temp file\n      if (await this.fs.exists(tempPath)) {\n        await this.fs.remove(tempPath);\n      }\n    }\n  }\n\n  async withBackup<T>(filePath: string, operation: () => Promise<T>): Promise<T> {\n    const backupPath = `${filePath}.bak`;\n    \n    // Create backup if file exists by copying content\n    if (await this.fs.exists(filePath)) {\n      try {\n        const content = await this.fs.readFile(filePath);\n        await this.fs.writeFile(backupPath, content);\n      } catch (error) {\n        throw new Error('Backup creation failed');\n      }\n    }\n\n    try {\n      // Run the operation\n      const result = await operation();\n      \n      // Remove backup on success\n      if (await this.fs.exists(backupPath)) {\n        try {\n          await this.fs.remove(backupPath);\n        } catch (cleanupError) {\n          // Operation succeeded but cleanup failed\n          // We want to preserve the backup file and throw cleanup error\n          throw new Error('Cleanup failed');\n        }\n      }\n      \n      return result;\n    } catch (error) {\n      const operationError = error as Error;\n      \n      // Don't attempt cleanup if operation failed with cleanup error\n      if (operationError.message === 'Cleanup failed') {\n        throw operationError;\n      }\n      \n      // Restore from backup on error if it exists\n      if (await this.fs.exists(backupPath)) {\n        try {\n          // Read backup content first to ensure we can read it\n          const backupContent = await this.fs.readFile(backupPath);\n          \n          // Remove original file if it exists\n          if (await this.fs.exists(filePath)) {\n            await this.fs.remove(filePath);\n          }\n          \n          // Write backup content back to original file\n          await this.fs.writeFile(filePath, backupContent);\n        } catch (restoreError) {\n          // If restore fails, preserve backup and throw restore error\n          throw new Error('Restore failed');\n        }\n      }\n      \n      // If we get here, either:\n      // 1. There was no backup to restore from\n      // 2. Restore succeeded (but we keep the backup in case cleanup fails)\n      throw operationError;\n    }\n  }\n\n  // Directory Operations\n\n  async ensureDir(dirPath: string): Promise<void> {\n    await this.fs.ensureDir(dirPath);\n  }\n\n  async ensureParentDir(filePath: string): Promise<void> {\n    await this.ensureDir(path.dirname(filePath));\n  }\n\n  // File Search Operations\n\n  async findFile(filename: string, searchPaths: string[]): Promise<string | undefined> {\n    for (const dir of searchPaths) {\n      const filePath = path.join(dir, filename);\n      if (await this.fs.exists(filePath)) {\n        return filePath;\n      }\n    }\n    return undefined;\n  }\n\n  async findFiles(predicate: (filename: string) => boolean, searchPaths: string[]): Promise<string[]> {\n    const results: string[] = [];\n    \n    for (const dir of searchPaths) {\n      if (!await this.fs.exists(dir)) {\n        continue;\n      }\n      \n      const files = await this.fs.readdir(dir);\n      for (const file of files) {\n        if (predicate(file)) {\n          results.push(path.join(dir, file));\n        }\n      }\n    }\n    \n    return results;\n  }\n} ","import { ValidationResult } from '../types.js';\nimport { LlmailConfig, ResolvedConfig } from './config.js';\n\n/**\n * Validates llmail configuration.\n * This is a focused utility that only handles config validation.\n * It ensures the config has the required structure and valid values.\n */\nexport class ConfigValidator {\n  /**\n   * Validate raw llmail configuration\n   */\n  validateConfig(config: LlmailConfig): ValidationResult {\n    const errors: string[] = [];\n\n    // Validate required arrays\n    if (!Array.isArray(config.types_list)) {\n      errors.push('types_list must be an array');\n    }\n\n    // Validate array contents if present\n    if (config.types_list?.some(type => typeof type !== 'string' || !type.match(/^[a-z0-9]+$/))) {\n      errors.push('types_list must contain only lowercase alphanumeric strings without hyphens');\n    }\n    if (config.active_states?.some(state => typeof state !== 'string' || !state.match(/^[a-z0-9]+$/))) {\n      errors.push('active_states must contain only lowercase alphanumeric strings without hyphens');\n    }\n    if (config.inactive_reasons?.some(reason => typeof reason !== 'string' || !reason.match(/^[a-z0-9]+$/))) {\n      errors.push('inactive_reasons must contain only lowercase alphanumeric strings without hyphens');\n    }\n\n    // Check for overlapping states if both arrays are present\n    if (config.active_states?.length > 0 && config.inactive_reasons?.length > 0) {\n      const activeStates = new Set(config.active_states);\n      for (const reason of config.inactive_reasons) {\n        if (activeStates.has(reason)) {\n          errors.push('States cannot be both active and inactive');\n          break;\n        }\n      }\n    }\n\n    // Validate required paths\n    if (!config.issues_dir) {\n      errors.push('issues_dir is required');\n    }\n    if (!config.inbox_dir) {\n      errors.push('inbox_dir is required');\n    }\n\n    // Validate plugins if present\n    if (config.plugins !== undefined) {\n      if (typeof config.plugins === 'string') {\n        // Single plugin string format\n        if (!config.plugins.match(/^[a-z0-9-]+$/)) {\n          errors.push('Plugin name must be lowercase alphanumeric with hyphens');\n        }\n      } else if (Array.isArray(config.plugins)) {\n        // Array format\n        for (const plugin of config.plugins) {\n          if (typeof plugin === 'string') {\n            // String array format\n            if (!plugin.match(/^[a-z0-9-]+$/)) {\n              errors.push('Plugin names must be lowercase alphanumeric with hyphens');\n            }\n          } else if (typeof plugin === 'object' && plugin !== null) {\n            // Object format with config\n            if (!plugin.name?.match(/^[a-z0-9-]+$/)) {\n              errors.push('Plugin names must be lowercase alphanumeric with hyphens');\n            }\n            if (plugin.config !== undefined && (typeof plugin.config !== 'object' || plugin.config === null)) {\n              errors.push('Plugin config must be an object');\n            }\n          } else {\n            errors.push('Invalid plugin configuration format');\n          }\n        }\n      } else {\n        errors.push('Invalid plugins configuration format');\n      }\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  /**\n   * Validate resolved configuration\n   * This is used after the config has been normalized and paths resolved\n   */\n  validateResolvedConfig(config: ResolvedConfig): ValidationResult {\n    const errors: string[] = [];\n\n    // Validate required arrays are present\n    if (!Array.isArray(config.types_list)) {\n      errors.push('Resolved config must have types_list array');\n    }\n    if (!Array.isArray(config.active_states)) {\n      errors.push('Resolved config must have active_states array');\n    }\n    if (!Array.isArray(config.inactive_reasons)) {\n      errors.push('Resolved config must have inactive_reasons array');\n    }\n\n    // Validate required paths are absolute\n    if (!config.issues_dir?.startsWith('/')) {\n      errors.push('Resolved issues_dir must be absolute path');\n    }\n    if (!config.inbox_dir?.startsWith('/')) {\n      errors.push('Resolved inbox_dir must be absolute path');\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n} ","import fs from 'fs-extra';\nimport path from 'path';\nimport { dump, load } from 'js-yaml';\nimport { FileSystemAdapter } from './file-system-adapter.js';\nimport { ConfigValidator } from './config-validator.js';\n\n/**\n * Core LLMail configuration interface.\n * All paths are relative to the config file location.\n */\nexport interface LlmailConfig {\n  types_list: string[];\n  active_states: string[];\n  inactive_reasons: string[];\n  issues_dir: string;\n  inbox_dir: string;\n  type_dirs?: string[];\n  plugins?: string | string[] | Array<{\n    name: string;\n    config?: Record<string, any>;\n  }>;\n}\n\nexport type ResolvedConfig = LlmailConfig;\n\nconst defaultConfig: LlmailConfig = {\n  types_list: [],\n  active_states: [],\n  inactive_reasons: [],\n  issues_dir: 'issues',\n  inbox_dir: 'inbox'  // Changed to be relative to root\n};\n\n/**\n * Normalize paths in config.\n * All paths in the config should remain relative to the config file location.\n */\nfunction normalizeConfigPaths(config: LlmailConfig): LlmailConfig {\n  // Normalize paths but keep them relative\n  return {\n    ...config,\n    issues_dir: path.normalize(config.issues_dir),\n    inbox_dir: path.normalize(config.inbox_dir)\n  };\n}\n\n/**\n * Load and validate config from a file\n */\nexport async function loadConfigFromFile(fs: FileSystemAdapter, configPath: string, rootDir: string): Promise<LlmailConfig> {\n  const exists = await fs.exists(configPath);\n  \n  if (!exists) {\n    // Return default config with normalized paths\n    return normalizeConfigPaths(defaultConfig);\n  }\n\n  try {\n    const content = await fs.readFile(configPath);\n    let config: any;\n    \n    try {\n      config = load(content) as LlmailConfig;\n    } catch (err) {\n      throw new Error('Failed to load config');\n    }\n\n    // Merge with defaults, ensuring default types are preserved\n    const mergedConfig = {\n      ...defaultConfig,\n      ...config,\n      // Don't merge arrays - use config values if present, otherwise use defaults\n      types_list: config.types_list || defaultConfig.types_list,\n      active_states: config.active_states || defaultConfig.active_states,\n      inactive_reasons: config.inactive_reasons || defaultConfig.inactive_reasons\n    };\n\n    // Validate config\n    const validator = new ConfigValidator();\n    const result = validator.validateConfig(mergedConfig);\n    if (!result.valid) {\n      throw new Error(`Invalid config: ${result.errors[0]}`);\n    }\n\n    // Normalize paths but keep them relative\n    return normalizeConfigPaths(mergedConfig);\n  } catch (err) {\n    if (err instanceof Error) {\n      throw err;\n    }\n    throw new Error('Failed to load config');\n  }\n}\n\n/**\n * Load llmail config from the default location or specified path\n */\nexport async function loadLlmailConfig(fs: FileSystemAdapter, rootDir: string = process.cwd(), configPath?: string): Promise<LlmailConfig> {\n  const resolvedConfigPath = configPath || path.join(rootDir, 'llmail.yaml');\n  try {\n    return await loadConfigFromFile(fs, resolvedConfigPath, rootDir);\n  } catch (err) {\n    // If config file doesn't exist or can't be loaded, return defaults with normalized paths\n    return normalizeConfigPaths(defaultConfig);\n  }\n}\n\n/**\n * Save config to the default location\n */\nexport async function saveLlmailConfig(fs: FileSystemAdapter, config: LlmailConfig, configPath: string): Promise<void> {\n  const yamlContent = dump(normalizeConfigPaths(config));\n  \n  // Ensure the directory exists\n  const configDir = path.dirname(configPath);\n  await fs.ensureDir(configDir);\n  \n  await fs.writeFile(configPath, yamlContent);\n} ","import { customAlphabet } from 'nanoid';\n\n// Only use lowercase alphanumeric characters for IDs\nconst ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';\nconst ID_LENGTH = 4;\n\n// Create a nanoid generator with our custom alphabet\nexport const generateId = customAlphabet(ALPHABET, ID_LENGTH); ","import { ValidationResult, FrontmatterMetadata } from '../types.js';\nimport { load } from 'js-yaml';\n\nexport class FileFormatValidator {\n  // More permissive regex that allows for extra spaces and newlines\n  private readonly FRONTMATTER_REGEX = /^-{3,}[\\r\\n\\s]+([\\s\\S]*?)[\\r\\n\\s]+-{3,}[\\r\\n\\s]*([\\s\\S]*)$/;\n\n  /**\n   * Validates that a file has the correct format:\n   * - Must be a markdown file\n   * - Must have frontmatter section that can be parsed as YAML\n   * - Must have some content (even if just whitespace)\n   */\n  validateFileFormat(filePath: string, content: string): ValidationResult {\n    const errors: string[] = [];\n\n    // Check file extension - case insensitive\n    if (!filePath.toLowerCase().endsWith('.md')) {\n      errors.push('File must be a markdown file');\n      return { valid: false, errors, warnings: [] };\n    }\n\n    // Check frontmatter structure - more permissive now\n    const match = content.match(this.FRONTMATTER_REGEX);\n    if (!match) {\n      errors.push('File must have frontmatter section marked with ---');\n      return { valid: false, errors, warnings: [] };\n    }\n\n    // Get frontmatter content, allowing for whitespace\n    const frontmatter = match[1].trim();\n    \n    // Validate YAML - only care if it parses\n    try {\n      const parsed = load(frontmatter);\n      if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n        errors.push('Frontmatter must be a valid YAML object');\n        return { valid: false, errors, warnings: [] };\n      }\n    } catch (err) {\n      errors.push('Frontmatter must be valid YAML');\n      return { valid: false, errors, warnings: [] };\n    }\n\n    return {\n      valid: true,\n      errors,\n      warnings: []\n    };\n  }\n\n  /**\n   * Parse frontmatter from content string\n   * Returns null if no valid frontmatter found\n   */\n  parseFrontmatter(content: string): Record<string, any> | null {\n    const match = content.match(this.FRONTMATTER_REGEX);\n    if (!match) {\n      return null;\n    }\n\n    try {\n      const frontmatter = match[1].trim();\n      const parsed = load(frontmatter);\n      if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n        return null;\n      }\n      return parsed as Record<string, any>;\n    } catch (err) {\n      return null;\n    }\n  }\n\n  validateFrontmatterFormat(content: string): ValidationResult {\n    // Check for empty content\n    if (!content.trim()) {\n      return {\n        valid: false,\n        errors: ['Content is empty'],\n        warnings: []\n      };\n    }\n\n    // Check for frontmatter delimiters\n    const match = content.match(/^---\\n([\\s\\S]*?\\n)---\\n/);\n    if (!match) {\n      return {\n        valid: false,\n        errors: ['Content must start with frontmatter delimiters (---)'],\n        warnings: []\n      };\n    }\n\n    try {\n      // Parse YAML content\n      const frontmatter = load(match[1]);\n      if (typeof frontmatter !== 'object' || frontmatter === null) {\n        return {\n          valid: false,\n          errors: ['Frontmatter must be an object'],\n          warnings: []\n        };\n      }\n    } catch (error: any) {\n      return {\n        valid: false,\n        errors: [`Failed to parse frontmatter: ${error.message}`],\n        warnings: []\n      };\n    }\n\n    return {\n      valid: true,\n      errors: [],\n      warnings: []\n    };\n  }\n} ","import { ValidationResult, FrontmatterMetadata } from '../types.js';\n\n/**\n * Validates the format and structure of metadata, not business rules.\n * Only checks that required fields exist and are of the correct type.\n */\nexport class MetadataFormatValidator {\n  /**\n   * Validates that required fields exist and are of the correct type\n   */\n  validateFormat(metadata: any): ValidationResult {\n    const errors: string[] = [];\n\n    // Check if metadata is an object\n    if (typeof metadata !== 'object' || metadata === null) {\n      errors.push('Metadata must be an object');\n      return {\n        valid: false,\n        errors,\n        warnings: []\n      };\n    }\n\n    // Validate required fields\n    const requiredFields = ['id', 'type', 'active'];\n    for (const field of requiredFields) {\n      if (!(field in metadata)) {\n        errors.push(`Missing required field: ${field}`);\n      }\n    }\n\n    // Validate field types and formats\n    if ('id' in metadata) {\n      if (typeof metadata.id !== 'string') {\n        errors.push('Field id must be a string');\n      } else if (!metadata.id.match(/^[a-zA-Z0-9-]+$/)) {\n        errors.push('Field id must contain only alphanumeric characters and hyphens');\n      }\n    }\n\n    if ('type' in metadata) {\n      if (typeof metadata.type !== 'string') {\n        errors.push('Field type must be a string');\n      } else if (!metadata.type.match(/^[a-zA-Z0-9-]+$/)) {\n        errors.push('Field type must contain only alphanumeric characters and hyphens');\n      }\n    }\n\n    if ('active' in metadata && typeof metadata.active !== 'boolean') {\n      errors.push('Field active must be a boolean');\n    }\n\n    // Validate optional state field when present and not undefined\n    if ('state' in metadata && metadata.state !== undefined) {\n      if (typeof metadata.state !== 'string') {\n        errors.push('Field state must be a string');\n      } else if (!metadata.state.match(/^[a-zA-Z0-9-]+$/)) {\n        errors.push('Field state must contain only alphanumeric characters and hyphens');\n      }\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  /**\n   * Clean metadata by removing invalid fields and normalizing values\n   */\n  cleanMetadata(meta: Partial<FrontmatterMetadata>): FrontmatterMetadata {\n    // Ensure required fields are present\n    if (meta.id === undefined || meta.type === undefined || typeof meta.active !== 'boolean') {\n      throw new Error('Required fields missing: id, type, and active must be present');\n    }\n\n    // Start with required fields\n    const cleaned: FrontmatterMetadata = {\n      id: meta.id,  // Preserve ID case\n      type: meta.type.toLowerCase(),\n      active: meta.active\n    };\n\n    // Add optional fields if present and not undefined\n    if (meta.state !== undefined) {\n      cleaned.state = meta.state.toLowerCase();\n    }\n\n    // Copy any other fields\n    for (const [key, value] of Object.entries(meta)) {\n      if (!['id', 'type', 'active', 'state'].includes(key) && value !== undefined) {\n        cleaned[key] = value;\n      }\n    }\n\n    return cleaned;\n  }\n} ","import { ValidationResult } from '../types.js';\nimport { FileSystemAdapter } from '../utils/file-system-adapter.js';\nimport path from 'path';\n\nexport class FileSystemValidator {\n  constructor(private fs: FileSystemAdapter) {}\n\n  /**\n   * Validates file operations\n   */\n  async validateFileOperation(targetPath: string): Promise<ValidationResult> {\n    const errors: string[] = [];\n\n    // Check if target directory exists\n    const targetDir = path.dirname(targetPath);\n    if (!await this.fs.exists(targetDir)) {\n      errors.push(`Target directory does not exist: ${targetDir}`);\n    }\n\n    // Check if target file already exists\n    if (await this.fs.exists(targetPath)) {\n      errors.push(`Target file already exists: ${targetPath}`);\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  /**\n   * Validates file paths for move operations\n   */\n  async validateFilePath(sourcePath: string, targetPath: string): Promise<ValidationResult> {\n    const errors: string[] = [];\n\n    // Check if source file exists\n    if (!await this.fs.exists(sourcePath)) {\n      errors.push(`Source file does not exist: ${sourcePath}`);\n    }\n\n    // Check if target directory exists\n    const targetDir = path.dirname(targetPath);\n    if (!await this.fs.exists(targetDir)) {\n      errors.push(`Target directory does not exist: ${targetDir}`);\n    }\n\n    // Check if target file already exists and is different from source\n    if (sourcePath !== targetPath && await this.fs.exists(targetPath)) {\n      errors.push(`Target file already exists: ${targetPath}`);\n    }\n\n    // Check if paths are absolute\n    if (!path.isAbsolute(sourcePath)) {\n      errors.push('Source path must be absolute');\n    }\n    if (!path.isAbsolute(targetPath)) {\n      errors.push('Target path must be absolute');\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  /**\n   * Validates directory structure\n   */\n  validateDirectoryStructure(dirPath: string): ValidationResult {\n    const errors: string[] = [];\n\n    // Check if path is absolute\n    if (!path.isAbsolute(dirPath)) {\n      errors.push('Directory path must be absolute');\n    }\n\n    // Check for parent directory traversal by looking at raw path components\n    const parts = dirPath.split(path.sep);\n    if (parts.some(part => part === '..')) {\n      errors.push('Directory path cannot contain \"..\"');\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  async validateFileExists(filePath: string): Promise<ValidationResult> {\n    const errors: string[] = [];\n    \n    if (!(await this.fs.exists(filePath))) {\n      errors.push(`File does not exist: ${filePath}`);\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  async validateFileDoesNotExist(filePath: string): Promise<ValidationResult> {\n    const errors: string[] = [];\n    \n    if (await this.fs.exists(filePath)) {\n      errors.push(`File already exists: ${filePath}`);\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n\n  async validateDirectoryExists(dirPath: string): Promise<ValidationResult> {\n    const errors: string[] = [];\n    \n    if (!(await this.fs.exists(dirPath))) {\n      errors.push(`Directory does not exist: ${dirPath}`);\n    } else {\n      const stats = await this.fs.stat(dirPath);\n      if (!stats.isDirectory()) {\n        errors.push(`Path exists but is not a directory: ${dirPath}`);\n      }\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors,\n      warnings: []\n    };\n  }\n} ","import { load, dump } from 'js-yaml';\n\nexport interface DocSections {\n  frontmatter: string;\n  frontmatterObj: Record<string, any>;\n  content: string;\n  xml: string;\n}\n\nconst YAML_DUMP_OPTIONS = {\n  lineWidth: -1,\n  noRefs: true,\n  sortKeys: true\n};\n\n// Regex to match XML blocks at the bottom of the file\nconst XML_CONTAINER_REGEX = /<XML>([\\s\\S]*?)<\\/XML>/gi;\n\n// Regex to match frontmatter section\nconst FRONTMATTER_REGEX = /^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/;\n\nexport function parseDocSections(fileString: string): DocSections {\n  // First try to extract frontmatter\n  const frontmatterMatch = fileString.match(FRONTMATTER_REGEX);\n  let frontmatterRaw = '';\n  let frontmatterObj: Record<string, any> = {};\n  let contentSection = fileString;\n  let xmlSection = '';\n\n  if (!frontmatterMatch) {\n    // No frontmatter, look for XML blocks in the entire file\n    const xmlMatches = [...contentSection.matchAll(XML_CONTAINER_REGEX)];\n    if (xmlMatches.length > 0) {\n      // Combine all XML content\n      xmlSection = xmlMatches.map(m => m[1].trim()).join('\\n\\n');\n      // Remove all XML blocks from content\n      contentSection = contentSection.replace(XML_CONTAINER_REGEX, '').trim();\n    } else {\n      contentSection = fileString.trim();\n    }\n  } else {\n    frontmatterRaw = frontmatterMatch[1];\n    const rest = frontmatterMatch[2];\n\n    try {\n      frontmatterObj = load(frontmatterRaw) || {};\n    } catch {\n      // If invalid YAML, frontmatterObj remains {}\n    }\n\n    // Look for XML blocks in the rest of the content\n    const xmlMatches = [...rest.matchAll(XML_CONTAINER_REGEX)];\n    if (xmlMatches.length > 0) {\n      // Combine all XML content\n      xmlSection = xmlMatches.map(m => m[1].trim()).join('\\n\\n');\n      // Remove all XML blocks from content\n      contentSection = rest.replace(XML_CONTAINER_REGEX, '').trim();\n    } else {\n      contentSection = rest.trim();\n    }\n  }\n\n  return {\n    frontmatter: frontmatterRaw.trim(),\n    frontmatterObj,\n    content: contentSection,\n    xml: xmlSection\n  };\n}\n\nexport function rebuildDocSections(sections: DocSections): string {\n  const frontmatterStr = dump(sections.frontmatterObj, YAML_DUMP_OPTIONS);\n  let result = '';\n\n  // Add frontmatter if we have any frontmatter object properties\n  if (Object.keys(sections.frontmatterObj).length > 0) {\n    result += `---\\n${frontmatterStr}---\\n\\n`;\n  }\n\n  // Add content if present\n  if (sections.content) {\n    result += `${sections.content.trim()}\\n`;\n    // Only add extra newline if we have XML content\n    if (sections.xml) {\n      result += '\\n';\n    }\n  }\n\n  // Add XML section if present\n  if (sections.xml) {\n    result += `<XML>\\n${sections.xml.trim()}\\n</XML>\\n`;\n  }\n\n  return result;\n}\n\nexport function ensureTimestamps(meta: Record<string, any>): void {\n  const now = new Date().toISOString();\n  if (!meta.created) {\n    meta.created = now;\n  }\n  meta.updated = now;\n} ","import { FrontmatterMetadata, ValidationResult } from '../types.js';\nimport { FileSystemAdapter } from '../utils/file-system-adapter.js';\nimport { PathnameService } from './pathname-service.js';\nimport { load, dump, DEFAULT_SCHEMA, DumpOptions } from 'js-yaml';\nimport path from 'path';\nimport { logger } from '../utils/logger.js';\nimport { IntentService } from './intent-service.js';\nimport { FileService } from './file-service.js';\nimport { FileFormatValidator } from '../validation/file-format-validator.js';\nimport { MetadataFormatValidator } from '../validation/metadata-format-validator.js';\nimport { FileSystemValidator } from '../validation/file-system-validator.js';\nimport { ResolvedConfig } from '../utils/config.js';\nimport { PluginService } from './plugin-service.js';\nimport { parseDocSections, rebuildDocSections } from '../utils/doc-sections.js';\nimport { join } from 'path';\n\ninterface UpdateMetadata {\n  author?: string;\n  reason?: string;\n  [key: string]: string | undefined;\n}\n\ninterface UpdateOptions {\n  id: string;\n  content: string;\n  metadata?: UpdateMetadata;\n  time?: boolean;\n}\n\ninterface XMLOptions {\n  id: string;\n  tagName: string;\n  content: string;\n  metadata?: Record<string, string>;\n  time?: boolean;\n}\n\nexport class IssueService {\n  private readonly FRONTMATTER_REGEX = /^---\\n([\\s\\S]*?\\n)---\\n([\\s\\S]*)$/;\n\n  // YAML dump options for consistent frontmatter formatting\n  private readonly YAML_DUMP_OPTIONS: DumpOptions = {\n    lineWidth: -1,\n    noRefs: true,\n    schema: DEFAULT_SCHEMA,\n    styles: {\n      '!!null': 'lowercase',\n      '!!bool': 'lowercase',\n      '!!str': 'double'\n    },\n    quotingType: '\"' as const,\n    forceQuotes: true\n  };\n\n  private config: ResolvedConfig;\n  private pathnameService: PathnameService;\n  private fs: FileSystemAdapter;\n  private intentService: IntentService;\n  private fileService: FileService;\n  private fileFormatValidator: FileFormatValidator;\n  private metadataValidator: MetadataFormatValidator;\n  private fileSystemValidator: FileSystemValidator;\n  private pluginService?: PluginService;\n\n  constructor(\n    pathnameService: PathnameService,\n    fs: FileSystemAdapter,\n    intentService: IntentService,\n    fileService: FileService,\n    fileFormatValidator: FileFormatValidator,\n    metadataValidator: MetadataFormatValidator,\n    fileSystemValidator: FileSystemValidator,\n    pluginService?: PluginService\n  ) {\n    this.pathnameService = pathnameService;\n    this.fs = fs;\n    this.intentService = intentService;\n    this.fileService = fileService;\n    this.fileFormatValidator = fileFormatValidator;\n    this.metadataValidator = metadataValidator;\n    this.fileSystemValidator = fileSystemValidator;\n    this.pluginService = pluginService;\n    this.config = pathnameService.getConfig();\n  }\n\n  fileMethods = {\n    writeNewFile: async (metadata: FrontmatterMetadata, content: string = ''): Promise<string> => {\n      // Clean and validate metadata\n      const cleanedMeta = this.metadataValidator.cleanMetadata(metadata);\n      const validation = this.validateMetadata(cleanedMeta);\n      if (!validation.valid) {\n        throw new Error(validation.errors.join(', '));\n      }\n\n      // Create document sections\n      const sections = {\n        frontmatter: dump({\n          ...cleanedMeta,\n          created: new Date().toISOString()\n        }, this.YAML_DUMP_OPTIONS),\n        frontmatterObj: {\n          ...cleanedMeta,\n          created: new Date().toISOString()\n        },\n        content: content.trim(),\n        xml: ''\n      };\n\n      // Build the document\n      const fullContent = rebuildDocSections(sections);\n\n      // Get path based on metadata\n      const location = this.pathnameService.deriveFileLocation(cleanedMeta);\n      const filePath = path.join(location.dirname, location.basename);\n\n      // Ensure target directory exists\n      await this.fileService.ensureDir(location.dirname);\n\n      // Write file atomically\n      await this.fileService.writeFile(filePath, fullContent);\n      \n      return filePath;\n    },\n\n    saveAndMoveFile: async (filePath: string, metadata: FrontmatterMetadata): Promise<string> => {\n      // Let IntentService interpret the metadata\n      const interpretedMeta = this.intentService.interpretMetadata(metadata);\n\n      // Clean and validate the transition\n      const currentMeta = await this.frontmatterMethods.getFrontmatterMetadata(filePath);\n      \n      const updatedMeta = this.intentService.cleanStateTransition(currentMeta || metadata, interpretedMeta);\n\n      // Get new path based on interpreted metadata\n      const location = this.pathnameService.deriveFileLocation(updatedMeta);\n      const newPath = path.join(location.dirname, location.basename);\n\n      // Read current content and update frontmatter\n      const content = await this.fileService.readFile(filePath);\n      const newContent = this.frontmatterMethods.updateFrontmatter(content, updatedMeta);\n\n      // Normalize paths before comparison\n      const normalizedNewPath = path.normalize(newPath);\n      const normalizedFilePath = path.normalize(filePath);\n\n      // If path is changing, use atomic move which will handle cleanup\n      if (normalizedNewPath !== normalizedFilePath) {\n        await this.fileService.atomicMove(filePath, newPath, newContent);\n      } else {\n        // Otherwise just update content in place\n        await this.fileService.writeFile(filePath, newContent);\n      }\n\n      return newPath;\n    },\n\n    moveFileWithMetadata: async (sourcePath: string, targetPath: string, metadata: FrontmatterMetadata): Promise<void> => {\n      // Get current metadata\n      const currentMeta = await this.frontmatterMethods.getFrontmatterMetadata(sourcePath);\n      if (!currentMeta) {\n        throw new Error('No frontmatter found');\n      }\n\n      // Merge with new metadata (new values take precedence)\n      const mergedMeta = {\n        ...currentMeta,  // Start with all current metadata\n        ...metadata,     // Override with new metadata\n        created: currentMeta.created  // Always preserve created timestamp\n      };\n\n      // Let IntentService interpret the metadata\n      const interpretedMeta = this.intentService.interpretMetadata(mergedMeta);\n      \n      // Clean and validate metadata before move\n      const cleanedMeta = this.metadataValidator.cleanMetadata(interpretedMeta);\n      const validation = this.validateMetadata(cleanedMeta);\n      if (!validation.valid) {\n        throw new Error(`Invalid metadata: ${validation.errors.join(', ')}`);\n      }\n\n      // Read current content and update frontmatter\n      const content = await this.fileService.readFile(sourcePath);\n      \n      // Ensure we preserve the state in the frontmatter only if it exists\n      const frontmatterToWrite = {\n        ...cleanedMeta,\n        ...('state' in metadata && { state: metadata.state })  // Only preserve state if it exists as a property\n      };\n      const newContent = this.frontmatterMethods.updateFrontmatter(content, frontmatterToWrite);\n      \n      // Get target path based on metadata\n      const location = this.pathnameService.deriveFileLocation(cleanedMeta);\n      const derivedTargetPath = path.join(location.dirname, location.basename);\n      \n      // Use derived path if no target path is provided\n      const finalTargetPath = targetPath || derivedTargetPath;\n\n      // Normalize paths for comparison\n      const normalizedSource = path.normalize(sourcePath);\n      const normalizedTarget = path.normalize(finalTargetPath);\n\n      // Perform atomic move with backup\n      await this.fileService.withBackup(normalizedSource, async () => {\n        if (normalizedSource !== normalizedTarget) {\n          await this.fileService.atomicMove(normalizedSource, normalizedTarget, newContent);\n        } else {\n          await this.fileService.writeFile(normalizedSource, newContent);\n        }\n      });\n    },\n\n    findFilesByState: async (state: string): Promise<string[]> => {\n      // Let IntentService determine valid paths and state interpretation\n      const stateInfo = this.intentService.interpretState(state);\n      const paths = this.pathnameService.getPossiblePathsForState(state);\n      \n      const files = await this.fileService.findFiles((f) => f.endsWith('.md'), paths);\n      const results: string[] = [];\n      \n      for (const file of files) {\n        const meta = await this.frontmatterMethods.getFrontmatterMetadata(file);\n        if (!meta) continue;\n        \n        // Special handling for inbox state\n        if (state === 'inbox') {\n          // For inbox, we only care about the file location and active status\n          const normalizedFile = path.normalize(file);\n          const normalizedInbox = path.normalize(this.config.inbox_dir);\n          \n          if (normalizedFile.startsWith(normalizedInbox) && meta.active === true) {\n            results.push(file);\n          }\n          continue;\n        }\n        \n        // For other states, let IntentService determine if file matches\n        if (this.intentService.matchesState(meta, stateInfo)) {\n          // Get canonical path based on metadata\n          const location = this.pathnameService.deriveFileLocation(meta);\n          const canonicalPath = path.join(location.dirname, location.basename);\n          \n          // Normalize paths for comparison\n          const normalizedFile = path.normalize(file);\n          const normalizedCanonical = path.normalize(canonicalPath);\n          \n          // Only add if the file is in the correct location\n          if (normalizedFile === normalizedCanonical) {\n            results.push(canonicalPath);\n          }\n        }\n      }\n      return results;\n    },\n\n    getMetadataFromPath: async (filePath: string): Promise<FrontmatterMetadata | null> => {\n      try {\n        const content = await this.fileService.readFile(filePath);\n        const frontmatter = await this.frontmatterMethods.parseFrontmatter(content);\n        if (!frontmatter) {\n          return null;\n        }\n        return frontmatter as FrontmatterMetadata;\n      } catch (error: any) {\n        // Only catch \"file not found\" errors\n        if (error.message === 'File not found') {\n          return null;\n        }\n        throw error;\n      }\n    },\n\n    findFileById: async (id: string): Promise<string | undefined> => {\n      const searchDirs = this.pathnameService.getPossiblePathsForId(id);\n      \n      const matches: { path: string; meta: FrontmatterMetadata | null }[] = [];\n      const errors: { path: string; error: Error }[] = [];\n      \n      for (const dir of searchDirs) {\n        const filesInDir = await this.fileService.findFiles((f) => f.endsWith('.md'), [dir]);\n        \n        for (const file of filesInDir) {\n          if (!this.pathnameService.matchesId(path.basename(file), id)) {\n            continue;\n          }\n\n          try {\n            const meta = await this.fileMethods.getMetadataFromPath(file);\n            \n            // Skip files with no metadata or no ID\n            if (!meta || !meta.id) {\n              continue;\n            }\n\n            // If metadata exists and has an ID, it must match exactly\n            if (meta.id.toLowerCase() !== id.toLowerCase()) {\n              // Throw immediately if IDs don't match\n              throw new Error(`System integrity error: File ${file} has ID that does not match filename (${meta.id} vs ${id})`);\n            }\n            matches.push({ path: file, meta });\n          } catch (error: any) {\n            // Always rethrow system integrity errors\n            if (error.message.includes('System integrity error')) {\n              throw error;\n            }\n            errors.push({ path: file, error });\n          }\n        }\n      }\n\n      if (errors.length > 0) {\n        const errorDetails = errors.map(e => `${e.path} (${e.error.message})`).join(', ');\n        throw new Error(`System integrity error: Failed to parse metadata in files: ${errorDetails}`);\n      }\n\n      // Only consider matches where metadata ID matches exactly if present\n      const validMatches = matches.filter(m => !m.meta?.id || m.meta.id.toLowerCase() === id.toLowerCase());\n\n      if (validMatches.length > 1) {\n        const foundFiles = validMatches.map(m => m.path).join(', ');\n        throw new Error(`System integrity error: Multiple files found for ID ${id}: ${foundFiles}`);\n      }\n\n      return validMatches[0]?.path;\n    },\n\n    findFilesByType: async (type: string): Promise<string[]> => {\n      const paths = this.pathnameService.getPossiblePathsForType(type);\n      const files = await this.fileService.findFiles((f) => f.endsWith('.md'), paths);\n      const results: string[] = [];\n      for (const file of files) {\n        const meta = await this.fileMethods.getMetadataFromPath(file);\n        if (meta?.type === type) {\n          results.push(file);\n        }\n      }\n      return results;\n    }\n  };\n\n  frontmatterMethods = {\n    parseFrontmatter: async (content: string): Promise<Record<string, any> | null> => {\n      // Use doc-sections to parse the content\n      const sections = parseDocSections(content);\n      return sections.frontmatterObj || null;\n    },\n\n    updateFrontmatter: (content: string, frontmatter: FrontmatterMetadata): string => {\n      // Parse the document using doc-sections\n      const sections = parseDocSections(content);\n      \n      // Update the frontmatter object\n      sections.frontmatterObj = frontmatter;\n      sections.frontmatter = dump(frontmatter, this.YAML_DUMP_OPTIONS);\n\n      // Rebuild the document with the new frontmatter\n      return rebuildDocSections(sections);\n    },\n\n    createFrontmatter: async (metadata: FrontmatterMetadata): Promise<string> => {\n      const frontmatter = {\n        ...metadata,\n        created: new Date().toISOString()\n      };\n\n      // Create a new document with only frontmatter\n      const sections = {\n        frontmatter: dump(frontmatter, this.YAML_DUMP_OPTIONS),\n        frontmatterObj: frontmatter,\n        content: '',\n        xml: ''\n      };\n\n      // Build the document\n      return rebuildDocSections(sections);\n    },\n\n    getFrontmatterMetadata: async (filePath: string): Promise<FrontmatterMetadata | null> => {\n      try {\n        const content = await this.fileService.readFile(filePath);\n        const sections = parseDocSections(content);\n        // Return null if there is no frontmatter or if frontmatterObj is empty\n        if (!sections.frontmatter || Object.keys(sections.frontmatterObj).length === 0) {\n          return null;\n        }\n        return sections.frontmatterObj as FrontmatterMetadata;\n      } catch (error: any) {\n        if (error.message === 'File not found') {\n          return null;\n        }\n        throw error;\n      }\n    },\n\n    isValidFrontmatterMetadata: (meta: any): meta is FrontmatterMetadata => {\n      return (\n        typeof meta === 'object' &&\n        meta !== null &&\n        typeof meta.id === 'string' &&\n        typeof meta.type === 'string' &&\n        typeof meta.active === 'boolean'\n      );\n    },\n\n    validateMetadata: (metadata: FrontmatterMetadata): ValidationResult => {\n      // First validate format\n      const formatValidation = this.metadataValidator.validateFormat(metadata);\n      if (!formatValidation.valid) {\n        return formatValidation;\n      }\n\n      // Then apply plugin validation chain if plugins exist\n      if (this.pluginService) {\n        const pluginValidation = this.xmlMethods.applyPluginValidation(metadata);\n        if (!pluginValidation.valid) {\n          return pluginValidation;\n        }\n\n        // If plugin validation passed but had warnings, merge them with config validation\n        const configValidation = this.intentService.validateMetadataAgainstConfig(metadata);\n        return {\n          valid: configValidation.valid,\n          errors: configValidation.errors,\n          warnings: [...pluginValidation.warnings, ...configValidation.warnings]\n        };\n      }\n\n      // Finally validate against config/business rules\n      return this.intentService.validateMetadataAgainstConfig(metadata);\n    },\n\n    validateStateTransition: (current: FrontmatterMetadata, next: FrontmatterMetadata): ValidationResult => {\n      return this.intentService.validateStateTransition(\n        { pathname: '', metadata: current },\n        { pathname: '', metadata: next }\n      );\n    },\n\n    markAsDone: async (id: string, reason: string): Promise<string> => {\n      const filePath = await this.fileMethods.findFileById(id);\n      if (!filePath) {\n        throw new Error(`File not found for id: ${id}`);\n      }\n\n      // Update metadata with done state\n      const updates: Partial<FrontmatterMetadata> = {\n        active: false,\n        state: reason || 'done',\n        inactive_timestamp: new Date().toISOString()\n      };\n\n      // Apply the state transition\n      await this.frontmatterMethods.transitionActiveState(filePath, updates);\n\n      return filePath;\n    },\n\n    setFrontmatterMetadata: async (filePath: string, updates: Partial<FrontmatterMetadata>): Promise<string> => {\n      // Get current metadata\n      const currentMeta = await this.frontmatterMethods.getFrontmatterMetadata(filePath);\n      if (!currentMeta) {\n        throw new Error('No frontmatter found');\n      }\n\n      // Merge updates with current metadata\n      const updatedMeta = {\n        ...currentMeta,\n        ...updates\n      };\n\n      // Let IntentService interpret the metadata\n      const interpretedMeta = this.intentService.interpretMetadata(updatedMeta);\n\n      // Get new path based on interpreted metadata\n      const location = this.pathnameService.deriveFileLocation(interpretedMeta);\n      const newPath = path.join(location.dirname, location.basename);\n\n      // Read current content and update frontmatter\n      const content = await this.fileService.readFile(filePath);\n      const newContent = this.frontmatterMethods.updateFrontmatter(content, interpretedMeta);\n\n      // Normalize paths before comparison\n      const normalizedNewPath = path.normalize(newPath);\n      const normalizedFilePath = path.normalize(filePath);\n\n      // If path is changing, use atomic move which will handle cleanup\n      if (normalizedNewPath !== normalizedFilePath) {\n        await this.fileService.atomicMove(filePath, newPath, newContent);\n      } else {\n        // Otherwise just update content in place\n        await this.fileService.writeFile(filePath, newContent);\n      }\n\n      return newPath;\n    },\n\n    transitionActiveState: async (filePath: string, next: Partial<FrontmatterMetadata>): Promise<void> => {\n      const currentMeta = await this.frontmatterMethods.getFrontmatterMetadata(filePath);\n      if (!currentMeta) {\n        throw new Error('Could not get current metadata');\n      }\n\n      // Let IntentService interpret the metadata\n      const interpretedMeta = this.intentService.interpretMetadata(next);\n\n      // Clean and validate the transition\n      const updatedMeta = this.intentService.cleanStateTransition(currentMeta, interpretedMeta);\n      const validation = this.frontmatterMethods.validateStateTransition(currentMeta, updatedMeta);\n      if (!validation.valid) {\n        throw new Error(`Invalid state transition: ${validation.errors.join(', ')}`);\n      }\n\n      // Get new path and move file\n      const location = this.pathnameService.deriveFileLocation(updatedMeta);\n      const newPath = path.join(location.dirname, location.basename);\n\n      // Read current content and update frontmatter\n      const content = await this.fileService.readFile(filePath);\n      const newContent = this.frontmatterMethods.updateFrontmatter(content, updatedMeta);\n\n      // Write to new location atomically\n      await this.fileService.atomicMove(filePath, newPath, newContent);\n    }\n  };\n\n  xmlMethods = {\n    formatXMLAttributes: (metadata: Record<string, string> = {}, timestamp: string | false = false): string => {\n      const attrs: string[] = [];\n      \n      // Add timestamp first if provided\n      if (timestamp !== false) {\n        attrs.push(`time=\"${timestamp}\"`);\n      }\n      \n      // Add all other metadata attributes\n      for (const [key, value] of Object.entries(metadata)) {\n        if (value !== undefined) {\n          // Escape quotes in attribute values\n          const escapedValue = value.replace(/\"/g, '&quot;');\n          attrs.push(`${key}=\"${escapedValue}\"`);\n        }\n      }\n      \n      return attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n    },\n\n    createXMLBlock: (tagName: string, content: string, metadata?: Record<string, string>, includeTime: boolean = false): string => {\n      const timestamp = includeTime ? new Date().toISOString() : false;\n      const attributes = this.xmlMethods.formatXMLAttributes(metadata, timestamp);\n      \n      // Ensure content has proper line endings and no extra whitespace\n      const normalizedContent = content.trim();\n      \n      // Return XML block with proper spacing - single newline within block\n      return `<${tagName}${attributes}>\\n${normalizedContent}\\n</${tagName}>`;\n    },\n\n    prependXML: async (options: XMLOptions): Promise<void> => {\n      const { id, tagName, content, metadata, time = false } = options;\n\n      // Find the file using findFileById\n      const filePath = await this.fileMethods.findFileById(id);\n      if (!filePath) {\n        throw new Error(`File not found for id: ${id}`);\n      }\n\n      // Read current content\n      const currentContent = await this.fileService.readFile(filePath);\n\n      // Parse using doc-sections\n      const sections = parseDocSections(currentContent);\n\n      // Create new XML block\n      const xmlBlock = this.xmlMethods.createXMLBlock(tagName, content, metadata, time);\n\n      // Prepend the new block to existing XML content with proper spacing\n      sections.xml = sections.xml\n        ? `${xmlBlock}\\n\\n${sections.xml.trim()}`\n        : xmlBlock;\n\n      // Rebuild the document\n      const newContent = rebuildDocSections(sections);\n\n      // Write updated content atomically\n      await this.fileService.writeFile(filePath, newContent);\n    },\n\n    appendXML: async (options: XMLOptions): Promise<void> => {\n      const { id, tagName, content, metadata, time = false } = options;\n\n      // Find the file using findFileById\n      const filePath = await this.fileMethods.findFileById(id);\n      if (!filePath) {\n        throw new Error(`File not found for id: ${id}`);\n      }\n\n      // Read current content\n      const currentContent = await this.fileService.readFile(filePath);\n\n      // Parse using doc-sections\n      const sections = parseDocSections(currentContent);\n\n      // Create new XML block\n      const xmlBlock = this.xmlMethods.createXMLBlock(tagName, content, metadata, time);\n\n      // Append the new block to existing XML content with proper spacing\n      sections.xml = sections.xml\n        ? `${sections.xml.trim()}\\n\\n${xmlBlock}`\n        : xmlBlock;\n\n      // Rebuild the document\n      const newContent = rebuildDocSections(sections);\n\n      // Write updated content atomically\n      await this.fileService.writeFile(filePath, newContent);\n    },\n\n    prependUpdate: async (options: UpdateOptions): Promise<void> => {\n      const { metadata, ...rest } = options;\n      // Convert UpdateMetadata to Record<string, string> by filtering out undefined values\n      const cleanedMetadata = metadata ? \n        Object.fromEntries(\n          Object.entries(metadata)\n            .filter(([_, value]) => value !== undefined)\n            .map(([key, value]) => [key, value as string])  // Assert non-undefined values are strings\n        ) as Record<string, string> : undefined;\n\n      await this.xmlMethods.prependXML({\n        ...rest,\n        tagName: 'Update',\n        time: options.time ?? true, // Default to true for Update blocks\n        metadata: cleanedMetadata\n      });\n    },\n\n    appendUpdate: async (options: UpdateOptions): Promise<void> => {\n      const { metadata, ...rest } = options;\n      // Convert UpdateMetadata to Record<string, string> by filtering out undefined values\n      const cleanedMetadata = metadata ? \n        Object.fromEntries(\n          Object.entries(metadata)\n            .filter(([_, value]) => value !== undefined)\n            .map(([key, value]) => [key, value as string])  // Assert non-undefined values are strings\n        ) as Record<string, string> : undefined;\n\n      await this.xmlMethods.appendXML({\n        ...rest,\n        tagName: 'Update',\n        time: options.time ?? true, // Default to true for Update blocks\n        metadata: cleanedMetadata\n      });\n    },\n\n    applyPluginValidation: (metadata: FrontmatterMetadata): ValidationResult => {\n      const result: ValidationResult = { \n        valid: true, \n        errors: [], \n        warnings: []\n      };\n\n      // Get plugins in priority order (already sorted by PluginService)\n      const plugins = this.pluginService!.getPlugins();\n\n      for (const plugin of plugins) {\n        try {\n          if (plugin.validateMetadata) {\n            const pluginResult = plugin.validateMetadata(metadata);\n            \n            // Merge warnings\n            if (pluginResult.warnings) {\n              result.warnings.push(...pluginResult.warnings);\n            }\n\n            // If plugin validation fails, merge errors and mark as invalid\n            if (!pluginResult.valid) {\n              result.valid = false;\n              if (pluginResult.errors) {\n                result.errors.push(...pluginResult.errors);\n              }\n            }\n          }\n        } catch (error: any) {\n          // Log error but continue with other plugins\n          logger.error(`Plugin ${plugin.name} validation failed:`, error);\n          result.warnings.push(`Plugin ${plugin.name} validation error: ${error.message}`);\n        }\n      }\n\n      return result;\n    }\n  };\n\n  // Public methods for validation\n  validateMetadata = this.frontmatterMethods.validateMetadata;\n  validateStateTransition = this.frontmatterMethods.validateStateTransition;\n\n  getIssueDirectories(): string[] {\n    const dirs = [];\n    const paths = this.pathnameService.getActivityDirectories();\n    const issueTypes = this.pathnameService.getConfig().types_list;\n    for (const type of issueTypes) {\n      for (const path of paths) {\n        dirs.push(join(path, type));\n      }\n    }\n    return dirs;\n  }\n} ","import { createReadStream, createWriteStream } from 'fs';\nimport { promises as fs } from 'fs';\nimport path from 'path';\nimport { PathnameService } from '../services/pathname-service.js';\nimport { logger } from '../utils/logger.js';\n\nexport interface FileSystemAdapter {\n  readFile(path: string): Promise<string>;\n  writeFile(path: string, data: string): Promise<void>;\n  exists(path: string): Promise<boolean>;\n  pathExists(path: string): Promise<boolean>;\n  ensureDir(path: string): Promise<void>;\n  readdir(path: string): Promise<string[]>;\n  move(src: string, dest: string): Promise<void>;\n  remove(path: string): Promise<void>;\n  createReadStream(path: string): NodeJS.ReadableStream;\n  createWriteStream(path: string): NodeJS.WritableStream;\n  stat(path: string): Promise<{ isDirectory(): boolean }>;\n  rename(oldPath: string, newPath: string): Promise<void>;\n  mkdtemp(prefix: string): Promise<string>;\n  rm(path: string, options: { recursive?: boolean; force?: boolean }): Promise<void>;\n}\n\n// Real filesystem implementation\nexport const realFileSystemAdapter: FileSystemAdapter = {\n  async readFile(path: string): Promise<string> {\n    return fs.readFile(path, 'utf8');\n  },\n\n  async writeFile(path: string, data: string): Promise<void> {\n    return fs.writeFile(path, data, 'utf8');\n  },\n\n  async exists(path: string): Promise<boolean> {\n    try {\n      await fs.access(path);\n      return true;\n    } catch {\n      return false;\n    }\n  },\n\n  async pathExists(path: string): Promise<boolean> {\n    return this.exists(path);\n  },\n\n  async ensureDir(path: string): Promise<void> {\n    await fs.mkdir(path, { recursive: true });\n  },\n\n  async readdir(path: string): Promise<string[]> {\n    return fs.readdir(path);\n  },\n\n  async move(src: string, dest: string): Promise<void> {\n    await fs.rename(src, dest);\n  },\n\n  async remove(path: string): Promise<void> {\n    await fs.unlink(path);\n  },\n\n  createReadStream(path: string): NodeJS.ReadableStream {\n    return createReadStream(path);\n  },\n\n  createWriteStream(path: string): NodeJS.WritableStream {\n    return createWriteStream(path);\n  },\n\n  async stat(path: string): Promise<{ isDirectory(): boolean }> {\n    const stats = await fs.stat(path);\n    return {\n      isDirectory: () => stats.isDirectory()\n    };\n  },\n\n  async rename(oldPath: string, newPath: string): Promise<void> {\n    await fs.rename(oldPath, newPath);\n  },\n\n  async mkdtemp(prefix: string): Promise<string> {\n    return fs.mkdtemp(path.join(prefix, ''));\n  },\n\n  async rm(path: string, options: { recursive?: boolean; force?: boolean }): Promise<void> {\n    await fs.rm(path, options);\n  }\n};\n\n/**\n * Wraps a FileSystemAdapter to handle path resolution relative to a root directory.\n * This ensures all paths passed to the underlying adapter are properly prefixed with the root directory.\n */\nexport class RootedFileSystemAdapter implements FileSystemAdapter {\n  constructor(\n    private fs: FileSystemAdapter,\n    private rootDir: string,\n    private pathnameService?: PathnameService\n  ) {\n    // Ensure rootDir is absolute and normalized\n    this.rootDir = path.resolve(rootDir);\n    logger.debug('RootedFileSystemAdapter initialized with rootDir:', this.rootDir);\n  }\n\n  private resolvePath(filePath: string): string {\n    // If pathname service is available, use it to canonicalize the path\n    if (this.pathnameService) {\n      filePath = this.pathnameService.toCanonicalPath(filePath);\n    }\n\n    // Normalize the input path\n    const normalizedPath = path.normalize(filePath);\n    \n    // If it's already absolute\n    if (path.isAbsolute(normalizedPath)) {\n      // If it's already under our root dir, return it as is\n      if (normalizedPath.startsWith(this.rootDir)) {\n        return normalizedPath;\n      }\n      \n      // For any other absolute path, get just the relative portion\n      const projectRoot = path.resolve(process.cwd());\n      let relativePath;\n      \n      if (normalizedPath.startsWith(projectRoot)) {\n        // Get path relative to project root\n        relativePath = path.relative(projectRoot, normalizedPath);\n      } else {\n        // For paths outside project root, use the path relative to root directory\n        relativePath = path.relative('/', normalizedPath);\n      }\n      \n      // Remove any leading directory components that match our root dir structure\n      const rootParts = this.rootDir.split(path.sep).filter(Boolean);\n      const pathParts = relativePath.split(path.sep).filter(Boolean);\n      \n      // Find where the paths diverge\n      let i = 0;\n      while (i < rootParts.length && i < pathParts.length && rootParts[i] === pathParts[i]) {\n        i++;\n      }\n      \n      // Use only the unique part of the path\n      const uniquePath = pathParts.slice(i).join(path.sep);\n      \n      return path.join(this.rootDir, uniquePath);\n    }\n    \n    // For relative paths, just join with root\n    return path.join(this.rootDir, normalizedPath);\n  }\n\n  async readFile(filePath: string): Promise<string> {\n    return this.fs.readFile(this.resolvePath(filePath));\n  }\n\n  async writeFile(filePath: string, content: string): Promise<void> {\n    return this.fs.writeFile(this.resolvePath(filePath), content);\n  }\n\n  async exists(filePath: string): Promise<boolean> {\n    return this.fs.exists(this.resolvePath(filePath));\n  }\n\n  async pathExists(filePath: string): Promise<boolean> {\n    return this.fs.pathExists(this.resolvePath(filePath));\n  }\n\n  async ensureDir(dirPath: string): Promise<void> {\n    return this.fs.ensureDir(this.resolvePath(dirPath));\n  }\n\n  async readdir(dirPath: string): Promise<string[]> {\n    return this.fs.readdir(this.resolvePath(dirPath));\n  }\n\n  async move(src: string, dest: string): Promise<void> {\n    return this.fs.move(this.resolvePath(src), this.resolvePath(dest));\n  }\n\n  async remove(filePath: string): Promise<void> {\n    return this.fs.remove(this.resolvePath(filePath));\n  }\n\n  createReadStream(filePath: string): NodeJS.ReadableStream {\n    return this.fs.createReadStream(this.resolvePath(filePath));\n  }\n\n  createWriteStream(filePath: string): NodeJS.WritableStream {\n    return this.fs.createWriteStream(this.resolvePath(filePath));\n  }\n\n  async stat(filePath: string): Promise<{ isDirectory(): boolean }> {\n    return this.fs.stat(this.resolvePath(filePath));\n  }\n\n  async rename(oldPath: string, newPath: string): Promise<void> {\n    return this.fs.rename(this.resolvePath(oldPath), this.resolvePath(newPath));\n  }\n\n  async mkdtemp(prefix: string): Promise<string> {\n    return this.fs.mkdtemp(this.resolvePath(prefix));\n  }\n\n  async rm(path: string, options: { recursive?: boolean; force?: boolean }): Promise<void> {\n    return this.fs.rm(this.resolvePath(path), options);\n  }\n} ","import { IntentPattern } from './intent-service.js';\nimport { FrontmatterMetadata } from '../types.js';\nimport { InterpretedIntent } from './intent-service.js';\nimport { logger } from '../utils/logger.js';\nimport { ValidationResult } from '../types.js';\nimport { LLMail } from '../LLMail.js';\nimport { ResolvedConfig } from '../utils/config.js';\n\n/**\n * Context object passed to plugin commands during execution\n */\nexport interface CommandContext {\n  llmail: LLMail;           // Core llmail instance\n  logger: typeof logger;     // llmail's logger\n  config: ResolvedConfig;   // Current config\n  cwd: string;             // Working directory\n  pluginService: PluginService; // Access to plugin service for configuration\n}\n\n/**\n * Describes a command that a plugin may register to extend the llmail CLI.\n */\nexport interface PluginCommand {\n  name: string;\n  description: string;\n  subcommands?: PluginCommand[];\n  options?: Array<{\n    name: string;\n    description?: string;\n    type?: 'boolean' | 'string' | 'number';\n    required?: boolean;\n    default?: any;\n  }>;\n  \n  /** Execute the command with arguments and context */\n  execute: (args: Record<string, any>, context: CommandContext) => Promise<void>;\n  \n  /** Optional hook that runs before command execution. Can modify args. */\n  beforeExecute?: (args: Record<string, any>) => Promise<void | Record<string, any>>;\n  \n  /** Optional hook that runs after successful command execution */\n  afterExecute?: (result: any) => Promise<void>;\n  \n  /** Optional hook that runs when an error occurs. Can transform the error. */\n  onError?: (error: Error, args: Record<string, any>) => Promise<void | Error>;\n}\n\n/**\n * Interface that all plugins must implement\n */\nexport interface Plugin {\n  /** Unique identifier for the plugin */\n  name: string;\n\n  /** Plugin priority - higher numbers run first (default: 0) */\n  priority?: number;\n\n  /** Default configuration for this plugin */\n  defaultConfig?: Record<string, any>;\n\n  /** Optional function to validate plugin configuration */\n  validateConfig?: (config: Record<string, any>) => ValidationResult;\n\n  /** Register new or override existing intent patterns */\n  registerIntents?: (existingPatterns: IntentPattern[]) => IntentPattern[];\n  \n  /** Register additional valid types */\n  registerTypes?: () => string[];\n  \n  /** Register additional valid active states */\n  registerActiveStates?: () => string[];\n  \n  /** Register additional valid inactive reasons */\n  registerInactiveReasons?: () => string[];\n  \n  /** Custom metadata validation hook */\n  validateMetadata?: (metadata: FrontmatterMetadata) => ValidationResult;\n  \n  /** Post-processing hook for interpreted intents */\n  postInterpretIntent?: (intent: InterpretedIntent) => InterpretedIntent;\n\n  /** Optional: Register additional CLI commands for this plugin */\n  registerCommands?: () => PluginCommand[];\n}\n\nexport class PluginService {\n  private plugins: Plugin[] = [];\n  private registeredTypes: Set<string> = new Set();\n  private registeredActiveStates: Set<string> = new Set();\n  private registeredInactiveReasons: Set<string> = new Set();\n  private pluginConfigs: Map<string, any> = new Map();\n  private commands: PluginCommand[] = [];\n\n  /**\n   * Register a new plugin\n   */\n  registerPlugin(plugin: Plugin): void {\n    logger.debug(`Registering plugin: ${plugin.name}`);\n\n    // Check if plugin is already registered\n    if (this.plugins.some(p => p.name === plugin.name)) {\n      throw new Error(\n        `Plugin ${plugin.name} is already registered. ` +\n        `This usually means the plugin is being registered at the wrong level. ` +\n        `Plugins should be registered once at the run level, not per handled object.`\n      );\n    }\n    \n    // Register commands\n    if (plugin.registerCommands) {\n      logger.debug(`Registering commands for plugin ${plugin.name}`);\n      try {\n        const commands = plugin.registerCommands();\n        logger.debug(`Plugin ${plugin.name} registered commands:`, commands);\n        this.commands.push(...commands);\n      } catch (error) {\n        logger.error(`Error registering commands for plugin ${plugin.name}:`, error);\n      }\n    }\n\n    // Register types\n    if (plugin.registerTypes) {\n      logger.debug(`Registering types for plugin ${plugin.name}`);\n      try {\n        const types = plugin.registerTypes();\n        logger.debug(`Plugin ${plugin.name} registered types:`, types);\n        types.forEach(type => this.registeredTypes.add(type));\n      } catch (error) {\n        logger.error(`Error registering types for plugin ${plugin.name}:`, error);\n      }\n    }\n\n    // Register active states\n    if (plugin.registerActiveStates) {\n      logger.debug(`Registering active states for plugin ${plugin.name}`);\n      try {\n        const states = plugin.registerActiveStates();\n        logger.debug(`Plugin ${plugin.name} registered active states:`, states);\n        states.forEach(state => this.registeredActiveStates.add(state));\n      } catch (error) {\n        logger.error(`Error registering active states for plugin ${plugin.name}:`, error);\n      }\n    }\n\n    // Register inactive reasons\n    if (plugin.registerInactiveReasons) {\n      logger.debug(`Registering inactive reasons for plugin ${plugin.name}`);\n      try {\n        const reasons = plugin.registerInactiveReasons();\n        logger.debug(`Plugin ${plugin.name} registered inactive reasons:`, reasons);\n        reasons.forEach(reason => this.registeredInactiveReasons.add(reason));\n      } catch (error) {\n        logger.error(`Error registering inactive reasons for plugin ${plugin.name}:`, error);\n      }\n    }\n\n    // Initialize plugin config with defaults if provided\n    if (plugin.defaultConfig) {\n      logger.debug(`Initializing config for plugin ${plugin.name}`);\n      this.pluginConfigs.set(plugin.name, { ...plugin.defaultConfig });\n    }\n\n    this.plugins.push(plugin);\n    \n    // Sort plugins by priority (highest first)\n    this.plugins.sort((a, b) => (b.priority || 0) - (a.priority || 0));\n\n    logger.info(`Registered plugin: ${plugin.name}`);\n  }\n\n  /**\n   * Get configuration for a specific plugin\n   */\n  getPluginConfig(pluginName: string): any {\n    return this.pluginConfigs.get(pluginName);\n  }\n\n  /**\n   * Set configuration for a specific plugin\n   */\n  setPluginConfig(pluginName: string, config: any): void {\n    const plugin = this.plugins.find(p => p.name === pluginName);\n    if (!plugin) {\n      throw new Error(`Plugin \"${pluginName}\" not found`);\n    }\n\n    // Validate config if plugin has a validator\n    if (plugin.validateConfig) {\n      const result = plugin.validateConfig(config);\n      if (!result.valid) {\n        throw new Error(`Invalid config for plugin ${pluginName}: ${result.errors?.join(', ')}`);\n      }\n    }\n\n    this.pluginConfigs.set(pluginName, config);\n  }\n\n  /**\n   * Get all registered plugins\n   */\n  getPlugins(): Plugin[] {\n    return [...this.plugins];\n  }\n\n  /**\n   * Apply all plugin intent patterns to the existing patterns\n   */\n  applyPluginIntents(existingPatterns: IntentPattern[]): IntentPattern[] {\n    let patterns = [...existingPatterns];\n\n    for (const plugin of this.plugins) {\n      try {\n        if (plugin.registerIntents) {\n          patterns = plugin.registerIntents(patterns);\n        }\n      } catch (error) {\n        logger.error(`Error applying intents from plugin \"${plugin.name}\":`, error);\n      }\n    }\n\n    return patterns;\n  }\n\n  /**\n   * Get all valid types (including plugin-provided ones)\n   */\n  getValidTypes(): string[] {\n    // Start with core types\n    const types = new Set(this.registeredTypes);\n    \n    // Add plugin-provided types\n    for (const plugin of this.plugins) {\n      try {\n        if (plugin.registerTypes) {\n          const pluginTypes = plugin.registerTypes();\n          pluginTypes.forEach(type => types.add(type));\n        }\n      } catch (error) {\n        logger.error(`Error getting types from plugin \"${plugin.name}\":`, error);\n      }\n    }\n\n    // Always ensure 'issue' is included\n    types.add('issue');\n\n    return Array.from(types);\n  }\n\n  /**\n   * Get all valid active states (including plugin-provided ones)\n   */\n  getValidActiveStates(): string[] {\n    const states = new Set(this.registeredActiveStates);\n    \n    for (const plugin of this.plugins) {\n      try {\n        if (plugin.registerActiveStates) {\n          plugin.registerActiveStates().forEach(state => states.add(state));\n        }\n      } catch (error) {\n        logger.error(`Error getting active states from plugin \"${plugin.name}\":`, error);\n      }\n    }\n\n    return Array.from(states);\n  }\n\n  /**\n   * Get all valid inactive reasons (including plugin-provided ones)\n   */\n  getValidInactiveReasons(): string[] {\n    const reasons = new Set(this.registeredInactiveReasons);\n    \n    for (const plugin of this.plugins) {\n      try {\n        if (plugin.registerInactiveReasons) {\n          plugin.registerInactiveReasons().forEach(reason => reasons.add(reason));\n        }\n      } catch (error) {\n        logger.error(`Error getting inactive reasons from plugin \"${plugin.name}\":`, error);\n      }\n    }\n\n    return Array.from(reasons);\n  }\n\n  /**\n   * Get all valid states (both active states and inactive reasons)\n   */\n  getValidStates(): string[] {\n    return [\n      ...this.getValidActiveStates(),\n      ...this.getValidInactiveReasons()\n    ];\n  }\n\n  /**\n   * Run validation hooks from all plugins\n   */\n  validateMetadata(metadata: FrontmatterMetadata): ValidationResult {\n    const result: ValidationResult = {\n      valid: true,\n      errors: [],\n      warnings: []\n    };\n\n    for (const plugin of this.plugins) {\n      try {\n        if (plugin.validateMetadata) {\n          const pluginResult = plugin.validateMetadata(metadata);\n          \n          // Merge warnings\n          if (pluginResult.warnings) {\n            result.warnings.push(...pluginResult.warnings);\n          }\n\n          // If plugin validation fails, merge errors and mark as invalid\n          if (!pluginResult.valid) {\n            result.valid = false;\n            if (pluginResult.errors) {\n              result.errors.push(...pluginResult.errors);\n            }\n          }\n        }\n      } catch (error: any) {\n        logger.error(`Error validating metadata in plugin \"${plugin.name}\":`, error);\n        result.warnings.push(`Plugin ${plugin.name} validation error: ${error.message}`);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Run post-processing hooks from all plugins\n   */\n  processIntent(intent: InterpretedIntent): InterpretedIntent {\n    let processedIntent = { ...intent };\n\n    for (const plugin of this.plugins) {\n      try {\n        if (plugin.postInterpretIntent) {\n          processedIntent = plugin.postInterpretIntent(processedIntent);\n        }\n      } catch (error) {\n        logger.error(`Error processing intent in plugin \"${plugin.name}\":`, error);\n      }\n    }\n\n    return processedIntent;\n  }\n\n  /**\n   * Register core types that plugins can extend\n   */\n  registerCoreTypes(types: string[]): void {\n    // Add each core type to existing types\n    types.forEach(type => this.registeredTypes.add(type));\n  }\n\n  /**\n   * Register core active states that plugins can extend\n   */\n  registerCoreActiveStates(states: string[]): void {\n    states.forEach(state => this.registeredActiveStates.add(state));\n  }\n\n  /**\n   * Register core inactive reasons that plugins can extend\n   */\n  registerCoreInactiveReasons(reasons: string[]): void {\n    reasons.forEach(reason => this.registeredInactiveReasons.add(reason));\n  }\n\n  /**\n   * Collects all plugin commands from every plugin in the order of their priority.\n   */\n  getAllCommands(): PluginCommand[] {\n    logger.debug('Getting all commands:', this.commands);\n    return this.commands;\n  }\n} ","import { Plugin } from '../services/plugin-service.js';\nimport { LlmailConfig } from './config.js';\nimport { createRequire } from 'module';\nimport { fileURLToPath } from 'url';\nimport path from 'path';\nimport { logger } from './logger.js';\n\ninterface PluginConfig {\n  name: string;\n  config?: Record<string, any>;\n}\n\n/**\n * Normalize plugin configuration to a consistent format\n */\nfunction normalizePluginConfig(plugins: LlmailConfig['plugins']): PluginConfig[] {\n  if (!plugins) return [];\n\n  if (typeof plugins === 'string') {\n    // Single plugin string\n    return [{ name: plugins }];\n  }\n\n  if (Array.isArray(plugins)) {\n    return plugins.map(plugin => {\n      if (typeof plugin === 'string') {\n        return { name: plugin };\n      }\n      return plugin;\n    });\n  }\n\n  return [];\n}\n\n/**\n * Load a plugin by name\n */\nasync function loadPlugin(name: string): Promise<Plugin> {\n  try {\n    logger.debug(`Loading plugin: ${name}`);\n    // First try dynamic import which works with both real and mocked modules\n    const plugin = await import(name).catch(async (error) => {\n      logger.debug(`Dynamic import failed for ${name}, trying require:`, error);\n      // If dynamic import fails, try require as fallback for CommonJS modules\n      const require = createRequire(import.meta.url);\n      try {\n        const module = require(name);\n        logger.debug(`Required module ${name}:`, module);\n        return module;\n      } catch (requireError) {\n        logger.debug(`Require failed for ${name}:`, requireError);\n        throw requireError;\n      }\n    });\n    \n    logger.debug(`Plugin module loaded: ${name}`, { exports: Object.keys(plugin) });\n    \n    // Handle both default exports and named exports\n    const PluginClass = plugin.default || plugin;\n    logger.debug(`Plugin class found:`, PluginClass);\n    \n    if (typeof PluginClass !== 'function' && !PluginClass.prototype) {\n      logger.debug(`Plugin ${name} exports:`, plugin);\n      throw new Error(`Plugin ${name} must export a class or constructor function`);\n    }\n    \n    const instance = new PluginClass();\n    logger.debug(`Plugin instance created: ${name}`, {\n      commands: instance.registerCommands?.() || [],\n      types: instance.registerTypes?.() || [],\n      activeStates: instance.registerActiveStates?.() || [],\n      inactiveReasons: instance.registerInactiveReasons?.() || []\n    });\n    \n    return instance;\n  } catch (error: any) {\n    logger.error(`Failed to load plugin ${name}:`, error);\n    throw new Error(`Failed to load plugin ${name}: ${error.message}`);\n  }\n}\n\n/**\n * Load and configure plugins from config\n */\nexport async function loadPlugins(config: LlmailConfig): Promise<Plugin[]> {\n  const pluginConfigs = normalizePluginConfig(config.plugins);\n  const plugins: Plugin[] = [];\n\n  logger.debug('Loading plugins from config:', pluginConfigs);\n  for (const pluginConfig of pluginConfigs) {\n    try {\n      const plugin = await loadPlugin(pluginConfig.name);\n      \n      // Apply configuration if provided\n      if (pluginConfig.config && plugin.validateConfig) {\n        const result = plugin.validateConfig(pluginConfig.config);\n        if (!result.valid) {\n          throw new Error(`Invalid config for plugin ${pluginConfig.name}: ${result.errors?.join(', ')}`);\n        }\n      }\n\n      plugins.push(plugin);\n      logger.debug(`Loaded plugin: ${pluginConfig.name}`);\n    } catch (error) {\n      logger.error(`Failed to load plugin ${pluginConfig.name}:`, error);\n      throw error;\n    }\n  }\n\n  return plugins;\n} ","import path from 'path';\nimport { FileSystemAdapter, realFileSystemAdapter } from './utils/file-system-adapter.js';\nimport { loadLlmailConfig, ResolvedConfig } from './utils/config.js';\nimport { IssueService } from './services/issue-service.js';\nimport { PathnameService } from './services/pathname-service.js';\nimport { IntentService } from './services/intent-service.js';\nimport { FileService } from './services/file-service.js';\nimport { FileFormatValidator } from './validation/file-format-validator.js';\nimport { MetadataFormatValidator } from './validation/metadata-format-validator.js';\nimport { FileSystemValidator } from './validation/file-system-validator.js';\nimport { PluginService, Plugin } from './services/plugin-service.js';\nimport { generateId } from './utils/id-generator.js';\nimport { FrontmatterMetadata, OperationResult } from './types.js';\nimport { parseDocSections, rebuildDocSections, ensureTimestamps } from './utils/doc-sections';\nimport { loadPlugins } from './utils/plugin-loader.js';\nimport { logger } from './utils/logger.js';\n\nexport interface LLMailOptions {\n  fs?: FileSystemAdapter;\n  config?: ResolvedConfig;\n  plugins?: Plugin[];\n  rootDir?: string;\n  pluginService?: PluginService;\n}\n\nexport interface MoveOptions {\n  state?: string;\n  type?: string;\n  active?: boolean;\n  inactive?: boolean;\n}\n\nexport interface NewOptions {\n  title?: string;\n  content?: string;\n  state?: string;\n  frontmatter?: Record<string, any>;\n}\n\nexport interface DoneOptions {\n  state?: string;\n  frontmatter?: Record<string, any>;\n}\n\nexport interface SyncOptions {\n  include?: string;\n  exclude?: string;\n  dryRun?: boolean;    // Just show what would change\n  force?: boolean;     // Skip confirmations\n}\n\nexport interface SyncResult {\n  changes: Array<{\n    id: string;\n    from: string;\n    to: string;\n    state: string;\n  }>;\n  errors?: Array<{\n    id: string;\n    error: string;\n  }>;\n}\n\nexport interface Issue {\n  id: string;\n  filePath: string;\n  metadata: FrontmatterMetadata;\n  content?: string;\n}\n\n/**\n * Main class for managing issues and their lifecycle.\n * Provides a high-level API that coordinates between various services.\n */\nexport class LLMail {\n  private fs: FileSystemAdapter;\n  private config?: ResolvedConfig;\n  private issueService!: IssueService;\n  private pathnameService!: PathnameService;\n  private intentService!: IntentService;\n  private fileService!: FileService;\n  private pluginService!: PluginService;\n  private plugins: Plugin[];\n  private rootDir: string;\n\n  constructor(options: LLMailOptions = {}) {\n    this.fs = options.fs || realFileSystemAdapter;\n    this.config = options.config;\n    this.plugins = options.plugins || [];\n    this.rootDir = options.rootDir || process.cwd();\n    if (options.pluginService) {\n      this.pluginService = options.pluginService;\n    }\n  }\n\n  /**\n   * Initialize the LLMail system and all its services\n   */\n  async init(): Promise<void> {\n    // Load config if not already provided\n    if (!this.config) {\n      this.config = await loadLlmailConfig(this.fs, this.rootDir);\n    }\n\n    logger.debug('LLMail init - Config loaded:', this.config);\n\n    // Load plugins from config if not provided in constructor\n    if (this.plugins.length === 0 && this.config.plugins) {\n      logger.debug('LLMail init - Loading plugins from config:', this.config.plugins);\n      try {\n        this.plugins = await loadPlugins(this.config);\n        logger.debug('LLMail init - Plugins loaded:', this.plugins.map(p => p.name));\n      } catch (error) {\n        logger.error('LLMail init - Error loading plugins:', error);\n        throw error;  // Re-throw the error to prevent continuing with invalid plugins\n      }\n    }\n\n    // Initialize plugin service if not provided\n    if (!this.pluginService) {\n      logger.debug('LLMail init - Initializing plugin service');\n      this.pluginService = new PluginService();\n      \n      // Register core types BEFORE registering plugins\n      logger.debug('LLMail init - Registering core types:', this.config.types_list);\n      this.pluginService.registerCoreTypes(this.config.types_list);\n      this.pluginService.registerCoreActiveStates(this.config.active_states);\n      this.pluginService.registerCoreInactiveReasons(this.config.inactive_reasons);\n      \n      // Now register plugins\n      logger.debug('LLMail init - Registering plugins:', this.plugins.map(p => p.name));\n      for (const plugin of this.plugins) {\n        try {\n          logger.debug(`LLMail init - Registering plugin ${plugin.name}`);\n          await this.pluginService.registerPlugin(plugin);\n          logger.debug(`LLMail init - Plugin ${plugin.name} registered successfully`);\n        } catch (error) {\n          logger.error(`LLMail init - Error registering plugin ${plugin.name}:`, error);\n          throw error;  // Re-throw the error to prevent continuing with invalid plugins\n        }\n      }\n    }\n\n    // Initialize core services with plugin service\n    this.intentService = new IntentService(this.config, this.pluginService);\n    this.pathnameService = new PathnameService(this.config, this.intentService);\n    this.fileService = new FileService(this.fs, this.pathnameService);\n\n    // Initialize validators\n    const fileFormatValidator = new FileFormatValidator();\n    const metadataValidator = new MetadataFormatValidator();\n    const fileSystemValidator = new FileSystemValidator(this.fs);\n\n    // Initialize issue service with all dependencies\n    this.issueService = new IssueService(\n      this.pathnameService,\n      this.fs,\n      this.intentService,\n      this.fileService,\n      fileFormatValidator,\n      metadataValidator,\n      fileSystemValidator,\n      this.pluginService\n    );\n\n    // Create required directories\n    const rootDir = this.config.issues_dir.replace(/^\\/+/, '');\n    const inboxDir = this.config.inbox_dir.replace(/^\\/+/, '');\n\n    await this.fs.ensureDir(path.join(this.rootDir, rootDir));\n    await this.fs.ensureDir(path.join(this.rootDir, inboxDir));\n\n    // Create type directories\n    for (const type of this.config.types_list) {\n      await this.fs.ensureDir(path.join(this.rootDir, rootDir, type));\n    }\n\n    // Create state directories\n    for (const state of this.config.active_states) {\n      await this.fs.ensureDir(path.join(this.rootDir, rootDir, `_${state}`));\n    }\n  }\n\n  private ensureInitialized(): void {\n    if (!this.issueService || !this.pathnameService || !this.intentService || !this.fileService) {\n      throw new Error('LLMail not initialized. Call init() first.');\n    }\n  }\n\n  /**\n   * Create a new issue\n   */\n  async new(type: string | undefined, options: NewOptions = {}): Promise<string> {\n    this.ensureInitialized();\n    \n    // If no type is provided, use the default type from intent service\n    const metadata: FrontmatterMetadata = {\n      id: generateId(),\n      type: type || 'issue',  // Default to 'issue' if no type provided\n      active: true,  // new items start active\n      created: new Date().toISOString()\n    };\n\n    // Let intent service interpret and validate the metadata\n    const interpretedMetadata = this.intentService.interpretMetadata(metadata);\n\n    // Merge frontmatter if provided\n    if (options.frontmatter) {\n      Object.assign(interpretedMetadata, options.frontmatter);\n      // Re-assert critical fields that shouldn't be overwritten\n      interpretedMetadata.type = interpretedMetadata.type;  // Keep interpreted type\n      interpretedMetadata.id = interpretedMetadata.id;  // Keep original generated ID\n      interpretedMetadata.active = true;\n      interpretedMetadata.created = interpretedMetadata.created;  // Keep original timestamp\n    }\n\n    if (options.title) {\n      interpretedMetadata.title = options.title;\n    }\n\n    if (options.state) {\n      // Use IntentService to validate the state\n      if (this.intentService.isValidState(options.state)) {\n        interpretedMetadata.state = options.state;\n        interpretedMetadata.active = this.intentService.isActiveState(options.state);\n      } else {\n        throw new Error(`Invalid state: ${options.state}`);\n      }\n    }\n\n    // Get the relative path from IssueService\n    const relativePath = await this.issueService.fileMethods.writeNewFile(interpretedMetadata, options.content || '');\n    \n    // Return just the ID since that's what the API expects\n    return interpretedMetadata.id;\n  }\n\n  /**\n   * Move an issue to a new state or type\n   */\n  async mv(id: string, options: MoveOptions = {}): Promise<OperationResult> {\n    logger.debug('LLMail.mv - Starting move operation');\n    logger.debug('LLMail.mv - Options:', options);\n\n    // Get the issue first to get its file path\n    const issue = await this.getIssueById(id);\n    if (!issue) {\n      throw new Error(`Issue ${id} not found`);\n    }\n\n    logger.debug('LLMail.mv - Initial metadata:', issue.metadata);\n    logger.debug('LLMail.mv - Initial filepath:', issue.filePath);\n\n    // Start with current metadata\n    const updates: Partial<FrontmatterMetadata> = {};\n\n    // Handle type change first if specified\n    if (options.type) {\n      logger.debug('LLMail.mv - Processing type change');\n      if (!this.intentService.getValidTypes().includes(options.type)) {\n        throw new Error(`Invalid type: ${options.type}`);\n      }\n      updates.type = options.type;\n    }\n\n    // Then handle state change if specified\n    if (options.state) {\n      logger.debug('LLMail.mv - Processing state change');\n      if (!this.intentService.isValidState(options.state)) {\n        throw new Error(`Invalid state: ${options.state}`);\n      }\n      updates.state = options.state;\n    }\n\n    // Handle active/inactive flags\n    if (options.active !== undefined) {\n      logger.debug('LLMail.mv - Setting active flag:', options.active);\n      updates.active = options.active;\n      // Clear state when setting active without a specific state\n      if (options.active && !options.state) {\n        logger.debug('LLMail.mv - Clearing state due to active flag');\n        updates.state = undefined;\n      }\n    }\n    if (options.inactive !== undefined) {\n      logger.debug('LLMail.mv - Setting inactive flag:', !options.inactive);\n      updates.active = !options.inactive;\n    }\n\n    logger.debug('LLMail.mv - Final updates:', updates);\n\n    // Apply the updates\n    logger.debug('LLMail.mv - Applying frontmatter updates');\n    await this.updateFrontmatter(id, updates);\n\n    // Sync files to ensure they are in the correct locations\n    logger.debug('LLMail.mv - Starting sync operation');\n    const syncResult = await this.sync({ force: true });\n    logger.debug('LLMail.mv - Sync completed with result:', syncResult);\n\n    // Return success\n    const newIssue = await this.getIssueById(id);\n    logger.debug('LLMail.mv - Final issue state:', newIssue);\n    return {\n      success: true,\n      filepath: newIssue!.filePath\n    };\n  }\n\n  // Add move as an alias for mv for backward compatibility\n  async move(id: string, options: MoveOptions): Promise<OperationResult> {\n    return this.mv(id, options);\n  }\n\n  /**\n   * Get an issue by ID\n   */\n  async getIssueById(id: string): Promise<Issue | undefined> {\n    this.ensureInitialized();\n    \n    const filePath = await this.issueService.fileMethods.findFileById(id);\n    if (!filePath) return undefined;\n\n    const metadata = await this.issueService.frontmatterMethods.getFrontmatterMetadata(filePath);\n    if (!metadata) return undefined;\n\n    const content = await this.fileService.readFile(filePath);\n    \n    return { id, filePath, metadata, content };\n  }\n\n  /**\n   * Update issue frontmatter\n   */\n  async updateFrontmatter(id: string, updates: Partial<FrontmatterMetadata>): Promise<void> {\n    this.ensureInitialized();\n    \n    const issue = await this.getIssueById(id);\n    if (!issue) {\n      throw new Error(`Issue ${id} not found`);\n    }\n\n    await this.issueService.frontmatterMethods.setFrontmatterMetadata(\n      issue.filePath,\n      { ...issue.metadata, ...updates }\n    );\n  }\n\n  /**\n   * Append an update to an issue\n   */\n  async appendUpdate(id: string, content: string, metadata?: Record<string, string>, time: boolean = true): Promise<void> {\n    this.ensureInitialized();\n    \n    await this.issueService.xmlMethods.appendUpdate({\n      id,\n      content,\n      metadata,\n      time\n    });\n  }\n\n  /**\n   * Prepend an update to an issue\n   */\n  async prependUpdate(id: string, content: string, metadata?: Record<string, string>, time: boolean = true): Promise<void> {\n    this.ensureInitialized();\n    \n    await this.issueService.xmlMethods.prependUpdate({\n      id,\n      content,\n      metadata,\n      time\n    });\n  }\n\n  /**\n   * Sync file locations with their metadata\n   */\n  async sync(options: SyncOptions = {}): Promise<SyncResult> {\n    this.ensureInitialized();\n    logger.debug('LLMail.sync - Starting sync operation with options:', options);\n\n    // Get all files by finding files in each state\n    const allFiles = new Set<string>();\n    \n    // Check state directories\n    const allStates = [...this.config!.active_states, ...this.config!.inactive_reasons];\n    logger.debug('LLMail.sync - Checking state directories:', allStates);\n    for (const state of allStates) {\n      const files = await this.issueService.fileMethods.findFilesByState(state);\n      logger.debug(`LLMail.sync - Found files for state ${state}:`, files);\n      files.forEach(f => allFiles.add(f));\n    }\n\n    // Check inbox\n    logger.debug('LLMail.sync - Checking inbox directory');\n    const inboxFiles = await this.issueService.fileMethods.findFilesByState('inbox');\n    logger.debug('LLMail.sync - Found files in inbox:', inboxFiles);\n    inboxFiles.forEach(f => allFiles.add(f));\n\n    // Check type directories\n    logger.debug('LLMail.sync - Checking type directories:', this.config!.types_list);\n    for (const type of this.config!.types_list) {\n      const files = await this.issueService.fileMethods.findFilesByType(type);\n      logger.debug(`LLMail.sync - Found files for type ${type}:`, files);\n      files.forEach(f => allFiles.add(f));\n    }\n\n    // Check root directory\n    logger.debug('LLMail.sync - Checking root directory');\n    const rootFiles = await this.fileService.findFiles(\n      (f) => f.endsWith('.md'),\n      [this.config!.issues_dir]\n    );\n    logger.debug('LLMail.sync - Found files in root:', rootFiles);\n    rootFiles.forEach(f => allFiles.add(f));\n\n    if (allFiles.size === 0) {\n      logger.debug('LLMail.sync - No files found to sync');\n      return { changes: [] };\n    }\n\n    logger.debug('LLMail.sync - Total files to process:', allFiles.size);\n    const changes: Array<{ id: string; from: string; to: string; state: string }> = [];\n    const errors: Array<{ id: string; error: string }> = [];\n\n    for (const filePath of allFiles) {\n      try {\n        logger.debug(`LLMail.sync - Processing file: ${filePath}`);\n        const metadata = await this.issueService.frontmatterMethods.getFrontmatterMetadata(filePath);\n        if (!metadata) {\n          logger.debug(`LLMail.sync - No metadata found for file: ${filePath}`);\n          continue;\n        }\n\n        const targetLocation = this.pathnameService.deriveFileLocation(metadata);\n        const targetPath = path.join(targetLocation.dirname, targetLocation.basename);\n        logger.debug(`LLMail.sync - Target path for file: ${targetPath}`);\n\n        if (targetPath !== filePath) {\n          logger.debug(`LLMail.sync - File needs to be moved from ${filePath} to ${targetPath}`);\n          if (!options.dryRun) {\n            await this.issueService.fileMethods.moveFileWithMetadata(filePath, targetPath, metadata);\n            logger.debug('LLMail.sync - File moved successfully');\n          }\n          changes.push({\n            id: metadata.id,\n            from: filePath,\n            to: targetPath,\n            state: metadata.state ?? ''\n          });\n        } else {\n          logger.debug('LLMail.sync - File is already in correct location');\n        }\n      } catch (err) {\n        const id = path.basename(filePath).split('-')[1]?.split('.')[0] || path.basename(filePath);\n        logger.error(`LLMail.sync - Error processing file ${filePath}:`, err);\n        errors.push({\n          id,\n          error: err instanceof Error ? err.message : String(err)\n        });\n      }\n    }\n\n    logger.debug('LLMail.sync - Sync completed with changes:', changes);\n    if (errors.length > 0) {\n      logger.debug('LLMail.sync - Sync completed with errors:', errors);\n    }\n\n    return {\n      changes,\n      errors: errors.length > 0 ? errors : undefined\n    };\n  }\n\n  /**\n   * Get all valid issue types\n   */\n  async getIssueTypes(): Promise<string[]> {\n    this.ensureInitialized();\n    return this.config!.types_list;\n  }\n\n  /**\n   * Get all valid issue states\n   */\n  async getIssueStates(): Promise<string[]> {\n    this.ensureInitialized();\n    return [...this.config!.active_states, ...this.config!.inactive_reasons];\n  }\n\n  /**\n   * Find issues by type\n   */\n  async findIssuesByType(type: string): Promise<Issue[]> {\n    this.ensureInitialized();\n    \n    if (!this.config!.types_list.includes(type)) {\n      throw new Error(`Invalid type: ${type}`);\n    }\n\n    const files = await this.issueService.fileMethods.findFilesByType(type);\n    const issues: Issue[] = [];\n\n    for (const filePath of files) {\n      const metadata = await this.issueService.frontmatterMethods.getFrontmatterMetadata(filePath);\n      if (metadata) {\n        const content = await this.fileService.readFile(filePath);\n        issues.push({ id: metadata.id, filePath, metadata, content });\n      }\n    }\n\n    return issues;\n  }\n\n  /**\n   * Find issues by state\n   */\n  async findIssuesByState(state: string): Promise<Issue[]> {\n    this.ensureInitialized();\n    \n    if (!this.config!.active_states.includes(state) && !this.config!.inactive_reasons.includes(state)) {\n      throw new Error(`Invalid state: ${state}`);\n    }\n\n    const files = await this.issueService.fileMethods.findFilesByState(state);\n    const issues: Issue[] = [];\n\n    for (const filePath of files) {\n      const metadata = await this.issueService.frontmatterMethods.getFrontmatterMetadata(filePath);\n      if (metadata) {\n        const content = await this.fileService.readFile(filePath);\n        issues.push({ id: metadata.id, filePath, metadata, content });\n      }\n    }\n\n    return issues;\n  }\n\n  async done(id: string, options: DoneOptions = {}): Promise<OperationResult> {\n    this.ensureInitialized();\n\n    const issue = await this.getIssueById(id);\n    if (!issue) {\n      throw new Error(`Issue ${id} not found`);\n    }\n\n    const updates: Partial<FrontmatterMetadata> = {\n      active: false,\n      inactive_timestamp: new Date().toISOString()\n    };\n\n    // If state is provided, validate and use it\n    if (options.state) {\n      if (!this.config!.inactive_reasons.includes(options.state)) {\n        throw new Error(`Invalid inactive reason: ${options.state}`);\n      }\n      updates.state = options.state;\n    }\n\n    // Add any additional frontmatter updates\n    if (options.frontmatter) {\n      Object.assign(updates, options.frontmatter);\n      // Re-assert critical fields that shouldn't be overwritten\n      updates.active = false;\n      updates.inactive_timestamp = updates.inactive_timestamp;\n    }\n\n    // Apply updates\n    await this.updateFrontmatter(id, updates);\n\n    // Sync files to ensure they are in the correct locations\n    await this.sync({ force: true });\n\n    // Return success\n    const newIssue = await this.getIssueById(id);\n    return {\n      success: true,\n      filepath: newIssue!.filePath\n    };\n  }\n\n  /**\n   * Returns only the content section (excludes frontmatter and xml)\n   */\n  async getContent(id: string): Promise<string> {\n    this.ensureInitialized();\n    const filePath = await this.issueService.fileMethods.findFileById(id);\n    if (!filePath) {\n      throw new Error(`File not found for id: ${id}`);\n    }\n\n    const fileString = await this.fileService.readFile(filePath);\n    const sections = parseDocSections(fileString);\n    \n    return sections.content;\n  }\n\n  /**\n   * Overwrites the entire content region (between frontmatter and XML)\n   */\n  async setContent(id: string, newContent: string): Promise<void> {\n    this.ensureInitialized();\n    const filePath = await this.issueService.fileMethods.findFileById(id);\n    if (!filePath) {\n      throw new Error(`File not found for id: ${id}`);\n    }\n\n    const fileString = await this.fileService.readFile(filePath);\n    const sections = parseDocSections(fileString);\n\n    // Update content and timestamps\n    sections.content = newContent;\n    ensureTimestamps(sections.frontmatterObj);\n\n    // Rebuild and write\n    const newString = rebuildDocSections(sections);\n    await this.fileService.writeFile(filePath, newString);\n  }\n\n  /**\n   * Appends text to the end of content region, above the xml region\n   */\n  async appendContent(id: string, content: string): Promise<void> {\n    this.ensureInitialized();\n    const filePath = await this.issueService.fileMethods.findFileById(id);\n    if (!filePath) {\n      throw new Error(`File not found for id: ${id}`);\n    }\n\n    const fileString = await this.fileService.readFile(filePath);\n    const sections = parseDocSections(fileString);\n\n    // Append to content with proper spacing\n    sections.content = sections.content.trimEnd() + (sections.content ? '\\n\\n' : '') + content;\n    ensureTimestamps(sections.frontmatterObj);\n\n    // Rebuild and write\n    const newString = rebuildDocSections(sections);\n    await this.fileService.writeFile(filePath, newString);\n  }\n\n  /**\n   * Prepends text to the start of content region, below the frontmatter\n   */\n  async prependContent(id: string, content: string): Promise<void> {\n    this.ensureInitialized();\n    const filePath = await this.issueService.fileMethods.findFileById(id);\n    if (!filePath) {\n      throw new Error(`File not found for id: ${id}`);\n    }\n\n    const fileString = await this.fileService.readFile(filePath);\n    const sections = parseDocSections(fileString);\n\n    // Prepend to content with proper spacing\n    sections.content = content + (sections.content ? '\\n\\n' : '') + sections.content.trimStart();\n    ensureTimestamps(sections.frontmatterObj);\n\n    // Rebuild and write\n    const newString = rebuildDocSections(sections);\n    await this.fileService.writeFile(filePath, newString);\n  }\n\n  /**\n   * Provides read-access to the plugin service instance,\n   * so that consumers can fetch plugin commands, etc.\n   */\n  getPluginService(): PluginService {\n    this.ensureInitialized();\n    return this.pluginService;\n  }\n\n  /**\n   * Get the current resolved config\n   */\n  getConfig(): ResolvedConfig {\n    if (!this.config) {\n      throw new Error('LLMail not initialized. Call init() first.');\n    }\n    return this.config;\n  }\n\n  /**\n   * Get the intent service instance\n   */\n  getIntentService(): IntentService {\n    this.ensureInitialized();\n    return this.intentService;\n  }\n} ","import { Command } from 'commander';\nimport { FileSystemAdapter } from '../../src/utils/file-system-adapter.js';\nimport { PathnameService } from '../../src/services/pathname-service.js';\nimport { IntentService } from '../../src/services/intent-service.js';\nimport { FileService } from '../../src/services/file-service.js';\nimport { loadLlmailConfig } from '../../src/utils/config.js';\nimport { logger } from '../../src/utils/logger.js';\nimport { generateId } from '../../src/utils/id-generator.js';\nimport { FileFormatValidator } from '../../src/validation/file-format-validator.js';\nimport { MetadataFormatValidator } from '../../src/validation/metadata-format-validator.js';\nimport { FileSystemValidator } from '../../src/validation/file-system-validator.js';\nimport { IssueService } from '../../src/services/issue-service.js';\nimport { LLMail } from '../../src/LLMail.js';\n\nexport function createNewCommand(fsAdapter: FileSystemAdapter): Command {\n  const command = new Command('new')\n    .description('Create a new issue')\n    .argument('<type>', 'Type of issue to create')\n    .option('-s, --state <state>', 'Initial state')\n    .option('-t, --title <title>', 'Title for the issue')\n    .option('-c, --content <content>', 'Initial content')\n    .option('-f, --frontmatter <frontmatter>', 'JSON string for frontmatter fields')\n    .action(async (type, options) => {\n      try {\n        // Initialize LLMail with config and plugins\n        const config = await loadLlmailConfig(fsAdapter);\n        const llmail = new LLMail({ fs: fsAdapter, config });\n        await llmail.init();\n\n        // Get the plugin service from LLMail\n        const pluginService = llmail.getPluginService();\n\n        // Initialize services with plugin service\n        const intentService = new IntentService(config, pluginService);\n        const pathnameService = new PathnameService(config, intentService);\n        const fileService = new FileService(fsAdapter, pathnameService);\n        const fileFormatValidator = new FileFormatValidator();\n        const metadataValidator = new MetadataFormatValidator();\n        const fileSystemValidator = new FileSystemValidator(fsAdapter);\n        const issueService = new IssueService(\n          pathnameService,\n          fsAdapter,\n          intentService,\n          fileService,\n          fileFormatValidator,\n          metadataValidator,\n          fileSystemValidator,\n          pluginService\n        );\n\n        // Parse user frontmatter (if any) from JSON:\n        let userFrontmatter: Record<string, any> = {};\n        if (options.frontmatter) {\n          try {\n            userFrontmatter = JSON.parse(options.frontmatter);\n          } catch (parseErr) {\n            logger.error('Invalid JSON for --frontmatter');\n            throw parseErr;\n          }\n        }\n\n        // Apply the `--title` as a frontmatter field if present:\n        if (options.title) {\n          userFrontmatter.title = options.title;\n        }\n\n        const result = await issueService.fileMethods.writeNewFile({\n          id: generateId(),\n          type,\n          active: true,\n          state: options.state,\n          ...userFrontmatter\n        }, options.content || '');\n\n        logger.success(`Created new issue at ${result}`);\n      } catch (err) {\n        logger.error(err instanceof Error ? err.message : String(err));\n        throw err;\n      }\n    });\n\n  return command;\n}\n\n/**\n * Create a new issue\n */\nexport function newCommand(fsAdapter: FileSystemAdapter): Command {\n  return createNewCommand(fsAdapter);\n} "]}