{"version":3,"sources":["../../../node_modules/balanced-match/index.js","../../../node_modules/brace-expansion/index.js","../../../src/utils/logger.ts","../../../src/utils/doc-sections.ts","../../../src/services/issue-service.ts","../../../src/services/pathname-service.ts","../../../src/utils/config-validator.ts","../../../src/utils/config.ts","../../../node_modules/minimatch/src/index.ts","../../../node_modules/minimatch/src/assert-valid-pattern.ts","../../../node_modules/minimatch/src/brace-expressions.ts","../../../node_modules/minimatch/src/unescape.ts","../../../node_modules/minimatch/src/ast.ts","../../../node_modules/minimatch/src/escape.ts","../../../src/services/intent-service.ts","../../../src/services/file-service.ts","../../../src/validation/file-format-validator.ts","../../../src/validation/metadata-format-validator.ts","../../../src/validation/file-system-validator.ts","../../../src/api/sync.ts"],"names":["expand","winston","chalk","load","dump","DEFAULT_SCHEMA","path","_a","timestamp","join","match","i","acc","ext","start","final","qmark","star","regExpEscape"],"mappings":"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","file":"sync.cjs","sourcesContent":["'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    if(a===b) {\n      return [ai, bi];\n    }\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n  return parseInt(str, 10) == str\n    ? parseInt(str, 10)\n    : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n  return str.split('\\\\\\\\').join(escSlash)\n            .split('\\\\{').join(escOpen)\n            .split('\\\\}').join(escClose)\n            .split('\\\\,').join(escComma)\n            .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n  return str.split(escSlash).join('\\\\')\n            .split(escOpen).join('{')\n            .split(escClose).join('}')\n            .split(escComma).join(',')\n            .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n  if (!str)\n    return [''];\n\n  var parts = [];\n  var m = balanced('{', '}', str);\n\n  if (!m)\n    return str.split(',');\n\n  var pre = m.pre;\n  var body = m.body;\n  var post = m.post;\n  var p = pre.split(',');\n\n  p[p.length-1] += '{' + body + '}';\n  var postParts = parseCommaParts(post);\n  if (post.length) {\n    p[p.length-1] += postParts.shift();\n    p.push.apply(p, postParts);\n  }\n\n  parts.push.apply(parts, p);\n\n  return parts;\n}\n\nfunction expandTop(str) {\n  if (!str)\n    return [];\n\n  // I don't know why Bash 4.3 does this, but it does.\n  // Anything starting with {} will have the first two bytes preserved\n  // but *only* at the top level, so {},a}b will not expand to anything,\n  // but a{},b}c will be expanded to [a}c,abc].\n  // One could argue that this is a bug in Bash, but since the goal of\n  // this module is to match Bash's rules, we escape a leading {}\n  if (str.substr(0, 2) === '{}') {\n    str = '\\\\{\\\\}' + str.substr(2);\n  }\n\n  return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n  return '{' + str + '}';\n}\nfunction isPadded(el) {\n  return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n  return i <= y;\n}\nfunction gte(i, y) {\n  return i >= y;\n}\n\nfunction expand(str, isTop) {\n  var expansions = [];\n\n  var m = balanced('{', '}', str);\n  if (!m) return [str];\n\n  // no need to expand pre, since it is guaranteed to be free of brace-sets\n  var pre = m.pre;\n  var post = m.post.length\n    ? expand(m.post, false)\n    : [''];\n\n  if (/\\$$/.test(m.pre)) {    \n    for (var k = 0; k < post.length; k++) {\n      var expansion = pre+ '{' + m.body + '}' + post[k];\n      expansions.push(expansion);\n    }\n  } else {\n    var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n    var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n    var isSequence = isNumericSequence || isAlphaSequence;\n    var isOptions = m.body.indexOf(',') >= 0;\n    if (!isSequence && !isOptions) {\n      // {a},b}\n      if (m.post.match(/,.*\\}/)) {\n        str = m.pre + '{' + m.body + escClose + m.post;\n        return expand(str);\n      }\n      return [str];\n    }\n\n    var n;\n    if (isSequence) {\n      n = m.body.split(/\\.\\./);\n    } else {\n      n = parseCommaParts(m.body);\n      if (n.length === 1) {\n        // x{{a,b}}y ==> x{a}y x{b}y\n        n = expand(n[0], false).map(embrace);\n        if (n.length === 1) {\n          return post.map(function(p) {\n            return m.pre + n[0] + p;\n          });\n        }\n      }\n    }\n\n    // at this point, n is the parts, and we know it's not a comma set\n    // with a single entry.\n    var N;\n\n    if (isSequence) {\n      var x = numeric(n[0]);\n      var y = numeric(n[1]);\n      var width = Math.max(n[0].length, n[1].length)\n      var incr = n.length == 3\n        ? Math.abs(numeric(n[2]))\n        : 1;\n      var test = lte;\n      var reverse = y < x;\n      if (reverse) {\n        incr *= -1;\n        test = gte;\n      }\n      var pad = n.some(isPadded);\n\n      N = [];\n\n      for (var i = x; test(i, y); i += incr) {\n        var c;\n        if (isAlphaSequence) {\n          c = String.fromCharCode(i);\n          if (c === '\\\\')\n            c = '';\n        } else {\n          c = String(i);\n          if (pad) {\n            var need = width - c.length;\n            if (need > 0) {\n              var z = new Array(need + 1).join('0');\n              if (i < 0)\n                c = '-' + z + c.slice(1);\n              else\n                c = z + c;\n            }\n          }\n        }\n        N.push(c);\n      }\n    } else {\n      N = [];\n\n      for (var j = 0; j < n.length; j++) {\n        N.push.apply(N, expand(n[j], false));\n      }\n    }\n\n    for (var j = 0; j < N.length; j++) {\n      for (var k = 0; k < post.length; k++) {\n        var expansion = pre + N[j] + post[k];\n        if (!isTop || isSequence || expansion)\n          expansions.push(expansion);\n      }\n    }\n  }\n\n  return expansions;\n}\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 { 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 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 { 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 expand from 'brace-expansion'\nimport { assertValidPattern } from './assert-valid-pattern.js'\nimport { AST, ExtglobType } from './ast.js'\nimport { escape } from './escape.js'\nimport { unescape } from './unescape.js'\n\ntype Platform =\n  | 'aix'\n  | 'android'\n  | 'darwin'\n  | 'freebsd'\n  | 'haiku'\n  | 'linux'\n  | 'openbsd'\n  | 'sunos'\n  | 'win32'\n  | 'cygwin'\n  | 'netbsd'\n\nexport interface MinimatchOptions {\n  nobrace?: boolean\n  nocomment?: boolean\n  nonegate?: boolean\n  debug?: boolean\n  noglobstar?: boolean\n  noext?: boolean\n  nonull?: boolean\n  windowsPathsNoEscape?: boolean\n  allowWindowsEscape?: boolean\n  partial?: boolean\n  dot?: boolean\n  nocase?: boolean\n  nocaseMagicOnly?: boolean\n  magicalBraces?: boolean\n  matchBase?: boolean\n  flipNegate?: boolean\n  preserveMultipleSlashes?: boolean\n  optimizationLevel?: number\n  platform?: Platform\n  windowsNoMagicRoot?: boolean\n}\n\nexport const minimatch = (\n  p: string,\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  assertValidPattern(pattern)\n\n  // shortcut: comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    return false\n  }\n\n  return new Minimatch(pattern, options).match(p)\n}\n\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/\nconst starDotExtTest = (ext: string) => (f: string) =>\n  !f.startsWith('.') && f.endsWith(ext)\nconst starDotExtTestDot = (ext: string) => (f: string) => f.endsWith(ext)\nconst starDotExtTestNocase = (ext: string) => {\n  ext = ext.toLowerCase()\n  return (f: string) => !f.startsWith('.') && f.toLowerCase().endsWith(ext)\n}\nconst starDotExtTestNocaseDot = (ext: string) => {\n  ext = ext.toLowerCase()\n  return (f: string) => f.toLowerCase().endsWith(ext)\n}\nconst starDotStarRE = /^\\*+\\.\\*+$/\nconst starDotStarTest = (f: string) => !f.startsWith('.') && f.includes('.')\nconst starDotStarTestDot = (f: string) =>\n  f !== '.' && f !== '..' && f.includes('.')\nconst dotStarRE = /^\\.\\*+$/\nconst dotStarTest = (f: string) => f !== '.' && f !== '..' && f.startsWith('.')\nconst starRE = /^\\*+$/\nconst starTest = (f: string) => f.length !== 0 && !f.startsWith('.')\nconst starTestDot = (f: string) => f.length !== 0 && f !== '.' && f !== '..'\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/\nconst qmarksTestNocase = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExt([$0])\n  if (!ext) return noext\n  ext = ext.toLowerCase()\n  return (f: string) => noext(f) && f.toLowerCase().endsWith(ext)\n}\nconst qmarksTestNocaseDot = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExtDot([$0])\n  if (!ext) return noext\n  ext = ext.toLowerCase()\n  return (f: string) => noext(f) && f.toLowerCase().endsWith(ext)\n}\nconst qmarksTestDot = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExtDot([$0])\n  return !ext ? noext : (f: string) => noext(f) && f.endsWith(ext)\n}\nconst qmarksTest = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExt([$0])\n  return !ext ? noext : (f: string) => noext(f) && f.endsWith(ext)\n}\nconst qmarksTestNoExt = ([$0]: RegExpMatchArray) => {\n  const len = $0.length\n  return (f: string) => f.length === len && !f.startsWith('.')\n}\nconst qmarksTestNoExtDot = ([$0]: RegExpMatchArray) => {\n  const len = $0.length\n  return (f: string) => f.length === len && f !== '.' && f !== '..'\n}\n\n/* c8 ignore start */\nconst defaultPlatform: Platform = (\n  typeof process === 'object' && process\n    ? (typeof process.env === 'object' &&\n        process.env &&\n        process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n      process.platform\n    : 'posix'\n) as Platform\ntype Sep = '\\\\' | '/'\nconst path: { [k: string]: { sep: Sep } } = {\n  win32: { sep: '\\\\' },\n  posix: { sep: '/' },\n}\n/* c8 ignore stop */\n\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep\nminimatch.sep = sep\n\nexport const GLOBSTAR = Symbol('globstar **')\nminimatch.GLOBSTAR = GLOBSTAR\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?'\n\nexport const filter =\n  (pattern: string, options: MinimatchOptions = {}) =>\n  (p: string) =>\n    minimatch(p, pattern, options)\nminimatch.filter = filter\n\nconst ext = (a: MinimatchOptions, b: MinimatchOptions = {}) =>\n  Object.assign({}, a, b)\n\nexport const defaults = (def: MinimatchOptions): typeof minimatch => {\n  if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n    return minimatch\n  }\n\n  const orig = minimatch\n\n  const m = (p: string, pattern: string, options: MinimatchOptions = {}) =>\n    orig(p, pattern, ext(def, options))\n\n  return Object.assign(m, {\n    Minimatch: class Minimatch extends orig.Minimatch {\n      constructor(pattern: string, options: MinimatchOptions = {}) {\n        super(pattern, ext(def, options))\n      }\n      static defaults(options: MinimatchOptions) {\n        return orig.defaults(ext(def, options)).Minimatch\n      }\n    },\n\n    AST: class AST extends orig.AST {\n      /* c8 ignore start */\n      constructor(\n        type: ExtglobType | null,\n        parent?: AST,\n        options: MinimatchOptions = {}\n      ) {\n        super(type, parent, ext(def, options))\n      }\n      /* c8 ignore stop */\n\n      static fromGlob(pattern: string, options: MinimatchOptions = {}) {\n        return orig.AST.fromGlob(pattern, ext(def, options))\n      }\n    },\n\n    unescape: (\n      s: string,\n      options: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n    ) => orig.unescape(s, ext(def, options)),\n\n    escape: (\n      s: string,\n      options: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n    ) => orig.escape(s, ext(def, options)),\n\n    filter: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.filter(pattern, ext(def, options)),\n\n    defaults: (options: MinimatchOptions) => orig.defaults(ext(def, options)),\n\n    makeRe: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.makeRe(pattern, ext(def, options)),\n\n    braceExpand: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.braceExpand(pattern, ext(def, options)),\n\n    match: (list: string[], pattern: string, options: MinimatchOptions = {}) =>\n      orig.match(list, pattern, ext(def, options)),\n\n    sep: orig.sep,\n    GLOBSTAR: GLOBSTAR as typeof GLOBSTAR,\n  })\n}\nminimatch.defaults = defaults\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  assertValidPattern(pattern)\n\n  // Thanks to Yeting Li <https://github.com/yetingli> for\n  // improving this regexp to avoid a ReDOS vulnerability.\n  if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n    // shortcut. no need to expand.\n    return [pattern]\n  }\n\n  return expand(pattern)\n}\nminimatch.braceExpand = braceExpand\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\n\nexport const makeRe = (pattern: string, options: MinimatchOptions = {}) =>\n  new Minimatch(pattern, options).makeRe()\nminimatch.makeRe = makeRe\n\nexport const match = (\n  list: string[],\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  const mm = new Minimatch(pattern, options)\n  list = list.filter(f => mm.match(f))\n  if (mm.options.nonull && !list.length) {\n    list.push(pattern)\n  }\n  return list\n}\nminimatch.match = match\n\n// replace stuff like \\* with *\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/\nconst regExpEscape = (s: string) =>\n  s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\nexport type MMRegExp = RegExp & {\n  _src?: string\n  _glob?: string\n}\n\nexport type ParseReturnFiltered = string | MMRegExp | typeof GLOBSTAR\nexport type ParseReturn = ParseReturnFiltered | false\n\nexport class Minimatch {\n  options: MinimatchOptions\n  set: ParseReturnFiltered[][]\n  pattern: string\n\n  windowsPathsNoEscape: boolean\n  nonegate: boolean\n  negate: boolean\n  comment: boolean\n  empty: boolean\n  preserveMultipleSlashes: boolean\n  partial: boolean\n  globSet: string[]\n  globParts: string[][]\n  nocase: boolean\n\n  isWindows: boolean\n  platform: Platform\n  windowsNoMagicRoot: boolean\n\n  regexp: false | null | MMRegExp\n  constructor(pattern: string, options: MinimatchOptions = {}) {\n    assertValidPattern(pattern)\n\n    options = options || {}\n    this.options = options\n    this.pattern = pattern\n    this.platform = options.platform || defaultPlatform\n    this.isWindows = this.platform === 'win32'\n    this.windowsPathsNoEscape =\n      !!options.windowsPathsNoEscape || options.allowWindowsEscape === false\n    if (this.windowsPathsNoEscape) {\n      this.pattern = this.pattern.replace(/\\\\/g, '/')\n    }\n    this.preserveMultipleSlashes = !!options.preserveMultipleSlashes\n    this.regexp = null\n    this.negate = false\n    this.nonegate = !!options.nonegate\n    this.comment = false\n    this.empty = false\n    this.partial = !!options.partial\n    this.nocase = !!this.options.nocase\n    this.windowsNoMagicRoot =\n      options.windowsNoMagicRoot !== undefined\n        ? options.windowsNoMagicRoot\n        : !!(this.isWindows && this.nocase)\n\n    this.globSet = []\n    this.globParts = []\n    this.set = []\n\n    // make the set of regexps etc.\n    this.make()\n  }\n\n  hasMagic(): boolean {\n    if (this.options.magicalBraces && this.set.length > 1) {\n      return true\n    }\n    for (const pattern of this.set) {\n      for (const part of pattern) {\n        if (typeof part !== 'string') return true\n      }\n    }\n    return false\n  }\n\n  debug(..._: any[]) {}\n\n  make() {\n    const pattern = this.pattern\n    const options = this.options\n\n    // empty patterns and comments match nothing.\n    if (!options.nocomment && pattern.charAt(0) === '#') {\n      this.comment = true\n      return\n    }\n\n    if (!pattern) {\n      this.empty = true\n      return\n    }\n\n    // step 1: figure out negation, etc.\n    this.parseNegate()\n\n    // step 2: expand braces\n    this.globSet = [...new Set(this.braceExpand())]\n\n    if (options.debug) {\n      this.debug = (...args: any[]) => console.error(...args)\n    }\n\n    this.debug(this.pattern, this.globSet)\n\n    // step 3: now we have a set, so turn each one into a series of\n    // path-portion matching patterns.\n    // These will be regexps, except in the case of \"**\", which is\n    // set to the GLOBSTAR object for globstar behavior,\n    // and will not contain any / characters\n    //\n    // First, we preprocess to make the glob pattern sets a bit simpler\n    // and deduped.  There are some perf-killing patterns that can cause\n    // problems with a glob walk, but we can simplify them down a bit.\n    const rawGlobParts = this.globSet.map(s => this.slashSplit(s))\n    this.globParts = this.preprocess(rawGlobParts)\n    this.debug(this.pattern, this.globParts)\n\n    // glob --> regexps\n    let set = this.globParts.map((s, _, __) => {\n      if (this.isWindows && this.windowsNoMagicRoot) {\n        // check if it's a drive or unc path.\n        const isUNC =\n          s[0] === '' &&\n          s[1] === '' &&\n          (s[2] === '?' || !globMagic.test(s[2])) &&\n          !globMagic.test(s[3])\n        const isDrive = /^[a-z]:/i.test(s[0])\n        if (isUNC) {\n          return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))]\n        } else if (isDrive) {\n          return [s[0], ...s.slice(1).map(ss => this.parse(ss))]\n        }\n      }\n      return s.map(ss => this.parse(ss))\n    })\n\n    this.debug(this.pattern, set)\n\n    // filter out everything that didn't compile properly.\n    this.set = set.filter(\n      s => s.indexOf(false) === -1\n    ) as ParseReturnFiltered[][]\n\n    // do not treat the ? in UNC paths as magic\n    if (this.isWindows) {\n      for (let i = 0; i < this.set.length; i++) {\n        const p = this.set[i]\n        if (\n          p[0] === '' &&\n          p[1] === '' &&\n          this.globParts[i][2] === '?' &&\n          typeof p[3] === 'string' &&\n          /^[a-z]:$/i.test(p[3])\n        ) {\n          p[2] = '?'\n        }\n      }\n    }\n\n    this.debug(this.pattern, this.set)\n  }\n\n  // various transforms to equivalent pattern sets that are\n  // faster to process in a filesystem walk.  The goal is to\n  // eliminate what we can, and push all ** patterns as far\n  // to the right as possible, even if it increases the number\n  // of patterns that we have to process.\n  preprocess(globParts: string[][]) {\n    // if we're not in globstar mode, then turn all ** into *\n    if (this.options.noglobstar) {\n      for (let i = 0; i < globParts.length; i++) {\n        for (let j = 0; j < globParts[i].length; j++) {\n          if (globParts[i][j] === '**') {\n            globParts[i][j] = '*'\n          }\n        }\n      }\n    }\n\n    const { optimizationLevel = 1 } = this.options\n\n    if (optimizationLevel >= 2) {\n      // aggressive optimization for the purpose of fs walking\n      globParts = this.firstPhasePreProcess(globParts)\n      globParts = this.secondPhasePreProcess(globParts)\n    } else if (optimizationLevel >= 1) {\n      // just basic optimizations to remove some .. parts\n      globParts = this.levelOneOptimize(globParts)\n    } else {\n      // just collapse multiple ** portions into one\n      globParts = this.adjascentGlobstarOptimize(globParts)\n    }\n\n    return globParts\n  }\n\n  // just get rid of adjascent ** portions\n  adjascentGlobstarOptimize(globParts: string[][]) {\n    return globParts.map(parts => {\n      let gs: number = -1\n      while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n        let i = gs\n        while (parts[i + 1] === '**') {\n          i++\n        }\n        if (i !== gs) {\n          parts.splice(gs, i - gs)\n        }\n      }\n      return parts\n    })\n  }\n\n  // get rid of adjascent ** and resolve .. portions\n  levelOneOptimize(globParts: string[][]) {\n    return globParts.map(parts => {\n      parts = parts.reduce((set: string[], part) => {\n        const prev = set[set.length - 1]\n        if (part === '**' && prev === '**') {\n          return set\n        }\n        if (part === '..') {\n          if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n            set.pop()\n            return set\n          }\n        }\n        set.push(part)\n        return set\n      }, [])\n      return parts.length === 0 ? [''] : parts\n    })\n  }\n\n  levelTwoFileOptimize(parts: string | string[]) {\n    if (!Array.isArray(parts)) {\n      parts = this.slashSplit(parts)\n    }\n    let didSomething: boolean = false\n    do {\n      didSomething = false\n      // <pre>/<e>/<rest> -> <pre>/<rest>\n      if (!this.preserveMultipleSlashes) {\n        for (let i = 1; i < parts.length - 1; i++) {\n          const p = parts[i]\n          // don't squeeze out UNC patterns\n          if (i === 1 && p === '' && parts[0] === '') continue\n          if (p === '.' || p === '') {\n            didSomething = true\n            parts.splice(i, 1)\n            i--\n          }\n        }\n        if (\n          parts[0] === '.' &&\n          parts.length === 2 &&\n          (parts[1] === '.' || parts[1] === '')\n        ) {\n          didSomething = true\n          parts.pop()\n        }\n      }\n\n      // <pre>/<p>/../<rest> -> <pre>/<rest>\n      let dd: number = 0\n      while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n        const p = parts[dd - 1]\n        if (p && p !== '.' && p !== '..' && p !== '**') {\n          didSomething = true\n          parts.splice(dd - 1, 2)\n          dd -= 2\n        }\n      }\n    } while (didSomething)\n    return parts.length === 0 ? [''] : parts\n  }\n\n  // First phase: single-pattern processing\n  // <pre> is 1 or more portions\n  // <rest> is 1 or more portions\n  // <p> is any portion other than ., .., '', or **\n  // <e> is . or ''\n  //\n  // **/.. is *brutal* for filesystem walking performance, because\n  // it effectively resets the recursive walk each time it occurs,\n  // and ** cannot be reduced out by a .. pattern part like a regexp\n  // or most strings (other than .., ., and '') can be.\n  //\n  // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n  // <pre>/<e>/<rest> -> <pre>/<rest>\n  // <pre>/<p>/../<rest> -> <pre>/<rest>\n  // **/**/<rest> -> **/<rest>\n  //\n  // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n  // this WOULD be allowed if ** did follow symlinks, or * didn't\n  firstPhasePreProcess(globParts: string[][]) {\n    let didSomething = false\n    do {\n      didSomething = false\n      // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n      for (let parts of globParts) {\n        let gs: number = -1\n        while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n          let gss: number = gs\n          while (parts[gss + 1] === '**') {\n            // <pre>/**/**/<rest> -> <pre>/**/<rest>\n            gss++\n          }\n          // eg, if gs is 2 and gss is 4, that means we have 3 **\n          // parts, and can remove 2 of them.\n          if (gss > gs) {\n            parts.splice(gs + 1, gss - gs)\n          }\n\n          let next = parts[gs + 1]\n          const p = parts[gs + 2]\n          const p2 = parts[gs + 3]\n          if (next !== '..') continue\n          if (\n            !p ||\n            p === '.' ||\n            p === '..' ||\n            !p2 ||\n            p2 === '.' ||\n            p2 === '..'\n          ) {\n            continue\n          }\n          didSomething = true\n          // edit parts in place, and push the new one\n          parts.splice(gs, 1)\n          const other = parts.slice(0)\n          other[gs] = '**'\n          globParts.push(other)\n          gs--\n        }\n\n        // <pre>/<e>/<rest> -> <pre>/<rest>\n        if (!this.preserveMultipleSlashes) {\n          for (let i = 1; i < parts.length - 1; i++) {\n            const p = parts[i]\n            // don't squeeze out UNC patterns\n            if (i === 1 && p === '' && parts[0] === '') continue\n            if (p === '.' || p === '') {\n              didSomething = true\n              parts.splice(i, 1)\n              i--\n            }\n          }\n          if (\n            parts[0] === '.' &&\n            parts.length === 2 &&\n            (parts[1] === '.' || parts[1] === '')\n          ) {\n            didSomething = true\n            parts.pop()\n          }\n        }\n\n        // <pre>/<p>/../<rest> -> <pre>/<rest>\n        let dd: number = 0\n        while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n          const p = parts[dd - 1]\n          if (p && p !== '.' && p !== '..' && p !== '**') {\n            didSomething = true\n            const needDot = dd === 1 && parts[dd + 1] === '**'\n            const splin = needDot ? ['.'] : []\n            parts.splice(dd - 1, 2, ...splin)\n            if (parts.length === 0) parts.push('')\n            dd -= 2\n          }\n        }\n      }\n    } while (didSomething)\n\n    return globParts\n  }\n\n  // second phase: multi-pattern dedupes\n  // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n  // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n  // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n  //\n  // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n  // ^-- not valid because ** doens't follow symlinks\n  secondPhasePreProcess(globParts: string[][]): string[][] {\n    for (let i = 0; i < globParts.length - 1; i++) {\n      for (let j = i + 1; j < globParts.length; j++) {\n        const matched = this.partsMatch(\n          globParts[i],\n          globParts[j],\n          !this.preserveMultipleSlashes\n        )\n        if (matched) {\n          globParts[i] = []\n          globParts[j] = matched\n          break\n        }\n      }\n    }\n    return globParts.filter(gs => gs.length)\n  }\n\n  partsMatch(\n    a: string[],\n    b: string[],\n    emptyGSMatch: boolean = false\n  ): false | string[] {\n    let ai = 0\n    let bi = 0\n    let result: string[] = []\n    let which: string = ''\n    while (ai < a.length && bi < b.length) {\n      if (a[ai] === b[bi]) {\n        result.push(which === 'b' ? b[bi] : a[ai])\n        ai++\n        bi++\n      } else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n        result.push(a[ai])\n        ai++\n      } else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n        result.push(b[bi])\n        bi++\n      } else if (\n        a[ai] === '*' &&\n        b[bi] &&\n        (this.options.dot || !b[bi].startsWith('.')) &&\n        b[bi] !== '**'\n      ) {\n        if (which === 'b') return false\n        which = 'a'\n        result.push(a[ai])\n        ai++\n        bi++\n      } else if (\n        b[bi] === '*' &&\n        a[ai] &&\n        (this.options.dot || !a[ai].startsWith('.')) &&\n        a[ai] !== '**'\n      ) {\n        if (which === 'a') return false\n        which = 'b'\n        result.push(b[bi])\n        ai++\n        bi++\n      } else {\n        return false\n      }\n    }\n    // if we fall out of the loop, it means they two are identical\n    // as long as their lengths match\n    return a.length === b.length && result\n  }\n\n  parseNegate() {\n    if (this.nonegate) return\n\n    const pattern = this.pattern\n    let negate = false\n    let negateOffset = 0\n\n    for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n      negate = !negate\n      negateOffset++\n    }\n\n    if (negateOffset) this.pattern = pattern.slice(negateOffset)\n    this.negate = negate\n  }\n\n  // set partial to true to test if, for example,\n  // \"/a/b\" matches the start of \"/*/b/*/d\"\n  // Partial means, if you run out of file before you run\n  // out of pattern, then that's fine, as long as all\n  // the parts match.\n  matchOne(file: string[], pattern: ParseReturn[], partial: boolean = false) {\n    const options = this.options\n\n    // UNC paths like //?/X:/... can match X:/... and vice versa\n    // Drive letters in absolute drive or unc paths are always compared\n    // case-insensitively.\n    if (this.isWindows) {\n      const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0])\n      const fileUNC =\n        !fileDrive &&\n        file[0] === '' &&\n        file[1] === '' &&\n        file[2] === '?' &&\n        /^[a-z]:$/i.test(file[3])\n\n      const patternDrive =\n        typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0])\n      const patternUNC =\n        !patternDrive &&\n        pattern[0] === '' &&\n        pattern[1] === '' &&\n        pattern[2] === '?' &&\n        typeof pattern[3] === 'string' &&\n        /^[a-z]:$/i.test(pattern[3])\n\n      const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined\n      const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined\n      if (typeof fdi === 'number' && typeof pdi === 'number') {\n        const [fd, pd]: [string, string] = [file[fdi], pattern[pdi] as string]\n        if (fd.toLowerCase() === pd.toLowerCase()) {\n          pattern[pdi] = fd\n          if (pdi > fdi) {\n            pattern = pattern.slice(pdi)\n          } else if (fdi > pdi) {\n            file = file.slice(fdi)\n          }\n        }\n      }\n    }\n\n    // resolve and reduce . and .. portions in the file as well.\n    // dont' need to do the second phase, because it's only one string[]\n    const { optimizationLevel = 1 } = this.options\n    if (optimizationLevel >= 2) {\n      file = this.levelTwoFileOptimize(file)\n    }\n\n    this.debug('matchOne', this, { file, pattern })\n    this.debug('matchOne', file.length, pattern.length)\n\n    for (\n      var fi = 0, pi = 0, fl = file.length, pl = pattern.length;\n      fi < fl && pi < pl;\n      fi++, pi++\n    ) {\n      this.debug('matchOne loop')\n      var p = pattern[pi]\n      var f = file[fi]\n\n      this.debug(pattern, p, f)\n\n      // should be impossible.\n      // some invalid regexp stuff in the set.\n      /* c8 ignore start */\n      if (p === false) {\n        return false\n      }\n      /* c8 ignore stop */\n\n      if (p === GLOBSTAR) {\n        this.debug('GLOBSTAR', [pattern, p, f])\n\n        // \"**\"\n        // a/**/b/**/c would match the following:\n        // a/b/x/y/z/c\n        // a/x/y/z/b/c\n        // a/b/x/b/x/c\n        // a/b/c\n        // To do this, take the rest of the pattern after\n        // the **, and see if it would match the file remainder.\n        // If so, return success.\n        // If not, the ** \"swallows\" a segment, and try again.\n        // This is recursively awful.\n        //\n        // a/**/b/**/c matching a/b/x/y/z/c\n        // - a matches a\n        // - doublestar\n        //   - matchOne(b/x/y/z/c, b/**/c)\n        //     - b matches b\n        //     - doublestar\n        //       - matchOne(x/y/z/c, c) -> no\n        //       - matchOne(y/z/c, c) -> no\n        //       - matchOne(z/c, c) -> no\n        //       - matchOne(c, c) yes, hit\n        var fr = fi\n        var pr = pi + 1\n        if (pr === pl) {\n          this.debug('** at the end')\n          // a ** at the end will just swallow the rest.\n          // We have found a match.\n          // however, it will not swallow /.x, unless\n          // options.dot is set.\n          // . and .. are *never* matched by **, for explosively\n          // exponential reasons.\n          for (; fi < fl; fi++) {\n            if (\n              file[fi] === '.' ||\n              file[fi] === '..' ||\n              (!options.dot && file[fi].charAt(0) === '.')\n            )\n              return false\n          }\n          return true\n        }\n\n        // ok, let's see if we can swallow whatever we can.\n        while (fr < fl) {\n          var swallowee = file[fr]\n\n          this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n          // XXX remove this slice.  Just pass the start index.\n          if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n            this.debug('globstar found match!', fr, fl, swallowee)\n            // found a match.\n            return true\n          } else {\n            // can't swallow \".\" or \"..\" ever.\n            // can only swallow \".foo\" when explicitly asked.\n            if (\n              swallowee === '.' ||\n              swallowee === '..' ||\n              (!options.dot && swallowee.charAt(0) === '.')\n            ) {\n              this.debug('dot detected!', file, fr, pattern, pr)\n              break\n            }\n\n            // ** swallows a segment, and continue.\n            this.debug('globstar swallow a segment, and continue')\n            fr++\n          }\n        }\n\n        // no match was found.\n        // However, in partial mode, we can't say this is necessarily over.\n        /* c8 ignore start */\n        if (partial) {\n          // ran out of file\n          this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n          if (fr === fl) {\n            return true\n          }\n        }\n        /* c8 ignore stop */\n        return false\n      }\n\n      // something other than **\n      // non-magic patterns just have to match exactly\n      // patterns with magic have been turned into regexps.\n      let hit: boolean\n      if (typeof p === 'string') {\n        hit = f === p\n        this.debug('string match', p, f, hit)\n      } else {\n        hit = p.test(f)\n        this.debug('pattern match', p, f, hit)\n      }\n\n      if (!hit) return false\n    }\n\n    // Note: ending in / means that we'll get a final \"\"\n    // at the end of the pattern.  This can only match a\n    // corresponding \"\" at the end of the file.\n    // If the file ends in /, then it can only match a\n    // a pattern that ends in /, unless the pattern just\n    // doesn't have any more for it. But, a/b/ should *not*\n    // match \"a/b/*\", even though \"\" matches against the\n    // [^/]*? pattern, except in partial mode, where it might\n    // simply not be reached yet.\n    // However, a/b/ should still satisfy a/*\n\n    // now either we fell off the end of the pattern, or we're done.\n    if (fi === fl && pi === pl) {\n      // ran out of pattern and filename at the same time.\n      // an exact hit!\n      return true\n    } else if (fi === fl) {\n      // ran out of file, but still had pattern left.\n      // this is ok if we're doing the match as part of\n      // a glob fs traversal.\n      return partial\n    } else if (pi === pl) {\n      // ran out of pattern, still have file left.\n      // this is only acceptable if we're on the very last\n      // empty segment of a file with a trailing slash.\n      // a/* should match a/b/\n      return fi === fl - 1 && file[fi] === ''\n\n      /* c8 ignore start */\n    } else {\n      // should be unreachable.\n      throw new Error('wtf?')\n    }\n    /* c8 ignore stop */\n  }\n\n  braceExpand() {\n    return braceExpand(this.pattern, this.options)\n  }\n\n  parse(pattern: string): ParseReturn {\n    assertValidPattern(pattern)\n\n    const options = this.options\n\n    // shortcuts\n    if (pattern === '**') return GLOBSTAR\n    if (pattern === '') return ''\n\n    // far and away, the most common glob pattern parts are\n    // *, *.*, and *.<ext>  Add a fast check method for those.\n    let m: RegExpMatchArray | null\n    let fastTest: null | ((f: string) => boolean) = null\n    if ((m = pattern.match(starRE))) {\n      fastTest = options.dot ? starTestDot : starTest\n    } else if ((m = pattern.match(starDotExtRE))) {\n      fastTest = (\n        options.nocase\n          ? options.dot\n            ? starDotExtTestNocaseDot\n            : starDotExtTestNocase\n          : options.dot\n          ? starDotExtTestDot\n          : starDotExtTest\n      )(m[1])\n    } else if ((m = pattern.match(qmarksRE))) {\n      fastTest = (\n        options.nocase\n          ? options.dot\n            ? qmarksTestNocaseDot\n            : qmarksTestNocase\n          : options.dot\n          ? qmarksTestDot\n          : qmarksTest\n      )(m)\n    } else if ((m = pattern.match(starDotStarRE))) {\n      fastTest = options.dot ? starDotStarTestDot : starDotStarTest\n    } else if ((m = pattern.match(dotStarRE))) {\n      fastTest = dotStarTest\n    }\n\n    const re = AST.fromGlob(pattern, this.options).toMMPattern()\n    if (fastTest && typeof re === 'object') {\n      // Avoids overriding in frozen environments\n      Reflect.defineProperty(re, 'test', { value: fastTest })\n    }\n    return re\n  }\n\n  makeRe() {\n    if (this.regexp || this.regexp === false) return this.regexp\n\n    // at this point, this.set is a 2d array of partial\n    // pattern strings, or \"**\".\n    //\n    // It's better to use .match().  This function shouldn't\n    // be used, really, but it's pretty convenient sometimes,\n    // when you just want to work with a regex.\n    const set = this.set\n\n    if (!set.length) {\n      this.regexp = false\n      return this.regexp\n    }\n    const options = this.options\n\n    const twoStar = options.noglobstar\n      ? star\n      : options.dot\n      ? twoStarDot\n      : twoStarNoDot\n    const flags = new Set(options.nocase ? ['i'] : [])\n\n    // regexpify non-globstar patterns\n    // if ** is only item, then we just do one twoStar\n    // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n    // if ** is last, append (\\/twoStar|) to previous\n    // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n    // then filter out GLOBSTAR symbols\n    let re = set\n      .map(pattern => {\n        const pp: (string | typeof GLOBSTAR)[] = pattern.map(p => {\n          if (p instanceof RegExp) {\n            for (const f of p.flags.split('')) flags.add(f)\n          }\n          return typeof p === 'string'\n            ? regExpEscape(p)\n            : p === GLOBSTAR\n            ? GLOBSTAR\n            : p._src\n        }) as (string | typeof GLOBSTAR)[]\n        pp.forEach((p, i) => {\n          const next = pp[i + 1]\n          const prev = pp[i - 1]\n          if (p !== GLOBSTAR || prev === GLOBSTAR) {\n            return\n          }\n          if (prev === undefined) {\n            if (next !== undefined && next !== GLOBSTAR) {\n              pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next\n            } else {\n              pp[i] = twoStar\n            }\n          } else if (next === undefined) {\n            pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?'\n          } else if (next !== GLOBSTAR) {\n            pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next\n            pp[i + 1] = GLOBSTAR\n          }\n        })\n        return pp.filter(p => p !== GLOBSTAR).join('/')\n      })\n      .join('|')\n\n    // need to wrap in parens if we had more than one thing with |,\n    // otherwise only the first will be anchored to ^ and the last to $\n    const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', '']\n    // must match entire pattern\n    // ending in a * or ** will make it less strict.\n    re = '^' + open + re + close + '$'\n\n    // can match anything, as long as it's not this.\n    if (this.negate) re = '^(?!' + re + ').+$'\n\n    try {\n      this.regexp = new RegExp(re, [...flags].join(''))\n      /* c8 ignore start */\n    } catch (ex) {\n      // should be impossible\n      this.regexp = false\n    }\n    /* c8 ignore stop */\n    return this.regexp\n  }\n\n  slashSplit(p: string) {\n    // if p starts with // on windows, we preserve that\n    // so that UNC paths aren't broken.  Otherwise, any number of\n    // / characters are coalesced into one, unless\n    // preserveMultipleSlashes is set to true.\n    if (this.preserveMultipleSlashes) {\n      return p.split('/')\n    } else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n      // add an extra '' for the one we lose\n      return ['', ...p.split(/\\/+/)]\n    } else {\n      return p.split(/\\/+/)\n    }\n  }\n\n  match(f: string, partial = this.partial) {\n    this.debug('match', f, this.pattern)\n    // short-circuit in the case of busted things.\n    // comments, etc.\n    if (this.comment) {\n      return false\n    }\n    if (this.empty) {\n      return f === ''\n    }\n\n    if (f === '/' && partial) {\n      return true\n    }\n\n    const options = this.options\n\n    // windows: need to use /, not \\\n    if (this.isWindows) {\n      f = f.split('\\\\').join('/')\n    }\n\n    // treat the test path as a set of pathparts.\n    const ff = this.slashSplit(f)\n    this.debug(this.pattern, 'split', ff)\n\n    // just ONE of the pattern sets in this.set needs to match\n    // in order for it to be valid.  If negating, then just one\n    // match means that we have failed.\n    // Either way, return on the first hit.\n\n    const set = this.set\n    this.debug(this.pattern, 'set', set)\n\n    // Find the basename of the path by looking for the last non-empty segment\n    let filename: string = ff[ff.length - 1]\n    if (!filename) {\n      for (let i = ff.length - 2; !filename && i >= 0; i--) {\n        filename = ff[i]\n      }\n    }\n\n    for (let i = 0; i < set.length; i++) {\n      const pattern = set[i]\n      let file = ff\n      if (options.matchBase && pattern.length === 1) {\n        file = [filename]\n      }\n      const hit = this.matchOne(file, pattern, partial)\n      if (hit) {\n        if (options.flipNegate) {\n          return true\n        }\n        return !this.negate\n      }\n    }\n\n    // didn't get any hits.  this is success if it's a negative\n    // pattern, failure otherwise.\n    if (options.flipNegate) {\n      return false\n    }\n    return this.negate\n  }\n\n  static defaults(def: MinimatchOptions) {\n    return minimatch.defaults(def).Minimatch\n  }\n}\n/* c8 ignore start */\nexport { AST } from './ast.js'\nexport { escape } from './escape.js'\nexport { unescape } from './unescape.js'\n/* c8 ignore stop */\nminimatch.AST = AST\nminimatch.Minimatch = Minimatch\nminimatch.escape = escape\nminimatch.unescape = unescape\n","const MAX_PATTERN_LENGTH = 1024 * 64\nexport const assertValidPattern: (pattern: any) => void = (\n  pattern: any\n): asserts pattern is string => {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses: { [k: string]: [e: string, u: boolean, n?: boolean] } = {\n  '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n  '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n  '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n  '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n  '[:cntrl:]': ['\\\\p{Cc}', true],\n  '[:digit:]': ['\\\\p{Nd}', true],\n  '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n  '[:lower:]': ['\\\\p{Ll}', true],\n  '[:print:]': ['\\\\p{C}', true],\n  '[:punct:]': ['\\\\p{P}', true],\n  '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n  '[:upper:]': ['\\\\p{Lu}', true],\n  '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n  '[:xdigit:]': ['A-Fa-f0-9', false],\n}\n\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s: string) => s.replace(/[[\\]\\\\-]/g, '\\\\$&')\n// escape all regexp magic characters\nconst regexpEscape = (s: string) =>\n  s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges: string[]): string => ranges.join('')\n\nexport type ParseClassResult = [\n  src: string,\n  uFlag: boolean,\n  consumed: number,\n  hasMagic: boolean\n]\n\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (\n  glob: string,\n  position: number\n): ParseClassResult => {\n  const pos = position\n  /* c8 ignore start */\n  if (glob.charAt(pos) !== '[') {\n    throw new Error('not in a brace expression')\n  }\n  /* c8 ignore stop */\n  const ranges: string[] = []\n  const negs: string[] = []\n\n  let i = pos + 1\n  let sawStart = false\n  let uflag = false\n  let escaping = false\n  let negate = false\n  let endPos = pos\n  let rangeStart = ''\n  WHILE: while (i < glob.length) {\n    const c = glob.charAt(i)\n    if ((c === '!' || c === '^') && i === pos + 1) {\n      negate = true\n      i++\n      continue\n    }\n\n    if (c === ']' && sawStart && !escaping) {\n      endPos = i + 1\n      break\n    }\n\n    sawStart = true\n    if (c === '\\\\') {\n      if (!escaping) {\n        escaping = true\n        i++\n        continue\n      }\n      // escaped \\ char, fall through and treat like normal char\n    }\n    if (c === '[' && !escaping) {\n      // either a posix class, a collation equivalent, or just a [\n      for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n        if (glob.startsWith(cls, i)) {\n          // invalid, [a-[] is fine, but not [a-[:alpha]]\n          if (rangeStart) {\n            return ['$.', false, glob.length - pos, true]\n          }\n          i += cls.length\n          if (neg) negs.push(unip)\n          else ranges.push(unip)\n          uflag = uflag || u\n          continue WHILE\n        }\n      }\n    }\n\n    // now it's just a normal character, effectively\n    escaping = false\n    if (rangeStart) {\n      // throw this range away if it's not valid, but others\n      // can still match.\n      if (c > rangeStart) {\n        ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c))\n      } else if (c === rangeStart) {\n        ranges.push(braceEscape(c))\n      }\n      rangeStart = ''\n      i++\n      continue\n    }\n\n    // now might be the start of a range.\n    // can be either c-d or c-] or c<more...>] or c] at this point\n    if (glob.startsWith('-]', i + 1)) {\n      ranges.push(braceEscape(c + '-'))\n      i += 2\n      continue\n    }\n    if (glob.startsWith('-', i + 1)) {\n      rangeStart = c\n      i += 2\n      continue\n    }\n\n    // not the start of a range, just a single character\n    ranges.push(braceEscape(c))\n    i++\n  }\n\n  if (endPos < i) {\n    // didn't see the end of the class, not a valid class,\n    // but might still be valid as a literal match.\n    return ['', false, 0, false]\n  }\n\n  // if we got no ranges and no negates, then we have a range that\n  // cannot possibly match anything, and that poisons the whole glob\n  if (!ranges.length && !negs.length) {\n    return ['$.', false, glob.length - pos, true]\n  }\n\n  // if we got one positive range, and it's a single character, then that's\n  // not actually a magic pattern, it's just that one literal character.\n  // we should not treat that as \"magic\", we should just return the literal\n  // character. [_] is a perfectly valid way to escape glob magic chars.\n  if (\n    negs.length === 0 &&\n    ranges.length === 1 &&\n    /^\\\\?.$/.test(ranges[0]) &&\n    !negate\n  ) {\n    const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]\n    return [regexpEscape(r), false, endPos - pos, false]\n  }\n\n  const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']'\n  const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']'\n  const comb =\n    ranges.length && negs.length\n      ? '(' + sranges + '|' + snegs + ')'\n      : ranges.length\n      ? sranges\n      : snegs\n\n  return [comb, uflag, endPos - pos, true]\n}\n","import { MinimatchOptions } from './index.js'\n/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes.  For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n) => {\n  return windowsPathsNoEscape\n    ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n    : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1')\n}\n","// parse a single path portion\n\nimport { parseClass } from './brace-expressions.js'\nimport { MinimatchOptions, MMRegExp } from './index.js'\nimport { unescape } from './unescape.js'\n\n// classes [] are handled by the parseClass method\n// for positive extglobs, we sub-parse the contents, and combine,\n// with the appropriate regexp close.\n// for negative extglobs, we sub-parse the contents, but then\n// have to include the rest of the pattern, then the parent, etc.,\n// as the thing that cannot be because RegExp negative lookaheads\n// are different from globs.\n//\n// So for example:\n// a@(i|w!(x|y)z|j)b => ^a(i|w((!?(x|y)zb).*)z|j)b$\n//   1   2 3   4 5 6      1   2    3   46      5 6\n//\n// Assembling the extglob requires not just the negated patterns themselves,\n// but also anything following the negative patterns up to the boundary\n// of the current pattern, plus anything following in the parent pattern.\n//\n//\n// So, first, we parse the string into an AST of extglobs, without turning\n// anything into regexps yet.\n//\n// ['a', {@ [['i'], ['w', {!['x', 'y']}, 'z'], ['j']]}, 'b']\n//\n// Then, for all the negative extglobs, we append whatever comes after in\n// each parent as their tail\n//\n// ['a', {@ [['i'], ['w', {!['x', 'y'], 'z', 'b'}, 'z'], ['j']]}, 'b']\n//\n// Lastly, we turn each of these pieces into a regexp, and join\n//\n//                                 v----- .* because there's more following,\n//                                 v    v  otherwise, .+ because it must be\n//                                 v    v  *something* there.\n// ['^a', {@ ['i', 'w(?:(!?(?:x|y).*zb$).*)z', 'j' ]}, 'b$']\n//   copy what follows into here--^^^^^\n// ['^a', '(?:i|w(?:(?!(?:x|y).*zb$).*)z|j)', 'b$']\n// ['^a(?:i|w(?:(?!(?:x|y).*zb$).*)z|j)b$']\n\nexport type ExtglobType = '!' | '?' | '+' | '*' | '@'\nconst types = new Set<ExtglobType>(['!', '?', '+', '*', '@'])\nconst isExtglobType = (c: string): c is ExtglobType =>\n  types.has(c as ExtglobType)\n\n// Patterns that get prepended to bind to the start of either the\n// entire string, or just a single path portion, to prevent dots\n// and/or traversal patterns, when needed.\n// Exts don't need the ^ or / bit, because the root binds that already.\nconst startNoTraversal = '(?!(?:^|/)\\\\.\\\\.?(?:$|/))'\nconst startNoDot = '(?!\\\\.)'\n\n// characters that indicate a start of pattern needs the \"no dots\" bit,\n// because a dot *might* be matched. ( is not in the list, because in\n// the case of a child extglob, it will handle the prevention itself.\nconst addPatternStart = new Set(['[', '.'])\n// cases where traversal is A-OK, no dot prevention needed\nconst justDots = new Set(['..', '.'])\nconst reSpecials = new Set('().*{}+?[]^$\\\\!')\nconst regExpEscape = (s: string) =>\n  s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\n// any single thing other than /\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n// use + when we need to ensure that *something* matches, because the * is\n// the only thing in the path portion.\nconst starNoEmpty = qmark + '+?'\n\n// remove the \\ chars that we added if we end up doing a nonmagic compare\n// const deslash = (s: string) => s.replace(/\\\\(.)/g, '$1')\n\nexport class AST {\n  type: ExtglobType | null\n  readonly #root: AST\n\n  #hasMagic?: boolean\n  #uflag: boolean = false\n  #parts: (string | AST)[] = []\n  readonly #parent?: AST\n  readonly #parentIndex: number\n  #negs: AST[]\n  #filledNegs: boolean = false\n  #options: MinimatchOptions\n  #toString?: string\n  // set to true if it's an extglob with no children\n  // (which really means one child of '')\n  #emptyExt: boolean = false\n\n  constructor(\n    type: ExtglobType | null,\n    parent?: AST,\n    options: MinimatchOptions = {}\n  ) {\n    this.type = type\n    // extglobs are inherently magical\n    if (type) this.#hasMagic = true\n    this.#parent = parent\n    this.#root = this.#parent ? this.#parent.#root : this\n    this.#options = this.#root === this ? options : this.#root.#options\n    this.#negs = this.#root === this ? [] : this.#root.#negs\n    if (type === '!' && !this.#root.#filledNegs) this.#negs.push(this)\n    this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0\n  }\n\n  get hasMagic(): boolean | undefined {\n    /* c8 ignore start */\n    if (this.#hasMagic !== undefined) return this.#hasMagic\n    /* c8 ignore stop */\n    for (const p of this.#parts) {\n      if (typeof p === 'string') continue\n      if (p.type || p.hasMagic) return (this.#hasMagic = true)\n    }\n    // note: will be undefined until we generate the regexp src and find out\n    return this.#hasMagic\n  }\n\n  // reconstructs the pattern\n  toString(): string {\n    if (this.#toString !== undefined) return this.#toString\n    if (!this.type) {\n      return (this.#toString = this.#parts.map(p => String(p)).join(''))\n    } else {\n      return (this.#toString =\n        this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')')\n    }\n  }\n\n  #fillNegs() {\n    /* c8 ignore start */\n    if (this !== this.#root) throw new Error('should only call on root')\n    if (this.#filledNegs) return this\n    /* c8 ignore stop */\n\n    // call toString() once to fill this out\n    this.toString()\n    this.#filledNegs = true\n    let n: AST | undefined\n    while ((n = this.#negs.pop())) {\n      if (n.type !== '!') continue\n      // walk up the tree, appending everthing that comes AFTER parentIndex\n      let p: AST | undefined = n\n      let pp = p.#parent\n      while (pp) {\n        for (\n          let i = p.#parentIndex + 1;\n          !pp.type && i < pp.#parts.length;\n          i++\n        ) {\n          for (const part of n.#parts) {\n            /* c8 ignore start */\n            if (typeof part === 'string') {\n              throw new Error('string part in extglob AST??')\n            }\n            /* c8 ignore stop */\n            part.copyIn(pp.#parts[i])\n          }\n        }\n        p = pp\n        pp = p.#parent\n      }\n    }\n    return this\n  }\n\n  push(...parts: (string | AST)[]) {\n    for (const p of parts) {\n      if (p === '') continue\n      /* c8 ignore start */\n      if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {\n        throw new Error('invalid part: ' + p)\n      }\n      /* c8 ignore stop */\n      this.#parts.push(p)\n    }\n  }\n\n  toJSON() {\n    const ret: any[] =\n      this.type === null\n        ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))\n        : [this.type, ...this.#parts.map(p => (p as AST).toJSON())]\n    if (this.isStart() && !this.type) ret.unshift([])\n    if (\n      this.isEnd() &&\n      (this === this.#root ||\n        (this.#root.#filledNegs && this.#parent?.type === '!'))\n    ) {\n      ret.push({})\n    }\n    return ret\n  }\n\n  isStart(): boolean {\n    if (this.#root === this) return true\n    // if (this.type) return !!this.#parent?.isStart()\n    if (!this.#parent?.isStart()) return false\n    if (this.#parentIndex === 0) return true\n    // if everything AHEAD of this is a negation, then it's still the \"start\"\n    const p = this.#parent\n    for (let i = 0; i < this.#parentIndex; i++) {\n      const pp = p.#parts[i]\n      if (!(pp instanceof AST && pp.type === '!')) {\n        return false\n      }\n    }\n    return true\n  }\n\n  isEnd(): boolean {\n    if (this.#root === this) return true\n    if (this.#parent?.type === '!') return true\n    if (!this.#parent?.isEnd()) return false\n    if (!this.type) return this.#parent?.isEnd()\n    // if not root, it'll always have a parent\n    /* c8 ignore start */\n    const pl = this.#parent ? this.#parent.#parts.length : 0\n    /* c8 ignore stop */\n    return this.#parentIndex === pl - 1\n  }\n\n  copyIn(part: AST | string) {\n    if (typeof part === 'string') this.push(part)\n    else this.push(part.clone(this))\n  }\n\n  clone(parent: AST) {\n    const c = new AST(this.type, parent)\n    for (const p of this.#parts) {\n      c.copyIn(p)\n    }\n    return c\n  }\n\n  static #parseAST(\n    str: string,\n    ast: AST,\n    pos: number,\n    opt: MinimatchOptions\n  ): number {\n    let escaping = false\n    let inBrace = false\n    let braceStart = -1\n    let braceNeg = false\n    if (ast.type === null) {\n      // outside of a extglob, append until we find a start\n      let i = pos\n      let acc = ''\n      while (i < str.length) {\n        const c = str.charAt(i++)\n        // still accumulate escapes at this point, but we do ignore\n        // starts that are escaped\n        if (escaping || c === '\\\\') {\n          escaping = !escaping\n          acc += c\n          continue\n        }\n\n        if (inBrace) {\n          if (i === braceStart + 1) {\n            if (c === '^' || c === '!') {\n              braceNeg = true\n            }\n          } else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n            inBrace = false\n          }\n          acc += c\n          continue\n        } else if (c === '[') {\n          inBrace = true\n          braceStart = i\n          braceNeg = false\n          acc += c\n          continue\n        }\n\n        if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {\n          ast.push(acc)\n          acc = ''\n          const ext = new AST(c, ast)\n          i = AST.#parseAST(str, ext, i, opt)\n          ast.push(ext)\n          continue\n        }\n        acc += c\n      }\n      ast.push(acc)\n      return i\n    }\n\n    // some kind of extglob, pos is at the (\n    // find the next | or )\n    let i = pos + 1\n    let part = new AST(null, ast)\n    const parts: AST[] = []\n    let acc = ''\n    while (i < str.length) {\n      const c = str.charAt(i++)\n      // still accumulate escapes at this point, but we do ignore\n      // starts that are escaped\n      if (escaping || c === '\\\\') {\n        escaping = !escaping\n        acc += c\n        continue\n      }\n\n      if (inBrace) {\n        if (i === braceStart + 1) {\n          if (c === '^' || c === '!') {\n            braceNeg = true\n          }\n        } else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n          inBrace = false\n        }\n        acc += c\n        continue\n      } else if (c === '[') {\n        inBrace = true\n        braceStart = i\n        braceNeg = false\n        acc += c\n        continue\n      }\n\n      if (isExtglobType(c) && str.charAt(i) === '(') {\n        part.push(acc)\n        acc = ''\n        const ext = new AST(c, part)\n        part.push(ext)\n        i = AST.#parseAST(str, ext, i, opt)\n        continue\n      }\n      if (c === '|') {\n        part.push(acc)\n        acc = ''\n        parts.push(part)\n        part = new AST(null, ast)\n        continue\n      }\n      if (c === ')') {\n        if (acc === '' && ast.#parts.length === 0) {\n          ast.#emptyExt = true\n        }\n        part.push(acc)\n        acc = ''\n        ast.push(...parts, part)\n        return i\n      }\n      acc += c\n    }\n\n    // unfinished extglob\n    // if we got here, it was a malformed extglob! not an extglob, but\n    // maybe something else in there.\n    ast.type = null\n    ast.#hasMagic = undefined\n    ast.#parts = [str.substring(pos - 1)]\n    return i\n  }\n\n  static fromGlob(pattern: string, options: MinimatchOptions = {}) {\n    const ast = new AST(null, undefined, options)\n    AST.#parseAST(pattern, ast, 0, options)\n    return ast\n  }\n\n  // returns the regular expression if there's magic, or the unescaped\n  // string if not.\n  toMMPattern(): MMRegExp | string {\n    // should only be called on root\n    /* c8 ignore start */\n    if (this !== this.#root) return this.#root.toMMPattern()\n    /* c8 ignore stop */\n    const glob = this.toString()\n    const [re, body, hasMagic, uflag] = this.toRegExpSource()\n    // if we're in nocase mode, and not nocaseMagicOnly, then we do\n    // still need a regular expression if we have to case-insensitively\n    // match capital/lowercase characters.\n    const anyMagic =\n      hasMagic ||\n      this.#hasMagic ||\n      (this.#options.nocase &&\n        !this.#options.nocaseMagicOnly &&\n        glob.toUpperCase() !== glob.toLowerCase())\n    if (!anyMagic) {\n      return body\n    }\n\n    const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '')\n    return Object.assign(new RegExp(`^${re}$`, flags), {\n      _src: re,\n      _glob: glob,\n    })\n  }\n\n  get options() {\n    return this.#options\n  }\n\n  // returns the string match, the regexp source, whether there's magic\n  // in the regexp (so a regular expression is required) and whether or\n  // not the uflag is needed for the regular expression (for posix classes)\n  // TODO: instead of injecting the start/end at this point, just return\n  // the BODY of the regexp, along with the start/end portions suitable\n  // for binding the start/end in either a joined full-path makeRe context\n  // (where we bind to (^|/), or a standalone matchPart context (where\n  // we bind to ^, and not /).  Otherwise slashes get duped!\n  //\n  // In part-matching mode, the start is:\n  // - if not isStart: nothing\n  // - if traversal possible, but not allowed: ^(?!\\.\\.?$)\n  // - if dots allowed or not possible: ^\n  // - if dots possible and not allowed: ^(?!\\.)\n  // end is:\n  // - if not isEnd(): nothing\n  // - else: $\n  //\n  // In full-path matching mode, we put the slash at the START of the\n  // pattern, so start is:\n  // - if first pattern: same as part-matching mode\n  // - if not isStart(): nothing\n  // - if traversal possible, but not allowed: /(?!\\.\\.?(?:$|/))\n  // - if dots allowed or not possible: /\n  // - if dots possible and not allowed: /(?!\\.)\n  // end is:\n  // - if last pattern, same as part-matching mode\n  // - else nothing\n  //\n  // Always put the (?:$|/) on negated tails, though, because that has to be\n  // there to bind the end of the negated pattern portion, and it's easier to\n  // just stick it in now rather than try to inject it later in the middle of\n  // the pattern.\n  //\n  // We can just always return the same end, and leave it up to the caller\n  // to know whether it's going to be used joined or in parts.\n  // And, if the start is adjusted slightly, can do the same there:\n  // - if not isStart: nothing\n  // - if traversal possible, but not allowed: (?:/|^)(?!\\.\\.?$)\n  // - if dots allowed or not possible: (?:/|^)\n  // - if dots possible and not allowed: (?:/|^)(?!\\.)\n  //\n  // But it's better to have a simpler binding without a conditional, for\n  // performance, so probably better to return both start options.\n  //\n  // Then the caller just ignores the end if it's not the first pattern,\n  // and the start always gets applied.\n  //\n  // But that's always going to be $ if it's the ending pattern, or nothing,\n  // so the caller can just attach $ at the end of the pattern when building.\n  //\n  // So the todo is:\n  // - better detect what kind of start is needed\n  // - return both flavors of starting pattern\n  // - attach $ at the end of the pattern when creating the actual RegExp\n  //\n  // Ah, but wait, no, that all only applies to the root when the first pattern\n  // is not an extglob. If the first pattern IS an extglob, then we need all\n  // that dot prevention biz to live in the extglob portions, because eg\n  // +(*|.x*) can match .xy but not .yx.\n  //\n  // So, return the two flavors if it's #root and the first child is not an\n  // AST, otherwise leave it to the child AST to handle it, and there,\n  // use the (?:^|/) style of start binding.\n  //\n  // Even simplified further:\n  // - Since the start for a join is eg /(?!\\.) and the start for a part\n  // is ^(?!\\.), we can just prepend (?!\\.) to the pattern (either root\n  // or start or whatever) and prepend ^ or / at the Regexp construction.\n  toRegExpSource(\n    allowDot?: boolean\n  ): [re: string, body: string, hasMagic: boolean, uflag: boolean] {\n    const dot = allowDot ?? !!this.#options.dot\n    if (this.#root === this) this.#fillNegs()\n    if (!this.type) {\n      const noEmpty = this.isStart() && this.isEnd()\n      const src = this.#parts\n        .map(p => {\n          const [re, _, hasMagic, uflag] =\n            typeof p === 'string'\n              ? AST.#parseGlob(p, this.#hasMagic, noEmpty)\n              : p.toRegExpSource(allowDot)\n          this.#hasMagic = this.#hasMagic || hasMagic\n          this.#uflag = this.#uflag || uflag\n          return re\n        })\n        .join('')\n\n      let start = ''\n      if (this.isStart()) {\n        if (typeof this.#parts[0] === 'string') {\n          // this is the string that will match the start of the pattern,\n          // so we need to protect against dots and such.\n\n          // '.' and '..' cannot match unless the pattern is that exactly,\n          // even if it starts with . or dot:true is set.\n          const dotTravAllowed =\n            this.#parts.length === 1 && justDots.has(this.#parts[0])\n          if (!dotTravAllowed) {\n            const aps = addPatternStart\n            // check if we have a possibility of matching . or ..,\n            // and prevent that.\n            const needNoTrav =\n              // dots are allowed, and the pattern starts with [ or .\n              (dot && aps.has(src.charAt(0))) ||\n              // the pattern starts with \\., and then [ or .\n              (src.startsWith('\\\\.') && aps.has(src.charAt(2))) ||\n              // the pattern starts with \\.\\., and then [ or .\n              (src.startsWith('\\\\.\\\\.') && aps.has(src.charAt(4)))\n            // no need to prevent dots if it can't match a dot, or if a\n            // sub-pattern will be preventing it anyway.\n            const needNoDot = !dot && !allowDot && aps.has(src.charAt(0))\n\n            start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ''\n          }\n        }\n      }\n\n      // append the \"end of path portion\" pattern to negation tails\n      let end = ''\n      if (\n        this.isEnd() &&\n        this.#root.#filledNegs &&\n        this.#parent?.type === '!'\n      ) {\n        end = '(?:$|\\\\/)'\n      }\n      const final = start + src + end\n      return [\n        final,\n        unescape(src),\n        (this.#hasMagic = !!this.#hasMagic),\n        this.#uflag,\n      ]\n    }\n\n    // We need to calculate the body *twice* if it's a repeat pattern\n    // at the start, once in nodot mode, then again in dot mode, so a\n    // pattern like *(?) can match 'x.y'\n\n    const repeated = this.type === '*' || this.type === '+'\n    // some kind of extglob\n    const start = this.type === '!' ? '(?:(?!(?:' : '(?:'\n    let body = this.#partsToRegExp(dot)\n\n    if (this.isStart() && this.isEnd() && !body && this.type !== '!') {\n      // invalid extglob, has to at least be *something* present, if it's\n      // the entire path portion.\n      const s = this.toString()\n      this.#parts = [s]\n      this.type = null\n      this.#hasMagic = undefined\n      return [s, unescape(this.toString()), false, false]\n    }\n\n    // XXX abstract out this map method\n    let bodyDotAllowed =\n      !repeated || allowDot || dot || !startNoDot\n        ? ''\n        : this.#partsToRegExp(true)\n    if (bodyDotAllowed === body) {\n      bodyDotAllowed = ''\n    }\n    if (bodyDotAllowed) {\n      body = `(?:${body})(?:${bodyDotAllowed})*?`\n    }\n\n    // an empty !() is exactly equivalent to a starNoEmpty\n    let final = ''\n    if (this.type === '!' && this.#emptyExt) {\n      final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty\n    } else {\n      const close =\n        this.type === '!'\n          ? // !() must match something,but !(x) can match ''\n            '))' +\n            (this.isStart() && !dot && !allowDot ? startNoDot : '') +\n            star +\n            ')'\n          : this.type === '@'\n          ? ')'\n          : this.type === '?'\n          ? ')?'\n          : this.type === '+' && bodyDotAllowed\n          ? ')'\n          : this.type === '*' && bodyDotAllowed\n          ? `)?`\n          : `)${this.type}`\n      final = start + body + close\n    }\n    return [\n      final,\n      unescape(body),\n      (this.#hasMagic = !!this.#hasMagic),\n      this.#uflag,\n    ]\n  }\n\n  #partsToRegExp(dot: boolean) {\n    return this.#parts\n      .map(p => {\n        // extglob ASTs should only contain parent ASTs\n        /* c8 ignore start */\n        if (typeof p === 'string') {\n          throw new Error('string type in extglob ast??')\n        }\n        /* c8 ignore stop */\n        // can ignore hasMagic, because extglobs are already always magic\n        const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot)\n        this.#uflag = this.#uflag || uflag\n        return re\n      })\n      .filter(p => !(this.isStart() && this.isEnd()) || !!p)\n      .join('|')\n  }\n\n  static #parseGlob(\n    glob: string,\n    hasMagic: boolean | undefined,\n    noEmpty: boolean = false\n  ): [re: string, body: string, hasMagic: boolean, uflag: boolean] {\n    let escaping = false\n    let re = ''\n    let uflag = false\n    for (let i = 0; i < glob.length; i++) {\n      const c = glob.charAt(i)\n      if (escaping) {\n        escaping = false\n        re += (reSpecials.has(c) ? '\\\\' : '') + c\n        continue\n      }\n      if (c === '\\\\') {\n        if (i === glob.length - 1) {\n          re += '\\\\\\\\'\n        } else {\n          escaping = true\n        }\n        continue\n      }\n      if (c === '[') {\n        const [src, needUflag, consumed, magic] = parseClass(glob, i)\n        if (consumed) {\n          re += src\n          uflag = uflag || needUflag\n          i += consumed - 1\n          hasMagic = hasMagic || magic\n          continue\n        }\n      }\n      if (c === '*') {\n        if (noEmpty && glob === '*') re += starNoEmpty\n        else re += star\n        hasMagic = true\n        continue\n      }\n      if (c === '?') {\n        re += qmark\n        hasMagic = true\n        continue\n      }\n      re += regExpEscape(c)\n    }\n    return [re, unescape(glob), !!hasMagic, uflag]\n  }\n}\n","import { MinimatchOptions } from './index.js'\n/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character.  In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n) => {\n  // don't need to escape +@! because we escape the parens\n  // that make those magic, and escaping ! as [!] isn't valid,\n  // because [!]] is a valid glob class meaning not ']'.\n  return windowsPathsNoEscape\n    ? s.replace(/[?*()[\\]]/g, '[$&]')\n    : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&')\n}\n","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, 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 { FileSystemAdapter } from '../utils/file-system-adapter.js';\nimport { IssueService } from '../services/issue-service.js';\nimport { PathnameService } from '../services/pathname-service.js';\nimport { loadLlmailConfig, LlmailConfig } from '../utils/config.js';\nimport { logger } from '../utils/logger.js';\nimport { minimatch } from 'minimatch';\nimport path from 'path';\nimport { load } from 'js-yaml';\nimport { FrontmatterMetadata } from '../types.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 { Command } from 'commander';\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\n/**\n * Checks if a file matches the include/exclude patterns\n */\nfunction shouldProcessFile(filePath: string, options: SyncOptions): boolean {\n  const relativePath = filePath.replace(/^issues\\//, '');\n\n  // Check exclude pattern first\n  if (options.exclude && minimatch(relativePath, options.exclude)) {\n    return false;\n  }\n\n  // If include pattern exists, file must match it\n  if (options.include) {\n    return minimatch(relativePath, options.include);\n  }\n\n  // No patterns or passed exclude check\n  return true;\n}\n\n/**\n * Synchronizes file locations with their frontmatter metadata.\n * This ensures files are in the correct directories based on their state and type.\n */\nexport async function sync(fs: FileSystemAdapter, options: SyncOptions = {}): Promise<SyncResult> {\n  const config = await loadLlmailConfig(fs);\n  const intentService = new IntentService(config);\n  const pathnameService = new PathnameService(config, intentService);\n  const fileService = new FileService(fs, pathnameService);\n  const fileFormatValidator = new FileFormatValidator();\n  const metadataValidator = new MetadataFormatValidator();\n  const fileSystemValidator = new FileSystemValidator(fs);\n  const issueService = new IssueService(\n    pathnameService,\n    fs,\n    intentService,\n    fileService,\n    fileFormatValidator,\n    metadataValidator,\n    fileSystemValidator\n  );\n\n  // Get all markdown files\n  const files = await findAllMarkdownFiles(fs, config, options);\n  if (files.length === 0) {\n    return { changes: [] };  // No files found => empty changes\n  }\n\n  const changes: Array<{ id: string; from: string; to: string; state: string }> = [];\n  const errors: Array<{ id: string; error: string }> = [];\n\n  // Process each file\n  for (const file of files) {\n    try {\n      const metadata = await issueService.frontmatterMethods.getFrontmatterMetadata(file);\n      if (!metadata) {\n        throw new Error(`No metadata found in file ${file}`);\n      }\n\n      const targetLocation = pathnameService.deriveFileLocation(metadata);\n      const targetPath = path.join(targetLocation.dirname, targetLocation.basename);\n\n      if (targetPath !== file) {\n        if (!options.dryRun) {\n          await issueService.fileMethods.moveFileWithMetadata(file, targetPath, metadata);\n        }\n        logger.success(`${options.dryRun ? '(dryRun) Would move' : 'Moved'} ${file} to ${targetPath}`);\n        changes.push({\n          id: metadata.id || path.basename(file),\n          from: file,\n          to: targetPath,\n          state: metadata.state ?? ''\n        });\n      } else {\n        logger.info(`File ${file} is already in the correct location`);\n      }\n    } catch (err) {\n      errors.push({\n        id: path.basename(file),\n        error: err instanceof Error ? err.message : String(err)\n      });\n    }\n  }\n\n  return { \n    changes,\n    errors: errors.length ? errors : undefined\n  };\n}\n\n// Helper functions\nasync function findAllMarkdownFiles(fs: FileSystemAdapter, config: LlmailConfig, options: SyncOptions): Promise<string[]> {\n  const files: string[] = [];\n  const rootDir = config.issues_dir;\n\n  // Helper to check if a file should be included\n  const shouldInclude = (file: string) => {\n    if (!file.endsWith('.md')) return false;\n    if (options.include && !minimatch(file, options.include)) return false;\n    if (options.exclude && minimatch(file, options.exclude)) return false;\n    return true;\n  };\n\n  // Helper to scan a directory recursively\n  const scanDir = async (dir: string) => {\n    const entries = await fs.readdir(dir);\n    for (const entry of entries) {\n      const fullPath = path.join(dir, entry);\n      const stats = await fs.stat(fullPath);\n      if (stats.isDirectory()) {\n        await scanDir(fullPath);\n      } else if (shouldInclude(fullPath)) {\n        files.push(fullPath);\n      }\n    }\n  };\n\n  await scanDir(rootDir);\n  return files;\n}\n\nasync function parseFrontmatter(content: string): Promise<Record<string, any> | null> {\n  const match = content.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n  if (!match) {\n    return null;\n  }\n\n  try {\n    return load(match[1]) as Record<string, any>;\n  } catch (err) {\n    return null;\n  }\n}\n\nexport async function syncCommand(\n  args: string[],\n  fs: FileSystemAdapter,\n  pathnameService: PathnameService\n) {\n  // Implementation of syncCommand function\n} "]}