{"version":3,"sources":["../src/index.ts","../src/parser.ts","../src/importers.ts","../src/yaml-parser.ts","../src/exporters.ts"],"sourcesContent":["export {\n  parseAgentMarkdown,\n  parseFenceEncodedMarkdown\n} from './parser.js'\n\nexport {\n  importAll,\n  importAgent,\n  importCopilot,\n  importCursor,\n  importCursorLegacy,\n  importCline,\n  importWindsurf,\n  importZed,\n  importCodex,\n  importAider,\n  importClaudeCode,\n  importOpenCode,\n  importGemini,\n  importQodo,\n  importAmazonQ,\n  importRoo,\n  importJunie\n} from './importers.js'\n\nexport {\n  toAgentMarkdown,\n  exportToAgent,\n  exportToCopilot,\n  exportToCursor,\n  exportToCline,\n  exportToWindsurf,\n  exportToZed,\n  exportToCodex,\n  exportToAider,\n  exportToClaudeCode,\n  exportToOpenCode,\n  exportToGemini,\n  exportToQodo,\n  exportToAmazonQ,\n  exportToRoo,\n  exportToJunie,\n  exportAll\n} from './exporters.js'\n\nexport type {\n  RuleMetadata,\n  RuleBlock,\n  ImportResult,\n  ImportResults,\n  ExportOptions,\n  ParserOptions\n} from './types.js'","import { unified } from 'unified'\nimport remarkParse from 'remark-parse'\nimport { toMarkdown } from 'mdast-util-to-markdown'\nimport yaml from 'js-yaml'\nimport type { Root, RootContent } from 'mdast'\nimport type { RuleBlock, RuleMetadata, ParserOptions } from './types.js'\n\n/**\n * @deprecated Use importAgent() instead. Single-file .agentconfig format is deprecated.\n */\nexport function parseAgentMarkdown(\n  markdown: string,\n  options: ParserOptions = {}\n): RuleBlock[] {\n  console.warn('Warning: parseAgentMarkdown() is deprecated. Use importAgent() to import from .agent/ directory instead.')\n  const processor = unified().use(remarkParse)\n  const tree = processor.parse(markdown) as Root\n\n  const rules: RuleBlock[] = []\n  let currentMetadata: RuleMetadata | null = null\n  let currentContent: RootContent[] = []\n  let currentPosition: RuleBlock['position'] | undefined\n\n  for (let i = 0; i < tree.children.length; i++) {\n    const node = tree.children[i]\n\n    // Check for HTML comment with @<id> directive\n    if (node.type === 'html' && isRuleComment(node.value)) {\n      // If we have accumulated content, save the previous rule\n      if (currentMetadata && currentContent.length > 0) {\n        rules.push({\n          metadata: currentMetadata,\n          content: nodesToMarkdown(currentContent),\n          position: currentPosition\n        })\n      }\n\n      // Parse the new metadata\n      currentMetadata = parseRuleComment(node.value)\n      currentContent = []\n      currentPosition = node.position ? {\n        start: { ...node.position.start },\n        end: { ...node.position.end }\n      } : undefined\n    }\n    // Accumulate content\n    else if (currentMetadata) {\n      currentContent.push(node)\n      if (currentPosition && node.position) {\n        currentPosition.end = { ...node.position.end }\n      }\n    }\n  }\n\n  // Don't forget the last rule\n  if (currentMetadata && currentContent.length > 0) {\n    rules.push({\n      metadata: currentMetadata,\n      content: nodesToMarkdown(currentContent),\n      position: currentPosition\n    })\n  }\n\n  return rules\n}\n\nfunction isRuleComment(html: string): boolean {\n  // Check if it contains @<id> pattern (@ followed by alphanumeric and hyphens)\n  return /<!--\\s*@[a-zA-Z0-9-]+(\\s|$)/.test(html)\n}\n\nfunction parseRuleComment(html: string): RuleMetadata {\n  // Extract @<id> and any additional metadata\n  const match = html.match(/<!--\\s*@([a-zA-Z0-9-]+)\\s*([\\s\\S]*?)\\s*-->/)\n  if (!match) {\n    throw new Error('Invalid rule comment format')\n  }\n\n  const id = match[1]\n  const metaContent = match[2].trim()\n\n  // Start with the ID from the @<id> pattern\n  const metadata: RuleMetadata = { id }\n\n  // If there's no additional content, return just the ID\n  if (!metaContent) {\n    return metadata\n  }\n\n  // Check if it looks like YAML (has newlines or starts with a YAML indicator)\n  if (metaContent.includes('\\n') || metaContent.startsWith('-') || metaContent.includes(': ')) {\n    // Try to parse as YAML\n    try {\n      const parsed = yaml.load(metaContent) as Record<string, unknown>\n      if (typeof parsed === 'object' && parsed !== null) {\n        // Merge with existing metadata, but preserve the ID from @<id>\n        return { ...parsed, id } as RuleMetadata\n      }\n    } catch {\n      // Fall through to key:value parsing\n    }\n  }\n\n  // Parse as key:value pairs\n  // First check if it's all on one line (inline format)\n  if (!metaContent.includes('\\n')) {\n    // Inline format: key:value pairs separated by spaces\n    const pairs = metaContent.matchAll(/(\\w+):(\\S+)(?:\\s|$)/g);\n    for (const [, key, value] of pairs) {\n      // Skip 'id' since we already have it from @<id>\n      if (key === 'scope' && value.includes(',')) {\n        metadata[key] = value.split(',').map(s => s.trim())\n      } else if (key === 'alwaysApply' || key === 'manual') {\n        metadata[key] = value === 'true'\n      } else if (key !== 'id') {\n        metadata[key] = value\n      }\n    }\n  } else {\n    // Multi-line format: one key:value per line\n    const lines = metaContent.split('\\n');\n    for (const line of lines) {\n      const colonIndex = line.indexOf(':');\n      if (colonIndex > 0) {\n        const key = line.substring(0, colonIndex).trim();\n        const value = line.substring(colonIndex + 1).trim();\n        \n        // Skip 'id' since we already have it from @<id>\n        if (key === 'scope' && value.includes(',')) {\n          metadata[key] = value.split(',').map(s => s.trim())\n        } else if (key === 'alwaysApply' || key === 'manual') {\n          metadata[key] = value === 'true'\n        } else if (key !== 'id' && value) {\n          metadata[key] = value\n        }\n      }\n    }\n  }\n\n  return metadata\n}\n\nfunction nodesToMarkdown(nodes: RootContent[]): string {\n  const tree: Root = {\n    type: 'root',\n    children: nodes\n  }\n\n  return toMarkdown(tree, {\n    bullet: '-',\n    emphasis: '*',\n    rule: '-'\n  }).trim()\n}\n\n// Alternative parser for fence-encoded format\nexport function parseFenceEncodedMarkdown(\n  markdown: string,\n  options: ParserOptions = {}\n): RuleBlock[] {\n  const processor = unified().use(remarkParse)\n  const tree = processor.parse(markdown) as Root\n\n  const rules: RuleBlock[] = []\n  let currentMetadata: RuleMetadata | null = null\n  let currentContent: RootContent[] = []\n  let currentPosition: RuleBlock['position'] | undefined\n\n  for (let i = 0; i < tree.children.length; i++) {\n    const node = tree.children[i]\n\n    // Check for code block with 'rule' language\n    if (node.type === 'code' && node.lang === 'rule') {\n      // Save previous rule if exists\n      if (currentMetadata && currentContent.length > 0) {\n        rules.push({\n          metadata: currentMetadata,\n          content: nodesToMarkdown(currentContent),\n          position: currentPosition\n        })\n      }\n\n      // Parse the rule metadata\n      try {\n        currentMetadata = yaml.load(node.value) as RuleMetadata\n        if (!currentMetadata.id) {\n          currentMetadata.id = `rule-${Date.now()}`\n        }\n        currentContent = []\n        currentPosition = node.position ? {\n          start: { ...node.position.start },\n          end: { ...node.position.end }\n        } : undefined\n      } catch (e) {\n        if (options.strict) {\n          throw new Error(`Failed to parse rule metadata: ${e}`)\n        }\n        // Skip invalid rule blocks in non-strict mode\n        currentMetadata = null\n      }\n    }\n    // Accumulate content after rule block\n    else if (currentMetadata) {\n      currentContent.push(node)\n      if (currentPosition && node.position) {\n        currentPosition.end = { ...node.position.end }\n      }\n    }\n  }\n\n  // Don't forget the last rule\n  if (currentMetadata && currentContent.length > 0) {\n    rules.push({\n      metadata: currentMetadata,\n      content: nodesToMarkdown(currentContent),\n      position: currentPosition\n    })\n  }\n\n  return rules\n}","import { readFileSync, existsSync, readdirSync, statSync, Dirent } from 'fs'\nimport { join, basename } from 'path'\nimport matter from 'gray-matter'\nimport type { ImportResult, ImportResults, RuleBlock } from './types.js'\nimport { grayMatterOptions } from './yaml-parser.js'\n\n// Helper function to detect if a file/path indicates a private rule\nfunction isPrivateRule(filePath: string): boolean {\n  const lowerPath = filePath.toLowerCase()\n  return lowerPath.includes('.local.') || lowerPath.includes('/private/') || lowerPath.includes('\\\\private\\\\')\n}\n\nexport async function importAll(repoPath: string): Promise<ImportResults> {\n  const results: ImportResult[] = []\n  const errors: Array<{ file: string; error: string }> = []\n  \n  // Check for Agent directory (.agent/)\n  const agentDir = join(repoPath, '.agent')\n  if (existsSync(agentDir)) {\n    try {\n      results.push(importAgent(agentDir))\n    } catch (e) {\n      errors.push({ file: agentDir, error: String(e) })\n    }\n  }\n  \n  // Check for VS Code Copilot instructions\n  const copilotPath = join(repoPath, '.github', 'copilot-instructions.md')\n  if (existsSync(copilotPath)) {\n    try {\n      results.push(importCopilot(copilotPath))\n    } catch (e) {\n      errors.push({ file: copilotPath, error: String(e) })\n    }\n  }\n  \n  // Check for local VS Code Copilot instructions\n  const copilotLocalPath = join(repoPath, '.github', 'copilot-instructions.local.md')\n  if (existsSync(copilotLocalPath)) {\n    try {\n      results.push(importCopilot(copilotLocalPath))\n    } catch (e) {\n      errors.push({ file: copilotLocalPath, error: String(e) })\n    }\n  }\n  \n  // Check for Cursor directory (.cursor/)\n  const cursorDir = join(repoPath, '.cursor')\n  if (existsSync(cursorDir)) {\n    try {\n      results.push(importCursor(cursorDir))\n    } catch (e) {\n      errors.push({ file: cursorDir, error: String(e) })\n    }\n  }\n  \n  // Legacy single .cursorrules file\n  const cursorRulesFile = join(repoPath, '.cursorrules')\n  if (existsSync(cursorRulesFile)) {\n    try {\n      results.push(importCursorLegacy(cursorRulesFile))\n    } catch (e) {\n      errors.push({ file: cursorRulesFile, error: String(e) })\n    }\n  }\n  \n  // Check for Cline rules\n  const clinerules = join(repoPath, '.clinerules')\n  if (existsSync(clinerules)) {\n    try {\n      results.push(importCline(clinerules))\n    } catch (e) {\n      errors.push({ file: clinerules, error: String(e) })\n    }\n  }\n  \n  // Check for local Cline rules\n  const clinerulesLocal = join(repoPath, '.clinerules.local')\n  if (existsSync(clinerulesLocal)) {\n    try {\n      results.push(importCline(clinerulesLocal))\n    } catch (e) {\n      errors.push({ file: clinerulesLocal, error: String(e) })\n    }\n  }\n  \n  // Check for Windsurf rules\n  const windsurfRules = join(repoPath, '.windsurfrules')\n  if (existsSync(windsurfRules)) {\n    try {\n      results.push(importWindsurf(windsurfRules))\n    } catch (e) {\n      errors.push({ file: windsurfRules, error: String(e) })\n    }\n  }\n  \n  // Check for local Windsurf rules\n  const windsurfRulesLocal = join(repoPath, '.windsurfrules.local')\n  if (existsSync(windsurfRulesLocal)) {\n    try {\n      results.push(importWindsurf(windsurfRulesLocal))\n    } catch (e) {\n      errors.push({ file: windsurfRulesLocal, error: String(e) })\n    }\n  }\n  \n  // Check for Zed rules\n  const zedRules = join(repoPath, '.rules')\n  if (existsSync(zedRules)) {\n    try {\n      results.push(importZed(zedRules))\n    } catch (e) {\n      errors.push({ file: zedRules, error: String(e) })\n    }\n  }\n  \n  // Check for local Zed rules\n  const zedRulesLocal = join(repoPath, '.rules.local')\n  if (existsSync(zedRulesLocal)) {\n    try {\n      results.push(importZed(zedRulesLocal))\n    } catch (e) {\n      errors.push({ file: zedRulesLocal, error: String(e) })\n    }\n  }\n  \n  // Check for OpenAI Codex AGENTS.md\n  const agentsMd = join(repoPath, 'AGENTS.md')\n  if (existsSync(agentsMd)) {\n    try {\n      results.push(importCodex(agentsMd))\n    } catch (e) {\n      errors.push({ file: agentsMd, error: String(e) })\n    }\n  }\n  \n  // Check for local AGENTS.md\n  const agentsLocalMd = join(repoPath, 'AGENTS.local.md')\n  if (existsSync(agentsLocalMd)) {\n    try {\n      results.push(importCodex(agentsLocalMd))\n    } catch (e) {\n      errors.push({ file: agentsLocalMd, error: String(e) })\n    }\n  }\n  \n  // Check for CLAUDE.md (Claude Code)\n  const claudeMd = join(repoPath, 'CLAUDE.md')\n  if (existsSync(claudeMd)) {\n    try {\n      results.push(importClaudeCode(claudeMd))\n    } catch (e) {\n      errors.push({ file: claudeMd, error: String(e) })\n    }\n  }\n  \n  // Check for AGENTS.md (OpenCode)\n  const opencodeMd = join(repoPath, 'AGENTS.md')\n  if (existsSync(opencodeMd)) {\n    try {\n      results.push(importOpenCode(opencodeMd))\n    } catch (e) {\n      errors.push({ file: opencodeMd, error: String(e) })\n    }\n  }\n  \n  // Check for AGENTS.md (OpenAI Codex) - Note: This conflicts with OpenCode,\n  // so we need to handle this carefully. For now, we'll prioritize OpenAI Codex\n  // since it was implemented first, but this could be made configurable.\n  // Users can explicitly specify the format using the CLI if needed.\n  \n  // Check for GEMINI.md (Gemini CLI)\n  const geminiMd = join(repoPath, 'GEMINI.md')\n  if (existsSync(geminiMd)) {\n    try {\n      results.push(importGemini(geminiMd))\n    } catch (e) {\n      errors.push({ file: geminiMd, error: String(e) })\n    }\n  }\n\n  // Check for best_practices.md (Qodo)\n  const bestPracticesMd = join(repoPath, 'best_practices.md')\n  if (existsSync(bestPracticesMd)) {\n    try {\n      results.push(importQodo(bestPracticesMd))\n    } catch (e) {\n      errors.push({ file: bestPracticesMd, error: String(e) })\n    }\n  }\n\n  // Check for local CLAUDE.md\n  const claudeLocalMd = join(repoPath, 'CLAUDE.local.md')\n  if (existsSync(claudeLocalMd)) {\n    try {\n      results.push(importClaudeCode(claudeLocalMd))\n    } catch (e) {\n      errors.push({ file: claudeLocalMd, error: String(e) })\n    }\n  }\n  \n  // Check for local GEMINI.md\n  const geminiLocalMd = join(repoPath, 'GEMINI.local.md')\n  if (existsSync(geminiLocalMd)) {\n    try {\n      results.push(importGemini(geminiLocalMd))\n    } catch (e) {\n      errors.push({ file: geminiLocalMd, error: String(e) })\n    }\n  }\n  \n  // Check for CONVENTIONS.md (Aider)\n  const conventionsMd = join(repoPath, 'CONVENTIONS.md')\n  if (existsSync(conventionsMd)) {\n    try {\n      results.push(importAider(conventionsMd))\n    } catch (e) {\n      errors.push({ file: conventionsMd, error: String(e) })\n    }\n  }\n  \n  // Check for local CONVENTIONS.md\n  const conventionsLocalMd = join(repoPath, 'CONVENTIONS.local.md')\n  if (existsSync(conventionsLocalMd)) {\n    try {\n      results.push(importAider(conventionsLocalMd))\n    } catch (e) {\n      errors.push({ file: conventionsLocalMd, error: String(e) })\n    }\n  }\n  \n  // Check for Amazon Q rules\n  const amazonqRulesDir = join(repoPath, '.amazonq', 'rules')\n  if (existsSync(amazonqRulesDir)) {\n    try {\n      results.push(importAmazonQ(amazonqRulesDir))\n    } catch (e) {\n      errors.push({ file: amazonqRulesDir, error: String(e) })\n    }\n  }\n\n  // Check for Roo rules\n  const rooRulesDir = join(repoPath, '.roo', 'rules')\n  if (existsSync(rooRulesDir)) {\n    try {\n      results.push(importRoo(rooRulesDir))\n    } catch (e) {\n      errors.push({ file: rooRulesDir, error: String(e) })\n    }\n  }\n\n  // Check for Junie guidelines\n  const junieGuidelines = join(repoPath, '.junie', 'guidelines.md')\n  if (existsSync(junieGuidelines)) {\n    try {\n      results.push(importJunie(junieGuidelines))\n    } catch (e) {\n      errors.push({ file: junieGuidelines, error: String(e) })\n    }\n  }\n  \n  return { results, errors }\n}\n\nexport function importCopilot(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const isPrivate = isPrivateRule(filePath)\n  \n  const metadata: any = {\n    id: 'copilot-instructions',\n    alwaysApply: true,\n    description: 'GitHub Copilot custom instructions'\n  }\n  \n  if (isPrivate) {\n    metadata.private = true\n  }\n  \n  const rules: RuleBlock[] = [{\n    metadata,\n    content: content.trim()\n  }]\n  \n  return {\n    format: 'copilot',\n    filePath,\n    rules,\n    raw: content\n  }\n}\n\nexport function importAgent(agentDir: string): ImportResult {\n  const rules: RuleBlock[] = []\n  \n  // Recursively find all .md files in the agent directory\n  function findMarkdownFiles(dir: string, relativePath = ''): void {\n    const entries = readdirSync(dir, { withFileTypes: true })\n    \n    // Ensure deterministic ordering: process directories before files, then sort alphabetically\n    entries.sort((a: Dirent, b: Dirent) => {\n      if (a.isDirectory() && !b.isDirectory()) return -1;\n      if (!a.isDirectory() && b.isDirectory()) return 1;\n      return a.name.localeCompare(b.name);\n    })\n    \n    for (const entry of entries) {\n      const fullPath = join(dir, entry.name)\n      const relPath = relativePath ? join(relativePath, entry.name) : entry.name\n      \n      if (entry.isDirectory()) {\n        // Recursively search subdirectories\n        findMarkdownFiles(fullPath, relPath)\n      } else if (entry.isFile() && entry.name.endsWith('.md')) {\n        const content = readFileSync(fullPath, 'utf-8')\n        const { data, content: body } = matter(content, grayMatterOptions)\n        \n        // Remove any leading numeric ordering prefixes (e.g., \"001-\" or \"12-\") from each path segment\n        let segments = relPath\n          .replace(/\\.md$/, '')\n          .replace(/\\\\/g, '/')\n          .split('/')\n          .map((s: string) => s.replace(/^\\d{2,}-/, '').replace(/\\.local$/, ''))\n        if (segments[0] === 'private') segments = segments.slice(1)\n        const defaultId = segments.join('/')\n        \n        // Check if this is a private rule (either by path or frontmatter)\n        const isPrivateFile = isPrivateRule(fullPath)\n        \n        const metadata: any = {\n          id: data.id || defaultId,\n          ...data\n        }\n        \n        // Set default alwaysApply to false if not specified\n        if (metadata.alwaysApply === undefined) {\n          metadata.alwaysApply = false\n        }\n        \n        // Only set private if it's true (from file pattern or frontmatter)\n        if (data.private === true || (data.private === undefined && isPrivateFile)) {\n          metadata.private = true\n        }\n        \n        rules.push({\n          metadata,\n          content: body.trim()\n        })\n      }\n    }\n  }\n  \n  findMarkdownFiles(agentDir)\n  \n  return {\n    format: 'agent',\n    filePath: agentDir,\n    rules\n  }\n}\n\nexport function importCursor(cursorDir: string): ImportResult {\n  const rules: RuleBlock[] = []\n  \n  // Recursively find all .mdc and .md files in the .cursor directory\n  function findCursorFiles(dir: string, relativePath = ''): void {\n    const entries = readdirSync(dir, { withFileTypes: true })\n    \n    // Ensure deterministic ordering: process directories before files, then sort alphabetically\n    entries.sort((a: Dirent, b: Dirent) => {\n      if (a.isDirectory() && !b.isDirectory()) return -1;\n      if (!a.isDirectory() && b.isDirectory()) return 1;\n      return a.name.localeCompare(b.name);\n    })\n    \n    for (const entry of entries) {\n      const fullPath = join(dir, entry.name)\n      const relPath = relativePath ? join(relativePath, entry.name) : entry.name\n      \n      if (entry.isDirectory()) {\n        // Recursively search subdirectories\n        findCursorFiles(fullPath, relPath)\n      } else if (entry.isFile() && (entry.name.endsWith('.mdc') || entry.name.endsWith('.md'))) {\n        const content = readFileSync(fullPath, 'utf-8')\n        const { data, content: body } = matter(content, grayMatterOptions)\n        \n        // Remove any leading numeric ordering prefixes (e.g., \"001-\" or \"12-\") from each path segment\n        let segments = relPath\n          .replace(/\\.(mdc|md)$/, '')\n          .replace(/\\\\/g, '/')\n          .split('/')\n          .map((s: string) => s.replace(/^\\d{2,}-/, '').replace(/\\.local$/, ''))\n        \n        // Special handling for backward compatibility\n        if (segments[0] === 'private') segments = segments.slice(1)\n        // If the file is directly in the 'rules' directory, don't include 'rules' in the ID\n        if (segments[0] === 'rules' && segments.length === 2) segments = segments.slice(1)\n        \n        const defaultId = segments.join('/')\n        \n        // Check if this is a private rule\n        const isPrivateFile = isPrivateRule(fullPath)\n        \n        const metadata: any = {\n          id: data.id || defaultId,\n          ...data\n        }\n        \n        // Set default alwaysApply to false if not specified\n        if (metadata.alwaysApply === undefined) {\n          metadata.alwaysApply = false\n        }\n        \n        // Only set private if it's true (from file pattern or frontmatter)\n        if (data.private === true || (data.private === undefined && isPrivateFile)) {\n          metadata.private = true\n        }\n        \n        rules.push({\n          metadata,\n          content: body.trim()\n        })\n      }\n    }\n  }\n  \n  findCursorFiles(cursorDir)\n  \n  return {\n    format: 'cursor',\n    filePath: cursorDir,\n    rules\n  }\n}\n\nexport function importCursorLegacy(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const rules: RuleBlock[] = [{\n    metadata: {\n      id: 'cursor-rules-legacy',\n      alwaysApply: true,\n      description: 'Legacy Cursor rules'\n    },\n    content: content.trim()\n  }]\n  \n  return {\n    format: 'cursor',\n    filePath,\n    rules,\n    raw: content\n  }\n}\n\nexport function importCline(rulesPath: string): ImportResult {\n  const rules: RuleBlock[] = []\n  \n  // Check if it's a directory\n  if (existsSync(rulesPath) && statSync(rulesPath).isDirectory()) {\n    // Recursively find all .md files\n    function findMdFiles(dir: string, relativePath = ''): void {\n      const entries = readdirSync(dir, { withFileTypes: true })\n      \n      // Ensure deterministic ordering: process directories before files, then sort alphabetically\n      entries.sort((a: Dirent, b: Dirent) => {\n        if (a.isDirectory() && !b.isDirectory()) return -1;\n        if (!a.isDirectory() && b.isDirectory()) return 1;\n        return a.name.localeCompare(b.name);\n      })\n      \n      for (const entry of entries) {\n        const fullPath = join(dir, entry.name)\n        const relPath = relativePath ? join(relativePath, entry.name) : entry.name\n        \n        if (entry.isDirectory()) {\n          findMdFiles(fullPath, relPath)\n        } else if (entry.isFile() && entry.name.endsWith('.md')) {\n          const content = readFileSync(fullPath, 'utf-8')\n          const isPrivateFile = isPrivateRule(fullPath)\n          // Remove any leading numeric ordering prefixes (e.g., \"001-\" or \"12-\") from each path segment\n          let segments = relPath\n            .replace(/\\.md$/, '')\n            .replace(/\\\\/g, '/')\n            .split('/')\n            .map((s: string) => s.replace(/^\\d{2,}-/, '').replace(/\\.local$/, ''))\n          if (segments[0] === 'private') segments = segments.slice(1)\n          const defaultId = segments.join('/')\n          \n          const metadata: any = {\n            id: defaultId,\n            alwaysApply: true,\n            description: `Cline rules from ${relPath}`\n          }\n          \n          if (isPrivateFile) {\n            metadata.private = true\n          }\n          \n          rules.push({\n            metadata,\n            content: content.trim()\n          })\n        }\n      }\n    }\n    \n    findMdFiles(rulesPath)\n  } else {\n    // Single .clinerules file\n    const content = readFileSync(rulesPath, 'utf-8')\n    const isPrivateFile = isPrivateRule(rulesPath)\n    \n    const metadata: any = {\n      id: 'cline-rules',\n      alwaysApply: true,\n      description: 'Cline project rules'\n    }\n    \n    if (isPrivateFile) {\n      metadata.private = true\n    }\n    \n    rules.push({\n      metadata,\n      content: content.trim()\n    })\n  }\n  \n  return {\n    format: 'cline',\n    filePath: rulesPath,\n    rules\n  }\n}\n\nexport function importWindsurf(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const isPrivateFile = isPrivateRule(filePath)\n  \n  const metadata: any = {\n    id: 'windsurf-rules',\n    alwaysApply: true,\n    description: 'Windsurf AI rules'\n  }\n  \n  if (isPrivateFile) {\n    metadata.private = true\n  }\n  \n  const rules: RuleBlock[] = [{\n    metadata,\n    content: content.trim()\n  }]\n  \n  return {\n    format: 'windsurf',\n    filePath,\n    rules,\n    raw: content\n  }\n}\n\nexport function importZed(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const isPrivateFile = isPrivateRule(filePath)\n  \n  const metadata: any = {\n    id: 'zed-rules',\n    alwaysApply: true,\n    description: 'Zed editor rules'\n  }\n  \n  if (isPrivateFile) {\n    metadata.private = true\n  }\n  \n  const rules: RuleBlock[] = [{\n    metadata,\n    content: content.trim()\n  }]\n  \n  return {\n    format: 'zed',\n    filePath,\n    rules,\n    raw: content\n  }\n}\n\nexport function importCodex(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const format = basename(filePath) === 'AGENTS.md' || basename(filePath) === 'AGENTS.local.md' ? 'codex' : 'unknown'\n  const isPrivateFile = isPrivateRule(filePath)\n  \n  const metadata: any = {\n    id: format === 'codex' ? 'codex-agents' : 'claude-rules',\n    alwaysApply: true,\n    description: format === 'codex' ? 'OpenAI Codex agent instructions' : 'Claude AI instructions'\n  }\n  \n  if (isPrivateFile) {\n    metadata.private = true\n  }\n  \n  const rules: RuleBlock[] = [{\n    metadata,\n    content: content.trim()\n  }]\n  \n  return {\n    format,\n    filePath,\n    rules,\n    raw: content\n  }\n}\n\nexport function importAider(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const isPrivateFile = isPrivateRule(filePath)\n  \n  const metadata: any = {\n    id: 'aider-conventions',\n    alwaysApply: true,\n    description: 'Aider CLI conventions'\n  }\n  \n  if (isPrivateFile) {\n    metadata.private = true\n  }\n  \n  const rules: RuleBlock[] = [{\n    metadata,\n    content: content.trim()\n  }]\n  \n  return {\n    format: 'aider',\n    filePath,\n    rules,\n    raw: content\n  }\n}\n\nexport function importClaudeCode(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const isPrivateFile = isPrivateRule(filePath)\n  \n  const metadata: any = {\n    id: 'claude-code-instructions',\n    alwaysApply: true,\n    description: 'Claude Code context and instructions'\n  }\n  \n  if (isPrivateFile) {\n    metadata.private = true\n  }\n  \n  const rules: RuleBlock[] = [{\n    metadata,\n    content: content.trim()\n  }]\n  \n  return {\n    format: 'claude',\n    filePath,\n    rules,\n    raw: content\n  }\n}\n\nexport function importOpenCode(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const isPrivateFile = isPrivateRule(filePath)\n  \n  const metadata: any = {\n    id: 'opencode-agents',\n    alwaysApply: true,\n    description: 'OpenCode agents and instructions'\n  }\n  \n  if (isPrivateFile) {\n    metadata.private = true\n  }\n  \n  const rules: RuleBlock[] = [{\n    metadata,\n    content: content.trim()\n  }]\n  \n  return {\n    format: 'opencode',\n    filePath,\n    rules,\n    raw: content\n  }\n}\n\nexport function importGemini(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const isPrivateFile = isPrivateRule(filePath)\n  \n  const metadata: any = {\n    id: 'gemini-instructions',\n    alwaysApply: true,\n    description: 'Gemini CLI context and instructions'\n  }\n  \n  if (isPrivateFile) {\n    metadata.private = true\n  }\n  \n  const rules: RuleBlock[] = [{\n    metadata,\n    content: content.trim()\n  }]\n  \n  return {\n    format: 'gemini',\n    filePath,\n    rules,\n    raw: content\n  }\n}\n\nexport function importQodo(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const rules: RuleBlock[] = [{\n    metadata: {\n      id: 'qodo-best-practices',\n      alwaysApply: true,\n      description: 'Qodo best practices and coding standards',\n      scope: '**/*',\n      priority: 'high'\n    },\n    content: content.trim()\n  }]\n  \n  return {\n    format: 'qodo',\n    filePath,\n    rules,\n    raw: content\n  }\n}\n\nexport function importAmazonQ(rulesDir: string): ImportResult {\n  const rules: RuleBlock[] = []\n  \n  // Recursively find all .md files in the Amazon Q rules directory\n  function findMdFiles(dir: string, relativePath = ''): void {\n    const entries = readdirSync(dir, { withFileTypes: true })\n    \n    // Ensure deterministic ordering: process directories before files, then sort alphabetically\n    entries.sort((a: Dirent, b: Dirent) => {\n      if (a.isDirectory() && !b.isDirectory()) return -1;\n      if (!a.isDirectory() && b.isDirectory()) return 1;\n      return a.name.localeCompare(b.name);\n    })\n    \n    for (const entry of entries) {\n      const fullPath = join(dir, entry.name)\n      const relPath = relativePath ? join(relativePath, entry.name) : entry.name\n      \n      if (entry.isDirectory()) {\n        // Recursively search subdirectories\n        findMdFiles(fullPath, relPath)\n      } else if (entry.isFile() && entry.name.endsWith('.md')) {\n        const content = readFileSync(fullPath, 'utf-8')\n        const isPrivateFile = isPrivateRule(fullPath)\n        \n        // Remove any leading numeric ordering prefixes (e.g., \"001-\" or \"12-\") from each path segment\n        let segments = relPath\n          .replace(/\\.md$/, '')\n          .replace(/\\\\/g, '/')\n          .split('/')\n          .map((s: string) => s.replace(/^\\d{2,}-/, '').replace(/\\.local$/, ''))\n        if (segments[0] === 'private') segments = segments.slice(1)\n        const defaultId = segments.join('/')\n        \n        const metadata: any = {\n          id: `amazonq-${defaultId}`,\n          alwaysApply: true,\n          description: `Amazon Q rules from ${relPath}`\n        }\n        \n        if (isPrivateFile) {\n          metadata.private = true\n        }\n        \n        rules.push({\n          metadata,\n          content: content.trim()\n        })\n      }\n    }\n  }\n  \n  findMdFiles(rulesDir)\n  \n  return {\n    format: 'amazonq',\n    filePath: rulesDir,\n    rules\n  }\n}\n\nexport function importRoo(rulesDir: string): ImportResult {\n  const rules: RuleBlock[] = []\n  \n  // Recursively find all .md files in the Roo rules directory\n  function findMdFiles(dir: string, relativePath = ''): void {\n    const entries = readdirSync(dir, { withFileTypes: true })\n      \n      // Ensure deterministic ordering: process directories before files, then sort alphabetically\n      entries.sort((a: Dirent, b: Dirent) => {\n        if (a.isDirectory() && !b.isDirectory()) return -1;\n        if (!a.isDirectory() && b.isDirectory()) return 1;\n        return a.name.localeCompare(b.name);\n      })\n      \n      for (const entry of entries) {\n        const fullPath = join(dir, entry.name)\n        const relPath = relativePath ? join(relativePath, entry.name) : entry.name\n        \n        if (entry.isDirectory()) {\n          // Recursively search subdirectories\n          findMdFiles(fullPath, relPath)\n        } else if (entry.isFile() && entry.name.endsWith('.md')) {\n          const content = readFileSync(fullPath, 'utf-8')\n          const { data, content: body } = matter(content, grayMatterOptions)\n          \n          // Remove any leading numeric ordering prefixes (e.g., \"001-\" or \"12-\") from each path segment\n          let segments = relPath\n            .replace(/\\.md$/, '')\n            .replace(/\\\\/g, '/')\n            .split('/')\n            .map((s: string) => s.replace(/^\\d{2,}-/, '').replace(/\\.local$/, ''))\n          if (segments[0] === 'private') segments = segments.slice(1)\n          const defaultId = segments.join('/')\n          \n          // Check if this is a private rule (either by path or frontmatter)\n          const isPrivateFile = isPrivateRule(fullPath)\n          \n          const metadata: any = {\n            id: data.id || defaultId,\n            ...data\n          }\n          \n          // Set default alwaysApply to false if not specified\n          if (metadata.alwaysApply === undefined) {\n            metadata.alwaysApply = false\n          }\n          \n          // Only set private if it's true (from file pattern or frontmatter)\n          if (data.private === true || (data.private === undefined && isPrivateFile)) {\n            metadata.private = true\n          }\n          \n          rules.push({\n            metadata,\n            content: body.trim()\n          })\n        }\n      }\n    }\n    \n    findMdFiles(rulesDir)\n    \n    return {\n      format: 'roo',\n      filePath: rulesDir,\n      rules\n    }\n}\n\nexport function importJunie(filePath: string): ImportResult {\n  const content = readFileSync(filePath, 'utf-8')\n  const isPrivateFile = isPrivateRule(filePath)\n  \n  const metadata: any = {\n    id: 'junie-guidelines',\n    alwaysApply: true,\n    description: 'JetBrains Junie guidelines and instructions'\n  }\n  \n  if (isPrivateFile) {\n    metadata.private = true\n  }\n  \n  const rules: RuleBlock[] = [{\n    metadata,\n    content: content.trim()\n  }]\n  \n  return {\n    format: 'junie' as any,\n    filePath,\n    rules,\n    raw: content\n  }\n}","import yaml from 'js-yaml'\nimport type { GrayMatterOption } from 'gray-matter'\n\n/**\n * Custom YAML parser that handles glob patterns starting with *\n * by pre-processing the YAML to quote unquoted strings that start with * during parsing\n * and removing quotes from glob patterns during stringification\n */\nexport function createSafeYamlParser() {\n  return {\n    parse: (str: string): object => {\n      // Pre-process the YAML string to quote glob patterns\n      // This regex looks for unquoted strings starting with * in YAML values\n      const processedStr = str.replace(\n        /^(\\s*\\w+:\\s*)(\\*[^\\n\\r\"']*?)(\\s*(?:\\r?\\n|$))/gm,\n        (match, prefix, value, suffix) => {\n          // Check if the value is already quoted\n          if (value.startsWith('\"') || value.startsWith(\"'\")) {\n            return match\n          }\n          // Quote the value to prevent it from being interpreted as a YAML alias\n          return `${prefix}\"${value}\"${suffix}`\n        }\n      )\n      \n      // Also handle array items that start with *\n      const fullyProcessedStr = processedStr.replace(\n        /^(\\s*-\\s+)(\\*[^\\n\\r\"']*?)(\\s*(?:\\r?\\n|$))/gm,\n        (match, prefix, value, suffix) => {\n          // Check if the value is already quoted\n          if (value.startsWith('\"') || value.startsWith(\"'\")) {\n            return match\n          }\n          // Quote the value\n          return `${prefix}\"${value}\"${suffix}`\n        }\n      )\n      \n      try {\n        return yaml.load(fullyProcessedStr) as object\n      } catch (error) {\n        // If preprocessing fails, try the original string\n        return yaml.load(str) as object\n      }\n    },\n    stringify: (data: object) => {\n      const yamlOutput = yaml.dump(data)\n      const lines = yamlOutput.split(/\\r?\\n/)\n      const out: string[] = []\n      let inGlobsArray = false\n      let globsIndent = ''\n      const containsGlob = (s: string) => s.includes('*')\n\n      for (let i = 0; i < lines.length; i++) {\n        let line = lines[i]\n\n        // Detect the globs key\n        const globsMatch = line.match(/^(\\s*)globs:\\s*(.*)$/)\n        if (globsMatch) {\n          globsIndent = globsMatch[1]\n          const value = globsMatch[2]\n\n          // Array style begins on next lines\n          if (value === '') {\n            inGlobsArray = true\n            out.push(line)\n            continue\n          }\n\n          // Scalar style on same line: globs: \"...\"\n          const scalar = value.match(/^(['\"])(.+)\\1(\\s*(?:#.*)?)$/)\n          if (scalar && containsGlob(scalar[2])) {\n            line = `${globsIndent}globs: ${scalar[2]}${scalar[3] ?? ''}`\n          }\n          out.push(line)\n          continue\n        }\n\n        if (inGlobsArray) {\n          // End of the globs array when we dedent\n          if (!line.startsWith(globsIndent + '  ')) {\n            inGlobsArray = false\n            i-- // reprocess this line outside array handling\n            continue\n          }\n          // Sequence item: - \"...\"\n          const item = line.match(/^(\\s*-\\s*)(['\"])(.+)\\2(\\s*(?:#.*)?)$/)\n          if (item && containsGlob(item[3])) {\n            line = `${item[1]}${item[3]}${item[4] ?? ''}`\n          }\n          out.push(line)\n          continue\n        }\n\n        out.push(line)\n      }\n      return out.join('\\n')\n    }\n  }\n}\n\n/**\n * Gray-matter options with custom YAML parser for handling glob patterns\n */\nexport const grayMatterOptions: GrayMatterOption<string, object> = {\n  engines: {\n    yaml: createSafeYamlParser()\n  }\n}","import { writeFileSync, mkdirSync, existsSync } from 'fs'\nimport { join, dirname, relative } from 'path'\nimport yaml from 'js-yaml'\nimport matter from 'gray-matter'\nimport type { RuleBlock, ExportOptions } from './types.js'\nimport { grayMatterOptions } from './yaml-parser.js'\n\n/**\n * Generate conditional rules section for single-file formats\n */\nfunction generateConditionalRulesSection(rules: RuleBlock[], repoPath: string): string {\n  const sections: string[] = []\n  \n  // Separate rules by type\n  const alwaysApplyRules = rules.filter(r => r.metadata.alwaysApply !== false)\n  const conditionalRules = rules.filter(r => r.metadata.alwaysApply === false)\n  \n  if (conditionalRules.length === 0) {\n    return ''\n  }\n  \n  // Group rules by folder (e.g., workflows, components, etc.)\n  const rulesByFolder: Record<string, RuleBlock[]> = {}\n  const rulesWithScope: RuleBlock[] = []\n  const rulesWithDescription: RuleBlock[] = []\n  \n  conditionalRules.forEach(rule => {\n    // Extract folder from ID if it contains a slash\n    if (rule.metadata.id && rule.metadata.id.includes('/')) {\n      const folder = rule.metadata.id.split('/')[0]\n      if (!rulesByFolder[folder]) {\n        rulesByFolder[folder] = []\n      }\n      rulesByFolder[folder].push(rule)\n    }\n    \n    // Categorize by scope/description\n    if (rule.metadata.scope) {\n      rulesWithScope.push(rule)\n    } else if (rule.metadata.description && !rule.metadata.scope && !rule.metadata.id?.includes('/')) {\n      // Only treat as description-based if it's not in a folder\n      rulesWithDescription.push(rule)\n    }\n  })\n  \n  sections.push('## Context-Specific Rules')\n  sections.push('')\n  \n  // Add rules with scope patterns\n  if (rulesWithScope.length > 0) {\n    rulesWithScope.forEach(rule => {\n      const scopes = Array.isArray(rule.metadata.scope) ? rule.metadata.scope : [rule.metadata.scope]\n      scopes.forEach(scope => {\n        const rulePath = `.agent/${rule.metadata.id}.md`\n        const description = rule.metadata.description ? ` - ${rule.metadata.description}` : ''\n        sections.push(`When working with files matching \\`${scope}\\`, also apply:`)\n        sections.push(`→ [${rule.metadata.id}](${rulePath})${description}`)\n        sections.push('')\n      })\n    })\n  }\n  \n  // Add rules with description keywords\n  if (rulesWithDescription.length > 0) {\n    rulesWithDescription.forEach(rule => {\n      const rulePath = `.agent/${rule.metadata.id}.md`\n      sections.push(`When working with ${rule.metadata.description}, also apply:`)\n      sections.push(`→ [${rule.metadata.id}](${rulePath})`)\n      sections.push('')\n    })\n  }\n  \n  // Add folder-based sections (e.g., Workflows)\n  Object.entries(rulesByFolder).forEach(([folder, folderRules]) => {\n    // Skip if already handled above\n    const unhandledRules = folderRules.filter(r => \n      !rulesWithScope.includes(r) && !rulesWithDescription.includes(r)\n    )\n    \n    if (unhandledRules.length > 0) {\n      // Capitalize folder name for section title\n      const sectionTitle = folder.charAt(0).toUpperCase() + folder.slice(1)\n      sections.push(`## ${sectionTitle}`)\n      sections.push('')\n      \n      unhandledRules.forEach(rule => {\n        const rulePath = `.agent/${rule.metadata.id}.md`\n        const description = rule.metadata.description ? ` - ${rule.metadata.description}` : ''\n        sections.push(`→ [${rule.metadata.id}](${rulePath})${description}`)\n      })\n      sections.push('')\n    }\n  })\n  \n  return sections.join('\\n')\n}\n\n/**\n * @deprecated Use exportToAgent() instead. Single-file .agentconfig format is deprecated.\n */\nexport function toAgentMarkdown(rules: RuleBlock[]): string {\n  console.warn('Warning: toAgentMarkdown() is deprecated. Use exportToAgent() to export to .agent/ directory instead.')\n  \n  const sections: string[] = []\n\n  for (const rule of rules) {\n    const { metadata, content } = rule\n\n    // Extract id and other metadata\n    const { id, ...otherMetadata } = metadata\n\n    // Build the comment starting with @<id>\n    let metaComment = `<!-- @${id}`\n\n    // If there are other metadata properties, add them\n    if (Object.keys(otherMetadata).length > 0) {\n      // Format remaining metadata as YAML\n      const metaYaml = yaml.dump(otherMetadata, {\n        flowLevel: 1,\n        lineWidth: -1\n      }).trim()\n\n      metaComment += `\\n${metaYaml}`\n    }\n\n    metaComment += ' -->'\n\n    // Add section\n    sections.push(`${metaComment}\\n\\n${content}`)\n  }\n\n  return sections.join('\\n\\n')\n}\n\nexport function exportToCopilot(rules: RuleBlock[], outputPath: string, options?: ExportOptions): void {\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  // Separate always-apply rules from conditional rules\n  const alwaysApplyRules = filteredRules.filter(r => r.metadata.alwaysApply !== false)\n  const conditionalSection = generateConditionalRulesSection(filteredRules, dirname(outputPath))\n  \n  // Combine always-apply rules into main content\n  const mainContent = alwaysApplyRules\n    .map(rule => rule.content)\n    .join('\\n\\n---\\n\\n')\n  \n  // Add conditional rules section if there are any\n  const fullContent = conditionalSection \n    ? `${mainContent}\\n\\n---\\n\\n${conditionalSection}`\n    : mainContent\n\n  ensureDirectoryExists(outputPath)\n  writeFileSync(outputPath, fullContent, 'utf-8')\n}\n\nexport function exportToAgent(rules: RuleBlock[], outputDir: string, options?: ExportOptions): void {\n  const agentDir = join(outputDir, '.agent')\n  mkdirSync(agentDir, { recursive: true })\n\n  let topIndex = 1;\n  rules.forEach(rule => {\n    // Support nested folders based on rule ID (e.g., \"api/auth\" -> \"api/auth.md\")\n    let filename: string\n    let filePath: string\n\n    if (rule.metadata.id && rule.metadata.id.includes('/')) {\n      // Create nested structure based on ID\n      const parts = rule.metadata.id.split('/')\n      const fileName = parts.pop() + '.md'\n      const subDir = join(agentDir, ...parts)\n      mkdirSync(subDir, { recursive: true })\n      filePath = join(subDir, fileName)\n    } else {\n      if (rule.metadata.private) {\n        const prefix = String(topIndex).padStart(3, '0') + '-'\n        topIndex++\n        filename = `${prefix}${rule.metadata.id || 'rule'}.md`\n        const privDir = join(agentDir, 'private')\n        mkdirSync(privDir, { recursive: true })\n        filePath = join(privDir, filename)\n      } else {\n        filename = `${rule.metadata.id || 'rule'}.md`\n        filePath = join(agentDir, filename)\n      }\n    }\n\n    // Prepare front matter data - filter out undefined and null values\n    const frontMatterBase: Record<string, unknown> = {}\n\n    if (rule.metadata.description !== undefined && rule.metadata.description !== null) frontMatterBase.description = rule.metadata.description\n    if (rule.metadata.alwaysApply !== undefined) frontMatterBase.alwaysApply = rule.metadata.alwaysApply\n    if (rule.metadata.globs !== undefined && rule.metadata.globs !== null) frontMatterBase.globs = rule.metadata.globs\n    if (rule.metadata.manual !== undefined && rule.metadata.manual !== null) frontMatterBase.manual = rule.metadata.manual\n    if (rule.metadata.scope !== undefined && rule.metadata.scope !== null) frontMatterBase.scope = rule.metadata.scope\n    if (rule.metadata.priority !== undefined && rule.metadata.priority !== null) frontMatterBase.priority = rule.metadata.priority\n    if (rule.metadata.triggers !== undefined && rule.metadata.triggers !== null) frontMatterBase.triggers = rule.metadata.triggers\n\n    // Add other metadata fields but exclude 'private' if it's false or null\n    for (const [key, value] of Object.entries(rule.metadata)) {\n      if (!['id', 'description', 'alwaysApply', 'globs', 'manual', 'scope', 'priority', 'triggers'].includes(key) && value !== undefined && value !== null) {\n        // Don't include private: false in frontmatter\n        if (key === 'private' && value === false) continue\n        frontMatterBase[key] = value\n      }\n    }\n\n    const frontMatter = frontMatterBase\n\n    // Create Markdown content with frontmatter\n    const mdContent = matter.stringify(rule.content, frontMatter, grayMatterOptions)\n    writeFileSync(filePath, mdContent, 'utf-8')\n  })\n}\n\nexport function exportToCursor(rules: RuleBlock[], outputDir: string, options?: ExportOptions): void {\n  const rulesDir = join(outputDir, '.cursor', 'rules')\n  mkdirSync(rulesDir, { recursive: true })\n\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  for (const rule of filteredRules) {\n    // Support nested folders based on rule ID\n    let filePath: string\n    \n    if (rule.metadata.id && rule.metadata.id.includes('/')) {\n      // Create nested structure based on ID\n      const parts = rule.metadata.id.split('/')\n      const fileName = parts.pop() + '.mdc'\n      const subDir = join(rulesDir, ...parts)\n      mkdirSync(subDir, { recursive: true })\n      filePath = join(subDir, fileName)\n    } else {\n      const filename = `${rule.metadata.id || 'rule'}.mdc`\n      filePath = join(rulesDir, filename)\n    }\n\n    // Prepare front matter data - filter out undefined and null values\n    const frontMatterBase: Record<string, unknown> = {}\n\n    if (rule.metadata.description !== undefined && rule.metadata.description !== null) frontMatterBase.description = rule.metadata.description\n    if (rule.metadata.alwaysApply !== undefined) frontMatterBase.alwaysApply = rule.metadata.alwaysApply\n    if (rule.metadata.globs !== undefined && rule.metadata.globs !== null) frontMatterBase.globs = rule.metadata.globs\n    if (rule.metadata.manual !== undefined && rule.metadata.manual !== null) frontMatterBase.manual = rule.metadata.manual\n    if (rule.metadata.scope !== undefined && rule.metadata.scope !== null) frontMatterBase.scope = rule.metadata.scope\n    if (rule.metadata.priority !== undefined && rule.metadata.priority !== null) frontMatterBase.priority = rule.metadata.priority\n    if (rule.metadata.triggers !== undefined && rule.metadata.triggers !== null) frontMatterBase.triggers = rule.metadata.triggers\n\n    // Add other metadata fields but exclude 'private' if it's false or null\n    for (const [key, value] of Object.entries(rule.metadata)) {\n      if (!['id', 'description', 'alwaysApply', 'globs', 'manual', 'scope', 'priority', 'triggers'].includes(key) && value !== undefined && value !== null) {\n        // Don't include private: false in frontmatter\n        if (key === 'private' && value === false) continue\n        frontMatterBase[key] = value\n      }\n    }\n\n    const frontMatter = frontMatterBase\n\n    // Create MDC content\n    const mdcContent = matter.stringify(rule.content, frontMatter, grayMatterOptions)\n    writeFileSync(filePath, mdcContent, 'utf-8')\n  }\n}\n\nexport function exportToCline(rules: RuleBlock[], outputPath: string, options?: ExportOptions): void {\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  if (outputPath.endsWith('.clinerules')) {\n    // Single file mode\n    const alwaysApplyRules = filteredRules.filter(r => r.metadata.alwaysApply !== false)\n    const conditionalSection = generateConditionalRulesSection(filteredRules, dirname(outputPath))\n    \n    const mainContent = alwaysApplyRules\n      .map(rule => {\n        const header = rule.metadata.description ? `## ${rule.metadata.description}\\n\\n` : ''\n        return header + rule.content\n      })\n      .join('\\n\\n')\n    \n    const fullContent = conditionalSection \n      ? `${mainContent}\\n\\n${conditionalSection}`\n      : mainContent\n\n    ensureDirectoryExists(outputPath)\n    writeFileSync(outputPath, fullContent, 'utf-8')\n  } else {\n    // Directory mode\n    const rulesDir = join(outputPath, '.clinerules')\n    mkdirSync(rulesDir, { recursive: true })\n\n    filteredRules.forEach((rule, index) => {\n      const filename = `${String(index + 1).padStart(2, '0')}-${rule.metadata.id || 'rule'}.md`\n      const filePath = join(rulesDir, filename)\n      writeFileSync(filePath, rule.content, 'utf-8')\n    })\n  }\n}\n\nexport function exportToWindsurf(rules: RuleBlock[], outputPath: string, options?: ExportOptions): void {\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  const alwaysApplyRules = filteredRules.filter(r => r.metadata.alwaysApply !== false)\n  const conditionalSection = generateConditionalRulesSection(filteredRules, dirname(outputPath))\n  \n  const mainContent = alwaysApplyRules\n    .map(rule => rule.content)\n    .join('\\n\\n')\n  \n  const fullContent = conditionalSection \n    ? `${mainContent}\\n\\n${conditionalSection}`\n    : mainContent\n\n  ensureDirectoryExists(outputPath)\n  writeFileSync(outputPath, fullContent, 'utf-8')\n}\n\nexport function exportToZed(rules: RuleBlock[], outputPath: string, options?: ExportOptions): void {\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  const alwaysApplyRules = filteredRules.filter(r => r.metadata.alwaysApply !== false)\n  const conditionalSection = generateConditionalRulesSection(filteredRules, dirname(outputPath))\n  \n  const mainContent = alwaysApplyRules\n    .map(rule => rule.content)\n    .join('\\n\\n')\n  \n  const fullContent = conditionalSection \n    ? `${mainContent}\\n\\n${conditionalSection}`\n    : mainContent\n\n  ensureDirectoryExists(outputPath)\n  writeFileSync(outputPath, fullContent, 'utf-8')\n}\n\nfunction exportSingleFileWithHeaders(\n  rules: RuleBlock[],\n  outputPath: string,\n  options?: ExportOptions\n): void {\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  const alwaysApplyRules = filteredRules.filter(r => r.metadata.alwaysApply !== false)\n  const conditionalSection = generateConditionalRulesSection(filteredRules, dirname(outputPath))\n  \n  const mainContent = alwaysApplyRules\n    .map(rule => {\n      const header = rule.metadata.description ? `# ${rule.metadata.description}\\n\\n` : ''\n      return header + rule.content\n    })\n    .join('\\n\\n')\n  \n  const fullContent = conditionalSection \n    ? `${mainContent}\\n\\n${conditionalSection}`\n    : mainContent\n\n  ensureDirectoryExists(outputPath)\n  writeFileSync(outputPath, fullContent, 'utf-8')\n}\n\nexport function exportToCodex(rules: RuleBlock[], outputPath: string, options?: ExportOptions): void {\n  exportSingleFileWithHeaders(rules, outputPath, options)\n}\n\nexport function exportToAider(rules: RuleBlock[], outputPath: string, options?: ExportOptions): void {\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  const alwaysApplyRules = filteredRules.filter(r => r.metadata.alwaysApply !== false)\n  const conditionalSection = generateConditionalRulesSection(filteredRules, dirname(outputPath))\n  \n  const mainContent = alwaysApplyRules\n    .map(rule => rule.content)\n    .join('\\n\\n')\n  \n  const fullContent = conditionalSection \n    ? `${mainContent}\\n\\n${conditionalSection}`\n    : mainContent\n\n  ensureDirectoryExists(outputPath)\n  writeFileSync(outputPath, fullContent, 'utf-8')\n}\n\nexport function exportToClaudeCode(rules: RuleBlock[], outputPath: string, options?: ExportOptions): void {\n  exportSingleFileWithHeaders(rules, outputPath, options)\n}\n\nexport function exportToOpenCode(rules: RuleBlock[], outputPath: string, options?: ExportOptions): void {\n  exportSingleFileWithHeaders(rules, outputPath, options)\n}\n\nexport function exportToGemini(rules: RuleBlock[], outputPath: string, options?: ExportOptions): void {\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  const content = filteredRules\n    .map(rule => {\n      const header = rule.metadata.description ? `# ${rule.metadata.description}\\n\\n` : ''\n      return header + rule.content\n    })\n    .join('\\n\\n')\n\n  ensureDirectoryExists(outputPath)\n  writeFileSync(outputPath, content, 'utf-8')\n}\n\nexport function exportToQodo(rules: RuleBlock[], outputPath: string, options?: ExportOptions): void {\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  const alwaysApplyRules = filteredRules.filter(r => r.metadata.alwaysApply !== false)\n  const conditionalSection = generateConditionalRulesSection(filteredRules, dirname(outputPath))\n  \n  const mainContent = alwaysApplyRules\n    .map(rule => {\n      const header = rule.metadata.description ? `# ${rule.metadata.description}\\n\\n` : ''\n      return header + rule.content\n    })\n    .join('\\n\\n---\\n\\n')\n  \n  const fullContent = conditionalSection \n    ? `${mainContent}\\n\\n---\\n\\n${conditionalSection}`\n    : mainContent\n\n  ensureDirectoryExists(outputPath)\n  writeFileSync(outputPath, fullContent, 'utf-8')\n}\n\nexport function exportToAmazonQ(rules: RuleBlock[], outputDir: string, options?: ExportOptions): void {\n  const rulesDir = join(outputDir, '.amazonq', 'rules')\n  mkdirSync(rulesDir, { recursive: true })\n\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  for (const rule of filteredRules) {\n    // Support nested folders based on rule ID\n    let filePath: string\n    \n    if (rule.metadata.id && rule.metadata.id.includes('/')) {\n      // Create nested structure based on ID\n      const parts = rule.metadata.id.split('/')\n      const fileName = parts.pop() + '.md'\n      const subDir = join(rulesDir, ...parts)\n      mkdirSync(subDir, { recursive: true })\n      filePath = join(subDir, fileName)\n    } else {\n      // Clean up the ID by removing amazonq- prefix if present\n      const cleanId = rule.metadata.id?.startsWith('amazonq-')\n        ? rule.metadata.id.substring(8)\n        : rule.metadata.id || 'rule'\n      const filename = `${cleanId}.md`\n      filePath = join(rulesDir, filename)\n    }\n\n    // Amazon Q uses simple markdown format without frontmatter\n    writeFileSync(filePath, rule.content, 'utf-8')\n  }\n}\n\nexport function exportToRoo(rules: RuleBlock[], outputDir: string, options?: ExportOptions): void {\n  const rulesDir = join(outputDir, '.roo', 'rules')\n  mkdirSync(rulesDir, { recursive: true })\n\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  for (const rule of filteredRules) {\n    // Support nested folders based on rule ID\n    let filePath: string\n    \n    if (rule.metadata.id && rule.metadata.id.includes('/')) {\n      // Create nested structure based on ID\n      const parts = rule.metadata.id.split('/')\n      const fileName = parts.pop() + '.md'\n      const subDir = join(rulesDir, ...parts)\n      mkdirSync(subDir, { recursive: true })\n      filePath = join(subDir, fileName)\n    } else {\n      const filename = `${rule.metadata.id || 'rule'}.md`\n      filePath = join(rulesDir, filename)\n    }\n\n    // Prepare front matter data - filter out undefined and null values\n    // Order matters for consistent output and test expectations\n    const frontMatterBase: Record<string, unknown> = {}\n\n    // Add fields in deterministic order: alwaysApply, description, scope, globs, manual, priority, triggers\n    if (rule.metadata.alwaysApply !== undefined) frontMatterBase.alwaysApply = rule.metadata.alwaysApply\n    if (rule.metadata.description !== undefined && rule.metadata.description !== null) frontMatterBase.description = rule.metadata.description\n    if (rule.metadata.scope !== undefined && rule.metadata.scope !== null) frontMatterBase.scope = rule.metadata.scope\n    if (rule.metadata.globs !== undefined && rule.metadata.globs !== null) frontMatterBase.globs = rule.metadata.globs\n    if (rule.metadata.manual !== undefined && rule.metadata.manual !== null) frontMatterBase.manual = rule.metadata.manual\n    if (rule.metadata.priority !== undefined && rule.metadata.priority !== null) frontMatterBase.priority = rule.metadata.priority\n    if (rule.metadata.triggers !== undefined && rule.metadata.triggers !== null) frontMatterBase.triggers = rule.metadata.triggers\n\n    // Add other metadata fields but exclude 'private' if it's false or null\n    for (const [key, value] of Object.entries(rule.metadata)) {\n      if (!['id', 'alwaysApply', 'description', 'scope', 'globs', 'manual', 'priority', 'triggers'].includes(key) && value !== undefined && value !== null) {\n        // Don't include private: false in frontmatter\n        if (key === 'private' && value === false) continue\n        frontMatterBase[key] = value\n      }\n    }\n\n    const frontMatter = frontMatterBase\n\n    // Create Markdown content with frontmatter\n    // Ensure content starts with newline for proper frontmatter formatting\n    const content = rule.content.startsWith('\\n') ? rule.content : '\\n' + rule.content\n    const mdContent = matter.stringify(content, frontMatter, grayMatterOptions)\n    writeFileSync(filePath, mdContent, 'utf-8')\n  }\n}\n\nexport function exportToJunie(rules: RuleBlock[], outputDir: string, options?: ExportOptions): void {\n  const junieDir = join(outputDir, '.junie')\n  mkdirSync(junieDir, { recursive: true })\n\n  // Filter out private rules unless includePrivate is true\n  const filteredRules = rules.filter(rule => !rule.metadata.private || options?.includePrivate)\n  \n  // Junie uses a single guidelines.md file, so we need to combine all rules\n  const alwaysApplyRules = filteredRules.filter(r => r.metadata.alwaysApply !== false)\n  const conditionalSection = generateConditionalRulesSection(filteredRules, outputDir)\n  \n  const mainContent = alwaysApplyRules\n    .map(rule => {\n      const header = rule.metadata.description ? `## ${rule.metadata.description}\\n\\n` : ''\n      return header + rule.content\n    })\n    .join('\\n\\n')\n  \n  const fullContent = conditionalSection\n    ? `${mainContent}\\n\\n${conditionalSection}`\n    : mainContent\n\n  const filePath = join(junieDir, 'guidelines.md')\n  writeFileSync(filePath, fullContent, 'utf-8')\n}\n\nexport function exportAll(rules: RuleBlock[], repoPath: string, dryRun = false, options: ExportOptions = { includePrivate: false }): void {\n  // Export to all supported formats\n  if (!dryRun) {\n    exportToAgent(rules, repoPath, options)\n    exportToCopilot(rules, join(repoPath, '.github', 'copilot-instructions.md'), options)\n    exportToCursor(rules, repoPath, options)\n    exportToCline(rules, join(repoPath, '.clinerules'), options)\n    exportToWindsurf(rules, join(repoPath, '.windsurfrules'), options)\n    exportToZed(rules, join(repoPath, '.rules'), options)\n    exportToCodex(rules, join(repoPath, 'AGENTS.md'), options)\n    exportToAider(rules, join(repoPath, 'CONVENTIONS.md'), options)\n    exportToClaudeCode(rules, join(repoPath, 'CLAUDE.md'), options)\n    exportToOpenCode(rules, join(repoPath, 'AGENTS.md'), options)\n    exportToGemini(rules, join(repoPath, 'GEMINI.md'), options)\n    exportToQodo(rules, join(repoPath, 'best_practices.md'), options)\n    exportToAmazonQ(rules, repoPath, options)\n    exportToRoo(rules, repoPath, options)\n    exportToJunie(rules, repoPath, options)\n  }\n}\n\nfunction ensureDirectoryExists(filePath: string): void {\n  const dir = dirname(filePath)\n  if (!existsSync(dir)) {\n    mkdirSync(dir, { recursive: true })\n  }\n}"],"mappings":"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","names":["remarkParse","yaml","import_js_yaml","yaml","matter","findMdFiles","import_fs","import_path","import_js_yaml","import_gray_matter","yaml","matter"]}