agentsmesh 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/markdown.ts","../src/cli/index.ts","../src/cli/router.ts","../src/utils/logger.ts","../src/cli/help.ts","../src/cli/version.ts","../src/cli/error-handler.ts","../src/cli/commands/generate.ts","../src/config/loader.ts","../src/utils/fs.ts","../src/config/schema.ts","../src/targets/claude-code/importer.ts","../src/core/import-reference-rewriter.ts","../src/core/import-reference-map-builders.ts","../src/targets/junie/constants.ts","../src/core/import-reference-map-shared.ts","../src/targets/codex-cli/command-skill.ts","../src/targets/projected-agent-skill.ts","../src/core/import-reference-map.ts","../src/core/path-helpers.ts","../src/core/link-rebaser-helpers.ts","../src/core/link-rebaser.ts","../src/targets/import-metadata.ts","../src/targets/import-orchestrator.ts","../src/targets/claude-code/importer-mappers.ts","../src/targets/claude-code/settings-helpers.ts","../src/core/hook-command.ts","../src/targets/cline/importer.ts","../src/targets/cline/importer-mappers.ts","../src/targets/shared-import-helpers.ts","../src/targets/cline/constants.ts","../src/targets/cline/mcp-mapper.ts","../src/targets/cline/skills-helpers.ts","../src/targets/cursor/importer.ts","../src/targets/cursor/importer-mappers.ts","../src/targets/cursor/settings-helpers.ts","../src/targets/cursor/skills-helpers.ts","../src/targets/codex-cli/importer.ts","../src/targets/codex-cli/constants.ts","../src/targets/codex-cli/import-codex-non-root-rules.ts","../src/targets/codex-cli/codex-rules-embed.ts","../src/targets/codex-cli/mcp-helpers.ts","../src/targets/codex-cli/skills-helpers.ts","../src/targets/scoped-agents-import.ts","../src/targets/windsurf/importer.ts","../src/targets/windsurf/constants.ts","../src/targets/windsurf/workflows-skills-helpers.ts","../src/targets/copilot/importer.ts","../src/targets/copilot/constants.ts","../src/targets/copilot/command-prompt.ts","../src/targets/copilot/hook-parser.ts","../src/targets/copilot/agents-skills-helpers.ts","../src/targets/continue/importer.ts","../src/targets/embedded-skill.ts","../src/targets/continue/command-rule.ts","../src/targets/continue/constants.ts","../src/targets/junie/importer.ts","../src/targets/gemini-cli/importer.ts","../src/targets/gemini-cli/importer-mappers.ts","../src/targets/gemini-cli/format-helpers.ts","../src/targets/gemini-cli/constants.ts","../src/targets/gemini-cli/policies-importer.ts","../src/core/validate-rules.ts","../src/utils/glob.ts","../src/targets/claude-code/linter.ts","../src/targets/cursor/linter.ts","../src/targets/copilot/linter.ts","../src/targets/continue/linter.ts","../src/targets/junie/linter.ts","../src/targets/gemini-cli/linter.ts","../src/targets/cline/linter.ts","../src/targets/codex-cli/linter.ts","../src/targets/windsurf/linter.ts","../src/targets/target-catalog.ts","../src/canonical/extends.ts","../src/config/resolver.ts","../src/config/remote-fetcher.ts","../src/config/git-remote.ts","../src/config/github-remote.ts","../src/config/remote-source.ts","../src/install/cache-cleanup.ts","../src/canonical/loader.ts","../src/canonical/rules.ts","../src/canonical/commands.ts","../src/canonical/agents.ts","../src/canonical/skills.ts","../src/canonical/mcp.ts","../src/canonical/permissions.ts","../src/canonical/hooks.ts","../src/canonical/ignore.ts","../src/canonical/merge.ts","../src/canonical/extend-load.ts","../src/config/native-format-detector.ts","../src/canonical/native-extends-importer.ts","../src/canonical/skill-pack-load.ts","../src/canonical/load-canonical-slice.ts","../src/canonical/extend-pick.ts","../src/canonical/pack-load.ts","../src/install/pack-reader.ts","../src/install/pack-schema.ts","../src/install/manual-install-mode.ts","../src/config/lock.ts","../src/utils/hash.ts","../src/config/conversions.ts","../src/targets/registry.ts","../src/targets/claude-code/generator.ts","../src/targets/claude-code/index.ts","../src/targets/cursor/generator.ts","../src/targets/cursor/index.ts","../src/targets/copilot/generator.ts","../src/targets/copilot/hook-entry.ts","../src/targets/copilot/index.ts","../src/targets/continue/generator.ts","../src/targets/continue/index.ts","../src/targets/junie/generator.ts","../src/targets/junie/index.ts","../src/targets/gemini-cli/generator.ts","../src/targets/gemini-cli/command-namespace.ts","../src/targets/gemini-cli/policies-generator.ts","../src/targets/gemini-cli/index.ts","../src/targets/cline/generator.ts","../src/targets/cline/index.ts","../src/core/mcp-servers.ts","../src/targets/codex-cli/generator.ts","../src/targets/codex-cli/codex-rule-paths.ts","../src/targets/codex-cli/index.ts","../src/targets/windsurf/generator.ts","../src/targets/windsurf/index.ts","../src/core/reference-map.ts","../src/core/reference-map-directories.ts","../src/core/reference-map-targets.ts","../src/core/output-overlap.ts","../src/core/reference-rewriter.ts","../src/core/output-source-map.ts","../src/core/engine-collision.ts","../src/core/engine-feature-loop.ts","../src/core/engine-optional-features.ts","../src/targets/copilot/hook-assets.ts","../src/core/engine-settings.ts","../src/core/engine.ts","../src/core/matrix.ts","../src/core/matrix-data.ts","../src/cli/commands/matrix.ts","../src/cli/commands/init.ts","../src/cli/commands/init-templates.ts","../src/cli/commands/init-detect.ts","../src/cli/commands/import.ts","../src/core/differ.ts","../src/cli/commands/diff.ts","../src/core/linter.ts","../src/core/linter-commands.ts","../src/core/linter-mcp.ts","../src/core/linter-permissions.ts","../src/core/linter-hooks.ts","../src/cli/commands/lint.ts","../src/cli/commands/watch.ts","../src/cli/commands/check.ts","../src/cli/commands/merge.ts","../src/core/merger.ts","../src/install/run-install.ts","../src/install/git-pin.ts","../src/install/fetch-install-source.ts","../src/install/run-install-resolve.ts","../src/install/prompts.ts","../src/install/validate-resources.ts","../src/install/pool-resolution.ts","../src/install/install-conflicts.ts","../src/install/url-parser.ts","../src/install/url-parser-remotes.ts","../src/install/install-entry-selection.ts","../src/install/install-extend-entry.ts","../src/install/merge-extend-entry.ts","../src/install/yaml-writer.ts","../src/install/run-install-pack.ts","../src/install/pack-writer.ts","../src/install/pack-hash.ts","../src/install/pack-merge.ts","../src/install/install-manifest.ts","../src/install/install-sync.ts","../src/install/name-generator.ts","../src/install/install-name.ts","../src/install/install-flags.ts","../src/install/discover-resources.ts","../src/install/resource-selection.ts","../src/install/manual-install-scope.ts","../src/install/manual-install-discovery.ts","../src/install/prepare-install-discovery.ts","../src/install/native-path-pick.ts","../src/install/native-path-pick-infer.ts","../src/install/gemini-install-commands.ts","../src/install/native-skill-scan.ts","../src/install/native-path-pick-infer-copilot.ts","../src/install/native-install-scope.ts","../src/install/run-install-discovery.ts","../src/install/install-discovery.ts","../src/install/install-replay.ts","../src/install/manual-install-persistence.ts","../src/cli/commands/install.ts"],"sourcesContent":["// Frontmatter parsing\n\nimport { parse as yamlParse, stringify as yamlStringify } from 'yaml';\n\n/**\n * Parse YAML frontmatter and body from markdown/MDC content.\n * @param content - Raw content with optional --- delimited frontmatter\n * @returns Parsed frontmatter object and trimmed body\n */\nexport function parseFrontmatter(content: string): {\n frontmatter: Record<string, unknown>;\n body: string;\n} {\n const open = content.indexOf('---');\n if (open !== 0) {\n return { frontmatter: {}, body: content.trim() };\n }\n const close = content.indexOf('---', 3);\n if (close === -1) {\n return { frontmatter: {}, body: content.trim() };\n }\n const yamlStr = content.slice(3, close).trim();\n const body = content.slice(close + 3).trim();\n const frontmatter = yamlStr === '' ? {} : ((yamlParse(yamlStr) as Record<string, unknown>) ?? {});\n return { frontmatter, body };\n}\n\n/**\n * Serialize frontmatter and body back to string.\n * @param frontmatter - Key-value pairs for YAML\n * @param body - Markdown body content\n * @returns Full content with --- delimiters when frontmatter has keys\n */\nexport function serializeFrontmatter(frontmatter: Record<string, unknown>, body: string): string {\n const keys = Object.keys(frontmatter);\n if (keys.length === 0) return body;\n const yamlStr = yamlStringify(frontmatter, { lineWidth: 0 }).trimEnd();\n return `---\\n${yamlStr}\\n---\\n\\n${body}`;\n}\n","import { realpathSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createRouter } from './router.js';\nimport { printHelp } from './help.js';\nimport { printVersion } from './version.js';\nimport { handleError } from './error-handler.js';\nimport { logger } from '../utils/logger.js';\nimport { runGenerate } from './commands/generate.js';\nimport { runInit } from './commands/init.js';\nimport { runImport } from './commands/import.js';\nimport { runDiff } from './commands/diff.js';\nimport { runLintCmd } from './commands/lint.js';\nimport { runMatrix } from './commands/matrix.js';\nimport { runWatch } from './commands/watch.js';\nimport { runCheck } from './commands/check.js';\nimport { runMerge } from './commands/merge.js';\nimport { runInstall } from './commands/install.js';\n\nexport interface ParseResult {\n command: string;\n flags: Record<string, string | boolean>;\n args: string[];\n}\n\n/**\n * Parses CLI arguments into command and flags.\n * @param argv - process.argv.slice(2)\n * @returns command name and flags object\n */\nexport function parseArgs(argv: string[]): ParseResult {\n const flags: Record<string, string | boolean> = {};\n const args: string[] = [];\n let command = 'help';\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i]!;\n if (arg === '--version') return { command: 'version', flags: {}, args: [] };\n if (arg === '--help') return { command: 'help', flags: {}, args: [] };\n if (arg.startsWith('--')) {\n const name = arg.slice(2);\n const next = argv[i + 1];\n if (next === undefined || next.startsWith('--')) {\n flags[name] = true;\n } else {\n flags[name] = next;\n i++;\n }\n continue;\n }\n if (command === 'help') {\n command = arg;\n } else {\n args.push(arg);\n }\n }\n return { command, flags, args };\n}\n\nconst CMDS = [\n 'init',\n 'generate',\n 'import',\n 'diff',\n 'lint',\n 'watch',\n 'check',\n 'merge',\n 'matrix',\n 'install',\n] as const;\n\nfunction stub(name: string) {\n return async (flags: Record<string, string | boolean>, _args: string[]) => {\n void flags;\n void _args;\n logger.info(`Not implemented yet: ${name}`);\n };\n}\n\nconst cmdHandlers: Record<\n string,\n (flags: Record<string, string | boolean>, args: string[]) => Promise<void>\n> = {\n ...Object.fromEntries(CMDS.map((c) => [c, stub(c)])),\n generate: async (flags, _args) => {\n void _args;\n const code = await runGenerate(flags);\n if (code !== 0) process.exit(code);\n },\n init: async (flags, _args) => {\n void _args;\n await runInit(process.cwd(), { yes: flags.yes === true });\n },\n import: (flags, _args) => {\n void _args;\n return runImport(flags);\n },\n diff: (flags, _args) => {\n void _args;\n return runDiff(flags);\n },\n lint: async (flags, _args) => {\n void _args;\n const code = await runLintCmd(flags);\n if (code !== 0) process.exit(code);\n },\n check: async (flags, _args) => {\n void _args;\n const code = await runCheck(flags);\n if (code !== 0) process.exit(code);\n },\n merge: (flags, _args) => {\n void _args;\n return runMerge(flags);\n },\n matrix: (flags, args) => {\n void args;\n return runMatrix(flags);\n },\n watch: async (flags, _args) => {\n void _args;\n const handle = await runWatch(flags);\n const stop = (): void => {\n void handle.stop().then(() => process.exit(0));\n };\n process.on('SIGINT', stop);\n process.on('SIGTERM', stop);\n },\n install: (flags, args) => runInstall(flags, args, process.cwd()),\n};\nconst router = createRouter(cmdHandlers);\n\nasync function main(parsed: ParseResult): Promise<void> {\n const { command, flags, args } = parsed;\n\n if (command === 'help') {\n printHelp();\n return;\n }\n if (command === 'version') {\n printVersion();\n return;\n }\n\n await router.route(command, flags, args);\n}\n\nfunction isMainModule(): boolean {\n const invoked = process.argv[1];\n if (!invoked) return false;\n const ourPath = fileURLToPath(import.meta.url);\n try {\n const invokedResolved = resolve(process.cwd(), invoked);\n return invokedResolved === ourPath || realpathSync(invokedResolved) === realpathSync(ourPath);\n } catch {\n return invoked.endsWith('cli.js') || invoked.includes('agentsbridge');\n }\n}\n\nif (isMainModule()) {\n const parsed = parseArgs(process.argv.slice(2));\n main(parsed).catch((err) =>\n handleError(err instanceof Error ? err : new Error(String(err)), {\n verbose: parsed.flags.verbose === true,\n }),\n );\n}\n","// Command router\n\nexport type CommandHandler = (\n flags: Record<string, string | boolean>,\n args: string[],\n) => Promise<void>;\n\nexport function createRouter(handlers: Record<string, CommandHandler>): {\n route: (cmd: string, flags: Record<string, string | boolean>, args: string[]) => Promise<void>;\n commands: () => string[];\n} {\n const commands = Object.keys(handlers);\n\n return {\n async route(\n cmd: string,\n flags: Record<string, string | boolean>,\n args: string[],\n ): Promise<void> {\n const handler = handlers[cmd];\n if (handler) {\n await handler(flags, args);\n return;\n }\n throw new Error(`Unknown command \"${cmd}\". Available: ${commands.join(', ')}`);\n },\n commands: () => [...commands],\n };\n}\n","// Colored console output\n\nconst C = {\n green: '\\x1b[32m',\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n cyan: '\\x1b[36m',\n reset: '\\x1b[0m',\n};\n\nfunction noColor(): boolean {\n return process.env.NO_COLOR !== undefined && process.env.NO_COLOR !== '';\n}\n\nfunction c(code: string, text: string): string {\n return noColor() ? text : `${code}${text}${C.reset}`;\n}\n\nfunction pad(str: string, width: number): string {\n const len = [...str].length; // grapheme-aware for unicode\n return str + ' '.repeat(Math.max(0, width - len));\n}\n\nexport const logger = {\n info(msg: string): void {\n process.stdout.write(c(C.cyan, msg) + '\\n');\n },\n warn(msg: string): void {\n process.stderr.write(c(C.yellow, '⚠ ') + msg + '\\n');\n },\n error(msg: string): void {\n process.stderr.write(c(C.red, '✗ ') + msg + '\\n');\n },\n success(msg: string): void {\n process.stdout.write(c(C.green, '✓ ') + msg + '\\n');\n },\n debug(msg: string): void {\n if (process.env.AGENTSBRIDGE_DEBUG === '1') {\n process.stdout.write(c(C.cyan, '[debug] ') + msg + '\\n');\n }\n },\n table(rows: string[][]): void {\n if (rows.length === 0) return;\n const cols = rows[0]!.length;\n const widths: number[] = [];\n for (let j = 0; j < cols; j++) {\n let max = 0;\n for (let i = 0; i < rows.length; i++) {\n const len = [...rows[i]![j]!].length;\n if (len > max) max = len;\n }\n widths[j] = max;\n }\n const border = '+' + widths.map((w) => '-'.repeat(w + 2)).join('+') + '+';\n process.stdout.write(border + '\\n');\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]!;\n const line = '| ' + row.map((cell, j) => pad(cell, widths[j]!)).join(' | ') + ' |';\n process.stdout.write(line + '\\n');\n }\n process.stdout.write(border + '\\n');\n },\n};\n","import { logger } from '../utils/logger.js';\n\ninterface HelpFlag {\n name: string;\n description: string;\n}\n\ninterface HelpCommand {\n name: string;\n usage: string;\n description: string;\n flags: HelpFlag[];\n}\n\nconst GLOBAL_FLAGS: HelpFlag[] = [\n { name: '--help', description: 'Show this help output and exit' },\n { name: '--version', description: 'Print CLI version and exit' },\n { name: '--verbose', description: 'Show full error details on failure' },\n];\n\nconst COMMANDS: HelpCommand[] = [\n {\n name: 'init',\n usage: 'agentsbridge init [flags]',\n description:\n 'Create agentsbridge.yaml, agentsbridge.local.yaml, and canonical .agentsbridge scaffold',\n flags: [{ name: '--yes', description: 'Auto-import detected tool configs without prompting' }],\n },\n {\n name: 'generate',\n usage: 'agentsbridge generate [flags]',\n description: 'Generate target files from canonical sources',\n flags: [\n { name: '--targets <csv>', description: 'Limit generation to target IDs (comma-separated)' },\n { name: '--check', description: 'Check drift only; exit non-zero when out of sync' },\n { name: '--dry-run', description: 'Preview file changes without writing outputs' },\n { name: '--force', description: 'Bypass lock-strategy blocked feature violations' },\n { name: '--refresh-cache', description: 'Refresh remote extends cache before loading' },\n { name: '--no-cache', description: 'Alias for --refresh-cache' },\n ],\n },\n {\n name: 'import',\n usage: 'agentsbridge import --from <target>',\n description: 'Import existing tool config into canonical .agentsbridge files',\n flags: [{ name: '--from <target>', description: 'Source tool ID to import from (required)' }],\n },\n {\n name: 'install',\n usage: 'agentsbridge install <source> [flags]',\n description: 'Install canonical resources from local/remote sources',\n flags: [\n {\n name: '<source>',\n description: 'GitHub/GitLab/tree/blob URL, git+ URL, SSH, or local path',\n },\n {\n name: '--sync',\n description: 'Reinstall missing packs recorded in .agentsbridge/installs.yaml',\n },\n {\n name: '--path <dir>',\n description: 'Subdirectory inside source repo when not embedded in URL',\n },\n {\n name: '--target <id>',\n description: 'Native format used for import-at-root discovery (same as extends.target)',\n },\n {\n name: '--as <kind>',\n description: 'Manual collection mode: rules, commands, agents, or skills',\n },\n { name: '--name <id>', description: 'Override generated install entry/pack name' },\n {\n name: '--extends',\n description: 'Write install as extends entry instead of materialized pack',\n },\n {\n name: '--dry-run',\n description: 'Preview only (no YAML write, no pack write, no generate)',\n },\n {\n name: '--force',\n description: 'Non-interactive mode; include invalid resources and skip selection prompts',\n },\n ],\n },\n {\n name: 'diff',\n usage: 'agentsbridge diff [flags]',\n description: 'Show patch-style output for what generate would change',\n flags: [{ name: '--targets <csv>', description: 'Limit diff to target IDs (comma-separated)' }],\n },\n {\n name: 'lint',\n usage: 'agentsbridge lint [flags]',\n description: 'Validate canonical files against target constraints',\n flags: [\n { name: '--targets <csv>', description: 'Limit linting to target IDs (comma-separated)' },\n ],\n },\n {\n name: 'watch',\n usage: 'agentsbridge watch [flags]',\n description: 'Watch canonical files and regenerate on change',\n flags: [\n {\n name: '--targets <csv>',\n description: 'Limit watched generate/matrix output to target IDs',\n },\n ],\n },\n {\n name: 'check',\n usage: 'agentsbridge check',\n description: 'Verify canonical files still match .agentsbridge/.lock',\n flags: [],\n },\n {\n name: 'merge',\n usage: 'agentsbridge merge',\n description: 'Resolve .agentsbridge/.lock merge conflicts from current canonical state',\n flags: [],\n },\n {\n name: 'matrix',\n usage: 'agentsbridge matrix [flags]',\n description: 'Print compatibility matrix for enabled features and targets',\n flags: [\n { name: '--targets <csv>', description: 'Limit matrix columns to target IDs' },\n { name: '--verbose', description: 'Include expanded feature details in matrix output' },\n ],\n },\n];\n\nfunction formatFlags(flags: HelpFlag[], pad = 18): string {\n if (flags.length === 0) return ' (no command-specific flags)';\n return flags.map((flag) => ` ${flag.name.padEnd(pad)}${flag.description}`).join('\\n');\n}\n\n/**\n * Prints main help text.\n */\nexport function printHelp(): void {\n const commandLines = COMMANDS.map((command) => {\n return `- ${command.name.padEnd(8)} ${command.description}\\n Usage: ${command.usage}\\n${formatFlags(command.flags)}`;\n }).join('\\n\\n');\n\n logger.info(`agentsbridge <command> [flags]\n\nGlobal flags:\n${formatFlags(GLOBAL_FLAGS)}\n\nCommands:\n${commandLines}\n\nTip: run \"agentsbridge <command> --help\" for this same command reference.`);\n}\n\n/**\n * Prints help for a specific command.\n */\nexport function printCommandHelp(command: string): void {\n const match = COMMANDS.find((item) => item.name === command);\n if (!match) {\n printHelp();\n return;\n }\n\n logger.info(`${match.usage}\n\n${match.description}\n\nCommand flags:\n${formatFlags(match.flags)}\n\nGlobal flags:\n${formatFlags(GLOBAL_FLAGS)}`);\n}\n","import { createRequire } from 'node:module';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\n\nconst require = createRequire(import.meta.url);\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n// src/cli/version.ts -> ../../package.json; dist/cli.js -> ../package.json\nconst pkgPath = __dirname.endsWith('dist')\n ? join(__dirname, '..', 'package.json')\n : join(__dirname, '..', '..', 'package.json');\nconst pkg = require(pkgPath) as { version: string };\n\n/**\n * Returns the lib version from package.json.\n */\nexport function getVersion(): string {\n return pkg.version;\n}\n\n/**\n * Prints the CLI version from package.json.\n */\nexport function printVersion(): void {\n process.stdout.write(`agentsbridge v${pkg.version}\\n`);\n}\n","import { logger } from '../utils/logger.js';\n\n/**\n * Handles CLI errors: prints message and exits with code 1.\n * @param err - The error to handle\n * @param options - verbose: include stack trace\n */\nexport function handleError(err: Error, options?: { verbose?: boolean }): never {\n if (options?.verbose && err.stack) {\n process.stderr.write(err.stack + '\\n');\n } else {\n logger.error(err.message);\n }\n process.exit(1);\n}\n","/**\n * agentsbridge generate — produce target files from canonical sources.\n */\n\nimport { join, resolve, sep } from 'node:path';\nimport { loadConfigFromDir } from '../../config/loader.js';\nimport { loadCanonicalWithExtends } from '../../canonical/extends.js';\nimport {\n buildChecksums,\n buildExtendChecksums,\n buildPackChecksums,\n detectLockedFeatureViolations,\n readLock,\n writeLock,\n} from '../../config/lock.js';\nimport { getCacheDir } from '../../config/remote-fetcher.js';\nimport { generate as runEngine } from '../../core/engine.js';\nimport { ensureCacheSymlink, writeFileAtomic } from '../../utils/fs.js';\nimport { logger } from '../../utils/logger.js';\nimport { getVersion } from '../version.js';\nimport { runMatrix } from './matrix.js';\n\ninterface RunGenerateOptions {\n printMatrix?: boolean;\n}\n\nexport function ensurePathInsideRoot(\n rootDir: string,\n relativePath: string,\n target: string,\n): string {\n const rootAbs = resolve(rootDir);\n const outputAbs = resolve(rootDir, relativePath);\n if (outputAbs === rootAbs || outputAbs.startsWith(`${rootAbs}${sep}`)) return outputAbs;\n throw new Error(`Unsafe generated output path for ${target}: ${relativePath}`);\n}\n\n/**\n * Run the generate command.\n * @param flags - CLI flags (targets, dry-run, verbose)\n * @param projectRoot - Project root (default process.cwd())\n */\nexport async function runGenerate(\n flags: Record<string, string | boolean>,\n projectRoot?: string,\n options: RunGenerateOptions = {},\n): Promise<number> {\n if (flags.features !== undefined) {\n throw new Error('--features is no longer supported. Configure features in agentsbridge.yaml.');\n }\n\n const root = projectRoot ?? process.cwd();\n const checkOnly = flags.check === true;\n const dryRun = flags['dry-run'] === true;\n const force = flags.force === true;\n const refreshRemoteCache = flags['refresh-cache'] === true || flags['no-cache'] === true;\n const targetStr = flags.targets;\n const targetFilter =\n typeof targetStr === 'string' && targetStr\n ? targetStr\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : undefined;\n\n const { config, configDir } = await loadConfigFromDir(root);\n const lockFeatures = config.collaboration?.lock_features ?? [];\n if (config.collaboration?.strategy === 'lock' && !force && lockFeatures.length > 0) {\n const abDir = join(configDir, '.agentsbridge');\n const existingLock = await readLock(abDir);\n if (existingLock !== null) {\n const currentChecksums = await buildChecksums(abDir);\n const violations = detectLockedFeatureViolations(\n existingLock.checksums,\n currentChecksums,\n lockFeatures,\n );\n if (violations.length > 0) {\n logger.error('Locked feature violation (strategy: lock). Modified files:');\n for (const violation of violations) {\n logger.error(` ${violation}`);\n }\n logger.error(\"Run 'agentsbridge generate --force' to accept these changes.\");\n throw new Error('Locked feature violation. Use --force to override.');\n }\n }\n }\n\n const { canonical, resolvedExtends } = await loadCanonicalWithExtends(config, configDir, {\n refreshRemoteCache,\n });\n\n const results = await runEngine({\n config,\n canonical,\n projectRoot: configDir,\n targetFilter,\n });\n\n if (results.length === 0) {\n logger.info('No files to generate (no root rule or rules feature disabled).');\n if (checkOnly) {\n logger.success('Generated files are in sync.');\n return 0;\n }\n if (!dryRun) {\n const abDir = join(configDir, '.agentsbridge');\n const checksums = await buildChecksums(abDir);\n const extendChecksums =\n resolvedExtends.length > 0 ? await buildExtendChecksums(resolvedExtends) : {};\n const packChecksums = await buildPackChecksums(join(abDir, 'packs'));\n const generatedBy = process.env['USER'] ?? process.env['USERNAME'] ?? 'unknown';\n await writeLock(abDir, {\n generatedAt: new Date().toISOString(),\n generatedBy,\n libVersion: getVersion(),\n checksums,\n extends: extendChecksums,\n packs: packChecksums,\n });\n try {\n await ensureCacheSymlink(getCacheDir(), join(configDir, '.agentsbridgecache'));\n } catch (err) {\n logger.warn(\n `Could not create .agentsbridgecache symlink: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n if (options.printMatrix !== false) {\n await runMatrix(flags, root);\n }\n return 0;\n }\n\n if (checkOnly) {\n const drifted = results.filter((r) => r.status !== 'unchanged');\n if (drifted.length === 0) {\n logger.success('Generated files are in sync.');\n return 0;\n }\n for (const r of drifted) {\n logger.error(`[check] ${r.status} ${r.path} (${r.target})`);\n }\n logger.error(\"Generated files are out of sync. Run 'agentsbridge generate' to update them.\");\n return 1;\n }\n\n for (const r of results) {\n if (dryRun) {\n logger.info(`[dry-run] ${r.status} ${r.path} (${r.target})`);\n } else if (r.status === 'created' || r.status === 'updated') {\n const fullPath = ensurePathInsideRoot(configDir, r.path, r.target);\n await writeFileAtomic(fullPath, r.content);\n logger.success(`${r.status} ${r.path}`);\n }\n }\n\n if (!dryRun) {\n const created = results.filter((r) => r.status === 'created').length;\n const updated = results.filter((r) => r.status === 'updated').length;\n const unchanged = results.filter((r) => r.status === 'unchanged').length;\n if (created > 0 || updated > 0) {\n logger.info(`Generated: ${created} created, ${updated} updated, ${unchanged} unchanged`);\n } else {\n logger.info(`Nothing changed. (${unchanged} unchanged)`);\n }\n\n const abDir = join(configDir, '.agentsbridge');\n const checksums = await buildChecksums(abDir);\n const extendChecksums =\n resolvedExtends.length > 0 ? await buildExtendChecksums(resolvedExtends) : {};\n const packChecksums = await buildPackChecksums(join(abDir, 'packs'));\n const generatedBy = process.env['USER'] ?? process.env['USERNAME'] ?? 'unknown';\n await writeLock(abDir, {\n generatedAt: new Date().toISOString(),\n generatedBy,\n libVersion: getVersion(),\n checksums,\n extends: extendChecksums,\n packs: packChecksums,\n });\n try {\n await ensureCacheSymlink(getCacheDir(), join(configDir, '.agentsbridgecache'));\n } catch (err) {\n logger.warn(\n `Could not create .agentsbridgecache symlink: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n if (options.printMatrix !== false) {\n await runMatrix(flags, root);\n }\n\n return 0;\n}\n","/**\n * Find and load agentsbridge config file.\n */\n\nimport { parse as parseYaml } from 'yaml';\nimport { join, dirname, resolve } from 'node:path';\nimport { readFileSafe, exists } from '../utils/fs.js';\nimport { logger } from '../utils/logger.js';\nimport { configSchema, type ValidatedConfig } from './schema.js';\n\nconst CONFIG_FILENAME = 'agentsbridge.yaml';\nconst LOCAL_CONFIG_FILENAME = 'agentsbridge.local.yaml';\n\n/**\n * Search upward from startDir for agentsbridge.yaml.\n * @param startDir - Directory to start searching from\n * @returns Absolute path to config file, or null if not found\n */\nexport async function findConfigPath(startDir: string): Promise<string | null> {\n let dir = resolve(startDir);\n\n while (true) {\n const configPath = join(dir, CONFIG_FILENAME);\n if (await exists(configPath)) {\n return configPath;\n }\n const parent = dirname(dir);\n if (parent === dir) {\n return null;\n }\n dir = parent;\n }\n}\n\n/**\n * Load and validate config from a YAML file.\n * @param configPath - Absolute path to agentsbridge.yaml\n * @returns Validated config\n * @throws Error if file not found or validation fails\n */\nexport async function loadConfig(configPath: string): Promise<ValidatedConfig> {\n const content = await readFileSafe(configPath);\n if (content === null) {\n throw new Error(\n `Config file not found: ${configPath}. Create agentsbridge.yaml in project root.`,\n );\n }\n\n const raw = parseYaml(content) as unknown;\n const result = configSchema.safeParse(raw);\n if (!result.success) {\n const issues = result.error.issues.map((i) => i.message).join('; ');\n throw new Error(`Invalid config at ${configPath}: ${issues}. Fix the YAML and try again.`, {\n cause: result.error,\n });\n }\n return result.data;\n}\n\nfunction deepMergeObjects(\n base: Record<string, unknown>,\n overrides: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...base };\n for (const [k, v] of Object.entries(overrides)) {\n if (v === null || v === undefined) continue;\n const baseVal = result[k];\n if (\n typeof v === 'object' &&\n !Array.isArray(v) &&\n v !== null &&\n typeof baseVal === 'object' &&\n baseVal !== null &&\n !Array.isArray(baseVal)\n ) {\n result[k] = deepMergeObjects(\n baseVal as Record<string, unknown>,\n v as Record<string, unknown>,\n );\n } else {\n result[k] = v;\n }\n }\n return result;\n}\n\n/** Per PRD 3.2: targets/features replace; overrides deep merge; extends append. */\nfunction mergeLocalConfig(\n project: ValidatedConfig,\n local: Record<string, unknown>,\n): ValidatedConfig {\n const merged = { ...project } as Record<string, unknown>;\n\n if (Array.isArray(local.targets) && local.targets.length > 0) {\n merged.targets = local.targets;\n }\n if (Array.isArray(local.features) && local.features.length > 0) {\n merged.features = local.features;\n }\n if (\n typeof local.overrides === 'object' &&\n local.overrides !== null &&\n !Array.isArray(local.overrides)\n ) {\n merged.overrides = deepMergeObjects(\n (merged.overrides ?? {}) as Record<string, unknown>,\n local.overrides as Record<string, unknown>,\n );\n }\n if (\n typeof local.conversions === 'object' &&\n local.conversions !== null &&\n !Array.isArray(local.conversions)\n ) {\n merged.conversions = deepMergeObjects(\n (merged.conversions ?? {}) as Record<string, unknown>,\n local.conversions as Record<string, unknown>,\n );\n }\n if (Array.isArray(local.extends) && local.extends.length > 0) {\n merged.extends = [...(project.extends ?? []), ...local.extends];\n }\n\n return merged as ValidatedConfig;\n}\n\n/**\n * Find config from dir, load it, merge agentsbridge.local.yaml if present.\n * Merge strategy (PRD 3.2): targets/features replace; overrides deep merge; extends append.\n * @param startDir - Directory to start searching from\n * @returns Config and directory containing agentsbridge.yaml\n * @throws Error if no config found\n */\nexport async function loadConfigFromDir(\n startDir: string,\n): Promise<{ config: ValidatedConfig; configDir: string }> {\n const configPath = await findConfigPath(startDir);\n if (configPath === null) {\n throw new Error(\n `No agentsbridge.yaml found from ${startDir}. Run 'agentsbridge init' to create one.`,\n );\n }\n\n const configDir = dirname(configPath);\n let config = await loadConfig(configPath);\n\n const localPath = join(configDir, LOCAL_CONFIG_FILENAME);\n const localContent = await readFileSafe(localPath);\n if (localContent !== null) {\n const localRaw = parseYaml(localContent) as unknown;\n if (typeof localRaw === 'object' && localRaw !== null && !Array.isArray(localRaw)) {\n const merged = mergeLocalConfig(config, localRaw as Record<string, unknown>);\n const parsed = configSchema.safeParse(merged);\n if (parsed.success) {\n config = parsed.data;\n } else {\n const issues = parsed.error.issues.map((i) => i.message).join('; ');\n logger.warn(\n `Ignoring invalid agentsbridge.local.yaml at ${localPath}: ${issues}. Using project config instead.`,\n );\n }\n }\n }\n\n return { config, configDir };\n}\n","/**\n * File system helpers for agentsbridge.\n */\n\nimport {\n readFile,\n writeFile,\n access,\n mkdir,\n rename,\n readdir,\n copyFile,\n stat,\n symlink,\n unlink,\n lstat,\n readlink,\n} from 'node:fs/promises';\nimport { dirname, join, resolve } from 'node:path';\nimport { constants } from 'node:fs';\n\nconst UTF8_BOM = '\\uFEFF';\n\ninterface ErrnoLike {\n code?: string;\n message: string;\n}\n\n/**\n * Read file as utf-8 string. Strips BOM. Returns null on ENOENT.\n * @param path - Absolute or relative file path\n * @returns File content or null if not found\n */\nexport async function readFileSafe(path: string): Promise<string | null> {\n try {\n const data = await readFile(path, 'utf-8');\n return data.startsWith(UTF8_BOM) ? data.slice(UTF8_BOM.length) : data;\n } catch (err) {\n const e = err as ErrnoLike;\n if (e.code === 'ENOENT') return null;\n throw new Error(\n `Failed to read ${path}: ${e.message}. Ensure the file exists and is readable.`,\n { cause: err },\n );\n }\n}\n\n/**\n * Write content atomically (write to .tmp, then rename).\n * Creates parent directories.\n * @param path - Target file path\n * @param content - Content to write\n */\nexport async function writeFileAtomic(path: string, content: string): Promise<void> {\n const dir = dirname(path);\n await mkdir(dir, { recursive: true });\n const tmpPath = `${path}.tmp`;\n try {\n await writeFile(tmpPath, content, 'utf-8');\n await rename(tmpPath, path);\n } catch (err) {\n const e = err as ErrnoLike;\n throw new Error(`Failed to write ${path}: ${e.message}. Check permissions and disk space.`, {\n cause: err,\n });\n }\n}\n\n/**\n * Check if path exists.\n * @param path - File or directory path\n * @returns true if exists, false otherwise\n */\nexport async function exists(path: string): Promise<boolean> {\n try {\n await access(path, constants.F_OK);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Create directory recursively. No-op if already exists.\n * @param path - Directory path\n */\nexport async function mkdirp(path: string): Promise<void> {\n await mkdir(path, { recursive: true });\n}\n\n/**\n * List all files recursively under dir. Returns absolute paths only.\n * @param dir - Directory to scan\n * @returns Array of absolute file paths\n */\nexport async function readDirRecursive(dir: string): Promise<string[]> {\n try {\n const entries = await readdir(dir, { withFileTypes: true });\n const files: string[] = [];\n for (const ent of entries) {\n const full = join(dir, ent.name);\n if (ent.isDirectory()) {\n files.push(...(await readDirRecursive(full)));\n } else {\n files.push(full);\n }\n }\n return files;\n } catch (err) {\n const e = err as ErrnoLike;\n if (e.code === 'ENOENT' || e.code === 'ENOTDIR') return [];\n throw new Error(`Failed to read directory ${dir}: ${e.message}. Check permissions.`, {\n cause: err,\n });\n }\n}\n\n/**\n * Copy directory recursively preserving structure.\n * @param src - Source directory\n * @param dest - Destination directory\n */\nexport async function copyDir(src: string, dest: string): Promise<void> {\n await mkdirp(dest);\n const entries = await readdir(src, { withFileTypes: true });\n for (const ent of entries) {\n const srcPath = join(src, ent.name);\n const destPath = join(dest, ent.name);\n const info = await stat(srcPath);\n if (info.isDirectory()) {\n await copyDir(srcPath, destPath);\n } else {\n await mkdirp(dirname(destPath));\n await copyFile(srcPath, destPath);\n }\n }\n}\n\n/**\n * Ensure .agentsbridgecache symlink exists pointing to the agentsbridge cache dir.\n * Creates or updates the symlink so devs can inspect cached remote extends.\n * @param cacheDir - Absolute path to the cache (e.g. ~/.agentsbridge/cache)\n * @param linkPath - Absolute path where the symlink should live\n */\nexport async function ensureCacheSymlink(cacheDir: string, linkPath: string): Promise<void> {\n const targetPath = resolve(cacheDir);\n try {\n const info = await lstat(linkPath);\n if (!info.isSymbolicLink()) return; // leave existing non-symlink alone\n const currentTarget = resolve(dirname(linkPath), await readlink(linkPath));\n if (currentTarget === targetPath) return;\n await unlink(linkPath);\n } catch (err) {\n const e = err as ErrnoLike;\n if (e.code !== 'ENOENT') throw err;\n }\n await symlink(targetPath, linkPath, 'dir');\n}\n","import { z } from 'zod';\nimport { TARGET_IDS } from '../targets/target-catalog.js';\n\nconst VALID_FEATURES = [\n 'rules',\n 'commands',\n 'agents',\n 'skills',\n 'mcp',\n 'hooks',\n 'ignore',\n 'permissions',\n] as const;\n\n/** Valid `extends[].target` / `agentsbridge install --target` identifiers */\nexport const targetSchema = z.enum(TARGET_IDS);\nexport const featureSchema = z.enum(VALID_FEATURES);\n\n/** Cherry-pick resource names within array features (extends.install + merge). */\nexport const extendPickSchema = z\n .object({\n skills: z.array(z.string()).optional(),\n commands: z.array(z.string()).optional(),\n rules: z.array(z.string()).optional(),\n agents: z.array(z.string()).optional(),\n })\n .strict();\n\nexport type ExtendPick = z.infer<typeof extendPickSchema>;\n\nconst extendSourceSchema = z.object({\n name: z.string(),\n source: z.string(),\n version: z.string().optional(),\n target: targetSchema.optional(),\n features: z.array(featureSchema),\n /** Repo-relative POSIX path for discovery (skill packs, nested .agentsbridge). */\n path: z.string().optional(),\n pick: extendPickSchema.optional(),\n});\n\nconst collaborationSchema = z.object({\n strategy: z.enum(['merge', 'lock', 'last-wins']).default('merge'),\n lock_features: z.array(z.string()).default([]),\n});\n\nconst conversionsSchema = z\n .object({\n commands_to_skills: z\n .object({\n 'codex-cli': z.boolean().optional(),\n })\n .strict()\n .optional(),\n agents_to_skills: z\n .object({\n 'gemini-cli': z.boolean().optional(),\n cline: z.boolean().optional(),\n 'codex-cli': z.boolean().optional(),\n windsurf: z.boolean().optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n .optional();\n\n/** Zod schema for agentsbridge.yaml config validation */\nexport const configSchema = z.object({\n version: z.literal(1),\n targets: z.array(targetSchema).default([...TARGET_IDS]),\n features: z.array(featureSchema).default([...VALID_FEATURES]),\n extends: z.array(extendSourceSchema).default([]),\n overrides: z.record(z.string(), z.record(z.string(), z.unknown())).default({}),\n collaboration: collaborationSchema.default({ strategy: 'merge', lock_features: [] }),\n conversions: conversionsSchema,\n});\n\nexport type ValidatedConfig = z.infer<typeof configSchema>;\n","/**\n * Claude Code target importer — full fidelity import into canonical .agentsbridge/.\n *\n * Sources imported:\n * .claude/CLAUDE.md → .agentsbridge/rules/_root.md\n * CLAUDE.md (legacy fallback) → .agentsbridge/rules/_root.md\n * .claude/rules/*.md → .agentsbridge/rules/*.md\n * .claude/commands/*.md → .agentsbridge/commands/*.md\n * .claude/agents/*.md → .agentsbridge/agents/*.md\n * .claude/skills/{name}/SKILL.md + supporting files → .agentsbridge/skills/{name}/\n * .claude/settings.json → .agentsbridge/mcp.json (mcpServers)\n * .agentsbridge/permissions.yaml (permissions)\n * .agentsbridge/hooks.yaml (hooks)\n * .claudeignore → .agentsbridge/ignore\n */\n\nimport { join, basename, relative, dirname } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { createImportReferenceNormalizer } from '../../core/import-reference-rewriter.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { serializeImportedRuleWithFallback } from '../import-metadata.js';\nimport { importFileDirectory } from '../import-orchestrator.js';\nimport { mapClaudeMarkdownFile, mapClaudeRuleFile } from './importer-mappers.js';\nimport { importMcpJson, importSettings } from './settings-helpers.js';\n\nconst CLAUDE_MD = '.claude/CLAUDE.md';\nconst CLAUDE_MD_LEGACY = 'CLAUDE.md';\nconst CLAUDE_RULES_DIR = '.claude/rules';\nconst CLAUDE_COMMANDS_DIR = '.claude/commands';\nconst CLAUDE_AGENTS_DIR = '.claude/agents';\nconst CLAUDE_SKILLS_DIR = '.claude/skills';\nconst CLAUDEIGNORE = '.claudeignore';\n\nconst AB_RULES = '.agentsbridge/rules';\nconst AB_COMMANDS = '.agentsbridge/commands';\nconst AB_AGENTS = '.agentsbridge/agents';\nconst AB_SKILLS = '.agentsbridge/skills';\nconst AB_IGNORE = '.agentsbridge/ignore';\n\n/**\n * Import Claude Code config into canonical .agentsbridge/.\n * @param projectRoot - Project root directory\n * @returns Import results for each imported file\n */\nexport async function importFromClaudeCode(projectRoot: string): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n const normalize = await createImportReferenceNormalizer('claude-code', projectRoot);\n\n await importRules(projectRoot, results, normalize);\n await importCommands(projectRoot, results, normalize);\n await importAgents(projectRoot, results, normalize);\n await importSkills(projectRoot, results, normalize);\n await importMcpJson(projectRoot, results);\n await importSettings(projectRoot, results);\n await importIgnore(projectRoot, results);\n\n return results;\n}\n\nasync function importRules(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const destDir = join(projectRoot, AB_RULES);\n\n // Try .claude/CLAUDE.md first (preferred per official docs), then fall back to CLAUDE.md (legacy)\n const primaryClaudePath = join(projectRoot, CLAUDE_MD);\n const primaryContent = await readFileSafe(primaryClaudePath);\n const legacyClaudePath = join(projectRoot, CLAUDE_MD_LEGACY);\n const legacyContent = primaryContent === null ? await readFileSafe(legacyClaudePath) : null;\n const claudeContent = primaryContent ?? legacyContent;\n const claudePath = primaryContent !== null ? primaryClaudePath : legacyClaudePath;\n\n if (claudeContent !== null) {\n await mkdirp(destDir);\n const destPath = join(destDir, '_root.md');\n const { frontmatter, body } = parseFrontmatter(normalize(claudeContent, claudePath, destPath));\n const hasRoot = frontmatter.root === true;\n const outFm = hasRoot ? frontmatter : { ...frontmatter, root: true };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'claude-code',\n fromPath: claudePath,\n toPath: `${AB_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n\n const rulesDir = join(projectRoot, CLAUDE_RULES_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: rulesDir,\n destDir,\n extensions: ['.md'],\n fromTool: 'claude-code',\n normalize,\n mapEntry: ({ srcPath, normalizeTo }) => mapClaudeRuleFile(srcPath, destDir, normalizeTo),\n })),\n );\n}\n\nasync function importCommands(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const destDir = join(projectRoot, AB_COMMANDS);\n const commandsDir = join(projectRoot, CLAUDE_COMMANDS_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: commandsDir,\n destDir,\n extensions: ['.md'],\n fromTool: 'claude-code',\n normalize,\n mapEntry: ({ srcPath, normalizeTo }) =>\n mapClaudeMarkdownFile(srcPath, destDir, 'commands', normalizeTo),\n })),\n );\n}\n\nasync function importAgents(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const destDir = join(projectRoot, AB_AGENTS);\n const agentsDir = join(projectRoot, CLAUDE_AGENTS_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: agentsDir,\n destDir,\n extensions: ['.md'],\n fromTool: 'claude-code',\n normalize,\n mapEntry: ({ srcPath, normalizeTo }) =>\n mapClaudeMarkdownFile(srcPath, destDir, 'agents', normalizeTo),\n })),\n );\n}\n\nasync function importSkills(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const skillsBaseDir = join(projectRoot, CLAUDE_SKILLS_DIR);\n const destBase = join(projectRoot, AB_SKILLS);\n\n const allFiles = await readDirRecursive(skillsBaseDir);\n const skillMdFiles = allFiles.filter((f) => f.endsWith('SKILL.md'));\n\n for (const skillMdPath of skillMdFiles) {\n const skillDir = dirname(skillMdPath);\n const skillName = basename(skillDir);\n const destSkillDir = join(destBase, skillName);\n\n const skillFiles = await readDirRecursive(skillDir);\n for (const filePath of skillFiles) {\n const fileContent = await readFileSafe(filePath);\n if (fileContent === null) continue;\n const relPath = relative(skillDir, filePath);\n const destPath = join(destSkillDir, relPath);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, normalize(fileContent, filePath, destPath));\n const toPath = `${AB_SKILLS}/${skillName}/${relPath}`;\n results.push({\n fromTool: 'claude-code',\n fromPath: filePath,\n toPath,\n feature: 'skills',\n });\n }\n }\n}\n\nasync function importIgnore(projectRoot: string, results: ImportResult[]): Promise<void> {\n const ignorePath = join(projectRoot, CLAUDEIGNORE);\n const content = await readFileSafe(ignorePath);\n if (content === null) return;\n const destPath = join(projectRoot, AB_IGNORE);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, content);\n results.push({\n fromTool: 'claude-code',\n fromPath: ignorePath,\n toPath: AB_IGNORE,\n feature: 'ignore',\n });\n}\n","import { existsSync, realpathSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { normalize as normalizePath } from 'node:path';\nimport { buildImportReferenceMap } from './import-reference-map.js';\nimport { rewriteFileLinks } from './link-rebaser.js';\n\nconst IMPORT_REFERENCE_TARGETS = [\n 'claude-code',\n 'cursor',\n 'copilot',\n 'continue',\n 'junie',\n 'gemini-cli',\n 'cline',\n 'codex-cli',\n 'windsurf',\n] as const;\n\nfunction pathVariants(path: string): string[] {\n const variants = [normalizePath(path)];\n if (!existsSync(path)) return variants;\n try {\n const realPaths = [realpathSync(path), realpathSync.native(path)];\n for (const realPath of realPaths) {\n const normalized = normalizePath(realPath);\n if (!variants.includes(normalized)) variants.push(normalized);\n }\n } catch {\n // Keep the direct path variant when realpath lookup fails.\n }\n return variants;\n}\n\nexport async function createImportReferenceNormalizer(\n target: string,\n projectRoot: string,\n): Promise<(content: string, sourceFile: string, destinationFile: string) => string> {\n const refs = new Map<string, string>();\n const targets = Array.from(new Set([target, ...IMPORT_REFERENCE_TARGETS]));\n for (const candidate of targets) {\n const candidateRefs = await buildImportReferenceMap(candidate, projectRoot);\n for (const [targetPath, canonicalPath] of candidateRefs.entries()) {\n refs.set(targetPath, canonicalPath);\n }\n }\n const artifactMap = new Map<string, string>();\n for (const [targetPath, canonicalPath] of refs.entries()) {\n const canonicalAbsPath = normalizePath(join(projectRoot, canonicalPath));\n for (const variant of pathVariants(join(projectRoot, targetPath))) {\n artifactMap.set(variant, canonicalAbsPath);\n }\n }\n\n return (content: string, sourceFile: string, destinationFile: string) =>\n rewriteFileLinks({\n content,\n projectRoot,\n sourceFile,\n destinationFile,\n translatePath: (absolutePath) => artifactMap.get(absolutePath) ?? absolutePath,\n pathExists: (absolutePath) => artifactMap.has(absolutePath) || existsSync(absolutePath),\n }).content;\n}\n","import { basename } from 'node:path';\nimport { JUNIE_DOT_AGENTS, JUNIE_GUIDELINES } from '../targets/junie/constants.js';\nimport {\n addScopedAgentsMappings,\n addSimpleFileMapping,\n addSkillLikeMapping,\n listFiles,\n rel,\n} from './import-reference-map-shared.js';\n\nconst AB_RULES = '.agentsbridge/rules';\nconst AB_COMMANDS = '.agentsbridge/commands';\nconst AB_AGENTS = '.agentsbridge/agents';\n\nfunction addCopilotInstructionMapping(refs: Map<string, string>, fromPath: string): void {\n if (fromPath.endsWith('.instructions.md')) {\n refs.set(fromPath, `${AB_RULES}/${basename(fromPath, '.instructions.md')}.md`);\n return;\n }\n addSimpleFileMapping(refs, fromPath, AB_RULES, '.md');\n}\n\nexport async function buildClaudeCodeImportPaths(\n refs: Map<string, string>,\n projectRoot: string,\n): Promise<void> {\n // Root instruction files — explicit mappings (not inside a scannable subdirectory)\n refs.set('.claude/CLAUDE.md', `${AB_RULES}/_root.md`);\n refs.set('CLAUDE.md', `${AB_RULES}/_root.md`);\n for (const absPath of await listFiles(projectRoot, '.claude/rules')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_RULES, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.claude/commands')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_COMMANDS, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.claude/agents')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_AGENTS, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.claude/skills')) {\n addSkillLikeMapping(refs, rel(projectRoot, absPath), '.claude/skills');\n }\n}\n\nexport async function buildCursorImportPaths(\n refs: Map<string, string>,\n projectRoot: string,\n): Promise<void> {\n // AGENTS.md is the cursor root compatibility mirror (§3.1 of cursor format doc)\n refs.set('AGENTS.md', `${AB_RULES}/_root.md`);\n for (const absPath of await listFiles(projectRoot, '.cursor/rules')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_RULES, '.mdc');\n }\n for (const absPath of await listFiles(projectRoot, '.cursor/commands')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_COMMANDS, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.cursor/agents')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_AGENTS, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.cursor/skills')) {\n addSkillLikeMapping(refs, rel(projectRoot, absPath), '.cursor/skills');\n }\n}\n\nexport async function buildCopilotImportPaths(\n refs: Map<string, string>,\n projectRoot: string,\n): Promise<void> {\n refs.set('.github/copilot-instructions.md', `${AB_RULES}/_root.md`);\n for (const absPath of await listFiles(projectRoot, '.github/copilot')) {\n refs.set(rel(projectRoot, absPath), `${AB_RULES}/${basename(absPath, '.instructions.md')}.md`);\n }\n for (const absPath of await listFiles(projectRoot, '.github/instructions')) {\n addCopilotInstructionMapping(refs, rel(projectRoot, absPath));\n }\n for (const absPath of await listFiles(projectRoot, '.github/prompts')) {\n refs.set(rel(projectRoot, absPath), `${AB_COMMANDS}/${basename(absPath, '.prompt.md')}.md`);\n }\n for (const absPath of await listFiles(projectRoot, '.github/agents')) {\n refs.set(rel(projectRoot, absPath), `${AB_AGENTS}/${basename(absPath, '.agent.md')}.md`);\n }\n for (const absPath of await listFiles(projectRoot, '.github/skills')) {\n addSkillLikeMapping(refs, rel(projectRoot, absPath), '.github/skills');\n }\n}\n\nexport async function buildContinueImportPaths(\n refs: Map<string, string>,\n projectRoot: string,\n): Promise<void> {\n for (const absPath of await listFiles(projectRoot, '.continue/rules')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_RULES, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.continue/prompts')) {\n refs.set(rel(projectRoot, absPath), `${AB_COMMANDS}/${basename(absPath, '.md')}.md`);\n }\n for (const absPath of await listFiles(projectRoot, '.continue/skills')) {\n addSkillLikeMapping(refs, rel(projectRoot, absPath), '.continue/skills');\n }\n}\n\nexport async function buildJunieImportPaths(\n refs: Map<string, string>,\n projectRoot: string,\n): Promise<void> {\n refs.set(JUNIE_GUIDELINES, `${AB_RULES}/_root.md`);\n refs.set(JUNIE_DOT_AGENTS, `${AB_RULES}/_root.md`);\n refs.set('AGENTS.md', `${AB_RULES}/_root.md`);\n for (const absPath of await listFiles(projectRoot, '.junie/rules')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_RULES, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.junie/commands')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_COMMANDS, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.junie/agents')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_AGENTS, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.junie/skills')) {\n addSkillLikeMapping(refs, rel(projectRoot, absPath), '.junie/skills');\n }\n}\n\nexport async function buildGeminiCliImportPaths(\n refs: Map<string, string>,\n projectRoot: string,\n): Promise<void> {\n for (const absPath of await listFiles(projectRoot, '.gemini/rules')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_RULES, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.gemini/commands')) {\n const relPath = rel(projectRoot, absPath);\n if (!relPath.endsWith('.toml') && !relPath.endsWith('.md')) continue;\n\n const noExt = relPath.replace(/\\.(toml|md)$/i, '');\n const commandsPrefix = '.gemini/commands/';\n const relativeNoExt = noExt.startsWith(commandsPrefix)\n ? noExt.slice(commandsPrefix.length)\n : noExt;\n const segments = relativeNoExt.split('/').filter(Boolean);\n const canonicalName = segments.join(':');\n refs.set(relPath, `${AB_COMMANDS}/${canonicalName}.md`);\n }\n for (const absPath of await listFiles(projectRoot, '.gemini/agents')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_AGENTS, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.gemini/skills')) {\n addSkillLikeMapping(refs, rel(projectRoot, absPath), '.gemini/skills');\n }\n}\n\nexport async function buildClineImportPaths(\n refs: Map<string, string>,\n projectRoot: string,\n): Promise<void> {\n // Explicit root mapping (excluded from directory scan below)\n refs.set('.clinerules/_root.md', `${AB_RULES}/_root.md`);\n for (const absPath of await listFiles(projectRoot, '.clinerules')) {\n const relPath = rel(projectRoot, absPath);\n if (\n !relPath.endsWith('.md') ||\n relPath.includes('/workflows/') ||\n basename(relPath) === '_root.md'\n ) {\n continue;\n }\n addSimpleFileMapping(refs, relPath, AB_RULES, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.clinerules/workflows')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_COMMANDS, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.cline/skills')) {\n addSkillLikeMapping(refs, rel(projectRoot, absPath), '.cline/skills');\n }\n}\n\nexport async function buildCodexCliImportPaths(\n refs: Map<string, string>,\n projectRoot: string,\n): Promise<void> {\n refs.set('AGENTS.md', `${AB_RULES}/_root.md`);\n refs.set('codex.md', `${AB_RULES}/_root.md`);\n await addScopedAgentsMappings(refs, projectRoot);\n for (const absPath of await listFiles(projectRoot, '.codex/rules')) {\n const relPath = rel(projectRoot, absPath);\n if (relPath.endsWith('.rules')) {\n addSimpleFileMapping(refs, relPath, AB_RULES, '.rules');\n } else if (relPath.endsWith('.md')) {\n addSimpleFileMapping(refs, relPath, AB_RULES, '.md');\n }\n }\n for (const absPath of await listFiles(projectRoot, '.codex/agents')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_AGENTS, '.toml');\n }\n for (const absPath of await listFiles(projectRoot, '.agents/skills')) {\n addSkillLikeMapping(refs, rel(projectRoot, absPath), '.agents/skills');\n }\n}\n\nexport async function buildWindsurfImportPaths(\n refs: Map<string, string>,\n projectRoot: string,\n): Promise<void> {\n refs.set('AGENTS.md', `${AB_RULES}/_root.md`);\n refs.set('.windsurfrules', `${AB_RULES}/_root.md`);\n await addScopedAgentsMappings(refs, projectRoot);\n for (const absPath of await listFiles(projectRoot, '.windsurf/rules')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_RULES, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.windsurf/workflows')) {\n addSimpleFileMapping(refs, rel(projectRoot, absPath), AB_COMMANDS, '.md');\n }\n for (const absPath of await listFiles(projectRoot, '.windsurf/skills')) {\n addSkillLikeMapping(refs, rel(projectRoot, absPath), '.windsurf/skills');\n }\n}\n","export const JUNIE_DIR = '.junie';\nexport const JUNIE_GUIDELINES = `${JUNIE_DIR}/guidelines.md`;\nexport const JUNIE_CI_GUIDELINES = `${JUNIE_DIR}/ci-guidelines.md`;\nexport const JUNIE_DOT_AGENTS = `${JUNIE_DIR}/AGENTS.md`;\nexport const JUNIE_AGENTS_FALLBACK = 'AGENTS.md';\nexport const JUNIE_MCP_DIR = `${JUNIE_DIR}/mcp`;\nexport const JUNIE_MCP_FILE = `${JUNIE_MCP_DIR}/mcp.json`;\nexport const JUNIE_SKILLS_DIR = `${JUNIE_DIR}/skills`;\nexport const JUNIE_RULES_DIR = `${JUNIE_DIR}/rules`;\nexport const JUNIE_COMMANDS_DIR = `${JUNIE_DIR}/commands`;\nexport const JUNIE_AGENTS_DIR = `${JUNIE_DIR}/agents`;\nexport const JUNIE_IGNORE = '.aiignore';\n","import { basename, dirname, join, relative } from 'node:path';\nimport { readDirRecursive } from '../utils/fs.js';\nimport {\n CODEX_COMMAND_SKILL_PREFIX,\n LEGACY_CODEX_COMMAND_SKILL_PREFIX,\n} from '../targets/codex-cli/command-skill.js';\nimport {\n PROJECTED_AGENT_SKILL_PREFIX,\n LEGACY_PROJECTED_AGENT_SKILL_PREFIX,\n} from '../targets/projected-agent-skill.js';\n\nconst AB_RULES = '.agentsbridge/rules';\nconst AB_COMMANDS = '.agentsbridge/commands';\nconst AB_AGENTS = '.agentsbridge/agents';\nconst AB_SKILLS = '.agentsbridge/skills';\n\nexport function rel(projectRoot: string, absPath: string): string {\n return relative(projectRoot, absPath).replace(/\\\\/g, '/');\n}\n\nexport async function listFiles(projectRoot: string, dir: string): Promise<string[]> {\n return readDirRecursive(join(projectRoot, dir)).catch(() => []);\n}\n\nexport function addDirectoryMapping(refs: Map<string, string>, from: string, to: string): void {\n refs.set(from, to);\n refs.set(`${from}/`, `${to}/`);\n}\n\nfunction addAncestorMappings(\n refs: Map<string, string>,\n fromPath: string,\n toPath: string,\n stopDir: string,\n): void {\n let fromDir = dirname(fromPath);\n let toDir = dirname(toPath);\n while (fromDir !== stopDir && fromDir !== '.') {\n addDirectoryMapping(refs, fromDir, toDir);\n fromDir = dirname(fromDir);\n toDir = dirname(toDir);\n }\n}\n\nexport function addSimpleFileMapping(\n refs: Map<string, string>,\n fromPath: string,\n canonicalDir: string,\n extension: string,\n): void {\n refs.set(fromPath, `${canonicalDir}/${basename(fromPath, extension)}.md`);\n}\n\nexport function addSkillLikeMapping(\n refs: Map<string, string>,\n relPath: string,\n skillsDir: string,\n): void {\n if (!relPath.startsWith(`${skillsDir}/`)) return;\n const rest = relPath.slice(skillsDir.length + 1);\n if (!rest) return;\n\n if (!rest.includes('/')) {\n if (!rest.endsWith('.md') || basename(rest) === 'SKILL.md') return;\n const name = basename(rest, '.md');\n refs.set(relPath, `${AB_SKILLS}/${name}/SKILL.md`);\n return;\n }\n\n const [dirName, ...tail] = rest.split('/');\n const filePath = tail.join('/');\n if (!dirName || !filePath) return;\n\n const commandPrefix = dirName.startsWith(CODEX_COMMAND_SKILL_PREFIX)\n ? CODEX_COMMAND_SKILL_PREFIX\n : dirName.startsWith(LEGACY_CODEX_COMMAND_SKILL_PREFIX)\n ? LEGACY_CODEX_COMMAND_SKILL_PREFIX\n : null;\n if (commandPrefix && filePath === 'SKILL.md') {\n refs.set(relPath, `${AB_COMMANDS}/${dirName.slice(commandPrefix.length)}.md`);\n return;\n }\n const agentPrefix = dirName.startsWith(PROJECTED_AGENT_SKILL_PREFIX)\n ? PROJECTED_AGENT_SKILL_PREFIX\n : dirName.startsWith(LEGACY_PROJECTED_AGENT_SKILL_PREFIX)\n ? LEGACY_PROJECTED_AGENT_SKILL_PREFIX\n : null;\n if (agentPrefix && filePath === 'SKILL.md') {\n refs.set(relPath, `${AB_AGENTS}/${dirName.slice(agentPrefix.length)}.md`);\n return;\n }\n\n const canonicalBase = `${AB_SKILLS}/${dirName}`;\n if (filePath === 'SKILL.md') addDirectoryMapping(refs, `${skillsDir}/${dirName}`, canonicalBase);\n const canonicalPath = `${canonicalBase}/${filePath}`;\n refs.set(relPath, canonicalPath);\n if (filePath !== 'SKILL.md') {\n addAncestorMappings(refs, relPath, canonicalPath, `${skillsDir}/${dirName}`);\n }\n}\n\n/** Paths that are target root artifacts, not scoped rules. Must not overwrite explicit mappings. */\nconst SCOPED_AGENTS_SKIP_DIRS = new Set([\n '.agents',\n '.claude',\n '.clinerules',\n '.cline',\n '.continue',\n '.cursor',\n '.gemini',\n '.github',\n '.junie',\n '.windsurf',\n]);\n\nexport async function addScopedAgentsMappings(\n refs: Map<string, string>,\n projectRoot: string,\n): Promise<void> {\n const files = await listFiles(projectRoot, '.');\n for (const absPath of files) {\n const relPath = rel(projectRoot, absPath);\n const isNestedAgents =\n relPath.endsWith('/AGENTS.md') &&\n relPath !== 'AGENTS.md' &&\n !relPath.endsWith('/AGENTS.override.md');\n const isNestedOverride =\n relPath.endsWith('/AGENTS.override.md') && relPath !== 'AGENTS.override.md';\n if (!isNestedAgents && !isNestedOverride) continue;\n const parentDir = dirname(relPath);\n if (SCOPED_AGENTS_SKIP_DIRS.has(parentDir)) continue;\n const ruleName = parentDir.replace(/\\//g, '-');\n refs.set(relPath, `${AB_RULES}/${ruleName}.md`);\n }\n}\n","import type { CanonicalCommand } from '../../core/types.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\n\nexport const CODEX_COMMAND_SKILL_PREFIX = 'ab-command-';\nexport const LEGACY_CODEX_COMMAND_SKILL_PREFIX = 'ab-command-';\n\ninterface ParsedCommandSkill {\n name: string;\n description: string;\n allowedTools: string[];\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.filter((entry): entry is string => typeof entry === 'string' && entry.length > 0);\n }\n if (typeof value === 'string' && value.length > 0) {\n return value\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nexport function commandSkillDirName(name: string): string {\n return `${CODEX_COMMAND_SKILL_PREFIX}${name}`;\n}\n\nexport function serializeCommandSkill(command: CanonicalCommand): string {\n const frontmatter: Record<string, unknown> = {\n name: commandSkillDirName(command.name),\n description: command.description || undefined,\n 'x-agentsbridge-kind': 'command',\n 'x-agentsbridge-name': command.name,\n 'x-agentsbridge-allowed-tools':\n command.allowedTools.length > 0 ? command.allowedTools : undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n if (frontmatter['x-agentsbridge-allowed-tools'] === undefined) {\n delete frontmatter['x-agentsbridge-allowed-tools'];\n }\n return serializeFrontmatter(frontmatter, command.body.trim() || '');\n}\n\nexport function parseCommandSkillFrontmatter(\n frontmatter: Record<string, unknown>,\n dirName: string,\n): ParsedCommandSkill | null {\n if (frontmatter['x-agentsbridge-kind'] !== 'command') return null;\n\n const metadataName =\n typeof frontmatter['x-agentsbridge-name'] === 'string'\n ? frontmatter['x-agentsbridge-name']\n : '';\n const derivedName = dirName.startsWith(CODEX_COMMAND_SKILL_PREFIX)\n ? dirName.slice(CODEX_COMMAND_SKILL_PREFIX.length)\n : dirName.startsWith(LEGACY_CODEX_COMMAND_SKILL_PREFIX)\n ? dirName.slice(LEGACY_CODEX_COMMAND_SKILL_PREFIX.length)\n : '';\n const name = (metadataName || derivedName).trim();\n if (!name) return null;\n\n return {\n name,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n allowedTools: toStringArray(frontmatter['x-agentsbridge-allowed-tools']),\n };\n}\n\nexport function serializeImportedCommand(command: ParsedCommandSkill, body: string): string {\n const frontmatter: Record<string, unknown> = {\n description: command.description || undefined,\n 'allowed-tools': command.allowedTools.length > 0 ? command.allowedTools : undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n if (frontmatter['allowed-tools'] === undefined) delete frontmatter['allowed-tools'];\n return serializeFrontmatter(frontmatter, body.trim() || '');\n}\n","import type { CanonicalAgent, Hooks } from '../core/types.js';\nimport { serializeFrontmatter } from '../utils/markdown.js';\n\nexport const PROJECTED_AGENT_SKILL_PREFIX = 'ab-agent-';\nexport const LEGACY_PROJECTED_AGENT_SKILL_PREFIX = 'ab-agent-';\n\ninterface ParsedProjectedAgent {\n name: string;\n description: string;\n tools: string[];\n disallowedTools: string[];\n model: string;\n permissionMode: string;\n maxTurns: number;\n mcpServers: string[];\n hooks: Hooks;\n skills: string[];\n memory: string;\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.filter((entry): entry is string => typeof entry === 'string' && entry.length > 0);\n }\n if (typeof value === 'string' && value.length > 0) {\n return value\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nfunction toHooks(value: unknown): Hooks {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {};\n const hooks: Hooks = {};\n for (const [event, entries] of Object.entries(value)) {\n if (!Array.isArray(entries)) continue;\n hooks[event] = entries.filter(\n (entry): entry is NonNullable<Hooks[string]>[number] =>\n entry !== null &&\n typeof entry === 'object' &&\n typeof (entry as Record<string, unknown>).matcher === 'string' &&\n typeof (entry as Record<string, unknown>).command === 'string',\n );\n }\n return hooks;\n}\n\nexport function projectedAgentSkillDirName(name: string): string {\n return `${PROJECTED_AGENT_SKILL_PREFIX}${name}`;\n}\n\nexport function serializeProjectedAgentSkill(agent: CanonicalAgent): string {\n const frontmatter: Record<string, unknown> = {\n name: projectedAgentSkillDirName(agent.name),\n description: agent.description || undefined,\n 'x-agentsbridge-kind': 'agent',\n 'x-agentsbridge-name': agent.name,\n 'x-agentsbridge-tools': agent.tools.length > 0 ? agent.tools : undefined,\n 'x-agentsbridge-disallowed-tools':\n agent.disallowedTools.length > 0 ? agent.disallowedTools : undefined,\n 'x-agentsbridge-model': agent.model || undefined,\n 'x-agentsbridge-permission-mode': agent.permissionMode || undefined,\n 'x-agentsbridge-max-turns': agent.maxTurns > 0 ? agent.maxTurns : undefined,\n 'x-agentsbridge-mcp-servers': agent.mcpServers.length > 0 ? agent.mcpServers : undefined,\n 'x-agentsbridge-hooks': Object.keys(agent.hooks).length > 0 ? agent.hooks : undefined,\n 'x-agentsbridge-skills': agent.skills.length > 0 ? agent.skills : undefined,\n 'x-agentsbridge-memory': agent.memory || undefined,\n };\n Object.keys(frontmatter).forEach((key) => {\n if (frontmatter[key] === undefined) delete frontmatter[key];\n });\n return serializeFrontmatter(frontmatter, agent.body.trim() || '');\n}\n\nexport function parseProjectedAgentSkillFrontmatter(\n frontmatter: Record<string, unknown>,\n dirName: string,\n): ParsedProjectedAgent | null {\n if (frontmatter['x-agentsbridge-kind'] !== 'agent') return null;\n\n const metadataName =\n typeof frontmatter['x-agentsbridge-name'] === 'string'\n ? frontmatter['x-agentsbridge-name']\n : '';\n const derivedName = dirName.startsWith(PROJECTED_AGENT_SKILL_PREFIX)\n ? dirName.slice(PROJECTED_AGENT_SKILL_PREFIX.length)\n : dirName.startsWith(LEGACY_PROJECTED_AGENT_SKILL_PREFIX)\n ? dirName.slice(LEGACY_PROJECTED_AGENT_SKILL_PREFIX.length)\n : '';\n const name = (metadataName || derivedName).trim();\n if (!name) return null;\n\n return {\n name,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n tools: toStringArray(frontmatter['x-agentsbridge-tools']),\n disallowedTools: toStringArray(frontmatter['x-agentsbridge-disallowed-tools']),\n model:\n typeof frontmatter['x-agentsbridge-model'] === 'string'\n ? frontmatter['x-agentsbridge-model']\n : '',\n permissionMode:\n typeof frontmatter['x-agentsbridge-permission-mode'] === 'string'\n ? frontmatter['x-agentsbridge-permission-mode']\n : '',\n maxTurns:\n typeof frontmatter['x-agentsbridge-max-turns'] === 'number'\n ? frontmatter['x-agentsbridge-max-turns']\n : Number(frontmatter['x-agentsbridge-max-turns'] ?? 0),\n mcpServers: toStringArray(frontmatter['x-agentsbridge-mcp-servers']),\n hooks: toHooks(frontmatter['x-agentsbridge-hooks']),\n skills: toStringArray(frontmatter['x-agentsbridge-skills']),\n memory:\n typeof frontmatter['x-agentsbridge-memory'] === 'string'\n ? frontmatter['x-agentsbridge-memory']\n : '',\n };\n}\n\nexport function serializeImportedAgent(agent: ParsedProjectedAgent, body: string): string {\n const frontmatter: Record<string, unknown> = {\n name: agent.name,\n description: agent.description || undefined,\n tools: agent.tools.length > 0 ? agent.tools : undefined,\n disallowedTools: agent.disallowedTools.length > 0 ? agent.disallowedTools : undefined,\n model: agent.model || undefined,\n permissionMode: agent.permissionMode || undefined,\n maxTurns: agent.maxTurns > 0 ? agent.maxTurns : undefined,\n mcpServers: agent.mcpServers.length > 0 ? agent.mcpServers : undefined,\n hooks: Object.keys(agent.hooks).length > 0 ? agent.hooks : undefined,\n skills: agent.skills.length > 0 ? agent.skills : undefined,\n memory: agent.memory || undefined,\n };\n Object.keys(frontmatter).forEach((key) => {\n if (frontmatter[key] === undefined) delete frontmatter[key];\n });\n return serializeFrontmatter(frontmatter, body.trim() || '');\n}\n","import {\n buildClaudeCodeImportPaths,\n buildCursorImportPaths,\n buildCopilotImportPaths,\n buildContinueImportPaths,\n buildJunieImportPaths,\n buildGeminiCliImportPaths,\n buildClineImportPaths,\n buildCodexCliImportPaths,\n buildWindsurfImportPaths,\n} from './import-reference-map-targets.js';\n\nexport async function buildImportReferenceMap(\n target: string,\n projectRoot: string,\n): Promise<Map<string, string>> {\n const refs = new Map<string, string>();\n\n if (target === 'claude-code') {\n await buildClaudeCodeImportPaths(refs, projectRoot);\n return refs;\n }\n if (target === 'cursor') {\n await buildCursorImportPaths(refs, projectRoot);\n return refs;\n }\n if (target === 'copilot') {\n await buildCopilotImportPaths(refs, projectRoot);\n return refs;\n }\n if (target === 'continue') {\n await buildContinueImportPaths(refs, projectRoot);\n return refs;\n }\n if (target === 'junie') {\n await buildJunieImportPaths(refs, projectRoot);\n return refs;\n }\n if (target === 'gemini-cli') {\n await buildGeminiCliImportPaths(refs, projectRoot);\n return refs;\n }\n if (target === 'cline') {\n await buildClineImportPaths(refs, projectRoot);\n return refs;\n }\n if (target === 'codex-cli') {\n await buildCodexCliImportPaths(refs, projectRoot);\n return refs;\n }\n if (target === 'windsurf') {\n await buildWindsurfImportPaths(refs, projectRoot);\n return refs;\n }\n\n return refs;\n}\n","import { posix, win32 } from 'node:path';\n\nconst WINDOWS_ABSOLUTE_PATH = /^[A-Za-z]:[\\\\/]/;\nconst TRAILING_PUNCTUATION = /[.!?:;]+$/;\n\nexport { WINDOWS_ABSOLUTE_PATH };\n\nexport function pathApi(projectRoot: string): typeof posix {\n return projectRoot.includes('\\\\') || WINDOWS_ABSOLUTE_PATH.test(projectRoot) ? win32 : posix;\n}\n\nexport function normalizeSeparators(token: string): string {\n return token.replace(/\\\\/g, '/');\n}\n\nexport function normalizeForProject(projectRoot: string, filePath: string): string {\n const api = pathApi(projectRoot);\n const normalized = api.normalize(\n api === win32 ? filePath.replace(/\\//g, '\\\\') : normalizeSeparators(filePath),\n );\n return normalized.endsWith(api.sep) && normalized.length > 1\n ? normalized.slice(0, -1)\n : normalized;\n}\n\nexport function isAbsoluteForProject(projectRoot: string, filePath: string): boolean {\n return pathApi(projectRoot).isAbsolute(filePath) || WINDOWS_ABSOLUTE_PATH.test(filePath);\n}\n\nexport function stripTrailingPunctuation(token: string): { candidate: string; suffix: string } {\n let candidate = token;\n let suffix = '';\n while (TRAILING_PUNCTUATION.test(candidate)) {\n suffix = candidate.at(-1)! + suffix;\n candidate = candidate.slice(0, -1);\n }\n return { candidate, suffix };\n}\n\nexport function rootFallbackPath(token: string, projectRoot: string): string | null {\n const api = pathApi(projectRoot);\n const stripped = token.replace(/^(\\.\\.\\/)+/, '').replace(/^\\.\\//, '');\n return stripped && stripped !== token\n ? normalizeForProject(projectRoot, api.join(projectRoot, stripped))\n : null;\n}\n","import { existsSync, realpathSync } from 'node:fs';\nimport { isAbsolute, win32 } from 'node:path';\nimport {\n WINDOWS_ABSOLUTE_PATH,\n pathApi,\n normalizeSeparators,\n normalizeForProject,\n isAbsoluteForProject,\n rootFallbackPath,\n} from './path-helpers.js';\n\nconst ROOT_RELATIVE_PREFIXES = [\n '.agentsbridge/',\n '.claude/',\n '.cursor/',\n '.github/',\n '.continue/',\n '.junie/',\n '.gemini/',\n '.clinerules/',\n '.cline/',\n '.agents/',\n '.windsurf/',\n];\nconst NON_REWRITABLE_BARE_FILES = new Set([\n 'AGENTS.md',\n 'CLAUDE.md',\n 'GEMINI.md',\n 'codex.md',\n '.windsurfrules',\n '.cursorrules',\n]);\nconst EXTERNAL_REF_PATTERNS = [\n /\\b[A-Za-z][A-Za-z0-9+.-]+:[^\\s<>()\\]]+/g,\n /\\b[\\w.-]+@[\\w.-]+:[^\\s<>()\\]]+/g,\n /\\b[\\w.+-]+@[\\w.-]+\\.[A-Za-z]{2,}\\b/g,\n /\\/\\/[A-Za-z0-9][\\w.-]*\\.[A-Za-z]{2,}[^\\s<>()\\]]*/g,\n];\nconst FENCED_CODE_BLOCK = /^(?:```|~~~)[^\\n]*\\n[\\s\\S]*?^(?:```|~~~)/gm;\n\nexport const PATH_TOKEN =\n /(?:\\.\\.[\\\\/]|\\.\\/|\\.\\\\|\\/[A-Za-z0-9._-]|[A-Za-z]:[\\\\/][A-Za-z0-9._-]|\\.agentsbridge[\\\\/]|\\.claude[\\\\/]|\\.cursor[\\\\/]|\\.github[\\\\/]|\\.continue[\\\\/]|\\.junie[\\\\/]|\\.gemini[\\\\/]|\\.clinerules[\\\\/]|\\.cline[\\\\/]|\\.agents[\\\\/]|\\.windsurf[\\\\/]|(?:[A-Za-z0-9._-]+[\\\\/])+|[A-Za-z0-9._-]+\\.[A-Za-z0-9._-]+)[A-Za-z0-9._@%+~:\\\\/-]*/g;\nexport const LINE_NUMBER_SUFFIX = /(?::(\\d+)){1,2}$/;\n\nexport function resolveProjectPath(\n token: string,\n projectRoot: string,\n sourceFile: string,\n): string[] {\n const api = pathApi(projectRoot);\n const normalizedProjectRoot = normalizeForProject(projectRoot, projectRoot);\n const normalizedSourceFile = normalizeForProject(projectRoot, sourceFile);\n const normalizedToken = normalizeSeparators(token);\n\n if (WINDOWS_ABSOLUTE_PATH.test(token)) {\n const windowsToken = normalizeForProject(projectRoot, token);\n if (api === win32 || windowsToken.startsWith(`${normalizedProjectRoot}${api.sep}`)) {\n return [windowsToken];\n }\n return [windowsToken];\n }\n if (isAbsolute(token)) {\n const absoluteToken = normalizeForProject(projectRoot, token);\n if (absoluteToken.startsWith(normalizedProjectRoot) || existsSync(token))\n return [absoluteToken];\n return [normalizeForProject(projectRoot, api.join(projectRoot, token))];\n }\n if (normalizedToken.startsWith('./') || normalizedToken.startsWith('../')) {\n const sourceRelativePath = normalizeForProject(\n projectRoot,\n api.join(api.dirname(normalizedSourceFile), normalizedToken),\n );\n const fallbackPath = rootFallbackPath(normalizedToken, normalizedProjectRoot);\n const relativeToRoot = api.relative(normalizedProjectRoot, sourceRelativePath);\n return relativeToRoot.startsWith('..') && fallbackPath && fallbackPath !== sourceRelativePath\n ? [sourceRelativePath, fallbackPath]\n : [sourceRelativePath];\n }\n if (ROOT_RELATIVE_PREFIXES.some((prefix) => normalizedToken.startsWith(prefix))) {\n return [normalizeForProject(projectRoot, api.join(normalizedProjectRoot, normalizedToken))];\n }\n if (normalizedToken.includes('/')) {\n return [\n normalizeForProject(projectRoot, api.join(normalizedProjectRoot, normalizedToken)),\n normalizeForProject(\n projectRoot,\n api.join(api.dirname(normalizedSourceFile), normalizedToken),\n ),\n ];\n }\n if (NON_REWRITABLE_BARE_FILES.has(normalizedToken)) return [];\n if (normalizedToken.includes('.')) {\n return [\n normalizeForProject(\n projectRoot,\n api.join(api.dirname(normalizedSourceFile), normalizedToken),\n ),\n ];\n }\n return [];\n}\n\nexport function expandResolvedPaths(projectRoot: string, resolvedPath: string): string[] {\n const expanded = [resolvedPath];\n if (!isAbsoluteForProject(projectRoot, resolvedPath) || !existsSync(resolvedPath))\n return expanded;\n try {\n const realPaths = [realpathSync(resolvedPath), realpathSync.native(resolvedPath)];\n for (const realPath of realPaths) {\n if (realPath !== resolvedPath && !expanded.includes(realPath)) {\n expanded.unshift(realPath);\n }\n }\n } catch {\n // Keep the original path when realpath lookup fails.\n }\n return expanded;\n}\n\nexport function isGlobAdjacent(content: string, start: number, end: number): boolean {\n const prev = start > 0 ? content.at(start - 1) : '';\n const next = end < content.length ? content.at(end) : '';\n return prev === '*' || next === '*';\n}\n\nexport function protectedRanges(content: string): Array<[number, number]> {\n const ranges: Array<[number, number]> = [];\n for (const pattern of EXTERNAL_REF_PATTERNS) {\n for (const match of content.matchAll(pattern)) {\n ranges.push([match.index ?? 0, (match.index ?? 0) + match[0].length]);\n }\n }\n for (const match of content.matchAll(FENCED_CODE_BLOCK)) {\n ranges.push([match.index ?? 0, (match.index ?? 0) + match[0].length]);\n }\n return ranges;\n}\n","import { pathApi, normalizeForProject, stripTrailingPunctuation } from './path-helpers.js';\nimport {\n PATH_TOKEN,\n LINE_NUMBER_SUFFIX,\n resolveProjectPath,\n expandResolvedPaths,\n isGlobAdjacent,\n protectedRanges,\n} from './link-rebaser-helpers.js';\n\nexport interface RewriteFileLinksInput {\n content: string;\n projectRoot: string;\n sourceFile: string;\n destinationFile: string;\n translatePath: (absolutePath: string) => string;\n pathExists: (absolutePath: string) => boolean;\n}\n\nexport interface RewriteFileLinksResult {\n content: string;\n missing: string[];\n}\n\nfunction toProjectRootPath(\n projectRoot: string,\n absolutePath: string,\n keepSlash: boolean,\n): string | null {\n const api = pathApi(projectRoot);\n const relPath = api\n .relative(\n normalizeForProject(projectRoot, projectRoot),\n normalizeForProject(projectRoot, absolutePath),\n )\n .replace(/\\\\/g, '/');\n if (relPath.startsWith('..')) return null;\n const rewritten = relPath.length > 0 ? relPath : '.';\n return keepSlash && !rewritten.endsWith('/') ? `${rewritten}/` : rewritten;\n}\n\nexport function rewriteFileLinks(input: RewriteFileLinksInput): RewriteFileLinksResult {\n const missing = new Set<string>();\n const protectedRefRanges = protectedRanges(input.content);\n const content = input.content.replace(PATH_TOKEN, (match, offset, fullContent) => {\n if (protectedRefRanges.some(([start, end]) => offset >= start && offset < end)) return match;\n if (isGlobAdjacent(fullContent, offset, offset + match.length)) return match;\n const { candidate: punctStripped, suffix } = stripTrailingPunctuation(match);\n if (!punctStripped) return match;\n\n const lineNumMatch = LINE_NUMBER_SUFFIX.exec(punctStripped);\n const candidate = lineNumMatch ? punctStripped.slice(0, lineNumMatch.index) : punctStripped;\n const lineNumSuffix = lineNumMatch ? lineNumMatch[0] : '';\n if (!candidate) return match;\n\n let translatedPath: string | null = null;\n let matchedPath = false;\n for (const resolvedPath of resolveProjectPath(candidate, input.projectRoot, input.sourceFile)) {\n for (const candidatePath of expandResolvedPaths(input.projectRoot, resolvedPath)) {\n const normalizedResolvedPath = normalizeForProject(input.projectRoot, candidatePath);\n const normalizedTranslatedPath = normalizeForProject(\n input.projectRoot,\n input.translatePath(normalizedResolvedPath),\n );\n if (\n input.pathExists(normalizedResolvedPath) ||\n input.pathExists(normalizedTranslatedPath)\n ) {\n translatedPath = normalizedTranslatedPath;\n matchedPath = true;\n break;\n }\n if (!translatedPath) translatedPath = normalizedTranslatedPath;\n }\n if (matchedPath) break;\n }\n if (!matchedPath || !translatedPath) {\n if (translatedPath) missing.add(translatedPath);\n return match;\n }\n\n const rewritten = toProjectRootPath(input.projectRoot, translatedPath, candidate.endsWith('/'));\n if (!rewritten) return match;\n return `${rewritten}${lineNumSuffix}${suffix}`;\n });\n\n return { content, missing: [...missing] };\n}\n","import { basename } from 'node:path';\nimport { readFileSafe } from '../utils/fs.js';\nimport { parseFrontmatter, serializeFrontmatter } from '../utils/markdown.js';\n\nexport interface ImportedCommandMetadata {\n description?: string;\n hasDescription: boolean;\n allowedTools?: string[];\n hasAllowedTools: boolean;\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value\n .filter((entry): entry is string => typeof entry === 'string')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n if (typeof value === 'string') {\n return value\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nasync function readExistingFrontmatter(path: string): Promise<Record<string, unknown>> {\n const existing = await readFileSafe(path);\n if (!existing) return {};\n return parseFrontmatter(existing).frontmatter;\n}\n\nfunction pruneUndefined(frontmatter: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(frontmatter).filter(([, value]) => value !== undefined));\n}\n\nfunction serializeCanonicalRuleFrontmatter(\n destinationPath: string,\n frontmatter: Record<string, unknown>,\n): Record<string, unknown> {\n const isRootRule = basename(destinationPath, '.md') === '_root';\n const rest = { ...frontmatter };\n delete (rest as Record<string, unknown>).root;\n return {\n root: isRootRule,\n ...rest,\n };\n}\n\nexport async function serializeImportedRuleWithFallback(\n destinationPath: string,\n importedFrontmatter: Record<string, unknown>,\n body: string,\n): Promise<string> {\n const existingFrontmatter = await readExistingFrontmatter(destinationPath);\n const mergedFrontmatter = serializeCanonicalRuleFrontmatter(\n destinationPath,\n pruneUndefined({ ...existingFrontmatter, ...importedFrontmatter }),\n );\n return serializeFrontmatter(mergedFrontmatter, body.trim() || '');\n}\n\nexport async function serializeImportedCommandWithFallback(\n destinationPath: string,\n imported: ImportedCommandMetadata,\n body: string,\n): Promise<string> {\n const existingFrontmatter = await readExistingFrontmatter(destinationPath);\n const existingAllowedTools = (() => {\n const fromCamel = toStringArray(existingFrontmatter.allowedTools);\n return fromCamel.length > 0 ? fromCamel : toStringArray(existingFrontmatter['allowed-tools']);\n })();\n const description = imported.hasDescription\n ? (imported.description ?? '')\n : typeof existingFrontmatter.description === 'string'\n ? existingFrontmatter.description\n : '';\n const allowedTools = imported.hasAllowedTools\n ? (imported.allowedTools ?? [])\n : existingAllowedTools;\n\n return serializeFrontmatter(\n pruneUndefined({\n description: description || undefined,\n 'allowed-tools': allowedTools.length > 0 ? allowedTools : undefined,\n }),\n body.trim() || '',\n );\n}\n","import { dirname } from 'node:path';\nimport type { ImportResult } from '../core/types.js';\nimport { readDirRecursive, readFileSafe, writeFileAtomic, mkdirp } from '../utils/fs.js';\n\nexport interface ImportFileMapping {\n destPath: string;\n toPath: string;\n feature: string;\n content: string;\n}\n\nexport interface ImportFileEntry {\n srcPath: string;\n content: string;\n normalizeTo: (destinationFile: string, sourceContent?: string) => string;\n}\n\nexport interface ImportFileOptions {\n srcDir: string;\n destDir: string;\n extensions: string[];\n fromTool: string;\n normalize: (content: string, sourceFile: string, destinationFile: string) => string;\n mapEntry: (\n entry: ImportFileEntry,\n ) => Promise<ImportFileMapping | null> | ImportFileMapping | null;\n}\n\nfunction matchesExtension(path: string, extensions: string[]): boolean {\n return extensions.some((extension) => path.endsWith(extension));\n}\n\nexport async function importFileDirectory(opts: ImportFileOptions): Promise<ImportResult[]> {\n const files = await readDirRecursive(opts.srcDir);\n const matchedFiles = files.filter((path) => matchesExtension(path, opts.extensions));\n const results: ImportResult[] = [];\n\n for (const srcPath of matchedFiles) {\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n\n const mapping = await opts.mapEntry({\n srcPath,\n content,\n normalizeTo: (destinationFile, sourceContent = content) =>\n opts.normalize(sourceContent, srcPath, destinationFile),\n });\n if (!mapping) continue;\n\n await mkdirp(dirname(mapping.destPath));\n await writeFileAtomic(mapping.destPath, mapping.content);\n results.push({\n fromTool: opts.fromTool,\n fromPath: srcPath,\n toPath: mapping.toPath,\n feature: mapping.feature,\n });\n }\n\n return results;\n}\n","import { basename, join } from 'node:path';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { serializeImportedRuleWithFallback } from '../import-metadata.js';\nimport type { ImportFileMapping } from '../import-orchestrator.js';\n\nconst AB_RULES = '.agentsbridge/rules';\nconst AB_COMMANDS = '.agentsbridge/commands';\nconst AB_AGENTS = '.agentsbridge/agents';\n\nexport async function mapClaudeRuleFile(\n srcPath: string,\n destDir: string,\n normalizeTo: (destinationFile: string) => string,\n): Promise<ImportFileMapping> {\n const name = basename(srcPath, '.md');\n const destPath = join(destDir, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n return {\n destPath,\n toPath: `${AB_RULES}/${name}.md`,\n feature: 'rules',\n content: await serializeImportedRuleWithFallback(\n destPath,\n { ...frontmatter, root: false },\n body,\n ),\n };\n}\n\nexport function mapClaudeMarkdownFile(\n srcPath: string,\n destDir: string,\n feature: 'commands' | 'agents',\n normalizeTo: (destinationFile: string) => string,\n): ImportFileMapping {\n const name = basename(srcPath, '.md');\n const destPath = join(destDir, `${name}.md`);\n const basePath = feature === 'commands' ? AB_COMMANDS : AB_AGENTS;\n return {\n destPath,\n toPath: `${basePath}/${name}.md`,\n feature,\n content: normalizeTo(destPath),\n };\n}\n","/**\n * Claude Code settings import helpers — MCP, permissions, and hooks processing.\n */\n\nimport { join, dirname } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { getHookCommand, getHookPrompt, hasHookText } from '../../core/hook-command.js';\nimport { readFileSafe, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { stringify as yamlStringify } from 'yaml';\n\nconst CLAUDE_SETTINGS = '.claude/settings.json';\nconst CLAUDE_MCP_JSON = '.mcp.json';\nconst AB_MCP = '.agentsbridge/mcp.json';\nconst AB_PERMISSIONS = '.agentsbridge/permissions.yaml';\nconst AB_HOOKS = '.agentsbridge/hooks.yaml';\n\n/**\n * Convert Claude Code settings.json hooks format to canonical hooks.yaml format.\n * Claude Code: { event: [{ matcher, hooks: [{ type, command, timeout }] }] }\n * Canonical: { event: [{ matcher, command, timeout }] }\n */\nexport function claudeHooksToCanonical(hooks: Record<string, unknown>): Record<string, unknown[]> {\n const result: Record<string, unknown[]> = {};\n for (const [event, entries] of Object.entries(hooks)) {\n if (!Array.isArray(entries)) continue;\n const canonical: Array<Record<string, unknown>> = [];\n for (const entry of entries) {\n if (!entry || typeof entry !== 'object') continue;\n const e = entry as Record<string, unknown>;\n const matcher = typeof e.matcher === 'string' ? e.matcher : '';\n if (!matcher) continue;\n const hookList = Array.isArray(e.hooks) ? (e.hooks as Array<Record<string, unknown>>) : [];\n for (const hook of hookList) {\n const type = hook.type === 'prompt' ? 'prompt' : 'command';\n if (!hasHookText({ ...hook, type })) continue;\n const value =\n type === 'prompt'\n ? getHookPrompt(hook) || getHookCommand(hook)\n : getHookCommand(hook) || getHookPrompt(hook);\n const item: Record<string, unknown> = { matcher, type, command: value };\n if (typeof hook.timeout === 'number') item.timeout = hook.timeout;\n canonical.push(item);\n }\n }\n if (canonical.length > 0) result[event] = canonical;\n }\n return result;\n}\n\nexport async function importMcpJson(projectRoot: string, results: ImportResult[]): Promise<void> {\n const mcpPath = join(projectRoot, CLAUDE_MCP_JSON);\n const content = await readFileSafe(mcpPath);\n if (content === null) return;\n\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(content) as Record<string, unknown>;\n } catch {\n return;\n }\n\n if (parsed.mcpServers && typeof parsed.mcpServers === 'object') {\n const mcpContent = JSON.stringify({ mcpServers: parsed.mcpServers }, null, 2);\n const destPath = join(projectRoot, AB_MCP);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, mcpContent);\n results.push({\n fromTool: 'claude-code',\n fromPath: mcpPath,\n toPath: AB_MCP,\n feature: 'mcp',\n });\n }\n}\n\nexport async function importSettings(projectRoot: string, results: ImportResult[]): Promise<void> {\n const settingsPath = join(projectRoot, CLAUDE_SETTINGS);\n const content = await readFileSafe(settingsPath);\n if (!content) return;\n\n let settings: Record<string, unknown>;\n try {\n settings = JSON.parse(content) as Record<string, unknown>;\n } catch {\n return;\n }\n\n const alreadyImportedMcp = results.some((r) => r.feature === 'mcp');\n if (!alreadyImportedMcp && settings.mcpServers && typeof settings.mcpServers === 'object') {\n const mcpContent = JSON.stringify({ mcpServers: settings.mcpServers }, null, 2);\n const destPath = join(projectRoot, AB_MCP);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, mcpContent);\n results.push({\n fromTool: 'claude-code',\n fromPath: settingsPath,\n toPath: AB_MCP,\n feature: 'mcp',\n });\n }\n\n const rawPerms = settings.permissions;\n if (rawPerms && typeof rawPerms === 'object' && !Array.isArray(rawPerms)) {\n const perms = rawPerms as Record<string, unknown>;\n const allow = Array.isArray(perms.allow)\n ? (perms.allow as string[]).filter((s) => typeof s === 'string')\n : [];\n const deny = Array.isArray(perms.deny)\n ? (perms.deny as string[]).filter((s) => typeof s === 'string')\n : [];\n if (allow.length > 0 || deny.length > 0) {\n const permContent = yamlStringify({ allow, deny });\n const destPath = join(projectRoot, AB_PERMISSIONS);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, permContent);\n results.push({\n fromTool: 'claude-code',\n fromPath: settingsPath,\n toPath: AB_PERMISSIONS,\n feature: 'permissions',\n });\n }\n }\n\n const rawHooks = settings.hooks;\n if (rawHooks && typeof rawHooks === 'object' && !Array.isArray(rawHooks)) {\n const canonicalHooks = claudeHooksToCanonical(rawHooks as Record<string, unknown>);\n if (Object.keys(canonicalHooks).length > 0) {\n const hooksContent = yamlStringify(canonicalHooks);\n const destPath = join(projectRoot, AB_HOOKS);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, hooksContent);\n results.push({\n fromTool: 'claude-code',\n fromPath: settingsPath,\n toPath: AB_HOOKS,\n feature: 'hooks',\n });\n }\n }\n}\n","type HookLike = {\n command?: unknown;\n prompt?: unknown;\n type?: unknown;\n};\n\nfunction trimString(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nexport function getHookCommand(entry: HookLike): string {\n return trimString(entry.command);\n}\n\nexport function getHookPrompt(entry: HookLike): string {\n return trimString(entry.prompt);\n}\n\nexport function getHookText(entry: HookLike): string {\n const command = getHookCommand(entry);\n const prompt = getHookPrompt(entry);\n return entry.type === 'prompt' ? prompt || command : command || prompt;\n}\n\nexport function hasHookCommand(entry: HookLike): boolean {\n return getHookCommand(entry).length > 0;\n}\n\nexport function hasHookText(entry: HookLike): boolean {\n return getHookText(entry).length > 0;\n}\n","/**\n * Cline target importer: .clinerules (rules + workflows), .clineignore,\n * .cline/mcp_settings.json, .cline/skills into canonical .agentsbridge/.\n * Cline rules may have no frontmatter; add root: true for _root.md on import.\n * Workflows (.clinerules/workflows/*.md) import as canonical commands.\n * AGENTS.md is used as a root fallback when no _root.md is found in .clinerules/.\n */\n\nimport { stat } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { createImportReferenceNormalizer } from '../../core/import-reference-rewriter.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { serializeImportedRuleWithFallback } from '../import-metadata.js';\nimport { importFileDirectory } from '../import-orchestrator.js';\nimport { mapClineRuleFile, mapClineWorkflowFile } from './importer-mappers.js';\nimport { CLINE_RULES_DIR, CLINE_IGNORE, CLINE_WORKFLOWS_DIR } from './constants.js';\nimport { importClineMcp } from './mcp-mapper.js';\nimport { importClineSkills } from './skills-helpers.js';\n\nconst AGENTSBRIDGE_RULES = '.agentsbridge/rules';\nconst AGENTSBRIDGE_COMMANDS = '.agentsbridge/commands';\nconst AGENTSBRIDGE_IGNORE = '.agentsbridge/ignore';\n\n/**\n * Import Cline config into canonical .agentsbridge/.\n * Sources: .clinerules (rules), .clineignore (ignore), .cline/mcp_settings.json (mcp),\n * .cline/skills (skills).\n *\n * @param projectRoot - Project root directory\n * @returns Import results for each imported file\n */\nexport async function importFromCline(projectRoot: string): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n const normalize = await createImportReferenceNormalizer('cline', projectRoot);\n const destRulesDir = join(projectRoot, AGENTSBRIDGE_RULES);\n const clineRulesPath = join(projectRoot, CLINE_RULES_DIR);\n\n // Check if .clinerules is a flat file rather than a directory\n const clineRulesRaw = join(projectRoot, CLINE_RULES_DIR);\n let clineRulesIsFile = false;\n try {\n const clineRulesStat = await stat(clineRulesRaw);\n clineRulesIsFile = clineRulesStat.isFile();\n } catch {\n // path doesn't exist — fine\n }\n\n if (clineRulesIsFile) {\n const flatContent = await readFileSafe(clineRulesRaw);\n if (flatContent !== null) {\n await mkdirp(destRulesDir);\n const destPath = join(destRulesDir, '_root.md');\n const { frontmatter, body } = parseFrontmatter(\n normalize(flatContent, clineRulesRaw, destPath),\n );\n const hasRoot = frontmatter.root === true;\n const outFm = hasRoot ? frontmatter : { ...frontmatter, root: true };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'cline',\n fromPath: clineRulesRaw,\n toPath: `${AGENTSBRIDGE_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n // Skip directory-based rule import; continue with ignore, mcp, skills below\n } else {\n let rootSourcePath: string | null = null;\n const rootPath = join(clineRulesPath, '_root.md');\n const rootContent = await readFileSafe(rootPath);\n if (rootContent === null) {\n // Prefer AGENTS.md as root when present (cline generates root rule there)\n const agentsMdPath = join(projectRoot, 'AGENTS.md');\n const agentsMdContent = await readFileSafe(agentsMdPath);\n if (agentsMdContent !== null) {\n rootSourcePath = agentsMdPath;\n await mkdirp(destRulesDir);\n const destPath = join(destRulesDir, '_root.md');\n const { frontmatter, body } = parseFrontmatter(\n normalize(agentsMdContent, agentsMdPath, destPath),\n );\n const hasRoot = frontmatter.root === true;\n const outFm = hasRoot ? frontmatter : { ...frontmatter, root: true };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'cline',\n fromPath: agentsMdPath,\n toPath: `${AGENTSBRIDGE_RULES}/_root.md`,\n feature: 'rules',\n });\n } else {\n const ruleFiles = await readDirRecursive(clineRulesPath);\n const mdFiles = ruleFiles\n .filter((f) => f.endsWith('.md') && !f.includes('/workflows/'))\n .sort();\n const first = mdFiles[0];\n if (first) {\n const fc = await readFileSafe(first);\n if (fc !== null) {\n rootSourcePath = first;\n await mkdirp(destRulesDir);\n const destPath = join(destRulesDir, '_root.md');\n const { frontmatter, body } = parseFrontmatter(normalize(fc, first, destPath));\n const hasRoot = frontmatter.root === true;\n const outFm = hasRoot ? frontmatter : { ...frontmatter, root: true };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'cline',\n fromPath: first,\n toPath: `${AGENTSBRIDGE_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n }\n }\n } else {\n rootSourcePath = rootPath;\n await mkdirp(destRulesDir);\n const destPath = join(destRulesDir, '_root.md');\n const { frontmatter, body } = parseFrontmatter(normalize(rootContent, rootPath, destPath));\n const hasRoot = frontmatter.root === true;\n const outFm = hasRoot ? frontmatter : { ...frontmatter, root: true };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'cline',\n fromPath: rootPath,\n toPath: `${AGENTSBRIDGE_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n\n results.push(\n ...(await importFileDirectory({\n srcDir: clineRulesPath,\n destDir: destRulesDir,\n extensions: ['.md'],\n fromTool: 'cline',\n normalize,\n mapEntry: async ({ srcPath, normalizeTo }) => {\n if (srcPath === rootSourcePath) return null;\n return mapClineRuleFile(srcPath, destRulesDir, normalizeTo);\n },\n })),\n );\n }\n\n const ignorePath = join(projectRoot, CLINE_IGNORE);\n const ignoreContent = await readFileSafe(ignorePath);\n if (ignoreContent !== null && ignoreContent.trim()) {\n const lines = ignoreContent.split(/\\r?\\n/);\n const patterns: string[] = [];\n for (const line of lines) {\n const t = line.trim();\n if (t && !t.startsWith('#')) patterns.push(t);\n }\n if (patterns.length > 0) {\n await mkdirp(join(projectRoot, '.agentsbridge'));\n const destIgnorePath = join(projectRoot, AGENTSBRIDGE_IGNORE);\n await writeFileAtomic(destIgnorePath, patterns.join('\\n'));\n results.push({\n fromTool: 'cline',\n fromPath: ignorePath,\n toPath: AGENTSBRIDGE_IGNORE,\n feature: 'ignore',\n });\n }\n }\n\n await importClineMcp(projectRoot, results);\n\n // Only import workflows when .clinerules is a directory (not a flat file).\n // When .clinerules is a flat file, .clinerules/workflows is invalid (ENOTDIR).\n const destCommandsDir = join(projectRoot, AGENTSBRIDGE_COMMANDS);\n if (!clineRulesIsFile) {\n results.push(\n ...(await importFileDirectory({\n srcDir: join(projectRoot, CLINE_WORKFLOWS_DIR),\n destDir: destCommandsDir,\n extensions: ['.md'],\n fromTool: 'cline',\n normalize,\n mapEntry: ({ srcPath, normalizeTo }) =>\n mapClineWorkflowFile(srcPath, destCommandsDir, normalizeTo),\n })),\n );\n }\n\n await importClineSkills(projectRoot, results, normalize);\n\n return results;\n}\n","import { basename, join } from 'node:path';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport {\n serializeImportedCommandWithFallback,\n serializeImportedRuleWithFallback,\n} from '../import-metadata.js';\nimport type { ImportFileMapping } from '../import-orchestrator.js';\nimport { toGlobsArray } from '../shared-import-helpers.js';\n\nconst AGENTSBRIDGE_RULES = '.agentsbridge/rules';\nconst AGENTSBRIDGE_COMMANDS = '.agentsbridge/commands';\n\nexport async function mapClineRuleFile(\n srcPath: string,\n destDir: string,\n normalizeTo: (destinationFile: string) => string,\n): Promise<ImportFileMapping | null> {\n if (srcPath.includes('/workflows/')) return null;\n const name = basename(srcPath, '.md');\n if (name === '_root') return null;\n const destPath = join(destDir, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n const globs = toGlobsArray(frontmatter.paths ?? frontmatter.globs);\n const canonicalFm: Record<string, unknown> = {\n root: false,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n globs: globs.length > 0 ? globs : undefined,\n };\n Object.keys(canonicalFm).forEach((key) => {\n if (canonicalFm[key] === undefined) delete canonicalFm[key];\n });\n return {\n destPath,\n toPath: `${AGENTSBRIDGE_RULES}/${name}.md`,\n feature: 'rules',\n content: await serializeImportedRuleWithFallback(destPath, canonicalFm, body),\n };\n}\n\nexport async function mapClineWorkflowFile(\n srcPath: string,\n destDir: string,\n normalizeTo: (destinationFile: string) => string,\n): Promise<ImportFileMapping> {\n const name = basename(srcPath, '.md');\n const destPath = join(destDir, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n const hasFrontmatterDescription = Object.prototype.hasOwnProperty.call(\n frontmatter,\n 'description',\n );\n let description = hasFrontmatterDescription\n ? typeof frontmatter.description === 'string'\n ? frontmatter.description\n : ''\n : '';\n let hasDescription = hasFrontmatterDescription;\n let actualBody = body;\n\n // Cline workflows embed description as first paragraph (no frontmatter).\n // Split \"desc\\n\\nbody\" back into separate fields when no frontmatter description present.\n if (!hasDescription) {\n const doubleNewline = body.indexOf('\\n\\n');\n if (doubleNewline > 0) {\n const firstParagraph = body.slice(0, doubleNewline).trim();\n if (firstParagraph && !firstParagraph.includes('\\n')) {\n description = firstParagraph;\n hasDescription = true;\n actualBody = body.slice(doubleNewline + 2);\n }\n }\n }\n\n return {\n destPath,\n toPath: `${AGENTSBRIDGE_COMMANDS}/${name}.md`,\n feature: 'commands',\n content: await serializeImportedCommandWithFallback(\n destPath,\n {\n description,\n hasDescription,\n allowedTools: [],\n hasAllowedTools:\n Object.prototype.hasOwnProperty.call(frontmatter, 'allowedTools') ||\n Object.prototype.hasOwnProperty.call(frontmatter, 'allowed-tools'),\n },\n actualBody,\n ),\n };\n}\n","export function toGlobsArray(v: unknown): string[] {\n if (Array.isArray(v)) return v.filter((x): x is string => typeof x === 'string');\n if (typeof v === 'string') return v ? [v] : [];\n return [];\n}\n\nexport function toToolsArray(v: unknown): string[] {\n if (Array.isArray(v)) {\n return v\n .filter((x): x is string => typeof x === 'string')\n .map((s) => s.trim())\n .filter(Boolean);\n }\n if (typeof v === 'string') {\n return v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nexport function toStringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((entry): entry is string => typeof entry === 'string')\n : [];\n}\n\nexport function toStringRecord(value: unknown): Record<string, string> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {};\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, string] => typeof entry[1] === 'string',\n ),\n );\n}\n","/**\n * Cline target constants.\n * Cline uses .clinerules (rules), .clineignore, .cline/mcp_settings.json, .cline/skills (skills).\n */\n\n/** Rules directory (all rules as .md) */\nexport const CLINE_RULES_DIR = '.clinerules';\n\n/** Ignore file path */\nexport const CLINE_IGNORE = '.clineignore';\n\n/** MCP settings (Cline-specific path) */\nexport const CLINE_MCP_SETTINGS = '.cline/mcp_settings.json';\n\n/** Skills directory prefix */\nexport const CLINE_SKILLS_DIR = '.cline/skills';\n\n/** Workflows directory (.clinerules/workflows/*.md → canonical commands) */\nexport const CLINE_WORKFLOWS_DIR = '.clinerules/workflows';\n\n/** Root compatibility file (Cline cross-tool; same content as root rule) */\nexport const CLINE_AGENTS_MD = 'AGENTS.md';\n\n/** Hooks directory (.clinerules/hooks/*.sh → canonical hooks) */\nexport const CLINE_HOOKS_DIR = '.clinerules/hooks';\n","/**\n * Cline MCP server mapping helpers — converts Cline MCP settings to canonical format.\n */\n\nimport { join } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport type { McpServer } from '../../core/types.js';\nimport { readFileSafe, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { CLINE_MCP_SETTINGS } from './constants.js';\n\nconst AGENTSBRIDGE_MCP = '.agentsbridge/mcp.json';\n\nexport function mapClineServerToCanonical(raw: unknown): McpServer | null {\n if (!raw || typeof raw !== 'object') return null;\n const obj = raw as Record<string, unknown>;\n const command = typeof obj.command === 'string' ? obj.command : '';\n if (!command) return null;\n const type =\n typeof obj.type === 'string'\n ? obj.type\n : typeof obj.transportType === 'string'\n ? obj.transportType\n : 'stdio';\n const args = Array.isArray(obj.args)\n ? obj.args.filter((x): x is string => typeof x === 'string')\n : [];\n const envRaw = obj.env;\n const env: Record<string, string> =\n envRaw !== null && typeof envRaw === 'object' && !Array.isArray(envRaw)\n ? Object.fromEntries(\n Object.entries(envRaw).filter(\n (entry): entry is [string, string] => typeof entry[1] === 'string',\n ),\n )\n : {};\n const description = typeof obj.description === 'string' ? obj.description : undefined;\n return {\n ...(description !== undefined && { description }),\n type,\n command,\n args,\n env,\n };\n}\n\nexport async function importClineMcp(projectRoot: string, results: ImportResult[]): Promise<void> {\n const mcpPath = join(projectRoot, CLINE_MCP_SETTINGS);\n const mcpContent = await readFileSafe(mcpPath);\n if (mcpContent === null) return;\n\n let parsed: Record<string, unknown> | undefined;\n try {\n parsed = JSON.parse(mcpContent) as Record<string, unknown>;\n } catch {\n // skip malformed\n }\n const mcpServersRaw = parsed?.mcpServers;\n if (\n mcpServersRaw !== undefined &&\n typeof mcpServersRaw === 'object' &&\n mcpServersRaw !== null &&\n Object.keys(mcpServersRaw).length > 0\n ) {\n const mcpServers: Record<string, McpServer> = {};\n for (const [n, val] of Object.entries(mcpServersRaw)) {\n const server = mapClineServerToCanonical(val);\n if (server) mcpServers[n] = server;\n }\n if (Object.keys(mcpServers).length > 0) {\n await mkdirp(join(projectRoot, '.agentsbridge'));\n await writeFileAtomic(\n join(projectRoot, AGENTSBRIDGE_MCP),\n JSON.stringify({ mcpServers }, null, 2),\n );\n results.push({\n fromTool: 'cline',\n fromPath: mcpPath,\n toPath: AGENTSBRIDGE_MCP,\n feature: 'mcp',\n });\n }\n }\n}\n","/**\n * Cline skills import helpers — imports .cline/skills into canonical .agentsbridge/skills.\n */\n\nimport { readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter, serializeFrontmatter } from '../../utils/markdown.js';\nimport {\n parseProjectedAgentSkillFrontmatter,\n serializeImportedAgent,\n} from '../projected-agent-skill.js';\nimport { CLINE_SKILLS_DIR } from './constants.js';\n\nconst AGENTSBRIDGE_AGENTS = '.agentsbridge/agents';\nconst AGENTSBRIDGE_SKILLS = '.agentsbridge/skills';\n\nexport async function importClineSkills(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const skillsDir = join(projectRoot, CLINE_SKILLS_DIR);\n const skillDirs: { name: string; path: string }[] = [];\n try {\n const entries = await readdir(skillsDir, { withFileTypes: true });\n for (const ent of entries) {\n if (!ent.isDirectory()) continue;\n const skillPath = join(skillsDir, ent.name);\n const skillMd = join(skillPath, 'SKILL.md');\n const content = await readFileSafe(skillMd);\n if (!content) continue;\n skillDirs.push({ name: ent.name, path: skillPath });\n }\n } catch {\n // no skills dir\n }\n\n for (const { name, path: skillPath } of skillDirs) {\n const skillMdPath = join(skillPath, 'SKILL.md');\n const content = await readFileSafe(skillMdPath);\n if (!content) continue;\n const rawParsed = parseFrontmatter(content);\n const projectedAgent = parseProjectedAgentSkillFrontmatter(rawParsed.frontmatter, name);\n if (projectedAgent) {\n const destAgentsDir = join(projectRoot, AGENTSBRIDGE_AGENTS);\n await mkdirp(destAgentsDir);\n const agentPath = join(destAgentsDir, `${projectedAgent.name}.md`);\n await writeFileAtomic(\n agentPath,\n serializeImportedAgent(projectedAgent, normalize(rawParsed.body, skillMdPath, agentPath)),\n );\n results.push({\n fromTool: 'cline',\n fromPath: skillMdPath,\n toPath: `${AGENTSBRIDGE_AGENTS}/${projectedAgent.name}.md`,\n feature: 'agents',\n });\n continue;\n }\n const destSkillPath = join(projectRoot, AGENTSBRIDGE_SKILLS, name, 'SKILL.md');\n const normalized = normalize(content, skillMdPath, destSkillPath);\n const { frontmatter, body } = parseFrontmatter(normalized);\n const destSkillDir = join(projectRoot, AGENTSBRIDGE_SKILLS, name);\n await mkdirp(destSkillDir);\n const canonicalFm: Record<string, unknown> = {\n description:\n typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n };\n if (canonicalFm.description === undefined) delete canonicalFm.description;\n const skillContent =\n Object.keys(canonicalFm).length > 0\n ? serializeFrontmatter(canonicalFm, body.trim() || '')\n : body.trim() || '';\n await writeFileAtomic(destSkillPath, skillContent);\n results.push({\n fromTool: 'cline',\n fromPath: skillMdPath,\n toPath: `${AGENTSBRIDGE_SKILLS}/${name}/SKILL.md`,\n feature: 'skills',\n });\n\n const allFiles = await readDirRecursive(skillPath);\n for (const absPath of allFiles) {\n if (absPath === skillMdPath || absPath.endsWith('/SKILL.md')) continue;\n const relPath = absPath.slice(skillPath.length + 1).replace(/\\\\/g, '/');\n const supportContent = await readFileSafe(absPath);\n if (supportContent === null) continue;\n const destSupportPath = join(destSkillDir, relPath);\n await mkdirp(join(destSupportPath, '..'));\n await writeFileAtomic(destSupportPath, normalize(supportContent, absPath, destSupportPath));\n results.push({\n fromTool: 'cline',\n fromPath: absPath,\n toPath: `${AGENTSBRIDGE_SKILLS}/${name}/${relPath}`,\n feature: 'skills',\n });\n }\n }\n}\n","/**\n * Cursor target importer — full fidelity import into canonical .agentsbridge/.\n *\n * Sources imported:\n * AGENTS.md → .agentsbridge/rules/_root.md\n * .cursor/rules/*.mdc → .agentsbridge/rules/*.md (alwaysApply → root)\n * .cursor/commands/*.md → .agentsbridge/commands/*.md\n * .cursor/agents/*.md → .agentsbridge/agents/*.md\n * .cursor/skills/*.md → .agentsbridge/skills/{name}/SKILL.md (flat → dir)\n * .cursor/mcp.json → .agentsbridge/mcp.json\n * .cursor/hooks.json → .agentsbridge/hooks.yaml (hooks)\n * .cursor/settings.json → .agentsbridge/permissions.yaml (permissions)\n * .cursorignore → .agentsbridge/ignore\n */\n\nimport { join, dirname } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { createImportReferenceNormalizer } from '../../core/import-reference-rewriter.js';\nimport { readFileSafe, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { serializeImportedRuleWithFallback } from '../import-metadata.js';\nimport { importFileDirectory } from '../import-orchestrator.js';\nimport { mapCursorAgentFile, mapCursorCommandFile, mapCursorRuleFile } from './importer-mappers.js';\nimport { importSettings, importIgnore } from './settings-helpers.js';\nimport { importSkills } from './skills-helpers.js';\n\nconst AGENTS_MD = 'AGENTS.md';\nconst CURSORRULES = '.cursorrules';\nconst CURSOR_RULES_DIR = '.cursor/rules';\nconst CURSOR_COMMANDS_DIR = '.cursor/commands';\nconst CURSOR_AGENTS_DIR = '.cursor/agents';\nconst CURSOR_MCP = '.cursor/mcp.json';\n\nconst AB_RULES = '.agentsbridge/rules';\nconst AB_COMMANDS = '.agentsbridge/commands';\nconst AB_AGENTS = '.agentsbridge/agents';\nconst AB_MCP = '.agentsbridge/mcp.json';\n\n/**\n * Import Cursor config into canonical .agentsbridge/.\n * @param projectRoot - Project root directory\n * @returns Import results for each imported file\n */\nexport async function importFromCursor(projectRoot: string): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n const normalize = await createImportReferenceNormalizer('cursor', projectRoot);\n\n await importRules(projectRoot, results, normalize);\n await importCommands(projectRoot, results, normalize);\n await importAgents(projectRoot, results, normalize);\n await importSkills(projectRoot, results, normalize);\n await importMcp(projectRoot, results);\n await importSettings(projectRoot, results);\n await importIgnore(projectRoot, results);\n\n return results;\n}\n\nasync function importRules(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const destDir = join(projectRoot, AB_RULES);\n let rootWritten = false;\n\n const agentsPath = join(projectRoot, AGENTS_MD);\n const agentsContent = await readFileSafe(agentsPath);\n if (agentsContent !== null) {\n rootWritten = true;\n await mkdirp(destDir);\n const destPath = join(destDir, '_root.md');\n const { frontmatter, body } = parseFrontmatter(normalize(agentsContent, agentsPath, destPath));\n const hasRoot = frontmatter.root === true;\n const outFm = hasRoot ? frontmatter : { ...frontmatter, root: true };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'cursor',\n fromPath: agentsPath,\n toPath: `${AB_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n\n const rulesDir = join(projectRoot, CURSOR_RULES_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: rulesDir,\n destDir,\n extensions: ['.mdc'],\n fromTool: 'cursor',\n normalize,\n mapEntry: async ({ srcPath, normalizeTo }) => {\n // When root already written (from AGENTS.md), skip alwaysApply rules to avoid duplicate root\n if (rootWritten) {\n const raw = await readFileSafe(srcPath);\n if (raw !== null) {\n const { frontmatter } = parseFrontmatter(raw);\n if (frontmatter.alwaysApply === true) return null;\n }\n }\n return mapCursorRuleFile(srcPath, destDir, normalizeTo, () => {\n rootWritten = true;\n });\n },\n })),\n );\n\n // Fallback: .cursorrules when no root rule was found from AGENTS.md or alwaysApply:.mdc\n if (!rootWritten) {\n const cursorRulesPath = join(projectRoot, CURSORRULES);\n const cursorRulesContent = await readFileSafe(cursorRulesPath);\n if (cursorRulesContent !== null) {\n await mkdirp(destDir);\n const destPath = join(destDir, '_root.md');\n const { frontmatter, body } = parseFrontmatter(\n normalize(cursorRulesContent, cursorRulesPath, destPath),\n );\n const outFm = { ...frontmatter, root: true };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'cursor',\n fromPath: cursorRulesPath,\n toPath: `${AB_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n }\n}\n\nasync function importCommands(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const destDir = join(projectRoot, AB_COMMANDS);\n const commandsDir = join(projectRoot, CURSOR_COMMANDS_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: commandsDir,\n destDir,\n extensions: ['.md'],\n fromTool: 'cursor',\n normalize,\n mapEntry: ({ srcPath, normalizeTo }) => mapCursorCommandFile(srcPath, destDir, normalizeTo),\n })),\n );\n}\n\nasync function importAgents(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const destDir = join(projectRoot, AB_AGENTS);\n const agentsDir = join(projectRoot, CURSOR_AGENTS_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: agentsDir,\n destDir,\n extensions: ['.md'],\n fromTool: 'cursor',\n normalize,\n mapEntry: ({ srcPath, normalizeTo }) => mapCursorAgentFile(srcPath, destDir, normalizeTo),\n })),\n );\n}\n\nasync function importMcp(projectRoot: string, results: ImportResult[]): Promise<void> {\n const mcpPath = join(projectRoot, CURSOR_MCP);\n const content = await readFileSafe(mcpPath);\n if (!content) return;\n let parsed: unknown;\n try {\n parsed = JSON.parse(content);\n } catch {\n return;\n }\n if (!parsed || typeof parsed !== 'object' || !('mcpServers' in (parsed as object))) return;\n const destPath = join(projectRoot, AB_MCP);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, content);\n results.push({\n fromTool: 'cursor',\n fromPath: mcpPath,\n toPath: AB_MCP,\n feature: 'mcp',\n });\n}\n","import { basename, join } from 'node:path';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport {\n serializeImportedCommandWithFallback,\n serializeImportedRuleWithFallback,\n} from '../import-metadata.js';\nimport type { ImportFileMapping } from '../import-orchestrator.js';\nimport { toToolsArray } from '../shared-import-helpers.js';\n\nconst AB_RULES = '.agentsbridge/rules';\nconst AB_COMMANDS = '.agentsbridge/commands';\nconst AB_AGENTS = '.agentsbridge/agents';\n\nexport async function mapCursorRuleFile(\n srcPath: string,\n destDir: string,\n normalizeTo: (destinationFile: string) => string,\n onRootRule: () => void,\n): Promise<ImportFileMapping> {\n const name = basename(srcPath, '.mdc');\n const destPath = join(destDir, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n const isRoot = frontmatter.alwaysApply === true;\n if (isRoot) onRootRule();\n const canonicalFm = { ...frontmatter, root: isRoot };\n delete (canonicalFm as Record<string, unknown>).alwaysApply;\n return {\n destPath,\n toPath: `${AB_RULES}/${name}.md`,\n feature: 'rules',\n content: await serializeImportedRuleWithFallback(destPath, canonicalFm, body),\n };\n}\n\nexport async function mapCursorCommandFile(\n srcPath: string,\n destDir: string,\n normalizeTo: (destinationFile: string) => string,\n): Promise<ImportFileMapping> {\n const name = basename(srcPath, '.md');\n const destPath = join(destDir, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n const fromCamel = toToolsArray(frontmatter.allowedTools);\n const allowedTools =\n fromCamel.length > 0 ? fromCamel : toToolsArray(frontmatter['allowed-tools']);\n return {\n destPath,\n toPath: `${AB_COMMANDS}/${name}.md`,\n feature: 'commands',\n content: await serializeImportedCommandWithFallback(\n destPath,\n {\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n hasDescription: Object.prototype.hasOwnProperty.call(frontmatter, 'description'),\n allowedTools,\n hasAllowedTools:\n Object.prototype.hasOwnProperty.call(frontmatter, 'allowedTools') ||\n Object.prototype.hasOwnProperty.call(frontmatter, 'allowed-tools'),\n },\n body,\n ),\n };\n}\n\nexport function mapCursorAgentFile(\n srcPath: string,\n destDir: string,\n normalizeTo: (destinationFile: string) => string,\n): ImportFileMapping {\n const name = basename(srcPath, '.md');\n const destPath = join(destDir, `${name}.md`);\n return {\n destPath,\n toPath: `${AB_AGENTS}/${name}.md`,\n feature: 'agents',\n content: normalizeTo(destPath),\n };\n}\n","/**\n * Cursor settings import helpers — permissions, hooks, and ignore file processing.\n */\n\nimport { join, dirname } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { getHookCommand, getHookPrompt, hasHookText } from '../../core/hook-command.js';\nimport { readFileSafe, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { stringify as yamlStringify } from 'yaml';\n\nconst CURSOR_SETTINGS = '.cursor/settings.json';\nconst CURSOR_HOOKS = '.cursor/hooks.json';\nconst CURSORIGNORE = '.cursorignore';\nconst CURSORINDEXINGIGNORE = '.cursorindexingignore';\nconst AB_PERMISSIONS = '.agentsbridge/permissions.yaml';\nconst AB_HOOKS = '.agentsbridge/hooks.yaml';\nconst AB_IGNORE = '.agentsbridge/ignore';\n\n/**\n * Convert Cursor settings.json hooks to canonical hooks.yaml format.\n * Cursor uses same structure as Claude Code: { event: [{ matcher, hooks: [{ type, command }] }] }\n */\nexport function cursorHooksToCanonical(hooks: Record<string, unknown>): Record<string, unknown[]> {\n const result: Record<string, unknown[]> = {};\n for (const [event, entries] of Object.entries(hooks)) {\n if (!Array.isArray(entries)) continue;\n const canonical: Array<Record<string, unknown>> = [];\n for (const entry of entries) {\n if (!entry || typeof entry !== 'object') continue;\n const e = entry as Record<string, unknown>;\n const matcher = typeof e.matcher === 'string' ? e.matcher : '';\n if (!matcher) continue;\n const hookList = Array.isArray(e.hooks) ? (e.hooks as Array<Record<string, unknown>>) : [];\n for (const hook of hookList) {\n const type = hook.type === 'prompt' ? 'prompt' : 'command';\n if (!hasHookText({ ...hook, type })) continue;\n const value =\n type === 'prompt'\n ? getHookPrompt(hook) || getHookCommand(hook)\n : getHookCommand(hook) || getHookPrompt(hook);\n const item: Record<string, unknown> = { matcher, type, command: value };\n if (typeof hook.timeout === 'number') item.timeout = hook.timeout;\n canonical.push(item);\n }\n }\n if (canonical.length > 0) result[event] = canonical;\n }\n return result;\n}\n\nexport async function importSettings(projectRoot: string, results: ImportResult[]): Promise<void> {\n let hooksImportedFromHooksJson = false;\n const hooksJsonPath = join(projectRoot, CURSOR_HOOKS);\n const hooksJsonContent = await readFileSafe(hooksJsonPath);\n if (hooksJsonContent) {\n try {\n const hooksFile = JSON.parse(hooksJsonContent) as Record<string, unknown>;\n if (hooksFile.hooks && typeof hooksFile.hooks === 'object') {\n const canonical = cursorHooksToCanonical(hooksFile.hooks as Record<string, unknown>);\n if (Object.keys(canonical).length > 0) {\n const hooksContent = yamlStringify(canonical);\n const destPath = join(projectRoot, AB_HOOKS);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, hooksContent);\n results.push({\n fromTool: 'cursor',\n fromPath: hooksJsonPath,\n toPath: AB_HOOKS,\n feature: 'hooks',\n });\n hooksImportedFromHooksJson = true;\n }\n }\n } catch {\n /* ignore parse errors */\n }\n }\n\n const settingsPath = join(projectRoot, CURSOR_SETTINGS);\n const content = await readFileSafe(settingsPath);\n if (!content) return;\n let settings: Record<string, unknown>;\n try {\n settings = JSON.parse(content) as Record<string, unknown>;\n } catch {\n return;\n }\n\n const rawPerms = settings.permissions;\n if (rawPerms && typeof rawPerms === 'object' && !Array.isArray(rawPerms)) {\n const perms = rawPerms as Record<string, unknown>;\n const allow = Array.isArray(perms.allow)\n ? (perms.allow as string[]).filter((s) => typeof s === 'string')\n : [];\n const deny = Array.isArray(perms.deny)\n ? (perms.deny as string[]).filter((s) => typeof s === 'string')\n : [];\n if (allow.length > 0 || deny.length > 0) {\n const permContent = yamlStringify({ allow, deny });\n const destPath = join(projectRoot, AB_PERMISSIONS);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, permContent);\n results.push({\n fromTool: 'cursor',\n fromPath: settingsPath,\n toPath: AB_PERMISSIONS,\n feature: 'permissions',\n });\n }\n }\n\n const rawHooks = !hooksImportedFromHooksJson ? settings.hooks : undefined;\n if (rawHooks && typeof rawHooks === 'object' && !Array.isArray(rawHooks)) {\n const canonicalHooks = cursorHooksToCanonical(rawHooks as Record<string, unknown>);\n if (Object.keys(canonicalHooks).length > 0) {\n const hooksContent = yamlStringify(canonicalHooks);\n const destPath = join(projectRoot, AB_HOOKS);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, hooksContent);\n results.push({\n fromTool: 'cursor',\n fromPath: settingsPath,\n toPath: AB_HOOKS,\n feature: 'hooks',\n });\n }\n }\n}\n\nexport async function importIgnore(projectRoot: string, results: ImportResult[]): Promise<void> {\n const sources = [\n { path: join(projectRoot, CURSORIGNORE), label: CURSORIGNORE },\n { path: join(projectRoot, CURSORINDEXINGIGNORE), label: CURSORINDEXINGIGNORE },\n ];\n const patterns: string[] = [];\n const importedFrom: string[] = [];\n for (const source of sources) {\n const content = await readFileSafe(source.path);\n if (content === null) continue;\n importedFrom.push(source.label);\n for (const line of content.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (trimmed && !patterns.includes(trimmed)) {\n patterns.push(trimmed);\n }\n }\n }\n if (patterns.length === 0) return;\n const destPath = join(projectRoot, AB_IGNORE);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, patterns.join('\\n') + '\\n');\n results.push({\n fromTool: 'cursor',\n fromPath: join(projectRoot, importedFrom[0]!),\n toPath: AB_IGNORE,\n feature: 'ignore',\n });\n}\n","/**\n * Cursor skills import helpers — directory-structured and flat skill imports.\n */\n\nimport { join, basename, dirname, relative } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\n\nconst CURSOR_SKILLS_DIR = '.cursor/skills';\nconst AB_SKILLS = '.agentsbridge/skills';\n\n/**\n * Import Cursor skills. Handles two formats:\n * Directory-structured (generated by agentsbridge):\n * .cursor/skills/{name}/SKILL.md + supporting files → .agentsbridge/skills/{name}/...\n * Flat (native Cursor format):\n * .cursor/skills/{name}.md → .agentsbridge/skills/{name}/SKILL.md\n */\nexport async function importSkills(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const destBase = join(projectRoot, AB_SKILLS);\n const skillsDir = join(projectRoot, CURSOR_SKILLS_DIR);\n const allFiles = await readDirRecursive(skillsDir);\n const mdFiles = allFiles.filter((f) => f.endsWith('.md'));\n\n // Directory-structured: find SKILL.md files; skill name = parent directory\n const skillMdFiles = mdFiles.filter((f) => basename(f) === 'SKILL.md');\n const handledPaths = new Set<string>();\n\n for (const skillMdPath of skillMdFiles) {\n const skillDir = dirname(skillMdPath);\n const skillName = basename(skillDir);\n const destSkillDir = join(destBase, skillName);\n const skillFiles = await readDirRecursive(skillDir);\n for (const filePath of skillFiles) {\n handledPaths.add(filePath);\n const content = await readFileSafe(filePath);\n if (content === null) continue;\n const relPath = relative(skillDir, filePath);\n const destPath = join(destSkillDir, relPath);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, normalize(content, filePath, destPath));\n results.push({\n fromTool: 'cursor',\n fromPath: filePath,\n toPath: `${AB_SKILLS}/${skillName}/${relPath}`,\n feature: 'skills',\n });\n }\n }\n\n // Flat: remaining .md files not already handled above\n for (const srcPath of mdFiles) {\n if (handledPaths.has(srcPath)) continue;\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n const name = basename(srcPath, '.md');\n const destSkillDir = join(destBase, name);\n await mkdirp(destSkillDir);\n const destPath = join(destSkillDir, 'SKILL.md');\n await writeFileAtomic(destPath, normalize(content, srcPath, destPath));\n results.push({\n fromTool: 'cursor',\n fromPath: srcPath,\n toPath: `${AB_SKILLS}/${name}/SKILL.md`,\n feature: 'skills',\n });\n }\n}\n","/**\n * Codex CLI importer — imports canonical config from Codex project files.\n *\n * Sources imported:\n * AGENTS.md (preferred) / codex.md (fallback) → .agentsbridge/rules/_root.md\n * .agents/skills/ab-command-{name}/SKILL.md → .agentsbridge/commands/{name}.md\n * .agents/skills/{name}/SKILL.md → .agentsbridge/skills/{name}/SKILL.md\n * .codex/config.toml → .agentsbridge/mcp.json (mcp_servers section)\n * .codex/rules/*.rules (embed) → .agentsbridge/rules/*.md (agentsbridge block)\n * .codex/rules/*.md (legacy) → .agentsbridge/rules/*.md\n * nested AGENTS.md → .agentsbridge/rules (scoped)\n */\n\nimport { join, relative, dirname, basename } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { createImportReferenceNormalizer } from '../../core/import-reference-rewriter.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { serializeImportedRuleWithFallback } from '../import-metadata.js';\nimport { importFileDirectory } from '../import-orchestrator.js';\nimport { serializeImportedAgent } from '../projected-agent-skill.js';\nimport { CODEX_MD, AGENTS_MD, CODEX_AGENTS_DIR } from './constants.js';\nimport { importCodexNonRootRuleFiles } from './import-codex-non-root-rules.js';\nimport { importMcp } from './mcp-helpers.js';\nimport { importSkills } from './skills-helpers.js';\nimport { shouldImportScopedAgentsRule, removePathIfExists } from '../scoped-agents-import.js';\nimport { parse as parseToml } from 'smol-toml';\n\nconst AB_RULES = '.agentsbridge/rules';\n\n/**\n * Import Codex config into canonical .agentsbridge/.\n *\n * @param projectRoot - Project root directory\n * @returns Import results for each imported file\n */\nexport async function importFromCodex(projectRoot: string): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n const normalize = await createImportReferenceNormalizer('codex-cli', projectRoot);\n const normalizeWindsurf = await createImportReferenceNormalizer('windsurf', projectRoot);\n\n await importRules(projectRoot, results, normalize, normalizeWindsurf);\n await importSkills(projectRoot, results, normalize);\n await importAgents(projectRoot, results, normalize);\n await importMcp(projectRoot, results);\n\n return results;\n}\n\nasync function importAgents(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const agentsPath = join(projectRoot, CODEX_AGENTS_DIR);\n const agentsDestDir = join(projectRoot, '.agentsbridge/agents');\n try {\n const agentFiles = await readDirRecursive(agentsPath);\n const tomlFiles = agentFiles.filter((f) => f.endsWith('.toml'));\n for (const srcPath of tomlFiles) {\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n const parsed = parseToml(content) as Record<string, unknown> | null;\n if (!parsed || typeof parsed !== 'object') continue;\n const name = typeof parsed.name === 'string' ? parsed.name : basename(srcPath, '.toml');\n const description = typeof parsed.description === 'string' ? parsed.description : '';\n const body =\n typeof parsed.developer_instructions === 'string'\n ? parsed.developer_instructions.trim()\n : '';\n const model = typeof parsed.model === 'string' ? parsed.model : '';\n const sandbox = typeof parsed.sandbox_mode === 'string' ? parsed.sandbox_mode : '';\n const permissionMode =\n sandbox === 'read-only' ? 'read-only' : sandbox === 'workspace-write' ? 'allow' : '';\n const mcpServers: string[] = Array.isArray(parsed.mcp_servers)\n ? parsed.mcp_servers.filter((s): s is string => typeof s === 'string')\n : [];\n await mkdirp(agentsDestDir);\n const destPath = join(agentsDestDir, `${name}.md`);\n const normalizedBody = normalize(body, srcPath, destPath);\n const agent = {\n name,\n description,\n tools: [],\n disallowedTools: [],\n model,\n permissionMode,\n maxTurns: 0,\n mcpServers,\n hooks: {},\n skills: [],\n memory: '',\n };\n const outContent = serializeImportedAgent(agent, normalizedBody);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'codex-cli',\n fromPath: srcPath,\n toPath: `.agentsbridge/agents/${name}.md`,\n feature: 'agents',\n });\n }\n } catch {\n /* CODEX_AGENTS_DIR may not exist */\n }\n}\n\nasync function importRules(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n normalizeWindsurf: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const codexPath = join(projectRoot, CODEX_MD);\n const agentsPath = join(projectRoot, AGENTS_MD);\n const agentsContent = await readFileSafe(agentsPath);\n const codexContent = await readFileSafe(codexPath);\n\n // Prefer AGENTS.md (official Codex path) over codex.md (legacy/fallback)\n const sourcePath = agentsContent !== null ? agentsPath : codexPath;\n const destDir = join(projectRoot, AB_RULES);\n const content = agentsContent ?? codexContent;\n if (content !== null) {\n await mkdirp(destDir);\n const destPath = join(destDir, '_root.md');\n const normalizedContent =\n sourcePath === agentsPath\n ? normalize(normalizeWindsurf(content, sourcePath, destPath), sourcePath, destPath)\n : normalize(content, sourcePath, destPath);\n const { frontmatter, body } = parseFrontmatter(normalizedContent);\n const outFm = frontmatter.root === true ? frontmatter : { ...frontmatter, root: true };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n\n results.push({\n fromTool: 'codex-cli',\n fromPath: sourcePath,\n toPath: `${AB_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n\n results.push(...(await importCodexNonRootRuleFiles(projectRoot, destDir, normalize)));\n\n results.push(\n ...(await importFileDirectory({\n srcDir: projectRoot,\n destDir,\n extensions: ['AGENTS.md', 'AGENTS.override.md'],\n fromTool: 'codex-cli',\n normalize,\n mapEntry: async ({ srcPath, normalizeTo }) => {\n const relDir = relative(projectRoot, dirname(srcPath)).replace(/\\\\/g, '/');\n const isOverride = srcPath.endsWith('/AGENTS.override.md');\n if (!relDir || relDir === '.') return null;\n if (!isOverride && !srcPath.endsWith('/AGENTS.md')) return null;\n const ruleName = relDir.replace(/\\//g, '-');\n if (!shouldImportScopedAgentsRule(relDir)) {\n await removePathIfExists(join(destDir, `${ruleName}.md`));\n return null;\n }\n const destPath = join(destDir, `${ruleName}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n return {\n destPath,\n toPath: `${AB_RULES}/${ruleName}.md`,\n feature: 'rules',\n content: await serializeImportedRuleWithFallback(\n destPath,\n {\n ...frontmatter,\n root: false,\n globs: [`${relDir}/**`],\n ...(isOverride ? { codex_instruction: 'override' } : {}),\n },\n body,\n ),\n };\n },\n })),\n );\n}\n","/**\n * Codex CLI target constants.\n * Codex uses AGENTS.md (primary instructions), .agents/skills/ (skills),\n * .codex/skills/ (fallback skills layout), and .codex/config.toml (MCP).\n */\n\n/** Primary instructions file */\nexport const CODEX_MD = 'codex.md';\n\n/** Shared GitHub Agents format — AGENTS.md is the primary per official docs */\nexport const AGENTS_MD = 'AGENTS.md';\n\n/** Skills directory (repo-level, scanned from CWD up to repo root) */\nexport const CODEX_SKILLS_DIR = '.agents/skills';\n\n/** Fallback skills directory used by some Codex skill libraries */\nexport const CODEX_SKILLS_FALLBACK_DIR = '.codex/skills';\n\n/** Project-level config file (MCP servers and other overrides) */\nexport const CODEX_CONFIG_TOML = '.codex/config.toml';\n\n/** Starlark execution rules (`.rules`) + legacy `.md` import */\nexport const CODEX_RULES_DIR = '.codex/rules';\n\n/** Project custom agents (native TOML format) */\nexport const CODEX_AGENTS_DIR = '.codex/agents';\n","/**\n * Import `.codex/rules/*.md` and agentsbridge-embedded `.codex/rules/*.rules` into canonical rules.\n */\n\nimport { join, basename } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { serializeImportedRuleWithFallback } from '../import-metadata.js';\nimport { CODEX_RULES_DIR } from './constants.js';\nimport { tryParseEmbeddedCanonicalFromCodexRules } from './codex-rules-embed.js';\n\nconst AB_RULES = '.agentsbridge/rules';\n\nexport async function importCodexNonRootRuleFiles(\n projectRoot: string,\n destDir: string,\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n const codexRulesPath = join(projectRoot, CODEX_RULES_DIR);\n try {\n const ruleFiles = await readDirRecursive(codexRulesPath);\n const mdFiles = ruleFiles.filter((f) => f.endsWith('.md'));\n for (const srcPath of mdFiles) {\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n const slug = basename(srcPath, '.md');\n const destPath = join(destDir, `${slug}.md`);\n const { frontmatter, body } = parseFrontmatter(normalize(content, srcPath, destPath));\n await mkdirp(destDir);\n const outFm = frontmatter.root === true ? frontmatter : { ...frontmatter, root: false };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'codex-cli',\n fromPath: srcPath,\n toPath: `${AB_RULES}/${slug}.md`,\n feature: 'rules',\n });\n }\n const starlarkFiles = ruleFiles.filter((f) => f.endsWith('.rules'));\n for (const srcPath of starlarkFiles) {\n const raw = await readFileSafe(srcPath);\n if (!raw) continue;\n const slug = basename(srcPath, '.rules');\n const destPath = join(destDir, `${slug}.md`);\n await mkdirp(destDir);\n const embedded = tryParseEmbeddedCanonicalFromCodexRules(raw);\n if (embedded) {\n const outContent = await serializeImportedRuleWithFallback(\n destPath,\n {\n description: embedded.meta.description,\n globs: embedded.meta.globs,\n root: false,\n },\n normalize(embedded.body, srcPath, destPath),\n );\n await writeFileAtomic(destPath, outContent);\n } else {\n const outContent = await serializeImportedRuleWithFallback(\n destPath,\n {\n root: false,\n description: '',\n globs: [],\n codex_emit: 'execution',\n },\n normalize(raw.trim(), srcPath, destPath),\n );\n await writeFileAtomic(destPath, outContent);\n }\n results.push({\n fromTool: 'codex-cli',\n fromPath: srcPath,\n toPath: `${AB_RULES}/${slug}.md`,\n feature: 'rules',\n });\n }\n } catch {\n /* CODEX_RULES_DIR may not exist */\n }\n return results;\n}\n","/**\n * Legacy embedded advisory payload inside `.rules` (import-only).\n * Current generator emits advisory rules as nested `AGENTS.md` per codex-cli-project-level-advanced.md.\n * @see https://developers.openai.com/codex/rules/\n */\n\nimport { Buffer } from 'node:buffer';\n\nconst MARKER = 'ab-codex-rule:v1';\nconst JSON_PREFIX = '# ab-json: ';\nconst B64_BEGIN = '# ab-body-b64-begin';\nconst B64_END = '# ab-body-b64-end';\nconst B64_LINE = '# ab64:';\n\nexport interface EmbeddedCodexRuleMeta {\n description: string;\n globs: string[];\n}\n\n/** @deprecated Generator no longer emits this; kept so older repos still import. */\nexport function serializeCanonicalRuleToCodexRulesFile(rule: {\n description: string;\n globs: string[];\n body: string;\n}): string {\n const meta: EmbeddedCodexRuleMeta = {\n description: rule.description ?? '',\n globs: rule.globs ?? [],\n };\n const metaJson = JSON.stringify(meta);\n const b64 = Buffer.from(rule.body.trim(), 'utf8').toString('base64');\n const lines: string[] = [\n `# ${MARKER}`,\n `${JSON_PREFIX}${metaJson}`,\n '#',\n '# Embedded canonical rule (agentsbridge) — base64 body between ab-body-b64 markers.',\n '# Add active Starlark prefix_rule() calls below (uncomment/edit). Docs:',\n '# https://developers.openai.com/codex/rules/',\n '#',\n B64_BEGIN,\n ];\n for (let i = 0; i < b64.length; i += 76) {\n lines.push(`${B64_LINE}${b64.slice(i, i + 76)}`);\n }\n lines.push(B64_END);\n lines.push('');\n lines.push('# Example prefix_rule (from Codex documentation; commented — not active):');\n lines.push('# prefix_rule(');\n lines.push('# pattern = [\"gh\", \"pr\", \"view\"],');\n lines.push('# decision = \"prompt\",');\n lines.push('# justification = \"Viewing PRs is allowed with approval\",');\n lines.push('# )');\n lines.push('');\n return `${lines.join('\\n')}\\n`;\n}\n\n/** If this is an agentsbridge-generated `.rules` file, return meta + body; else null. */\nexport function tryParseEmbeddedCanonicalFromCodexRules(content: string): {\n meta: EmbeddedCodexRuleMeta;\n body: string;\n} | null {\n if (!content.includes(MARKER)) return null;\n const jsonLine = content.split('\\n').find((l) => l.startsWith(JSON_PREFIX));\n if (!jsonLine) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonLine.slice(JSON_PREFIX.length)) as unknown;\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== 'object') return null;\n const rec = parsed as Record<string, unknown>;\n const description = typeof rec.description === 'string' ? rec.description : '';\n const globs = Array.isArray(rec.globs)\n ? rec.globs.filter((g): g is string => typeof g === 'string')\n : [];\n const chunks: string[] = [];\n let inB64 = false;\n for (const line of content.split('\\n')) {\n const t = line.trimEnd();\n if (t === B64_BEGIN) {\n inB64 = true;\n continue;\n }\n if (t === B64_END) {\n inB64 = false;\n continue;\n }\n if (inB64 && t.startsWith(B64_LINE)) {\n chunks.push(t.slice(B64_LINE.length));\n }\n }\n if (chunks.length === 0) return null;\n try {\n const body = Buffer.from(chunks.join(''), 'base64').toString('utf8');\n return { meta: { description, globs }, body };\n } catch {\n return null;\n }\n}\n","/**\n * Codex CLI MCP helpers — TOML server mapping and MCP config import.\n */\n\nimport { join } from 'node:path';\nimport { parse as parseToml } from 'smol-toml';\nimport type { ImportResult } from '../../core/types.js';\nimport type { McpServer } from '../../core/types.js';\nimport { readFileSafe, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { CODEX_CONFIG_TOML } from './constants.js';\n\nconst AB_MCP = '.agentsbridge/mcp.json';\n\nexport function mapTomlServerToCanonical(raw: unknown): McpServer | null {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return null;\n const obj = raw as Record<string, unknown>;\n\n const command = typeof obj.command === 'string' ? obj.command : '';\n if (!command) return null;\n\n const args = Array.isArray(obj.args)\n ? obj.args.filter((x): x is string => typeof x === 'string')\n : [];\n\n const envRaw = obj.env;\n const env: Record<string, string> =\n envRaw !== null && typeof envRaw === 'object' && !Array.isArray(envRaw)\n ? Object.fromEntries(\n Object.entries(envRaw as Record<string, unknown>).filter(\n (entry): entry is [string, string] => typeof entry[1] === 'string',\n ),\n )\n : {};\n\n return {\n type: 'stdio',\n command,\n args,\n env,\n };\n}\n\nexport async function importMcp(projectRoot: string, results: ImportResult[]): Promise<void> {\n const configPath = join(projectRoot, CODEX_CONFIG_TOML);\n const content = await readFileSafe(configPath);\n if (content === null) return;\n\n let parsed: Record<string, unknown>;\n try {\n parsed = parseToml(content) as Record<string, unknown>;\n } catch {\n return;\n }\n\n const rawServers = parsed.mcp_servers;\n if (\n !rawServers ||\n typeof rawServers !== 'object' ||\n Array.isArray(rawServers) ||\n Object.keys(rawServers).length === 0\n ) {\n return;\n }\n\n const mcpServers: Record<string, McpServer> = {};\n for (const [name, val] of Object.entries(rawServers as Record<string, unknown>)) {\n const server = mapTomlServerToCanonical(val);\n if (server) mcpServers[name] = server;\n }\n\n if (Object.keys(mcpServers).length === 0) return;\n\n await mkdirp(join(projectRoot, '.agentsbridge'));\n await writeFileAtomic(join(projectRoot, AB_MCP), JSON.stringify({ mcpServers }, null, 2));\n results.push({\n fromTool: 'codex-cli',\n fromPath: configPath,\n toPath: AB_MCP,\n feature: 'mcp',\n });\n}\n","/**\n * Codex CLI skills import helpers — handles command skills, agent projections, and regular skills.\n */\n\nimport { readdir } from 'node:fs/promises';\nimport { join, relative, dirname } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter, serializeFrontmatter } from '../../utils/markdown.js';\nimport { parseCommandSkillFrontmatter, serializeImportedCommand } from './command-skill.js';\nimport {\n parseProjectedAgentSkillFrontmatter,\n serializeImportedAgent,\n} from '../projected-agent-skill.js';\nimport { removePathIfExists } from '../scoped-agents-import.js';\nimport { CODEX_SKILLS_DIR, CODEX_SKILLS_FALLBACK_DIR } from './constants.js';\n\nconst AB_COMMANDS = '.agentsbridge/commands';\nconst AB_AGENTS = '.agentsbridge/agents';\nconst AB_SKILLS = '.agentsbridge/skills';\n\nexport async function importSkills(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n for (const skillsRoot of [CODEX_SKILLS_DIR, CODEX_SKILLS_FALLBACK_DIR]) {\n const skillsDir = join(projectRoot, skillsRoot);\n const entries = await readdir(skillsDir, {\n encoding: 'utf8',\n withFileTypes: true,\n }).catch(() => null);\n if (entries === null) {\n continue;\n }\n\n let importedAny = false;\n for (const ent of entries) {\n if (!ent.isDirectory() && !ent.isSymbolicLink()) continue;\n const skillPath = join(skillsDir, ent.name);\n const skillMdPath = join(skillPath, 'SKILL.md');\n const skillMdContent = await readFileSafe(skillMdPath);\n if (!skillMdContent) continue;\n importedAny = true;\n\n const skillName = ent.name;\n const destSkillPath = join(projectRoot, AB_SKILLS, skillName, 'SKILL.md');\n const normalized = normalize(skillMdContent, skillMdPath, destSkillPath);\n const { frontmatter, body } = parseFrontmatter(normalized);\n const command = parseCommandSkillFrontmatter(frontmatter, ent.name);\n if (command) {\n await removePathIfExists(join(projectRoot, AB_SKILLS, skillName));\n const destCommandsDir = join(projectRoot, AB_COMMANDS);\n await mkdirp(destCommandsDir);\n const commandPath = join(destCommandsDir, `${command.name}.md`);\n await writeFileAtomic(\n commandPath,\n serializeImportedCommand(command, normalize(body, skillMdPath, commandPath)),\n );\n results.push({\n fromTool: 'codex-cli',\n fromPath: skillMdPath,\n toPath: `${AB_COMMANDS}/${command.name}.md`,\n feature: 'commands',\n });\n continue;\n }\n const projectedAgent = parseProjectedAgentSkillFrontmatter(frontmatter, ent.name);\n if (projectedAgent) {\n await removePathIfExists(join(projectRoot, AB_SKILLS, skillName));\n const destAgentsDir = join(projectRoot, AB_AGENTS);\n await mkdirp(destAgentsDir);\n const agentPath = join(destAgentsDir, `${projectedAgent.name}.md`);\n await writeFileAtomic(\n agentPath,\n serializeImportedAgent(projectedAgent, normalize(body, skillMdPath, agentPath)),\n );\n results.push({\n fromTool: 'codex-cli',\n fromPath: skillMdPath,\n toPath: `${AB_AGENTS}/${projectedAgent.name}.md`,\n feature: 'agents',\n });\n continue;\n }\n\n const destSkillDir = join(projectRoot, AB_SKILLS, skillName);\n await mkdirp(destSkillDir);\n const canonicalFm: Record<string, unknown> = {\n description:\n typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n };\n if (canonicalFm.description === undefined) delete canonicalFm.description;\n const outContent =\n Object.keys(canonicalFm).length > 0\n ? serializeFrontmatter(canonicalFm, body.trim() || '')\n : body.trim() || '';\n await writeFileAtomic(destSkillPath, outContent);\n results.push({\n fromTool: 'codex-cli',\n fromPath: skillMdPath,\n toPath: `${AB_SKILLS}/${skillName}/SKILL.md`,\n feature: 'skills',\n });\n\n const allFiles = await readDirRecursive(skillPath);\n for (const absPath of allFiles) {\n if (absPath === skillMdPath) continue;\n const relPath = relative(skillPath, absPath).replace(/\\\\/g, '/');\n const fileContent = await readFileSafe(absPath);\n if (fileContent === null) continue;\n const destPath = join(destSkillDir, relPath);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, normalize(fileContent, absPath, destPath));\n results.push({\n fromTool: 'codex-cli',\n fromPath: absPath,\n toPath: `${AB_SKILLS}/${skillName}/${relPath}`,\n feature: 'skills',\n });\n }\n }\n\n if (importedAny) {\n return;\n }\n }\n}\n","import { rm } from 'node:fs/promises';\n\nexport function shouldImportScopedAgentsRule(relDir: string): boolean {\n const segments = relDir.split('/').filter(Boolean);\n if (segments.length === 0) return false;\n if (segments.some((segment) => segment.startsWith('.'))) return false;\n\n const relPath = segments.join('/');\n return !relPath.startsWith('tests/e2e/fixtures/');\n}\n\nexport async function removePathIfExists(path: string): Promise<void> {\n await rm(path, { recursive: true, force: true });\n}\n","/**\n * Windsurf target importer — .windsurfrules, .windsurf/rules/*.md, .windsurfignore → canonical.\n * .windsurfrules is flat (no frontmatter); we add root: true on import.\n * .windsurf/rules/*.md preserves frontmatter.\n */\n\nimport { join, basename, dirname, relative } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { createImportReferenceNormalizer } from '../../core/import-reference-rewriter.js';\nimport { readFileSafe, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { stringify as yamlStringify } from 'yaml';\nimport { serializeImportedRuleWithFallback } from '../import-metadata.js';\nimport { importFileDirectory } from '../import-orchestrator.js';\nimport { removePathIfExists, shouldImportScopedAgentsRule } from '../scoped-agents-import.js';\nimport {\n WINDSURF_RULES_ROOT,\n WINDSURF_RULES_DIR,\n WINDSURF_IGNORE,\n CODEIUM_IGNORE,\n WINDSURF_AGENTS_MD,\n WINDSURF_HOOKS_FILE,\n WINDSURF_MCP_EXAMPLE_FILE,\n WINDSURF_MCP_CONFIG_FILE,\n} from './constants.js';\nimport { importWorkflows, importSkills } from './workflows-skills-helpers.js';\n\nconst AGENTSBRIDGE_RULES = '.agentsbridge/rules';\nconst AGENTSBRIDGE_IGNORE = '.agentsbridge/ignore';\nconst AGENTSBRIDGE_HOOKS = '.agentsbridge/hooks.yaml';\nconst AGENTSBRIDGE_MCP = '.agentsbridge/mcp.json';\n\n/**\n * Import Windsurf config into canonical .agentsbridge/.\n * Sources: .windsurfrules (root), .windsurf/rules/*.md (rules), .windsurfignore (ignore).\n *\n * @param projectRoot - Project root directory\n * @returns Import results for each imported file\n */\nexport async function importFromWindsurf(projectRoot: string): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n const normalize = await createImportReferenceNormalizer('windsurf', projectRoot);\n const normalizeCodex = await createImportReferenceNormalizer('codex-cli', projectRoot);\n const destRulesDir = join(projectRoot, AGENTSBRIDGE_RULES);\n\n const rootPath = join(projectRoot, WINDSURF_RULES_ROOT);\n const rootContent = await readFileSafe(rootPath);\n if (rootContent !== null) {\n await mkdirp(destRulesDir);\n const destPath = join(destRulesDir, '_root.md');\n const body = normalize(rootContent, rootPath, destPath).trim();\n const outContent = await serializeImportedRuleWithFallback(destPath, { root: true }, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'windsurf',\n fromPath: rootPath,\n toPath: `${AGENTSBRIDGE_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n\n // Fallback: AGENTS.md when .windsurfrules absent\n if (rootContent === null) {\n const agentsMdPath = join(projectRoot, WINDSURF_AGENTS_MD);\n const agentsMdContent = await readFileSafe(agentsMdPath);\n if (agentsMdContent !== null) {\n await mkdirp(destRulesDir);\n const destPath = join(destRulesDir, '_root.md');\n const body = normalize(\n normalizeCodex(agentsMdContent, agentsMdPath, destPath),\n agentsMdPath,\n destPath,\n ).trim();\n const outContent = await serializeImportedRuleWithFallback(destPath, { root: true }, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'windsurf',\n fromPath: agentsMdPath,\n toPath: `${AGENTSBRIDGE_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n }\n\n results.push(\n ...(await importFileDirectory({\n srcDir: projectRoot,\n destDir: destRulesDir,\n extensions: ['AGENTS.md'],\n fromTool: 'windsurf',\n normalize,\n mapEntry: async ({ srcPath, normalizeTo }) => {\n const relDir = relative(projectRoot, dirname(srcPath)).replace(/\\\\/g, '/');\n if (!relDir || relDir === '.' || !srcPath.endsWith('/AGENTS.md')) return null;\n const ruleName = relDir.replace(/\\//g, '-');\n if (!shouldImportScopedAgentsRule(relDir)) {\n await removePathIfExists(join(destRulesDir, `${ruleName}.md`));\n return null;\n }\n const destPath = join(destRulesDir, `${ruleName}.md`);\n return {\n destPath,\n toPath: `${AGENTSBRIDGE_RULES}/${ruleName}.md`,\n feature: 'rules',\n content: await serializeImportedRuleWithFallback(\n destPath,\n { root: false, globs: [`${relDir}/**`] },\n normalizeTo(destPath),\n ),\n };\n },\n })),\n );\n\n const rulesDir = join(projectRoot, WINDSURF_RULES_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: rulesDir,\n destDir: destRulesDir,\n extensions: ['.md'],\n fromTool: 'windsurf',\n normalize,\n mapEntry: async ({ srcPath, normalizeTo }) => {\n const name = basename(srcPath, '.md');\n if (name === '_root' && rootContent !== null) return null;\n const destPath = join(destRulesDir, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n const normalizedFrontmatter: Record<string, unknown> = { ...frontmatter };\n if (typeof normalizedFrontmatter.glob === 'string' && normalizedFrontmatter.glob.trim()) {\n normalizedFrontmatter.globs = [normalizedFrontmatter.glob];\n delete normalizedFrontmatter.glob;\n }\n return {\n destPath,\n toPath: `${AGENTSBRIDGE_RULES}/${name}.md`,\n feature: 'rules',\n content: await serializeImportedRuleWithFallback(\n destPath,\n { ...normalizedFrontmatter, root: false },\n body,\n ),\n };\n },\n })),\n );\n\n let ignorePath = join(projectRoot, WINDSURF_IGNORE);\n let ignoreContent = await readFileSafe(ignorePath);\n if (ignoreContent === null || !ignoreContent.trim()) {\n ignorePath = join(projectRoot, CODEIUM_IGNORE);\n ignoreContent = await readFileSafe(ignorePath);\n }\n if (ignoreContent !== null && ignoreContent.trim()) {\n const lines = ignoreContent.split(/\\r?\\n/);\n const patterns: string[] = [];\n for (const line of lines) {\n const t = line.trim();\n if (t && !t.startsWith('#')) patterns.push(t);\n }\n if (patterns.length > 0) {\n await mkdirp(join(projectRoot, '.agentsbridge'));\n const destIgnorePath = join(projectRoot, AGENTSBRIDGE_IGNORE);\n await writeFileAtomic(destIgnorePath, patterns.join('\\n'));\n results.push({\n fromTool: 'windsurf',\n fromPath: ignorePath,\n toPath: AGENTSBRIDGE_IGNORE,\n feature: 'ignore',\n });\n }\n }\n\n await importWorkflows(projectRoot, results, normalize);\n await importSkills(projectRoot, results, normalize);\n await importHooks(projectRoot, results);\n await importMcp(projectRoot, results);\n\n return results;\n}\n\nasync function importHooks(projectRoot: string, results: ImportResult[]): Promise<void> {\n const hooksPath = join(projectRoot, WINDSURF_HOOKS_FILE);\n const hooksContent = await readFileSafe(hooksPath);\n if (!hooksContent) return;\n try {\n const parsed = JSON.parse(hooksContent) as Record<string, unknown>;\n if (!parsed.hooks || typeof parsed.hooks !== 'object' || Array.isArray(parsed.hooks)) return;\n const canonical = windsurfHooksToCanonical(parsed.hooks as Record<string, unknown>);\n if (Object.keys(canonical).length === 0) return;\n const destPath = join(projectRoot, AGENTSBRIDGE_HOOKS);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, yamlStringify(canonical));\n results.push({\n fromTool: 'windsurf',\n fromPath: hooksPath,\n toPath: AGENTSBRIDGE_HOOKS,\n feature: 'hooks',\n });\n } catch {\n // Invalid hooks JSON should not fail import.\n }\n}\n\nfunction canonicalHookEventName(event: string): string {\n const explicit: Record<string, string> = {\n pre_tool_use: 'PreToolUse',\n post_tool_use: 'PostToolUse',\n notification: 'Notification',\n user_prompt_submit: 'UserPromptSubmit',\n subagent_start: 'SubagentStart',\n subagent_stop: 'SubagentStop',\n };\n return explicit[event] ?? event;\n}\n\nfunction windsurfHooksToCanonical(hooks: Record<string, unknown>): Record<string, unknown[]> {\n const result: Record<string, unknown[]> = {};\n for (const [event, entries] of Object.entries(hooks)) {\n if (!Array.isArray(entries)) continue;\n const mappedEvent = canonicalHookEventName(event);\n const canonicalEntries: Array<Record<string, unknown>> = [];\n for (const entry of entries) {\n if (!entry || typeof entry !== 'object') continue;\n const e = entry as Record<string, unknown>;\n\n // Native Windsurf shape: { command, show_output? }.\n if (typeof e.command === 'string' && e.command.trim()) {\n canonicalEntries.push({\n matcher: '.*',\n type: 'command',\n command: e.command,\n });\n continue;\n }\n\n // Backward compatibility for previously emitted cursor-style shape.\n const matcher = typeof e.matcher === 'string' && e.matcher.trim() ? e.matcher : '.*';\n const hooksList = Array.isArray(e.hooks) ? e.hooks : [];\n for (const item of hooksList) {\n if (!item || typeof item !== 'object') continue;\n const hook = item as Record<string, unknown>;\n const command =\n typeof hook.command === 'string'\n ? hook.command\n : typeof hook.prompt === 'string'\n ? hook.prompt\n : '';\n if (!command.trim()) continue;\n const canonical: Record<string, unknown> = {\n matcher,\n type: hook.type === 'prompt' ? 'prompt' : 'command',\n command,\n };\n if (typeof hook.timeout === 'number') canonical.timeout = hook.timeout;\n canonicalEntries.push(canonical);\n }\n }\n if (canonicalEntries.length > 0) result[mappedEvent] = canonicalEntries;\n }\n return result;\n}\n\nasync function importMcp(projectRoot: string, results: ImportResult[]): Promise<void> {\n const sourceCandidates = [WINDSURF_MCP_EXAMPLE_FILE, WINDSURF_MCP_CONFIG_FILE];\n for (const relPath of sourceCandidates) {\n const srcPath = join(projectRoot, relPath);\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n try {\n const parsed = JSON.parse(content) as Record<string, unknown>;\n if (!parsed.mcpServers || typeof parsed.mcpServers !== 'object') continue;\n const destPath = join(projectRoot, AGENTSBRIDGE_MCP);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, JSON.stringify({ mcpServers: parsed.mcpServers }, null, 2));\n results.push({\n fromTool: 'windsurf',\n fromPath: srcPath,\n toPath: AGENTSBRIDGE_MCP,\n feature: 'mcp',\n });\n return;\n } catch {\n // Invalid MCP JSON should not fail import.\n }\n }\n}\n","/**\n * Windsurf target constants.\n * Windsurf uses AGENTS.md (root), .windsurf/rules/*.md (modular), and .codeiumignore.\n */\n\n/** Root rules file (flat, no frontmatter) */\nexport const WINDSURF_RULES_ROOT = '.windsurfrules';\n\n/** Modular rules directory */\nexport const WINDSURF_RULES_DIR = '.windsurf/rules';\n\n/** Ignore file path (agentsbridge legacy / community) */\nexport const WINDSURF_IGNORE = '.windsurfignore';\n\n/** Official Windsurf/Codeium ignore file (docs.windsurf.com) */\nexport const CODEIUM_IGNORE = '.codeiumignore';\n\n/** AGENTS.md root rule (shared with GitHub Agents spec) */\nexport const WINDSURF_AGENTS_MD = 'AGENTS.md';\n\n/** Windsurf hooks file */\nexport const WINDSURF_HOOKS_FILE = '.windsurf/hooks.json';\n\n/** Windsurf MCP example config path used for project-owned setup snippets */\nexport const WINDSURF_MCP_EXAMPLE_FILE = '.windsurf/mcp_config.example.json';\n\n/** Windsurf MCP primary config path (import fallback only) */\nexport const WINDSURF_MCP_CONFIG_FILE = '.windsurf/mcp_config.json';\n\n/** Workflows directory (.windsurf/workflows/*.md → canonical commands) */\nexport const WINDSURF_WORKFLOWS_DIR = '.windsurf/workflows';\n\n/** Skills directory (.windsurf/skills/{name}/ → canonical skills) */\nexport const WINDSURF_SKILLS_DIR = '.windsurf/skills';\n","/**\n * Windsurf workflows and skills import helpers.\n */\n\nimport { join, basename } from 'node:path';\nimport { readdir } from 'node:fs/promises';\nimport type { ImportResult } from '../../core/types.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { serializeImportedCommandWithFallback } from '../import-metadata.js';\nimport {\n parseProjectedAgentSkillFrontmatter,\n serializeImportedAgent,\n} from '../projected-agent-skill.js';\nimport { removePathIfExists } from '../scoped-agents-import.js';\nimport { WINDSURF_WORKFLOWS_DIR, WINDSURF_SKILLS_DIR } from './constants.js';\n\nconst AGENTSBRIDGE_COMMANDS = '.agentsbridge/commands';\nconst AGENTSBRIDGE_AGENTS = '.agentsbridge/agents';\nconst AGENTSBRIDGE_SKILLS = '.agentsbridge/skills';\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value\n .filter((entry): entry is string => typeof entry === 'string')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n if (typeof value === 'string') {\n return value\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nexport async function importWorkflows(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const workflowsDir = join(projectRoot, WINDSURF_WORKFLOWS_DIR);\n const workflowFiles = await readDirRecursive(workflowsDir);\n const workflowMdFiles = workflowFiles.filter((f) => f.endsWith('.md'));\n const destCommandsDir = join(projectRoot, AGENTSBRIDGE_COMMANDS);\n for (const srcPath of workflowMdFiles) {\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n const name = basename(srcPath, '.md');\n await mkdirp(destCommandsDir);\n const destPath = join(destCommandsDir, `${name}.md`);\n const normalized = normalize(content, srcPath, destPath);\n const { frontmatter, body } = parseFrontmatter(normalized);\n const outContent = await serializeImportedCommandWithFallback(\n destPath,\n {\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n hasDescription: Object.prototype.hasOwnProperty.call(frontmatter, 'description'),\n allowedTools: (() => {\n const fromCamel = toStringArray(frontmatter.allowedTools);\n return fromCamel.length > 0 ? fromCamel : toStringArray(frontmatter['allowed-tools']);\n })(),\n hasAllowedTools:\n Object.prototype.hasOwnProperty.call(frontmatter, 'allowedTools') ||\n Object.prototype.hasOwnProperty.call(frontmatter, 'allowed-tools'),\n },\n body,\n );\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'windsurf',\n fromPath: srcPath,\n toPath: `${AGENTSBRIDGE_COMMANDS}/${name}.md`,\n feature: 'commands',\n });\n }\n}\n\nexport async function importSkills(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const windsurfSkillsBaseDir = join(projectRoot, WINDSURF_SKILLS_DIR);\n try {\n const skillEntries = await readdir(windsurfSkillsBaseDir, { withFileTypes: true });\n for (const ent of skillEntries) {\n if (!ent.isDirectory()) continue;\n const skillPath = join(windsurfSkillsBaseDir, ent.name);\n const skillMdPath = join(skillPath, 'SKILL.md');\n const skillContent = await readFileSafe(skillMdPath);\n if (!skillContent) continue;\n const rawParsed = parseFrontmatter(skillContent);\n const projectedAgent = parseProjectedAgentSkillFrontmatter(rawParsed.frontmatter, ent.name);\n if (projectedAgent) {\n await removePathIfExists(join(projectRoot, AGENTSBRIDGE_SKILLS, ent.name));\n const destAgentsDir = join(projectRoot, AGENTSBRIDGE_AGENTS);\n await mkdirp(destAgentsDir);\n const agentPath = join(destAgentsDir, `${projectedAgent.name}.md`);\n await writeFileAtomic(\n agentPath,\n serializeImportedAgent(projectedAgent, normalize(rawParsed.body, skillMdPath, agentPath)),\n );\n results.push({\n fromTool: 'windsurf',\n fromPath: skillMdPath,\n toPath: `${AGENTSBRIDGE_AGENTS}/${projectedAgent.name}.md`,\n feature: 'agents',\n });\n continue;\n }\n const destSkillDir = join(projectRoot, AGENTSBRIDGE_SKILLS, ent.name);\n const destSkillPath = join(destSkillDir, 'SKILL.md');\n const normalized = normalize(skillContent, skillMdPath, destSkillPath);\n await mkdirp(destSkillDir);\n await writeFileAtomic(destSkillPath, normalized);\n results.push({\n fromTool: 'windsurf',\n fromPath: skillMdPath,\n toPath: `${AGENTSBRIDGE_SKILLS}/${ent.name}/SKILL.md`,\n feature: 'skills',\n });\n const allSkillFiles = await readDirRecursive(skillPath);\n for (const absPath of allSkillFiles) {\n if (absPath === skillMdPath) continue;\n const relPath = absPath.slice(skillPath.length + 1).replace(/\\\\/g, '/');\n const supportContent = await readFileSafe(absPath);\n if (supportContent === null) continue;\n const destSupportPath = join(destSkillDir, relPath);\n await mkdirp(join(destSupportPath, '..'));\n await writeFileAtomic(destSupportPath, normalize(supportContent, absPath, destSupportPath));\n results.push({\n fromTool: 'windsurf',\n fromPath: absPath,\n toPath: `${AGENTSBRIDGE_SKILLS}/${ent.name}/${relPath}`,\n feature: 'skills',\n });\n }\n }\n } catch {\n // .windsurf/skills/ doesn't exist — skip\n }\n}\n","/**\n * Copilot target importer — .github/copilot-instructions.md, .github/copilot/*.instructions.md (legacy),\n * .github/instructions/*.instructions.md, .github/prompts/*.prompt.md, .github/skills/**,\n * .github/agents/*.agent.md, .github/hooks/*.json (and legacy .github/copilot-hooks/*.sh) → canonical\n * .agentsbridge/.\n */\n\nimport { join, basename } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { createImportReferenceNormalizer } from '../../core/import-reference-rewriter.js';\nimport { readFileSafe, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { serializeImportedRuleWithFallback } from '../import-metadata.js';\nimport { importFileDirectory } from '../import-orchestrator.js';\nimport { toGlobsArray } from '../shared-import-helpers.js';\nimport {\n COPILOT_INSTRUCTIONS,\n COPILOT_CONTEXT_DIR,\n COPILOT_INSTRUCTIONS_DIR,\n COPILOT_PROMPTS_DIR,\n} from './constants.js';\nimport { parseCommandPromptFrontmatter, serializeImportedCommand } from './command-prompt.js';\nimport { importHooks } from './hook-parser.js';\nimport { importAgents, importSkills } from './agents-skills-helpers.js';\n\nconst AGENTSBRIDGE_RULES = '.agentsbridge/rules';\nconst AB_COMMANDS = '.agentsbridge/commands';\n\n/**\n * Import Copilot rules into canonical .agentsbridge/rules.\n * Sources: .github/copilot-instructions.md (root) and .github/copilot/*.instructions.md.\n * Strips .instructions suffix for slug. Preserves description and globs.\n *\n * @param projectRoot - Project root directory\n * @returns Import results for each imported file\n */\nexport async function importFromCopilot(projectRoot: string): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n const normalize = await createImportReferenceNormalizer('copilot', projectRoot);\n const destDir = join(projectRoot, AGENTSBRIDGE_RULES);\n\n const instructionsPath = join(projectRoot, COPILOT_INSTRUCTIONS);\n const instructionsContent = await readFileSafe(instructionsPath);\n if (instructionsContent !== null) {\n await mkdirp(destDir);\n const destPath = join(destDir, '_root.md');\n const { frontmatter, body } = parseFrontmatter(\n normalize(instructionsContent, instructionsPath, destPath),\n );\n const hasRoot = frontmatter.root === true;\n const outFm = hasRoot ? frontmatter : { ...frontmatter, root: true };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'copilot',\n fromPath: instructionsPath,\n toPath: `${AGENTSBRIDGE_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n\n const copilotDir = join(projectRoot, COPILOT_CONTEXT_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: copilotDir,\n destDir,\n extensions: ['.instructions.md'],\n fromTool: 'copilot',\n normalize,\n mapEntry: async ({ srcPath, normalizeTo }) => {\n const destFileName = `${basename(srcPath, '.instructions.md')}.md`;\n const destPath = join(destDir, destFileName);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n const globs = toGlobsArray(frontmatter.globs);\n const canonicalFm: Record<string, unknown> = {\n root: false,\n description:\n typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n globs: globs.length > 0 ? globs : undefined,\n };\n Object.keys(canonicalFm).forEach((key) => {\n if (canonicalFm[key] === undefined) delete canonicalFm[key];\n });\n return {\n destPath,\n toPath: `${AGENTSBRIDGE_RULES}/${destFileName}`,\n feature: 'rules',\n content: await serializeImportedRuleWithFallback(destPath, canonicalFm, body),\n };\n },\n })),\n );\n\n // New path: .github/instructions/*.md (uses applyTo key instead of globs)\n const newInstDir = join(projectRoot, COPILOT_INSTRUCTIONS_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: newInstDir,\n destDir,\n extensions: ['.instructions.md', '.md'],\n fromTool: 'copilot',\n normalize,\n mapEntry: async ({ srcPath, normalizeTo }) => {\n const base = srcPath.endsWith('.instructions.md')\n ? basename(srcPath, '.instructions.md')\n : basename(srcPath, '.md');\n const destPath = join(destDir, `${base}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n const globs = toGlobsArray(\n frontmatter.applyTo !== undefined ? frontmatter.applyTo : frontmatter.globs,\n );\n const canonicalFm: Record<string, unknown> = {\n root: false,\n description:\n typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n globs: globs.length > 0 ? globs : undefined,\n };\n Object.keys(canonicalFm).forEach((key) => {\n if (canonicalFm[key] === undefined) delete canonicalFm[key];\n });\n return {\n destPath,\n toPath: `${AGENTSBRIDGE_RULES}/${base}.md`,\n feature: 'rules',\n content: await serializeImportedRuleWithFallback(destPath, canonicalFm, body),\n };\n },\n })),\n );\n\n await importCommands(projectRoot, results, normalize);\n await importAgents(projectRoot, results, normalize);\n await importSkills(projectRoot, results, normalize);\n await importHooks(projectRoot, results);\n\n return results;\n}\n\nasync function importCommands(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const promptsDir = join(projectRoot, COPILOT_PROMPTS_DIR);\n const destDir = join(projectRoot, AB_COMMANDS);\n results.push(\n ...(await importFileDirectory({\n srcDir: promptsDir,\n destDir,\n extensions: ['.prompt.md'],\n fromTool: 'copilot',\n normalize,\n mapEntry: ({ srcPath, content }) => {\n const previewDest = join(destDir, `${basename(srcPath, '.prompt.md')}.md`);\n const { frontmatter, body } = parseFrontmatter(normalize(content, srcPath, previewDest));\n const command = parseCommandPromptFrontmatter(frontmatter, srcPath);\n const destPath = join(destDir, `${command.name}.md`);\n return {\n destPath,\n toPath: `${AB_COMMANDS}/${command.name}.md`,\n feature: 'commands',\n content: serializeImportedCommand(command, body),\n };\n },\n })),\n );\n}\n","/**\n * Copilot target constants.\n * GitHub Copilot uses .github/copilot-instructions.md, .github/instructions/*.instructions.md,\n * .github/hooks/*.json, and .github/prompts/*.prompt.md.\n */\n\n/** Global instructions file path */\nexport const COPILOT_INSTRUCTIONS = '.github/copilot-instructions.md';\n\n/** Legacy per-context instructions directory */\nexport const COPILOT_CONTEXT_DIR = '.github/copilot';\n\n/** Current instructions directory (GitHub Copilot CLI) */\nexport const COPILOT_INSTRUCTIONS_DIR = '.github/instructions';\n\n/** Prompt files directory (manual reusable prompts / command-like tasks) */\nexport const COPILOT_PROMPTS_DIR = '.github/prompts';\n\n/** Hooks directory for JSON hook configs and scripts */\nexport const COPILOT_HOOKS_DIR = '.github/hooks';\n\n/** Agent skills directory (native). [gh:skills] */\nexport const COPILOT_SKILLS_DIR = '.github/skills';\n\n/** Custom agent profiles directory (.agent.md files). [gh:agents] */\nexport const COPILOT_AGENTS_DIR = '.github/agents';\n","import { basename } from 'node:path';\nimport type { CanonicalCommand } from '../../core/types.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\nimport { COPILOT_PROMPTS_DIR } from './constants.js';\n\ninterface ParsedCommandPrompt {\n name: string;\n description: string;\n allowedTools: string[];\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.filter((entry): entry is string => typeof entry === 'string' && entry.length > 0);\n }\n if (typeof value === 'string' && value.length > 0) {\n return value\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nexport function commandPromptPath(name: string): string {\n return `${COPILOT_PROMPTS_DIR}/${name}.prompt.md`;\n}\n\nexport function serializeCommandPrompt(command: CanonicalCommand): string {\n const frontmatter: Record<string, unknown> = {\n agent: 'agent',\n description: command.description || undefined,\n 'x-agentsbridge-kind': 'command',\n 'x-agentsbridge-name': command.name,\n 'x-agentsbridge-allowed-tools':\n command.allowedTools.length > 0 ? command.allowedTools : undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n if (frontmatter['x-agentsbridge-allowed-tools'] === undefined) {\n delete frontmatter['x-agentsbridge-allowed-tools'];\n }\n return serializeFrontmatter(frontmatter, command.body.trim() || '');\n}\n\nexport function parseCommandPromptFrontmatter(\n frontmatter: Record<string, unknown>,\n promptPath: string,\n): ParsedCommandPrompt {\n const nameFromMetadata =\n typeof frontmatter['x-agentsbridge-name'] === 'string'\n ? frontmatter['x-agentsbridge-name']\n : '';\n const name = (nameFromMetadata || basename(promptPath, '.prompt.md')).trim();\n const allowedToolsFromMetadata = toStringArray(frontmatter['x-agentsbridge-allowed-tools']);\n const allowedTools =\n allowedToolsFromMetadata.length > 0\n ? allowedToolsFromMetadata\n : toStringArray(frontmatter.tools);\n\n return {\n name,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n allowedTools,\n };\n}\n\nexport function serializeImportedCommand(command: ParsedCommandPrompt, body: string): string {\n const frontmatter: Record<string, unknown> = {\n description: command.description || undefined,\n 'allowed-tools': command.allowedTools.length > 0 ? command.allowedTools : undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n if (frontmatter['allowed-tools'] === undefined) delete frontmatter['allowed-tools'];\n return serializeFrontmatter(frontmatter, body.trim() || '');\n}\n","/**\n * Copilot hook parsing helpers — event mapping, wrapper command extraction, and hook import.\n */\n\nimport { join, dirname, basename } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { stringify as yamlStringify } from 'yaml';\nimport { COPILOT_HOOKS_DIR } from './constants.js';\n\nconst AB_HOOKS = '.agentsbridge/hooks.yaml';\n\nexport function mapCopilotHookEvent(event: string): string | null {\n switch (event) {\n case 'preToolUse':\n return 'PreToolUse';\n case 'postToolUse':\n return 'PostToolUse';\n case 'notification':\n return 'Notification';\n case 'userPromptSubmitted':\n return 'UserPromptSubmit';\n default:\n return null;\n }\n}\n\nexport function extractMatcher(comment: unknown): string {\n if (typeof comment !== 'string') return '*';\n const match = comment.match(/^Matcher:\\s*(.+)$/);\n return match?.[1]?.trim() || '*';\n}\n\nexport function extractWrapperCommand(content: string): string {\n const metadataMatch = content.match(/^# agentsbridge-command:\\s*(.+)$/m);\n if (metadataMatch?.[1]) return metadataMatch[1].trim();\n return content\n .replace(/^#!.*\\n/, '')\n .replace(/^#.*\\n/gm, '')\n .replace(/^HOOK_DIR=.*\\n/gm, '')\n .replace(/^set -e\\n?/m, '')\n .trim();\n}\n\n/**\n * Import Copilot hook JSON configs (.github/hooks/*.json) into canonical hooks.yaml.\n * Also supports legacy .github/copilot-hooks/*.sh wrappers for backwards compatibility.\n */\nexport async function importHooks(projectRoot: string, results: ImportResult[]): Promise<void> {\n const hooksDir = join(projectRoot, COPILOT_HOOKS_DIR);\n const allFiles = await readDirRecursive(hooksDir).catch(() => []);\n const jsonFiles = allFiles.filter((file) => file.endsWith('.json'));\n const hooks: Record<string, Array<{ matcher: string; command: string; type: string }>> = {};\n\n for (const srcPath of jsonFiles) {\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(content) as Record<string, unknown>;\n } catch {\n continue;\n }\n if (!parsed || typeof parsed.hooks !== 'object' || parsed.hooks === null) continue;\n for (const [event, entries] of Object.entries(parsed.hooks as Record<string, unknown>)) {\n const canonicalEvent = mapCopilotHookEvent(event);\n if (!canonicalEvent || !Array.isArray(entries)) continue;\n for (const entry of entries) {\n if (!entry || typeof entry !== 'object') continue;\n const entryRecord = entry as Record<string, unknown>;\n const bashPath = typeof entryRecord.bash === 'string' ? entryRecord.bash : '';\n if (!bashPath) continue;\n const scriptPath = join(hooksDir, bashPath.replace(/^\\.\\//, ''));\n const scriptContent = await readFileSafe(scriptPath);\n if (!scriptContent) continue;\n const command = extractWrapperCommand(scriptContent);\n if (!command) continue;\n if (!hooks[canonicalEvent]) hooks[canonicalEvent] = [];\n hooks[canonicalEvent]!.push({\n matcher: extractMatcher(entryRecord.comment),\n command,\n type: 'command',\n });\n }\n }\n }\n\n const legacyDir = join(projectRoot, '.github', 'copilot-hooks');\n const legacyFiles = await readDirRecursive(legacyDir).catch(() => []);\n const shFiles = legacyFiles.filter(\n (file) => dirname(file) === legacyDir && /^[^-]+-\\d+\\.sh$/i.test(basename(file)),\n );\n for (const srcPath of shFiles) {\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n const name = basename(srcPath, '.sh');\n const dashIdx = name.lastIndexOf('-');\n const phase = dashIdx > 0 ? name.slice(0, dashIdx) : name;\n if (!hooks[phase]) hooks[phase] = [];\n hooks[phase]!.push({ matcher: '*', command: extractWrapperCommand(content), type: 'command' });\n }\n\n if (Object.keys(hooks).length === 0) return;\n\n const destPath = join(projectRoot, AB_HOOKS);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, yamlStringify(hooks));\n results.push({\n fromTool: 'copilot',\n fromPath: join(projectRoot, COPILOT_HOOKS_DIR),\n toPath: AB_HOOKS,\n feature: 'hooks',\n });\n}\n","/**\n * Copilot agents and skills import helpers.\n */\n\nimport { join, basename, dirname } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter, serializeFrontmatter } from '../../utils/markdown.js';\nimport { COPILOT_AGENTS_DIR, COPILOT_SKILLS_DIR } from './constants.js';\n\nconst AB_AGENTS = '.agentsbridge/agents';\n\n/**\n * Import .github/agents/*.agent.md into canonical .agentsbridge/agents/*.md.\n * Strips .agent suffix; maps mcp-servers → mcpServers for canonical compatibility.\n */\nexport async function importAgents(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const agentsDir = join(projectRoot, COPILOT_AGENTS_DIR);\n let files: string[];\n try {\n files = await readDirRecursive(agentsDir);\n } catch {\n return;\n }\n const agentFiles = files.filter((f) => f.endsWith('.agent.md'));\n const destDir = join(projectRoot, AB_AGENTS);\n for (const srcPath of agentFiles) {\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n const base = basename(srcPath, '.agent.md');\n await mkdirp(destDir);\n const destPath = join(destDir, `${base}.md`);\n const { frontmatter, body } = parseFrontmatter(normalize(content, srcPath, destPath));\n const canonicalFm: Record<string, unknown> = {\n name: typeof frontmatter.name === 'string' ? frontmatter.name : base,\n description:\n typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n tools: Array.isArray(frontmatter.tools)\n ? frontmatter.tools.filter((x): x is string => typeof x === 'string')\n : typeof frontmatter.tools === 'string'\n ? [frontmatter.tools]\n : undefined,\n model: typeof frontmatter.model === 'string' ? frontmatter.model : undefined,\n mcpServers: Array.isArray(frontmatter['mcp-servers'])\n ? frontmatter['mcp-servers'].filter((x): x is string => typeof x === 'string')\n : Array.isArray(frontmatter.mcpServers)\n ? frontmatter.mcpServers.filter((x): x is string => typeof x === 'string')\n : undefined,\n skills: Array.isArray(frontmatter.skills)\n ? frontmatter.skills.filter((x): x is string => typeof x === 'string')\n : undefined,\n };\n Object.keys(canonicalFm).forEach((k) => {\n if (canonicalFm[k] === undefined) delete canonicalFm[k];\n });\n const outContent = serializeFrontmatter(canonicalFm, body.trim());\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'copilot',\n fromPath: srcPath,\n toPath: `${AB_AGENTS}/${base}.md`,\n feature: 'agents',\n });\n }\n}\n\nexport async function importSkills(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const skillFiles = await readDirRecursive(join(projectRoot, COPILOT_SKILLS_DIR)).catch(() => []);\n const skillMdFiles = skillFiles.filter((path) => path.endsWith('/SKILL.md'));\n for (const skillMdPath of skillMdFiles) {\n const content = await readFileSafe(skillMdPath);\n if (!content) continue;\n const skillName = basename(dirname(skillMdPath));\n const destSkillDir = join(projectRoot, '.agentsbridge', 'skills', skillName);\n const allSkillFiles = await readDirRecursive(dirname(skillMdPath));\n for (const absPath of allSkillFiles) {\n const fileContent = await readFileSafe(absPath);\n if (fileContent === null) continue;\n const relPath = absPath.slice(dirname(skillMdPath).length + 1).replace(/\\\\/g, '/');\n const destPath = join(destSkillDir, relPath);\n await mkdirp(dirname(destPath));\n await writeFileAtomic(destPath, normalize(fileContent, absPath, destPath));\n results.push({\n fromTool: 'copilot',\n fromPath: absPath,\n toPath: `.agentsbridge/skills/${skillName}/${relPath}`,\n feature: 'skills',\n });\n }\n }\n}\n","import { basename, extname, join } from 'node:path';\nimport { parse as parseYaml } from 'yaml';\nimport type { ImportResult, McpServer } from '../../core/types.js';\nimport { createImportReferenceNormalizer } from '../../core/import-reference-rewriter.js';\nimport { readDirRecursive, readFileSafe, writeFileAtomic } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { importEmbeddedSkills } from '../embedded-skill.js';\nimport {\n serializeImportedCommandWithFallback,\n serializeImportedRuleWithFallback,\n} from '../import-metadata.js';\nimport { toStringArray, toStringRecord } from '../shared-import-helpers.js';\nimport { parseCommandRuleFrontmatter, serializeImportedCommand } from './command-rule.js';\nimport {\n CONTINUE_MCP_DIR,\n CONTINUE_PROMPTS_DIR,\n CONTINUE_RULES_DIR,\n CONTINUE_SKILLS_DIR,\n} from './constants.js';\n\nconst AB_RULES = '.agentsbridge/rules';\nconst AB_COMMANDS = '.agentsbridge/commands';\nconst AB_MCP = '.agentsbridge/mcp.json';\n\nfunction readMcpServers(content: string, extension: string): Record<string, McpServer> {\n const parsed =\n extension === '.json'\n ? (JSON.parse(content) as Record<string, unknown>)\n : ((parseYaml(content) as Record<string, unknown>) ?? {});\n const rawServers = parsed.mcpServers;\n\n if (rawServers && typeof rawServers === 'object' && !Array.isArray(rawServers)) {\n const servers: Record<string, McpServer> = {};\n for (const [name, value] of Object.entries(rawServers)) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) continue;\n const server = value as Record<string, unknown>;\n if (typeof server.command === 'string') {\n servers[name] = {\n type: typeof server.type === 'string' ? server.type : 'stdio',\n command: server.command,\n args: toStringArray(server.args),\n env: toStringRecord(server.env),\n description: typeof server.description === 'string' ? server.description : undefined,\n };\n }\n }\n return servers;\n }\n\n return {};\n}\n\nexport async function importFromContinue(projectRoot: string): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n const normalize = await createImportReferenceNormalizer('continue', projectRoot);\n await importRules(projectRoot, results, normalize);\n await importCommands(projectRoot, results, normalize);\n await importEmbeddedSkills(projectRoot, CONTINUE_SKILLS_DIR, 'continue', results, normalize);\n await importMcp(projectRoot, results);\n return results;\n}\n\nasync function importRules(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const files = (await readDirRecursive(join(projectRoot, CONTINUE_RULES_DIR))).filter((file) =>\n file.endsWith('.md'),\n );\n for (const srcPath of files) {\n const source = await readFileSafe(srcPath);\n if (!source) continue;\n const name = basename(srcPath, '.md');\n const destPath = join(projectRoot, AB_RULES, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalize(source, srcPath, destPath));\n const canonicalFrontmatter: Record<string, unknown> = {\n description:\n typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n globs: Array.isArray(frontmatter.globs) ? frontmatter.globs : undefined,\n root: name === '_root',\n };\n if (canonicalFrontmatter.description === undefined) delete canonicalFrontmatter.description;\n if (canonicalFrontmatter.globs === undefined) delete canonicalFrontmatter.globs;\n const content = await serializeImportedRuleWithFallback(destPath, canonicalFrontmatter, body);\n await writeFileAtomic(destPath, content);\n results.push({\n fromTool: 'continue',\n fromPath: srcPath,\n toPath: `${AB_RULES}/${name}.md`,\n feature: 'rules',\n });\n }\n}\n\nasync function importCommands(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const files = (await readDirRecursive(join(projectRoot, CONTINUE_PROMPTS_DIR))).filter((file) =>\n file.endsWith('.md'),\n );\n for (const srcPath of files) {\n const source = await readFileSafe(srcPath);\n if (!source) continue;\n const name = basename(srcPath, '.md');\n const destPath = join(projectRoot, AB_COMMANDS, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalize(source, srcPath, destPath));\n const command = parseCommandRuleFrontmatter(frontmatter, srcPath);\n const commandName = command.name || name;\n\n const commandPath = join(projectRoot, AB_COMMANDS, `${commandName}.md`);\n const content = await serializeImportedCommandWithFallback(\n commandPath,\n {\n description: command.description,\n hasDescription: Boolean(command.description),\n allowedTools: command.allowedTools,\n hasAllowedTools: command.allowedTools.length > 0,\n },\n parseFrontmatter(serializeImportedCommand(command, body)).body,\n );\n await writeFileAtomic(commandPath, content);\n results.push({\n fromTool: 'continue',\n fromPath: srcPath,\n toPath: `${AB_COMMANDS}/${commandName}.md`,\n feature: 'commands',\n });\n }\n}\n\nasync function importMcp(projectRoot: string, results: ImportResult[]): Promise<void> {\n const files = (await readDirRecursive(join(projectRoot, CONTINUE_MCP_DIR))).filter((file) =>\n ['.json', '.yaml', '.yml'].includes(extname(file)),\n );\n const mergedServers: Record<string, McpServer> = {};\n const importedFrom: string[] = [];\n\n for (const srcPath of files) {\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n Object.assign(mergedServers, readMcpServers(content, extname(srcPath)));\n importedFrom.push(srcPath);\n }\n\n if (Object.keys(mergedServers).length === 0) return;\n const destPath = join(projectRoot, AB_MCP);\n await writeFileAtomic(destPath, JSON.stringify({ mcpServers: mergedServers }, null, 2));\n for (const fromPath of importedFrom) {\n results.push({ fromTool: 'continue', fromPath, toPath: AB_MCP, feature: 'mcp' });\n }\n}\n","import { readdir } from 'node:fs/promises';\nimport { dirname, join, relative } from 'node:path';\nimport type { CanonicalFiles, ImportResult } from '../core/types.js';\nimport { mkdirp, readDirRecursive, readFileSafe, writeFileAtomic } from '../utils/fs.js';\nimport { parseFrontmatter, serializeFrontmatter } from '../utils/markdown.js';\n\nconst AB_SKILLS = '.agentsbridge/skills';\n\nexport interface EmbeddedSkillOutput {\n path: string;\n content: string;\n}\n\nexport function generateEmbeddedSkills(\n canonical: CanonicalFiles,\n skillsDir: string,\n): EmbeddedSkillOutput[] {\n const outputs: EmbeddedSkillOutput[] = [];\n for (const skill of canonical.skills) {\n const frontmatter: Record<string, unknown> = {\n name: skill.name,\n description: skill.description || undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n outputs.push({\n path: `${skillsDir}/${skill.name}/SKILL.md`,\n content: serializeFrontmatter(frontmatter, skill.body.trim() || ''),\n });\n for (const file of skill.supportingFiles) {\n const relativePath = file.relativePath.replace(/\\\\/g, '/');\n outputs.push({\n path: `${skillsDir}/${skill.name}/${relativePath}`,\n content: file.content,\n });\n }\n }\n return outputs;\n}\n\nexport async function importEmbeddedSkills(\n projectRoot: string,\n skillsDir: string,\n fromTool: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const entries = await readdir(join(projectRoot, skillsDir), {\n encoding: 'utf8',\n withFileTypes: true,\n }).catch(() => null);\n if (entries === null) return;\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const sourceSkillDir = join(projectRoot, skillsDir, entry.name);\n const sourceSkillFile = join(sourceSkillDir, 'SKILL.md');\n const sourceSkillContent = await readFileSafe(sourceSkillFile);\n if (sourceSkillContent === null) continue;\n\n const destinationSkillDir = join(projectRoot, AB_SKILLS, entry.name);\n const destinationSkillFile = join(destinationSkillDir, 'SKILL.md');\n const { frontmatter, body } = parseFrontmatter(\n normalize(sourceSkillContent, sourceSkillFile, destinationSkillFile),\n );\n const canonicalFrontmatter: Record<string, unknown> = {\n name: entry.name,\n description:\n typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n };\n if (canonicalFrontmatter.description === undefined) delete canonicalFrontmatter.description;\n const output =\n Object.keys(canonicalFrontmatter).length > 0\n ? serializeFrontmatter(canonicalFrontmatter, body.trim() || '')\n : body.trim() || '';\n await mkdirp(destinationSkillDir);\n await writeFileAtomic(destinationSkillFile, output);\n results.push({\n fromTool,\n fromPath: sourceSkillFile,\n toPath: `${AB_SKILLS}/${entry.name}/SKILL.md`,\n feature: 'skills',\n });\n\n const sourceFiles = await readDirRecursive(sourceSkillDir);\n for (const sourcePath of sourceFiles) {\n if (sourcePath === sourceSkillFile) continue;\n const relativePath = relative(sourceSkillDir, sourcePath).replace(/\\\\/g, '/');\n const sourceContent = await readFileSafe(sourcePath);\n if (sourceContent === null) continue;\n const destinationPath = join(destinationSkillDir, relativePath);\n await mkdirp(dirname(destinationPath));\n await writeFileAtomic(destinationPath, normalize(sourceContent, sourcePath, destinationPath));\n results.push({\n fromTool,\n fromPath: sourcePath,\n toPath: `${AB_SKILLS}/${entry.name}/${relativePath}`,\n feature: 'skills',\n });\n }\n }\n}\n","import { basename } from 'node:path';\nimport type { CanonicalCommand } from '../../core/types.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\nimport { CONTINUE_PROMPTS_DIR } from './constants.js';\n\ninterface ParsedCommandRule {\n name: string;\n description: string;\n allowedTools: string[];\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.filter((entry): entry is string => typeof entry === 'string' && entry.length > 0);\n }\n if (typeof value === 'string' && value.length > 0) {\n return value\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nexport function continueCommandRulePath(name: string): string {\n return `${CONTINUE_PROMPTS_DIR}/${name}.md`;\n}\n\nexport function serializeCommandRule(command: CanonicalCommand): string {\n const frontmatter: Record<string, unknown> = {\n description: command.description || undefined,\n 'x-agentsbridge-kind': 'command',\n 'x-agentsbridge-name': command.name,\n 'x-agentsbridge-allowed-tools':\n command.allowedTools.length > 0 ? command.allowedTools : undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n if (frontmatter['x-agentsbridge-allowed-tools'] === undefined) {\n delete frontmatter['x-agentsbridge-allowed-tools'];\n }\n return serializeFrontmatter(frontmatter, command.body.trim() || '');\n}\n\nexport function parseCommandRuleFrontmatter(\n frontmatter: Record<string, unknown>,\n filePath: string,\n): ParsedCommandRule {\n const fileName = basename(filePath, '.md');\n const fromMetadata =\n typeof frontmatter['x-agentsbridge-name'] === 'string'\n ? frontmatter['x-agentsbridge-name']\n : '';\n const name = (fromMetadata || fileName).trim();\n return {\n name,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n allowedTools: toStringArray(frontmatter['x-agentsbridge-allowed-tools']),\n };\n}\n\nexport function serializeImportedCommand(command: ParsedCommandRule, body: string): string {\n const frontmatter: Record<string, unknown> = {\n description: command.description || undefined,\n 'allowed-tools': command.allowedTools.length > 0 ? command.allowedTools : undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n if (frontmatter['allowed-tools'] === undefined) delete frontmatter['allowed-tools'];\n return serializeFrontmatter(frontmatter, body.trim() || '');\n}\n","export const CONTINUE_RULES_DIR = '.continue/rules';\nexport const CONTINUE_PROMPTS_DIR = '.continue/prompts';\nexport const CONTINUE_MCP_DIR = '.continue/mcpServers';\nexport const CONTINUE_MCP_FILE = `${CONTINUE_MCP_DIR}/agentsbridge.json`;\nexport const CONTINUE_ROOT_RULE = `${CONTINUE_RULES_DIR}/_root.md`;\nexport const CONTINUE_SKILLS_DIR = '.continue/skills';\n","import { basename, join } from 'node:path';\nimport type { ImportResult, McpServer } from '../../core/types.js';\nimport { createImportReferenceNormalizer } from '../../core/import-reference-rewriter.js';\nimport { readFileSafe, writeFileAtomic } from '../../utils/fs.js';\nimport { parseFrontmatter, serializeFrontmatter } from '../../utils/markdown.js';\nimport { importEmbeddedSkills } from '../embedded-skill.js';\nimport {\n serializeImportedCommandWithFallback,\n serializeImportedRuleWithFallback,\n} from '../import-metadata.js';\nimport { importFileDirectory } from '../import-orchestrator.js';\nimport { toStringArray, toStringRecord } from '../shared-import-helpers.js';\nimport {\n JUNIE_AGENTS_DIR,\n JUNIE_AGENTS_FALLBACK,\n JUNIE_COMMANDS_DIR,\n JUNIE_DOT_AGENTS,\n JUNIE_CI_GUIDELINES,\n JUNIE_GUIDELINES,\n JUNIE_IGNORE,\n JUNIE_MCP_FILE,\n JUNIE_SKILLS_DIR,\n} from './constants.js';\n\nconst AB_RULE = '.agentsbridge/rules/_root.md';\nconst AB_RULES_DIR = '.agentsbridge/rules';\nconst AB_COMMANDS_DIR = '.agentsbridge/commands';\nconst AB_AGENTS_DIR = '.agentsbridge/agents';\nconst AB_MCP = '.agentsbridge/mcp.json';\nconst AB_IGNORE = '.agentsbridge/ignore';\n\nfunction readMcpServers(content: string): Record<string, McpServer> {\n const parsed = JSON.parse(content) as Record<string, unknown>;\n const rawServers = parsed.mcpServers;\n if (!rawServers || typeof rawServers !== 'object' || Array.isArray(rawServers)) return {};\n\n const servers: Record<string, McpServer> = {};\n for (const [name, value] of Object.entries(rawServers)) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) continue;\n const server = value as Record<string, unknown>;\n if (typeof server.command === 'string') {\n servers[name] = {\n type: typeof server.type === 'string' ? server.type : 'stdio',\n command: server.command,\n args: toStringArray(server.args),\n env: toStringRecord(server.env),\n description: typeof server.description === 'string' ? server.description : undefined,\n };\n continue;\n }\n if (typeof server.url === 'string') {\n servers[name] = {\n type: typeof server.type === 'string' ? server.type : 'http',\n url: server.url,\n headers: toStringRecord(server.headers),\n env: toStringRecord(server.env),\n description: typeof server.description === 'string' ? server.description : undefined,\n };\n }\n }\n return servers;\n}\n\nasync function importRules(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const sources = [JUNIE_DOT_AGENTS, JUNIE_GUIDELINES, JUNIE_CI_GUIDELINES, JUNIE_AGENTS_FALLBACK];\n const destPath = join(projectRoot, AB_RULE);\n\n for (const relPath of sources) {\n const srcPath = join(projectRoot, relPath);\n const content = await readFileSafe(srcPath);\n if (content === null) continue;\n const { frontmatter, body } = parseFrontmatter(normalize(content, srcPath, destPath));\n const output = await serializeImportedRuleWithFallback(\n destPath,\n {\n root: true,\n description:\n typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n globs: Array.isArray(frontmatter.globs) ? frontmatter.globs : undefined,\n },\n body,\n );\n await writeFileAtomic(destPath, output);\n results.push({ fromTool: 'junie', fromPath: srcPath, toPath: AB_RULE, feature: 'rules' });\n return;\n }\n}\n\nasync function importNonRootRules(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const srcDir = join(projectRoot, '.junie/rules');\n const destDir = join(projectRoot, AB_RULES_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir,\n destDir,\n extensions: ['.md'],\n fromTool: 'junie',\n normalize,\n mapEntry: async ({ srcPath, normalizeTo }) => {\n const name = basename(srcPath, '.md');\n if (!name) return null;\n const destPath = join(destDir, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n const output = await serializeImportedRuleWithFallback(\n destPath,\n {\n root: false,\n description:\n typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n globs: Array.isArray(frontmatter.globs) ? frontmatter.globs : undefined,\n },\n body,\n );\n return {\n destPath,\n toPath: `${AB_RULES_DIR}/${name}.md`,\n feature: 'rules',\n content: output,\n };\n },\n })),\n );\n}\n\nasync function importMcp(projectRoot: string, results: ImportResult[]): Promise<void> {\n const srcPath = join(projectRoot, JUNIE_MCP_FILE);\n const content = await readFileSafe(srcPath);\n if (content === null) return;\n\n const servers = readMcpServers(content);\n if (Object.keys(servers).length === 0) return;\n\n await writeFileAtomic(\n join(projectRoot, AB_MCP),\n JSON.stringify({ mcpServers: servers }, null, 2),\n );\n results.push({ fromTool: 'junie', fromPath: srcPath, toPath: AB_MCP, feature: 'mcp' });\n}\n\nasync function importCommands(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const srcDir = join(projectRoot, JUNIE_COMMANDS_DIR);\n const destDir = join(projectRoot, AB_COMMANDS_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir,\n destDir,\n extensions: ['.md'],\n fromTool: 'junie',\n normalize,\n mapEntry: async ({ srcPath, normalizeTo }) => {\n const name = basename(srcPath, '.md');\n if (!name) return null;\n const destPath = join(destDir, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n const normalized = await serializeImportedCommandWithFallback(\n destPath,\n {\n hasDescription: true,\n description:\n typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n hasAllowedTools: true,\n allowedTools: toStringArray(frontmatter['allowed-tools']),\n },\n body,\n );\n return {\n destPath,\n toPath: `${AB_COMMANDS_DIR}/${name}.md`,\n feature: 'commands',\n content: normalized,\n };\n },\n })),\n );\n}\n\nasync function importAgents(\n projectRoot: string,\n results: ImportResult[],\n normalize: (content: string, sourceFile: string, destinationFile: string) => string,\n): Promise<void> {\n const srcDir = join(projectRoot, JUNIE_AGENTS_DIR);\n const destDir = join(projectRoot, AB_AGENTS_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir,\n destDir,\n extensions: ['.md'],\n fromTool: 'junie',\n normalize,\n mapEntry: ({ srcPath, normalizeTo }) => {\n const name = basename(srcPath, '.md');\n if (!name) return null;\n const destPath = join(destDir, `${name}.md`);\n const { frontmatter, body } = parseFrontmatter(normalizeTo(destPath));\n return {\n destPath,\n toPath: `${AB_AGENTS_DIR}/${name}.md`,\n feature: 'agents',\n content: serializeFrontmatter(frontmatter, body.trim() || ''),\n };\n },\n })),\n );\n}\n\nasync function importIgnore(projectRoot: string, results: ImportResult[]): Promise<void> {\n const srcPath = join(projectRoot, JUNIE_IGNORE);\n const content = await readFileSafe(srcPath);\n if (content === null) return;\n\n await writeFileAtomic(join(projectRoot, AB_IGNORE), content.trimEnd());\n results.push({ fromTool: 'junie', fromPath: srcPath, toPath: AB_IGNORE, feature: 'ignore' });\n}\n\nexport async function importFromJunie(projectRoot: string): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n const normalize = await createImportReferenceNormalizer('junie', projectRoot);\n await importRules(projectRoot, results, normalize);\n await importNonRootRules(projectRoot, results, normalize);\n await importCommands(projectRoot, results, normalize);\n await importAgents(projectRoot, results, normalize);\n await importEmbeddedSkills(projectRoot, JUNIE_SKILLS_DIR, 'junie', results, normalize);\n await importMcp(projectRoot, results);\n await importIgnore(projectRoot, results);\n return results;\n}\n","/**\n * Gemini CLI target importer — GEMINI.md, .gemini/rules, .gemini/commands,\n * .gemini/settings.json → canonical .agentsbridge/.\n */\n\nimport { join, basename, dirname, relative } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { createImportReferenceNormalizer } from '../../core/import-reference-rewriter.js';\nimport { readFileSafe, readDirRecursive, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { serializeImportedRuleWithFallback } from '../import-metadata.js';\nimport { importFileDirectory } from '../import-orchestrator.js';\nimport {\n parseProjectedAgentSkillFrontmatter,\n serializeImportedAgent,\n} from '../projected-agent-skill.js';\nimport { mapGeminiCommandFile, mapGeminiRuleFile } from './importer-mappers.js';\nimport {\n GEMINI_ROOT,\n GEMINI_COMPAT_AGENTS,\n GEMINI_COMPAT_INNER_ROOT,\n GEMINI_RULES_DIR,\n GEMINI_COMMANDS_DIR,\n GEMINI_SKILLS_DIR,\n GEMINI_AGENTS_DIR,\n GEMINI_SYSTEM,\n} from './constants.js';\nimport { importGeminiSettings, importGeminiIgnore } from './format-helpers.js';\nimport { importGeminiPolicies } from './policies-importer.js';\n\nconst AGENTSBRIDGE_RULES = '.agentsbridge/rules';\nconst AGENTSBRIDGE_COMMANDS = '.agentsbridge/commands';\nconst AGENTSBRIDGE_AGENTS = '.agentsbridge/agents';\nconst AGENTSBRIDGE_SKILLS = '.agentsbridge/skills';\n\n/**\n * Import Gemini config into canonical .agentsbridge/.\n *\n * @param projectRoot - Project root directory\n * @returns Import results for each imported file\n */\nexport async function importFromGemini(projectRoot: string): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n const normalize = await createImportReferenceNormalizer('gemini-cli', projectRoot);\n const rulesDir = join(projectRoot, AGENTSBRIDGE_RULES);\n const commandsDir = join(projectRoot, AGENTSBRIDGE_COMMANDS);\n\n const geminiRootPath = join(projectRoot, GEMINI_ROOT);\n const compatAgentsRootPath = join(projectRoot, GEMINI_COMPAT_AGENTS);\n const compatInnerRootPath = join(projectRoot, GEMINI_COMPAT_INNER_ROOT);\n const systemPath = join(projectRoot, GEMINI_SYSTEM);\n\n const geminiRootContent = await readFileSafe(geminiRootPath);\n const compatAgentsRootContent = await readFileSafe(compatAgentsRootPath);\n const compatInnerRootContent = await readFileSafe(compatInnerRootPath);\n const systemContent = await readFileSafe(systemPath);\n\n const rootCandidate =\n [\n { path: geminiRootPath, content: geminiRootContent },\n { path: compatAgentsRootPath, content: compatAgentsRootContent },\n { path: compatInnerRootPath, content: compatInnerRootContent },\n { path: systemPath, content: systemContent },\n ].find((c) => c.content !== null) ?? null;\n\n const rootSourcePath = rootCandidate?.path ?? systemPath;\n const rootContent = rootCandidate?.content ?? null;\n if (rootContent !== null) {\n await mkdirp(rulesDir);\n const destPath = join(rulesDir, '_root.md');\n const { frontmatter, body } = parseFrontmatter(\n normalize(rootContent, rootSourcePath, destPath),\n );\n const hasRoot = frontmatter.root === true;\n const outFm = hasRoot ? frontmatter : { ...frontmatter, root: true };\n const outContent = await serializeImportedRuleWithFallback(destPath, outFm, body);\n await writeFileAtomic(destPath, outContent);\n results.push({\n fromTool: 'gemini-cli',\n fromPath: rootSourcePath,\n toPath: `${AGENTSBRIDGE_RULES}/_root.md`,\n feature: 'rules',\n });\n }\n\n const geminiRulesPath = join(projectRoot, GEMINI_RULES_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: geminiRulesPath,\n destDir: rulesDir,\n extensions: ['.md'],\n fromTool: 'gemini-cli',\n normalize,\n mapEntry: ({ srcPath, normalizeTo }) => mapGeminiRuleFile(srcPath, rulesDir, normalizeTo),\n })),\n );\n\n const geminiCommandsPath = join(projectRoot, GEMINI_COMMANDS_DIR);\n results.push(\n ...(await importFileDirectory({\n srcDir: geminiCommandsPath,\n destDir: commandsDir,\n extensions: ['.md', '.toml'],\n fromTool: 'gemini-cli',\n normalize,\n mapEntry: ({ srcPath, normalizeTo }) =>\n mapGeminiCommandFile(srcPath, commandsDir, normalizeTo, geminiCommandsPath),\n })),\n );\n\n const geminiSkillsPath = join(projectRoot, GEMINI_SKILLS_DIR);\n const skillDirs = await readDirRecursive(geminiSkillsPath);\n const skillMdFiles = skillDirs.filter((f) => basename(f) === 'SKILL.md');\n for (const srcPath of skillMdFiles) {\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n const skillName = basename(srcPath.slice(0, -'/SKILL.md'.length));\n const rawParsed = parseFrontmatter(content);\n const projectedAgent = parseProjectedAgentSkillFrontmatter(rawParsed.frontmatter, skillName);\n if (projectedAgent) {\n const agentsDir = join(projectRoot, AGENTSBRIDGE_AGENTS);\n await mkdirp(agentsDir);\n const agentPath = join(agentsDir, `${projectedAgent.name}.md`);\n await writeFileAtomic(\n agentPath,\n serializeImportedAgent(projectedAgent, normalize(rawParsed.body, srcPath, agentPath)),\n );\n results.push({\n fromTool: 'gemini-cli',\n fromPath: srcPath,\n toPath: `${AGENTSBRIDGE_AGENTS}/${projectedAgent.name}.md`,\n feature: 'agents',\n });\n continue;\n }\n const destPath = join(projectRoot, AGENTSBRIDGE_SKILLS, skillName, 'SKILL.md');\n const normalized = normalize(content, srcPath, destPath);\n const skillDir = join(projectRoot, AGENTSBRIDGE_SKILLS, skillName);\n await mkdirp(skillDir);\n await writeFileAtomic(destPath, normalized);\n results.push({\n fromTool: 'gemini-cli',\n fromPath: srcPath,\n toPath: `${AGENTSBRIDGE_SKILLS}/${skillName}/SKILL.md`,\n feature: 'skills',\n });\n const allSkillFiles = await readDirRecursive(dirname(srcPath));\n for (const absPath of allSkillFiles) {\n if (absPath === srcPath) continue;\n const supportContent = await readFileSafe(absPath);\n if (supportContent === null) continue;\n const relPath = relative(dirname(srcPath), absPath).replace(/\\\\/g, '/');\n const destSupportPath = join(skillDir, relPath);\n await mkdirp(dirname(destSupportPath));\n await writeFileAtomic(destSupportPath, normalize(supportContent, absPath, destSupportPath));\n results.push({\n fromTool: 'gemini-cli',\n fromPath: absPath,\n toPath: `${AGENTSBRIDGE_SKILLS}/${skillName}/${relPath}`,\n feature: 'skills',\n });\n }\n }\n\n const geminiAgentsPath = join(projectRoot, GEMINI_AGENTS_DIR);\n try {\n const agentFiles = await readDirRecursive(geminiAgentsPath);\n const agentMdFiles = agentFiles.filter((f) => f.endsWith('.md'));\n const { serializeFrontmatter } = await import('../../utils/markdown.js');\n for (const srcPath of agentMdFiles) {\n const content = await readFileSafe(srcPath);\n if (!content) continue;\n const { frontmatter, body } = parseFrontmatter(content);\n const name =\n typeof frontmatter.name === 'string' ? frontmatter.name : basename(srcPath, '.md');\n const agentsDir = join(projectRoot, AGENTSBRIDGE_AGENTS);\n await mkdirp(agentsDir);\n const destPath = join(agentsDir, `${name}.md`);\n const normalizedBody = normalize(body, srcPath, destPath);\n const outFm: Record<string, unknown> = { name };\n if (typeof frontmatter.description === 'string') outFm.description = frontmatter.description;\n if (Array.isArray(frontmatter.tools) && frontmatter.tools.length > 0)\n outFm.tools = frontmatter.tools;\n if (typeof frontmatter.model === 'string') outFm.model = frontmatter.model;\n const maxTurns = frontmatter.maxTurns ?? frontmatter['max-turns'] ?? frontmatter.max_turns;\n if (typeof maxTurns === 'number') outFm.maxTurns = maxTurns;\n const pm =\n frontmatter.permissionMode ?? frontmatter['permission-mode'] ?? frontmatter.permission_mode;\n if (typeof pm === 'string') outFm.permissionMode = pm;\n const dt =\n frontmatter.disallowedTools ??\n frontmatter['disallowed-tools'] ??\n frontmatter.disallowed_tools;\n if (Array.isArray(dt) && dt.length > 0) outFm.disallowedTools = dt;\n await writeFileAtomic(destPath, serializeFrontmatter(outFm, normalizedBody.trim() || ''));\n results.push({\n fromTool: 'gemini-cli',\n fromPath: srcPath,\n toPath: `${AGENTSBRIDGE_AGENTS}/${name}.md`,\n feature: 'agents',\n });\n }\n } catch {\n /* GEMINI_AGENTS_DIR may not exist */\n }\n\n await importGeminiSettings(projectRoot, results);\n await importGeminiIgnore(projectRoot, results);\n results.push(...(await importGeminiPolicies(projectRoot)));\n\n return results;\n}\n","import { basename, join, relative } from 'node:path';\nimport { parse as parseToml } from 'smol-toml';\nimport {\n serializeImportedCommandWithFallback,\n serializeImportedRuleWithFallback,\n} from '../import-metadata.js';\nimport type { ImportFileMapping } from '../import-orchestrator.js';\nimport { toGlobsArray, toToolsArray } from '../shared-import-helpers.js';\nimport { parseFlexibleFrontmatter } from './format-helpers.js';\n\nconst AGENTSBRIDGE_RULES = '.agentsbridge/rules';\nconst AGENTSBRIDGE_COMMANDS = '.agentsbridge/commands';\n\nexport async function mapGeminiRuleFile(\n srcPath: string,\n destDir: string,\n normalizeTo: (destinationFile: string) => string,\n): Promise<ImportFileMapping> {\n const destFileName = `${basename(srcPath, '.md')}.md`;\n const destPath = join(destDir, destFileName);\n const { frontmatter, body } = parseFlexibleFrontmatter(normalizeTo(destPath));\n const globs = toGlobsArray(frontmatter.globs);\n const canonicalFm: Record<string, unknown> = {\n root: false,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : undefined,\n globs: globs.length > 0 ? globs : undefined,\n };\n Object.keys(canonicalFm).forEach((key) => {\n if (canonicalFm[key] === undefined) delete canonicalFm[key];\n });\n return {\n destPath,\n toPath: `${AGENTSBRIDGE_RULES}/${destFileName}`,\n feature: 'rules',\n content: await serializeImportedRuleWithFallback(destPath, canonicalFm, body),\n };\n}\n\nexport async function mapGeminiCommandFile(\n srcPath: string,\n destDir: string,\n normalizeTo: (destinationFile: string) => string,\n geminiCommandsRoot: string,\n): Promise<ImportFileMapping> {\n const rel = relative(geminiCommandsRoot, srcPath).replace(/\\\\/g, '/');\n const noExt = rel.replace(/\\.(toml|md)$/i, '');\n const name = noExt.split('/').filter(Boolean).join(':');\n const destPath = join(destDir, `${name}.md`);\n const normalized = normalizeTo(destPath);\n const { frontmatter, body } = srcPath.endsWith('.toml')\n ? parseTomlCommand(normalized)\n : parseFlexibleFrontmatter(normalized);\n const fromCamel = toToolsArray(frontmatter.allowedTools);\n const fromKebab = toToolsArray(frontmatter['allowed-tools']);\n const allowedTools = fromCamel.length > 0 ? fromCamel : fromKebab;\n return {\n destPath,\n toPath: `${AGENTSBRIDGE_COMMANDS}/${name}.md`,\n feature: 'commands',\n content: await serializeImportedCommandWithFallback(\n destPath,\n {\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n hasDescription: Object.prototype.hasOwnProperty.call(frontmatter, 'description'),\n allowedTools,\n hasAllowedTools:\n Object.prototype.hasOwnProperty.call(frontmatter, 'allowedTools') ||\n Object.prototype.hasOwnProperty.call(frontmatter, 'allowed-tools'),\n },\n body,\n ),\n };\n}\n\nfunction parseTomlCommand(normalized: string): {\n frontmatter: Record<string, unknown>;\n body: string;\n} {\n try {\n const parsed = parseToml(normalized) as Record<string, unknown>;\n return {\n frontmatter: parsed,\n body: typeof parsed.prompt === 'string' ? parsed.prompt : '',\n };\n } catch {\n return { frontmatter: {}, body: normalized.trim() };\n }\n}\n","/**\n * Gemini CLI format helpers — flexible frontmatter parsing, hook event mapping,\n * and settings processing (MCP, ignore, hooks).\n */\n\nimport { join } from 'node:path';\nimport { parse as parseToml } from 'smol-toml';\nimport { stringify as stringifyYaml } from 'yaml';\nimport type { ImportResult } from '../../core/types.js';\nimport { getHookCommand, hasHookCommand } from '../../core/hook-command.js';\nimport { readFileSafe, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { parseFrontmatter } from '../../utils/markdown.js';\nimport { GEMINI_SETTINGS, GEMINI_IGNORE } from './constants.js';\n\nconst AGENTSBRIDGE_MCP = '.agentsbridge/mcp.json';\nconst AGENTSBRIDGE_HOOKS = '.agentsbridge/hooks.yaml';\nconst AGENTSBRIDGE_IGNORE = '.agentsbridge/ignore';\n\nexport function mapGeminiHookEvent(event: string): string | null {\n switch (event) {\n case 'BeforeTool':\n case 'preToolUse':\n return 'PreToolUse';\n case 'AfterTool':\n case 'postToolUse':\n return 'PostToolUse';\n case 'Notification':\n case 'notification':\n return 'Notification';\n default:\n return null;\n }\n}\n\n/**\n * Parse frontmatter from YAML (---) or TOML (+++). Falls back to empty on parse failure.\n */\nexport function parseFlexibleFrontmatter(content: string): {\n frontmatter: Record<string, unknown>;\n body: string;\n} {\n const yamlOpen = content.indexOf('---');\n const tomlOpen = content.indexOf('+++');\n if (yamlOpen === 0 && (tomlOpen === -1 || yamlOpen <= tomlOpen)) {\n return parseFrontmatter(content);\n }\n if (tomlOpen === 0) {\n const tomlClose = content.indexOf('+++', 3);\n if (tomlClose !== -1) {\n try {\n const tomlStr = content.slice(3, tomlClose).trim();\n const body = content.slice(tomlClose + 3).trim();\n const parsed = tomlStr === '' ? {} : (parseToml(tomlStr) ?? {});\n const frontmatter = parsed as Record<string, unknown>;\n return { frontmatter, body };\n } catch {\n return { frontmatter: {}, body: content.trim() };\n }\n }\n }\n return { frontmatter: {}, body: content.trim() };\n}\n\nexport async function importGeminiSettings(\n projectRoot: string,\n results: ImportResult[],\n): Promise<void> {\n const settingsPath = join(projectRoot, GEMINI_SETTINGS);\n const settingsContent = await readFileSafe(settingsPath);\n if (settingsContent === null) return;\n\n let settings: Record<string, unknown> | undefined;\n try {\n settings = JSON.parse(settingsContent) as Record<string, unknown>;\n } catch {\n // skip malformed settings\n }\n if (!settings) return;\n\n const mcpServers = settings.mcpServers;\n if (\n mcpServers !== undefined &&\n typeof mcpServers === 'object' &&\n mcpServers !== null &&\n Object.keys(mcpServers).length > 0\n ) {\n const mcpPath = join(projectRoot, AGENTSBRIDGE_MCP);\n await mkdirp(join(projectRoot, '.agentsbridge'));\n await writeFileAtomic(mcpPath, JSON.stringify({ mcpServers: mcpServers }, null, 2));\n results.push({\n fromTool: 'gemini-cli',\n fromPath: settingsPath,\n toPath: AGENTSBRIDGE_MCP,\n feature: 'mcp',\n });\n }\n\n const ignorePatterns = settings.ignorePatterns;\n if (\n Array.isArray(ignorePatterns) &&\n ignorePatterns.length > 0 &&\n ignorePatterns.every((p): p is string => typeof p === 'string')\n ) {\n const ignorePath = join(projectRoot, AGENTSBRIDGE_IGNORE);\n await mkdirp(join(projectRoot, '.agentsbridge'));\n await writeFileAtomic(ignorePath, ignorePatterns.join('\\n') + '\\n');\n results.push({\n fromTool: 'gemini-cli',\n fromPath: settingsPath,\n toPath: AGENTSBRIDGE_IGNORE,\n feature: 'ignore',\n });\n }\n\n const hooks = settings.hooks;\n if (hooks !== undefined && typeof hooks === 'object' && hooks !== null) {\n const mappedHooks = Object.entries(hooks as Record<string, unknown>).flatMap(\n ([event, value]) => {\n const canonicalEvent = mapGeminiHookEvent(event);\n if (!canonicalEvent || !Array.isArray(value)) return [];\n const mapped = value\n .filter(\n (entry): entry is Record<string, unknown> =>\n entry !== null &&\n typeof entry === 'object' &&\n typeof entry.matcher === 'string' &&\n Array.isArray(entry.hooks),\n )\n .flatMap((entry) =>\n (entry.hooks as unknown[])\n .filter(\n (hook): hook is Record<string, unknown> =>\n hook !== null && typeof hook === 'object' && hasHookCommand(hook),\n )\n .map((hook) => ({\n matcher: entry.matcher as string,\n command: getHookCommand(hook),\n type: 'command',\n timeout: typeof hook.timeout === 'number' ? hook.timeout : undefined,\n })),\n );\n if (mapped.length === 0) {\n const legacyMapped = value\n .filter(\n (entry): entry is Record<string, unknown> =>\n entry !== null &&\n typeof entry === 'object' &&\n typeof entry.matcher === 'string' &&\n hasHookCommand(entry),\n )\n .map((entry) => ({\n matcher: entry.matcher as string,\n command: getHookCommand(entry),\n type: 'command',\n }));\n return legacyMapped.length > 0 ? [[canonicalEvent, legacyMapped] as const] : [];\n }\n return mapped.length > 0 ? [[canonicalEvent, mapped] as const] : [];\n },\n );\n if (mappedHooks.length > 0) {\n const hooksYaml = Object.fromEntries(mappedHooks);\n const hooksPath = join(projectRoot, AGENTSBRIDGE_HOOKS);\n await mkdirp(join(projectRoot, '.agentsbridge'));\n await writeFileAtomic(hooksPath, stringifyYaml(hooksYaml, { lineWidth: 0 }).trimEnd());\n results.push({\n fromTool: 'gemini-cli',\n fromPath: settingsPath,\n toPath: AGENTSBRIDGE_HOOKS,\n feature: 'hooks',\n });\n }\n }\n}\n\nexport async function importGeminiIgnore(\n projectRoot: string,\n results: ImportResult[],\n): Promise<void> {\n const geminiIgnorePath = join(projectRoot, GEMINI_IGNORE);\n const geminiIgnoreContent = await readFileSafe(geminiIgnorePath);\n if (geminiIgnoreContent !== null && geminiIgnoreContent.trim()) {\n const patterns = geminiIgnoreContent\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith('#'));\n if (patterns.length > 0) {\n await mkdirp(join(projectRoot, '.agentsbridge'));\n const ignorePath = join(projectRoot, AGENTSBRIDGE_IGNORE);\n await writeFileAtomic(ignorePath, patterns.join('\\n') + '\\n');\n results.push({\n fromTool: 'gemini-cli',\n fromPath: geminiIgnorePath,\n toPath: AGENTSBRIDGE_IGNORE,\n feature: 'ignore',\n });\n }\n }\n}\n","/**\n * Gemini CLI target constants.\n * Gemini uses GEMINI.md (root + embedded non-root rules as sections), .gemini/commands/*.toml,\n * .gemini/settings.json, and .geminiignore.\n */\n\n/** Root rules file path */\nexport const GEMINI_ROOT = 'GEMINI.md';\n\n/** Compatibility root mirror file path */\nexport const GEMINI_COMPAT_AGENTS = 'AGENTS.md';\n\n/**\n * Rules directory — import backward-compat only.\n * Gemini CLI has no native .gemini/rules/ directory (see docs/agent-structures/gemini-cli-project-level-advanced.md).\n * Generator folds non-root rules into GEMINI.md as sections.\n * Importer still reads this dir so users can import old agentsbridge outputs.\n */\nexport const GEMINI_RULES_DIR = '.gemini/rules';\n\n/** Compatibility root mirror file path inside `.gemini/` */\nexport const GEMINI_COMPAT_INNER_ROOT = '.gemini/GEMINI.md';\n\n/** Commands directory */\nexport const GEMINI_COMMANDS_DIR = '.gemini/commands';\n\n/** Policies directory */\nexport const GEMINI_POLICIES_DIR = '.gemini/policies';\n\n/** Settings file (MCP, ignore, hooks) */\nexport const GEMINI_SETTINGS = '.gemini/settings.json';\n\n/** Ignore file */\nexport const GEMINI_IGNORE = '.geminiignore';\n\n/**\n * Skills directory — compatibility mirror.\n * Not a native Gemini CLI project path. Generated as compatibility output;\n * Gemini CLI docs recommend converting skills to commands, agents, or GEMINI.md guidance.\n * See docs/agent-structures/gemini-cli-project-level-advanced.md §9.\n */\nexport const GEMINI_SKILLS_DIR = '.gemini/skills';\n\n/** Agents directory (experimental native agents) */\nexport const GEMINI_AGENTS_DIR = '.gemini/agents';\n\n/** Optional system prompt override */\nexport const GEMINI_SYSTEM = '.gemini/system.md';\n\n/** Default workspace policies file (emitted when canonical permissions are present). */\nexport const GEMINI_DEFAULT_POLICIES_FILE = `${GEMINI_POLICIES_DIR}/permissions.toml`;\n","import { parse as parseToml } from 'smol-toml';\nimport { stringify as stringifyYaml } from 'yaml';\nimport { join } from 'node:path';\nimport type { ImportResult } from '../../core/types.js';\nimport { readDirRecursive, readFileSafe, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { GEMINI_POLICIES_DIR } from './constants.js';\n\nconst AB_PERMISSIONS = '.agentsbridge/permissions.yaml';\n\nfunction unescapeRegexLiteral(value: string): string {\n // Reverse of escapeRegexLiteral: `\\.` -> `.`, `\\/` -> `/`, etc.\n return value.replace(/\\\\(.)/g, '$1');\n}\n\nfunction toolNameToPermissionBase(\n toolName: string,\n): 'Read' | 'Grep' | 'LS' | 'WebFetch' | 'Bash' | null {\n switch (toolName) {\n case 'read_file':\n return 'Read';\n case 'grep_search':\n return 'Grep';\n case 'list_directory':\n return 'LS';\n case 'web_fetch':\n return 'WebFetch';\n case 'run_shell_command':\n return 'Bash';\n default:\n return null;\n }\n}\n\nfunction commandPrefixToBashExpr(prefix: string): string {\n return `Bash(${prefix}:*)`;\n}\n\nfunction argsPatternToReadExpr(argsPattern: string): string {\n return `Read(${unescapeRegexLiteral(argsPattern)})`;\n}\n\nexport async function importGeminiPolicies(projectRoot: string): Promise<ImportResult[]> {\n const results: ImportResult[] = [];\n\n const policiesDir = join(projectRoot, GEMINI_POLICIES_DIR);\n let policyFiles: string[];\n try {\n policyFiles = await readDirRecursive(policiesDir);\n } catch {\n return results;\n }\n\n const tomlFiles = policyFiles.filter((f) => f.endsWith('.toml'));\n if (tomlFiles.length === 0) return results;\n\n const allow: string[] = [];\n const deny: string[] = [];\n const allowSet = new Set<string>();\n const denySet = new Set<string>();\n\n for (const policyPath of tomlFiles) {\n const content = await readFileSafe(policyPath);\n if (!content) continue;\n\n let parsed: unknown;\n try {\n parsed = parseToml(content) as unknown;\n } catch {\n continue;\n }\n\n const rules = (\n parsed && typeof parsed === 'object' && 'rule' in parsed\n ? (parsed as { rule?: unknown }).rule\n : undefined\n ) as unknown;\n if (!Array.isArray(rules)) continue;\n\n for (const rawRule of rules) {\n if (!rawRule || typeof rawRule !== 'object') continue;\n const rule = rawRule as Record<string, unknown>;\n\n const toolName = typeof rule.toolName === 'string' ? rule.toolName : null;\n const decision = typeof rule.decision === 'string' ? rule.decision : null;\n if (!toolName || !decision) continue;\n\n const base = toolNameToPermissionBase(toolName);\n if (!base) continue;\n\n let expr: string | null = null;\n if (base === 'Bash') {\n if (typeof rule.commandPrefix === 'string' && rule.commandPrefix.trim()) {\n expr = commandPrefixToBashExpr(rule.commandPrefix.trim());\n }\n } else if (base === 'Read') {\n if (typeof rule.argsPattern === 'string' && rule.argsPattern.trim()) {\n expr = argsPatternToReadExpr(rule.argsPattern.trim());\n } else {\n expr = 'Read';\n }\n } else {\n expr = base;\n }\n\n if (!expr) continue;\n\n if (decision === 'allow') {\n if (!allowSet.has(expr)) {\n allowSet.add(expr);\n allow.push(expr);\n }\n } else if (decision === 'deny') {\n if (!denySet.has(expr)) {\n denySet.add(expr);\n deny.push(expr);\n }\n }\n }\n }\n\n if (allow.length === 0 && deny.length === 0) return results;\n\n await mkdirp(join(projectRoot, '.agentsbridge'));\n const outPath = join(projectRoot, AB_PERMISSIONS);\n const yaml = stringifyYaml({ allow, deny });\n await writeFileAtomic(outPath, yaml.trimEnd() + '\\n');\n\n results.push({\n fromTool: 'gemini-cli',\n fromPath: join(projectRoot, GEMINI_POLICIES_DIR),\n toPath: AB_PERMISSIONS,\n feature: 'permissions',\n });\n\n return results;\n}\n","/**\n * Shared rules validation for lint. Used by target linters.\n */\n\nimport { relative } from 'node:path';\nimport type { CanonicalFiles, LintDiagnostic } from './types.js';\nimport { globFilter } from '../utils/glob.js';\n\n/**\n * Validate rules and produce diagnostics (without target; caller adds target).\n * @param canonical - Loaded canonical files\n * @param projectRoot - Project root for relative paths\n * @param projectFiles - Relative file paths in project (for glob matching)\n * @returns Diagnostics for rules validation\n */\nexport function validateRules(\n canonical: CanonicalFiles,\n projectRoot: string,\n projectFiles: string[],\n): Omit<LintDiagnostic, 'target'>[] {\n const diags: Omit<LintDiagnostic, 'target'>[] = [];\n const { rules } = canonical;\n\n if (rules.length === 0) return [];\n\n const hasRoot = rules.some((r) => r.root);\n if (!hasRoot) {\n diags.push({\n level: 'error',\n file: relative(projectRoot, rules[0]!.source),\n message: 'Rules exist but no root rule (_root.md or root: true). Add a root rule.',\n });\n }\n\n for (const rule of rules) {\n if (rule.globs.length === 0) continue;\n let anyMatch = false;\n for (const glob of rule.globs) {\n const matches = globFilter(projectFiles, glob);\n if (matches.length > 0) {\n anyMatch = true;\n break;\n }\n }\n if (!anyMatch) {\n diags.push({\n level: 'warning',\n file: relative(projectRoot, rule.source),\n message: `globs \"${rule.globs.join(', ')}\" match 0 files in project`,\n });\n }\n }\n\n return diags;\n}\n","// Glob pattern matching\n\n/**\n * Expand {a,b} into alternatives and test filepath against each.\n * @param filepath - Path to test\n * @param pattern - Glob pattern (minimatch-compatible)\n * @returns true if filepath matches any alternative\n */\nexport function globMatch(filepath: string, pattern: string): boolean {\n const alternatives = expandBraces(pattern);\n return alternatives.some((p) => matchOne(filepath, p));\n}\n\n/**\n * Filter files by glob pattern.\n * @param files - Array of file paths\n * @param pattern - Glob pattern\n * @returns Files matching the pattern\n */\nexport function globFilter(files: string[], pattern: string): string[] {\n return files.filter((f) => globMatch(f, pattern));\n}\n\nfunction expandBraces(pattern: string): string[] {\n const match = pattern.match(/^(.+)\\{([^}]+)\\}(.*)$/);\n if (!match) return [pattern];\n const [, pre, inner, post] = match;\n if (!inner) return [pattern];\n const opts = inner.split(',').map((s) => s.trim());\n const result: string[] = [];\n for (const opt of opts) {\n for (const rest of expandBraces(pre + opt + post)) {\n result.push(rest);\n }\n }\n return result;\n}\n\nfunction matchOne(filepath: string, pattern: string): boolean {\n const re = globToRegex(pattern);\n return re.test(filepath);\n}\n\nfunction globToRegex(pattern: string): RegExp {\n const parts: string[] = [];\n let i = 0;\n while (i < pattern.length) {\n if (pattern.startsWith('**', i)) {\n const rest = pattern.slice(i + 2);\n const alone = rest.length === 0 && parts.length === 0;\n if (alone) {\n parts.push('.*');\n } else {\n // ** matches 0+ path segments. Use (?:[^/]+/)* = \"seg/\" repeated (no leading /), then skip\n // the trailing / from pattern so we don't double it (src/ + seg/ + filename)\n parts.push(rest.startsWith('/') ? '(?:[^/]+/)*' : '(?:/[^/]+)*?');\n if (rest.startsWith('/')) {\n i += 3; // skip ** and the /\n continue;\n }\n }\n i += 2;\n continue;\n }\n if (pattern[i] === '*') {\n parts.push('[^/]*');\n i += 1;\n continue;\n }\n if (pattern[i] === '?') {\n parts.push('[^/]');\n i += 1;\n continue;\n }\n if (pattern[i] === '{') {\n parts.push('(?:');\n i += 1;\n continue;\n }\n if (pattern[i] === '}') {\n parts.push(')');\n i += 1;\n continue;\n }\n if (pattern[i] === ',') {\n parts.push('|');\n i += 1;\n continue;\n }\n const special = '.^$+?()[]{}|\\\\';\n if (special.includes(pattern[i]!)) {\n parts.push('\\\\' + pattern[i]);\n } else {\n parts.push(pattern[i]!);\n }\n i += 1;\n }\n const reStr = '^' + parts.join('') + '$';\n return new RegExp(reStr);\n}\n","/**\n * Claude Code target linter — validates canonical files for Claude Code.\n */\n\nimport type { CanonicalFiles, LintDiagnostic } from '../../core/types.js';\nimport { validateRules } from '../../core/validate-rules.js';\n\nconst TARGET = 'claude-code';\n\n/**\n * Lint rules for Claude Code target.\n * @param canonical - Loaded canonical files\n * @param _projectRoot - Project root (for relative paths)\n * @param projectFiles - Relative file paths for glob matching\n * @returns Diagnostics for this target\n */\nexport function lintRules(\n canonical: CanonicalFiles,\n _projectRoot: string,\n projectFiles: string[],\n): LintDiagnostic[] {\n const diags = validateRules(canonical, _projectRoot, projectFiles);\n return diags.map((d) => ({ ...d, target: TARGET }));\n}\n","/**\n * Cursor target linter — validates canonical files for Cursor.\n */\n\nimport type { CanonicalFiles, LintDiagnostic } from '../../core/types.js';\nimport { validateRules } from '../../core/validate-rules.js';\n\nconst TARGET = 'cursor';\n\n/**\n * Lint rules for Cursor target.\n * @param canonical - Loaded canonical files\n * @param _projectRoot - Project root (for relative paths)\n * @param projectFiles - Relative file paths for glob matching\n * @returns Diagnostics for this target\n */\nexport function lintRules(\n canonical: CanonicalFiles,\n _projectRoot: string,\n projectFiles: string[],\n): LintDiagnostic[] {\n const diags = validateRules(canonical, _projectRoot, projectFiles);\n return diags.map((d) => ({ ...d, target: TARGET }));\n}\n","/**\n * Copilot target linter — validates canonical files for GitHub Copilot.\n */\n\nimport type { CanonicalFiles, LintDiagnostic } from '../../core/types.js';\nimport { validateRules } from '../../core/validate-rules.js';\n\nconst TARGET = 'copilot';\n\n/**\n * Lint rules for Copilot target.\n * @param canonical - Loaded canonical files\n * @param projectRoot - Project root (for relative paths)\n * @param projectFiles - Relative file paths for glob matching\n * @returns Diagnostics for this target\n */\nexport function lintRules(\n canonical: CanonicalFiles,\n projectRoot: string,\n projectFiles: string[],\n): LintDiagnostic[] {\n const diags = validateRules(canonical, projectRoot, projectFiles);\n const targetDiags = diags.map((d) => ({ ...d, target: TARGET }));\n const nonRootWithoutGlobs = canonical.rules.filter(\n (rule) => !rule.root && rule.globs.length === 0,\n );\n return [\n ...targetDiags,\n ...nonRootWithoutGlobs.map((rule) => ({\n level: 'warning' as const,\n file: rule.source,\n target: TARGET,\n message:\n 'Copilot path-specific instructions require applyTo globs; non-root rules without globs are not generated.',\n })),\n ];\n}\n","import type { CanonicalFiles, LintDiagnostic } from '../../core/types.js';\nimport { validateRules } from '../../core/validate-rules.js';\n\nconst TARGET = 'continue';\n\nexport function lintRules(\n canonical: CanonicalFiles,\n projectRoot: string,\n projectFiles: string[],\n): LintDiagnostic[] {\n return validateRules(canonical, projectRoot, projectFiles).map((diagnostic) => ({\n ...diagnostic,\n target: TARGET,\n }));\n}\n","import type { CanonicalFiles, LintDiagnostic } from '../../core/types.js';\nimport { validateRules } from '../../core/validate-rules.js';\n\nconst TARGET = 'junie';\n\nexport function lintRules(\n canonical: CanonicalFiles,\n projectRoot: string,\n projectFiles: string[],\n): LintDiagnostic[] {\n return validateRules(canonical, projectRoot, projectFiles).map((diagnostic) => ({\n ...diagnostic,\n target: TARGET,\n }));\n}\n","/**\n * Gemini CLI target linter — validates canonical files for Gemini CLI.\n */\n\nimport type { CanonicalFiles, LintDiagnostic } from '../../core/types.js';\nimport { validateRules } from '../../core/validate-rules.js';\n\nconst TARGET = 'gemini-cli';\n\n/**\n * Lint rules for Gemini CLI target.\n * @param canonical - Loaded canonical files\n * @param projectRoot - Project root (for relative paths)\n * @param projectFiles - Relative file paths for glob matching\n * @returns Diagnostics for this target\n */\nexport function lintRules(\n canonical: CanonicalFiles,\n projectRoot: string,\n projectFiles: string[],\n): LintDiagnostic[] {\n const diags = validateRules(canonical, projectRoot, projectFiles);\n return diags.map((d) => ({ ...d, target: TARGET }));\n}\n","/**\n * Cline target linter — validates canonical files for Cline.\n */\n\nimport type { CanonicalFiles, LintDiagnostic } from '../../core/types.js';\nimport { validateRules } from '../../core/validate-rules.js';\n\nconst TARGET = 'cline';\n\n/**\n * Lint rules for Cline target.\n * @param canonical - Loaded canonical files\n * @param projectRoot - Project root (for relative paths)\n * @param projectFiles - Relative file paths for glob matching\n * @returns Diagnostics for this target\n */\nexport function lintRules(\n canonical: CanonicalFiles,\n projectRoot: string,\n projectFiles: string[],\n): LintDiagnostic[] {\n const diags = validateRules(canonical, projectRoot, projectFiles);\n return diags.map((d) => ({ ...d, target: TARGET }));\n}\n","/**\n * Codex CLI target linter — validates canonical files for Codex.\n * Codex needs a root rule for AGENTS.md generation and otherwise relies on feature-specific\n * generators for commands, projected agents, skills, and MCP.\n */\n\nimport { relative } from 'node:path';\nimport type { CanonicalFiles, LintDiagnostic } from '../../core/types.js';\n\nconst TARGET = 'codex-cli';\n\n/**\n * Lint rules for Codex target.\n * Codex requires a root rule to generate AGENTS.md.\n * Uses warning (not error) when no root because Codex generation is still useful for other\n * features, but AGENTS.md remains the primary project instruction file.\n *\n * @param canonical - Loaded canonical files\n * @param projectRoot - Project root (for relative paths)\n * @param _projectFiles - Unused here (nested advisory paths derive from globs at generate time)\n * @returns Diagnostics for this target\n */\nexport function lintRules(\n canonical: CanonicalFiles,\n projectRoot: string,\n _projectFiles: string[],\n): LintDiagnostic[] {\n const { rules } = canonical;\n if (rules.length === 0) return [];\n\n const hasRoot = rules.some((r) => r.root);\n if (!hasRoot) {\n return [\n {\n level: 'warning',\n file: relative(projectRoot, rules[0]!.source),\n target: TARGET,\n message: 'Codex needs a root rule to generate AGENTS.md. Add root: true to a rule.',\n },\n ];\n }\n return [];\n}\n","/**\n * Windsurf target linter — validates canonical files for Windsurf.\n * Windsurf supports rules, workflows, skills, hooks, and embedded agents. Warns when no root rule\n * and for features that still have no project-level mapping.\n */\n\nimport { relative } from 'node:path';\nimport type { CanonicalFiles, LintDiagnostic } from '../../core/types.js';\n\nconst TARGET = 'windsurf';\n\n/**\n * Lint rules for Windsurf target.\n * Warns when no root rule and for canonical features Windsurf still cannot project natively\n * or via embedded mappings.\n *\n * @param canonical - Loaded canonical files\n * @param projectRoot - Project root (for relative paths)\n * @param _projectFiles - Unused (Windsurf uses validateRules via globs in non-root rules)\n * @returns Diagnostics for this target\n */\nexport function lintRules(\n canonical: CanonicalFiles,\n projectRoot: string,\n _projectFiles: string[],\n): LintDiagnostic[] {\n const diags: LintDiagnostic[] = [];\n const { rules } = canonical;\n\n if (rules.length > 0) {\n const hasRoot = rules.some((r) => r.root);\n if (!hasRoot) {\n diags.push({\n level: 'warning',\n file: relative(projectRoot, rules[0]!.source),\n target: TARGET,\n message: 'Windsurf needs a root rule to generate AGENTS.md. Add root: true to a rule.',\n });\n }\n }\n\n const unsupported: string[] = [];\n if (\n canonical.permissions &&\n (canonical.permissions.allow.length > 0 || canonical.permissions.deny.length > 0)\n )\n unsupported.push('permissions');\n\n if (unsupported.length > 0) {\n diags.push({\n level: 'warning',\n file: '.agentsbridge',\n target: TARGET,\n message: `Windsurf cannot project these features yet: ${unsupported.join(', ')}.`,\n });\n }\n\n return diags;\n}\n","import type { CanonicalFiles, ImportResult, LintDiagnostic } from '../core/types.js';\nimport { importFromClaudeCode } from './claude-code/importer.js';\nimport { importFromCline } from './cline/importer.js';\nimport { importFromCursor } from './cursor/importer.js';\nimport { importFromCodex } from './codex-cli/importer.js';\nimport { importFromWindsurf } from './windsurf/importer.js';\nimport { importFromCopilot } from './copilot/importer.js';\nimport { importFromContinue } from './continue/importer.js';\nimport { importFromJunie } from './junie/importer.js';\nimport { importFromGemini } from './gemini-cli/importer.js';\nimport { lintRules as claudeCodeLintRules } from './claude-code/linter.js';\nimport { lintRules as cursorLintRules } from './cursor/linter.js';\nimport { lintRules as copilotLintRules } from './copilot/linter.js';\nimport { lintRules as continueLintRules } from './continue/linter.js';\nimport { lintRules as junieLintRules } from './junie/linter.js';\nimport { lintRules as geminiLintRules } from './gemini-cli/linter.js';\nimport { lintRules as clineLintRules } from './cline/linter.js';\nimport { lintRules as codexLintRules } from './codex-cli/linter.js';\nimport { lintRules as windsurfLintRules } from './windsurf/linter.js';\nimport type { TargetCapabilities } from './target.interface.js';\n\nexport const TARGET_IDS = [\n 'claude-code',\n 'cursor',\n 'copilot',\n 'continue',\n 'junie',\n 'gemini-cli',\n 'cline',\n 'codex-cli',\n 'windsurf',\n] as const;\n\nexport type BuiltinTargetId = (typeof TARGET_IDS)[number];\n\ntype RuleLinter = (\n canonical: CanonicalFiles,\n projectRoot: string,\n projectFiles: string[],\n) => LintDiagnostic[];\n\ninterface TargetCatalogEntry {\n importFrom: (root: string) => Promise<ImportResult[]>;\n emptyImportMessage: string;\n lintRules: RuleLinter | null;\n capabilities: TargetCapabilities;\n}\n\nexport const TARGET_CATALOG: Record<BuiltinTargetId, TargetCatalogEntry> = {\n 'claude-code': {\n importFrom: importFromClaudeCode,\n emptyImportMessage: 'No Claude Code config found (CLAUDE.md or .claude/rules/*.md).',\n lintRules: claudeCodeLintRules,\n capabilities: {\n rules: 'native',\n commands: 'native',\n agents: 'native',\n skills: 'native',\n mcp: 'native',\n hooks: 'native',\n ignore: 'native',\n permissions: 'native',\n },\n },\n cursor: {\n importFrom: importFromCursor,\n emptyImportMessage: 'No Cursor config found (AGENTS.md or .cursor/rules/*.mdc).',\n lintRules: cursorLintRules,\n capabilities: {\n rules: 'native',\n commands: 'native',\n agents: 'native',\n skills: 'native',\n mcp: 'native',\n hooks: 'native',\n ignore: 'native',\n permissions: 'partial',\n },\n },\n copilot: {\n importFrom: importFromCopilot,\n emptyImportMessage:\n 'No Copilot config found (.github/copilot-instructions.md, .github/copilot or .github/instructions, .github/prompts, .github/skills, .github/agents, or .github/hooks).',\n lintRules: copilotLintRules,\n capabilities: {\n rules: 'native',\n commands: 'native',\n agents: 'native',\n skills: 'native',\n mcp: 'none',\n hooks: 'partial',\n ignore: 'none',\n permissions: 'none',\n },\n },\n continue: {\n importFrom: importFromContinue,\n emptyImportMessage:\n 'No Continue config found (.continue/rules/*.md, .continue/skills, or .continue/mcpServers/*).',\n lintRules: continueLintRules,\n capabilities: {\n rules: 'native',\n commands: 'embedded',\n agents: 'none',\n skills: 'embedded',\n mcp: 'native',\n hooks: 'none',\n ignore: 'none',\n permissions: 'none',\n },\n },\n junie: {\n importFrom: importFromJunie,\n emptyImportMessage:\n 'No Junie config found (.junie/guidelines.md, .junie/AGENTS.md, .junie/skills, .junie/mcp/mcp.json, or .aiignore).',\n lintRules: junieLintRules,\n capabilities: {\n rules: 'native',\n commands: 'embedded',\n agents: 'embedded',\n skills: 'embedded',\n mcp: 'native',\n hooks: 'none',\n ignore: 'native',\n permissions: 'none',\n },\n },\n 'gemini-cli': {\n importFrom: importFromGemini,\n emptyImportMessage:\n 'No Gemini CLI config found (GEMINI.md or .gemini/rules, .gemini/commands, .gemini/settings.json).',\n lintRules: geminiLintRules,\n capabilities: {\n rules: 'native',\n commands: 'native',\n agents: 'native',\n skills: 'native',\n mcp: 'native',\n hooks: 'partial',\n ignore: 'native',\n permissions: 'partial',\n },\n },\n cline: {\n importFrom: importFromCline,\n emptyImportMessage:\n 'No Cline config found (.clinerules, .clineignore, .cline/mcp_settings.json, or .cline/skills).',\n lintRules: clineLintRules,\n capabilities: {\n rules: 'native',\n commands: 'native',\n agents: 'embedded',\n skills: 'native',\n mcp: 'native',\n hooks: 'none',\n ignore: 'native',\n permissions: 'none',\n },\n },\n 'codex-cli': {\n importFrom: importFromCodex,\n emptyImportMessage: 'No Codex config found (codex.md or AGENTS.md).',\n lintRules: codexLintRules,\n capabilities: {\n rules: 'native',\n commands: 'embedded',\n agents: 'native',\n skills: 'native',\n mcp: 'native',\n hooks: 'none',\n ignore: 'none',\n permissions: 'none',\n },\n },\n windsurf: {\n importFrom: importFromWindsurf,\n emptyImportMessage:\n 'No Windsurf config found (.windsurfrules, .windsurf/rules, .windsurfignore, or .codeiumignore).',\n lintRules: windsurfLintRules,\n capabilities: {\n rules: 'native',\n commands: 'native',\n agents: 'embedded',\n skills: 'native',\n mcp: 'partial',\n hooks: 'native',\n ignore: 'native',\n permissions: 'none',\n },\n },\n};\n\nexport function isBuiltinTargetId(value: string): value is BuiltinTargetId {\n return TARGET_IDS.includes(value as BuiltinTargetId);\n}\n\nexport function getTargetCatalogEntry(id: BuiltinTargetId): TargetCatalogEntry {\n return TARGET_CATALOG[id];\n}\n","/**\n * Load canonical files with extends support. Merges extends then local per PRD section 8.\n */\n\nimport { join } from 'node:path';\nimport type { CanonicalFiles } from '../core/types.js';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport type { ResolvedExtend } from '../config/resolver.js';\nimport { resolveExtendPaths } from '../config/resolver.js';\nimport { loadCanonicalFiles } from './loader.js';\nimport { mergeCanonicalFiles } from './merge.js';\nimport { loadCanonicalForExtend } from './extend-load.js';\nimport { applyExtendPick } from './extend-pick.js';\nimport { loadPacksCanonical } from './pack-load.js';\n\nconst FEATURE_TO_KEYS: Record<string, (keyof CanonicalFiles)[]> = {\n rules: ['rules'],\n commands: ['commands'],\n agents: ['agents'],\n skills: ['skills'],\n mcp: ['mcp'],\n permissions: ['permissions'],\n hooks: ['hooks'],\n ignore: ['ignore'],\n};\n\n/**\n * Filter canonical files to include only features in the given list.\n * @param canonical - Full canonical files\n * @param features - Feature names to include (rules, commands, etc.)\n * @returns CanonicalFiles with only specified features; others empty/null\n */\nexport function filterCanonicalByFeatures(\n canonical: CanonicalFiles,\n features: string[],\n): CanonicalFiles {\n if (features.length === 0) {\n return emptyCanonical();\n }\n const keys = new Set(features.flatMap((f) => FEATURE_TO_KEYS[f] ?? []));\n return {\n rules: keys.has('rules') ? canonical.rules : [],\n commands: keys.has('commands') ? canonical.commands : [],\n agents: keys.has('agents') ? canonical.agents : [],\n skills: keys.has('skills') ? canonical.skills : [],\n mcp: keys.has('mcp') ? canonical.mcp : null,\n permissions: keys.has('permissions') ? canonical.permissions : null,\n hooks: keys.has('hooks') ? canonical.hooks : null,\n ignore: keys.has('ignore') ? canonical.ignore : [],\n };\n}\n\nfunction emptyCanonical(): CanonicalFiles {\n return {\n rules: [],\n commands: [],\n agents: [],\n skills: [],\n mcp: null,\n permissions: null,\n hooks: null,\n ignore: [],\n };\n}\n\n/**\n * Load canonical files from project, merging extends in order then local.\n * extends[0] → extends[1] → … → local .agentsbridge/\n *\n * @param config - Validated config with extends\n * @param configDir - Absolute path to directory containing agentsbridge.yaml\n * @returns Merged CanonicalFiles and resolved extends (for lock checksums)\n * @throws Error if extend path missing or remote\n */\nexport async function loadCanonicalWithExtends(\n config: ValidatedConfig,\n configDir: string,\n options: { refreshRemoteCache?: boolean } = {},\n): Promise<{ canonical: CanonicalFiles; resolvedExtends: ResolvedExtend[] }> {\n const resolvedExtends = await resolveExtendPaths(config, configDir, {\n refreshCache: options.refreshRemoteCache === true,\n });\n\n let merged = emptyCanonical();\n\n for (const ext of resolvedExtends) {\n const extCanonical = await loadCanonicalForExtend(ext);\n const filtered = filterCanonicalByFeatures(extCanonical, ext.features);\n const picked = applyExtendPick(filtered, ext.features, ext.pick, ext.name);\n merged = mergeCanonicalFiles(merged, picked);\n }\n\n const packsCanonical = await loadPacksCanonical(join(configDir, '.agentsbridge'));\n merged = mergeCanonicalFiles(merged, packsCanonical);\n\n const localCanonical = await loadCanonicalFiles(configDir);\n merged = mergeCanonicalFiles(merged, localCanonical);\n\n return { canonical: merged, resolvedExtends };\n}\n","/**\n * Resolve extends (local paths plus supported remote sources).\n * Raw http/https URLs are not supported.\n */\n\nimport { mkdir, rm } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport type { ExtendPick, ValidatedConfig } from './schema.js';\nimport { exists } from '../utils/fs.js';\nimport { fetchRemoteExtend, getCacheDir } from './remote-fetcher.js';\nimport { isSupportedRemoteSource } from './remote-source.js';\n\n/** Resolved extend: source path resolved to absolute directory */\nexport interface ResolvedExtend {\n name: string;\n resolvedPath: string;\n features: string[];\n target?: string;\n /** Resolved version for remote extends. Undefined for local. */\n version?: string;\n /** Repo-relative path for discovery (skill packs, nested layouts). */\n path?: string;\n pick?: ExtendPick;\n}\n\nexport interface ResolveExtendOptions {\n refreshCache?: boolean;\n}\n\nfunction isOtherRemoteSource(source: string): boolean {\n return source.startsWith('http://') || source.startsWith('https://');\n}\n\n/**\n * Resolve extend sources to absolute paths.\n * Local paths (./, ../) resolved relative to configDir.\n * Supported remotes: github:, gitlab:, git+https://..., git+ssh://..., git+file://...\n *\n * @param config - Validated config with extends\n * @param configDir - Absolute path to directory containing agentsbridge.yaml\n * @returns Resolved extends with absolute paths\n * @throws Error if path does not exist or source is unsupported remote\n */\nexport async function resolveExtendPaths(\n config: ValidatedConfig,\n configDir: string,\n options: ResolveExtendOptions = {},\n): Promise<ResolvedExtend[]> {\n if (config.extends.length === 0) {\n return [];\n }\n\n if (\n options.refreshCache === true &&\n config.extends.some((e) => isSupportedRemoteSource(e.source))\n ) {\n const cacheDir = getCacheDir();\n await rm(cacheDir, { recursive: true, force: true });\n await mkdir(cacheDir, { recursive: true });\n }\n\n const result: ResolvedExtend[] = [];\n\n for (const ext of config.extends) {\n if (isOtherRemoteSource(ext.source)) {\n throw new Error(\n `Remote extends (http/https) not supported: \"${ext.source}\" for extend \"${ext.name}\". ` +\n 'Use github:org/repo@tag, gitlab:group/project@ref, git+https://host/org/repo.git#ref, or a local path (e.g. ./shared/).',\n );\n }\n\n if (isSupportedRemoteSource(ext.source)) {\n const fetched = await fetchRemoteExtend(ext.source, ext.name, {\n cacheDir: getCacheDir(),\n refresh: options.refreshCache === true,\n });\n result.push({\n name: ext.name,\n resolvedPath: fetched.resolvedPath,\n features: [...ext.features],\n target: ext.target,\n version: fetched.version,\n path: ext.path,\n pick: ext.pick,\n });\n continue;\n }\n\n const resolvedPath = resolve(configDir, ext.source);\n\n if (!(await exists(resolvedPath))) {\n throw new Error(\n `Extend \"${ext.name}\": path does not exist: ${resolvedPath}. ` +\n `Check extends.source in agentsbridge.yaml.`,\n );\n }\n\n result.push({\n name: ext.name,\n resolvedPath,\n features: [...ext.features],\n target: ext.target,\n path: ext.path,\n pick: ext.pick,\n });\n }\n\n return result;\n}\n","/**\n * Remote extend fetcher — dispatches to supported remote source providers.\n */\n\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { fetchGitRemoteExtend } from './git-remote.js';\nimport { fetchGithubRemoteExtend, resolveLatestTag } from './github-remote.js';\nimport {\n parseGitSource,\n parseGitlabSource,\n parseGithubSource,\n parseRemoteSource,\n} from './remote-source.js';\nimport { sweepStaleCache } from '../install/cache-cleanup.js';\n\nexport { parseGitSource, parseGitlabSource, parseGithubSource, resolveLatestTag };\n\n/** Result of fetching a remote extend */\nexport interface FetchRemoteResult {\n resolvedPath: string;\n version: string;\n}\n\n/** Options for fetchRemoteExtend */\nexport interface FetchRemoteOptions {\n cacheDir?: string;\n token?: string;\n refresh?: boolean;\n /** When false, network failure does not fall back to cached tarball (install flow). */\n allowOfflineFallback?: boolean;\n}\n\nexport function buildCacheKey(provider: string, identifier: string, ref: string): string {\n const safe = (value: string): string => value.replace(/[^a-zA-Z0-9_-]/g, '_');\n if (provider === 'github') {\n const [org, repo] = identifier.split('/', 2);\n if (org && repo) return `${safe(org)}-${safe(repo)}-${safe(ref)}`;\n }\n return `${safe(provider)}_${safe(identifier)}_${safe(ref)}`;\n}\n\n/**\n * Get default cache directory (~/.agentsbridge/cache or AGENTSBRIDGE_CACHE).\n */\nexport function getCacheDir(): string {\n const env = process.env.AGENTSBRIDGE_CACHE;\n if (env) return env;\n return join(homedir(), '.agentsbridge', 'cache');\n}\n\n/**\n * Fetch remote extend, supporting GitHub tarballs and Git-backed providers.\n */\nexport async function fetchRemoteExtend(\n source: string,\n extendName: string,\n options: FetchRemoteOptions = {},\n): Promise<FetchRemoteResult> {\n const parsed = parseRemoteSource(source);\n if (!parsed) {\n if (source.startsWith('github:')) {\n throw new Error(`Invalid github: source: \"${source}\" for extend \"${extendName}\"`);\n }\n if (source.startsWith('gitlab:')) {\n throw new Error(`Invalid gitlab: source: \"${source}\" for extend \"${extendName}\"`);\n }\n if (source.startsWith('git+')) {\n throw new Error(`Invalid git+ source: \"${source}\" for extend \"${extendName}\"`);\n }\n throw new Error(\n `Invalid remote source: \"${source}\" for extend \"${extendName}\". ` +\n 'Use github:org/repo@tag, gitlab:group/project@ref, or git+https://host/org/repo.git#ref.',\n );\n }\n\n const cacheDir = options.cacheDir ?? getCacheDir();\n\n // Fire-and-forget: sweep entries older than AGENTSBRIDGE_CACHE_MAX_AGE_DAYS (default 30d)\n // so the cache does not grow unboundedly without user intervention.\n void sweepStaleCache(cacheDir).catch(() => {});\n\n if (parsed.kind === 'github') {\n return fetchGithubRemoteExtend(\n parsed,\n extendName,\n options,\n cacheDir,\n buildCacheKey,\n !source.includes('@'),\n );\n }\n return fetchGitRemoteExtend(parsed, extendName, options, cacheDir, buildCacheKey);\n}\n","import { execFile } from 'node:child_process';\nimport { mkdir, rename, rm } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { URL } from 'node:url';\nimport { promisify } from 'node:util';\nimport { exists } from '../utils/fs.js';\nimport type { FetchRemoteOptions, FetchRemoteResult } from './remote-fetcher.js';\nimport type { ParsedGitSource, ParsedGitlabSource } from './remote-source.js';\n\nconst execFileAsync = promisify(execFile);\nconst REPO_DIRNAME = 'repo';\n\nexport async function fetchGitRemoteExtend(\n parsed: ParsedGitSource | ParsedGitlabSource,\n extendName: string,\n options: FetchRemoteOptions,\n cacheDir: string,\n buildCacheKey: (provider: string, identifier: string, ref: string) => string,\n): Promise<FetchRemoteResult> {\n const provider = 'cloneUrl' in parsed ? 'gitlab' : 'git';\n const identifier = 'cloneUrl' in parsed ? `${parsed.namespace}/${parsed.project}` : parsed.url;\n const ref = parsed.ref ?? 'HEAD';\n const cacheKey = buildCacheKey(provider, identifier, ref);\n const cacheRoot = join(cacheDir, cacheKey);\n const cacheRepoDir = join(cacheRoot, REPO_DIRNAME);\n const stagedRoot = `${cacheRoot}.tmp`;\n const stagedRepoDir = join(stagedRoot, REPO_DIRNAME);\n\n if (!options.refresh && (await hasCachedRepo(cacheRepoDir))) {\n return readCachedRepo(cacheRepoDir);\n }\n\n try {\n await rm(stagedRoot, { recursive: true, force: true });\n await mkdir(stagedRoot, { recursive: true });\n await cloneRepo(resolveCloneUrl(parsed), stagedRepoDir);\n if (parsed.ref) await checkoutRef(stagedRepoDir, parsed.ref);\n await rm(cacheRoot, { recursive: true, force: true });\n await rename(stagedRoot, cacheRoot);\n return readCachedRepo(cacheRepoDir);\n } catch (err) {\n await rm(stagedRoot, { recursive: true, force: true });\n const allowFallback = options.allowOfflineFallback !== false;\n if (allowFallback && (await hasCachedRepo(cacheRepoDir))) {\n console.warn(\n `[agentsbridge] Remote fetch failed for ${extendName}; using cached version. Error: ${err instanceof Error ? err.message : String(err)}`,\n );\n return readCachedRepo(cacheRepoDir);\n }\n throw err;\n }\n}\n\nasync function readCachedRepo(repoDir: string): Promise<FetchRemoteResult> {\n return {\n resolvedPath: repoDir,\n version: await getHeadSha(repoDir),\n };\n}\n\nasync function hasCachedRepo(repoDir: string): Promise<boolean> {\n return exists(repoDir);\n}\n\nfunction resolveCloneUrl(parsed: ParsedGitSource | ParsedGitlabSource): string {\n if ('cloneUrl' in parsed) {\n const token = process.env.AGENTSBRIDGE_GITLAB_TOKEN;\n if (token) {\n const url = new URL(parsed.cloneUrl);\n if (url.protocol === 'https:') {\n url.username = 'oauth2';\n url.password = token;\n return url.toString();\n }\n }\n return parsed.cloneUrl;\n }\n return parsed.url;\n}\n\nasync function cloneRepo(cloneUrl: string, repoDir: string): Promise<void> {\n await runGit(['clone', cloneUrl, repoDir]);\n}\n\nasync function checkoutRef(repoDir: string, ref: string): Promise<void> {\n await runGit(['checkout', ref], repoDir);\n}\n\nasync function getHeadSha(repoDir: string): Promise<string> {\n return runGit(['rev-parse', 'HEAD'], repoDir);\n}\n\nasync function runGit(args: string[], cwd?: string): Promise<string> {\n const { stdout } = await execFileAsync('git', args, {\n cwd,\n env: {\n ...process.env,\n GIT_TERMINAL_PROMPT: '0',\n },\n });\n return stdout.trim();\n}\n","import { join } from 'node:path';\nimport { readdir, writeFile } from 'node:fs/promises';\nimport { mkdir, rm } from 'node:fs/promises';\nimport * as tar from 'tar';\nimport { exists } from '../utils/fs.js';\nimport { fetchGitRemoteExtend } from './git-remote.js';\nimport type { FetchRemoteOptions, FetchRemoteResult } from './remote-fetcher.js';\nimport type { ParsedGitSource } from './remote-source.js';\nimport type { ParsedGithubSource } from './remote-source.js';\n\nexport async function resolveLatestTag(org: string, repo: string, token?: string): Promise<string> {\n const url = `https://api.github.com/repos/${org}/${repo}/releases/latest`;\n const headers: Record<string, string> = {\n Accept: 'application/vnd.github+json',\n };\n if (token) headers.Authorization = `Bearer ${token}`;\n\n const res = await globalThis.fetch(url, { headers });\n if (!res.ok) {\n throw new Error(\n `Failed to resolve latest release for ${org}/${repo}: ${res.status} ${res.statusText}`,\n );\n }\n const data = (await res.json()) as { tag_name?: string };\n if (!data.tag_name || typeof data.tag_name !== 'string') {\n throw new Error(`No tag_name in releases/latest response for ${org}/${repo}`);\n }\n return data.tag_name;\n}\n\nexport async function fetchGithubRemoteExtend(\n parsed: ParsedGithubSource,\n extendName: string,\n options: FetchRemoteOptions,\n cacheDir: string,\n buildCacheKey: (provider: string, identifier: string, ref: string) => string,\n allowDefaultBranchFallback = false,\n): Promise<FetchRemoteResult> {\n const token = options.token ?? process.env.AGENTSBRIDGE_GITHUB_TOKEN;\n const refresh = options.refresh === true;\n let tag = parsed.tag;\n if (tag === 'latest') {\n try {\n tag = await resolveLatestTag(parsed.org, parsed.repo, token);\n } catch (err) {\n if (!allowDefaultBranchFallback) throw err;\n return fetchGithubDefaultBranch(parsed, extendName, options, cacheDir, buildCacheKey, token);\n }\n }\n const cacheKey = buildCacheKey('github', `${parsed.org}/${parsed.repo}`, tag);\n const extractDir = join(cacheDir, cacheKey);\n\n if (!refresh && (await exists(extractDir))) {\n const topDir = await findExtractTopDir(extractDir);\n if (topDir) return { resolvedPath: join(extractDir, topDir), version: tag };\n }\n\n const tarballUrl = `https://github.com/${parsed.org}/${parsed.repo}/tarball/${tag}`;\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n let tarballBuffer: ArrayBuffer;\n try {\n const res = await globalThis.fetch(tarballUrl, { headers, redirect: 'follow' });\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${res.statusText}`);\n tarballBuffer = await res.arrayBuffer();\n } catch (err) {\n const allowFallback = options.allowOfflineFallback !== false;\n if (allowFallback && (await exists(extractDir))) {\n const topDir = await findExtractTopDir(extractDir);\n if (topDir) {\n console.warn(\n `[agentsbridge] Network failed for ${extendName}; using cached version. Error: ${err instanceof Error ? err.message : String(err)}`,\n );\n return { resolvedPath: join(extractDir, topDir), version: tag };\n }\n }\n throw err;\n }\n\n await rm(extractDir, { recursive: true, force: true });\n await mkdir(extractDir, { recursive: true });\n const tarPath = join(extractDir, 'archive.tar.gz');\n await writeFile(tarPath, new Uint8Array(tarballBuffer));\n try {\n await tar.extract({\n file: tarPath,\n cwd: extractDir,\n filter: (entryPath: string) => !isZipSlipPath(entryPath),\n });\n } finally {\n await rm(tarPath, { force: true }).catch(() => {});\n }\n\n const topDir = await findExtractTopDir(extractDir);\n if (!topDir) {\n throw new Error(\n `Extend \"${extendName}\": archive has no top-level directory. ` +\n `Expected a single top-level directory inside the archive.`,\n );\n }\n\n const resolvedPath = join(extractDir, topDir);\n return { resolvedPath, version: tag };\n}\n\nasync function findExtractTopDir(extractDir: string): Promise<string | null> {\n const entries = await readdir(extractDir, { withFileTypes: true });\n const dirs = entries.filter((entry) => entry.isDirectory() && !entry.name.startsWith('.'));\n return dirs.length === 1 ? dirs[0]!.name : null;\n}\n\nfunction buildGithubCloneUrl(org: string, repo: string, token?: string): string {\n if (!token) return `https://github.com/${org}/${repo}.git`;\n return `https://x-access-token:${encodeURIComponent(token)}@github.com/${org}/${repo}.git`;\n}\n\nfunction isZipSlipPath(entryPath: string): boolean {\n const normalized = entryPath.replace(/\\\\/g, '/');\n return normalized.startsWith('/') || normalized.split('/').includes('..');\n}\n\nasync function fetchGithubDefaultBranch(\n parsed: ParsedGithubSource,\n extendName: string,\n options: FetchRemoteOptions,\n cacheDir: string,\n buildCacheKey: (provider: string, identifier: string, ref: string) => string,\n token?: string,\n): Promise<FetchRemoteResult> {\n const cloneUrls = token\n ? [buildGithubCloneUrl(parsed.org, parsed.repo, token)]\n : [\n buildGithubCloneUrl(parsed.org, parsed.repo),\n `ssh://git@github.com/${parsed.org}/${parsed.repo}.git`,\n ];\n\n let lastError: unknown;\n for (const url of cloneUrls) {\n const gitSource: ParsedGitSource = { url };\n try {\n return await fetchGitRemoteExtend(gitSource, extendName, options, cacheDir, buildCacheKey);\n } catch (err) {\n lastError = err;\n }\n }\n\n throw lastError instanceof Error ? lastError : new Error('Failed to clone GitHub default branch');\n}\n","import { URL } from 'node:url';\n\nexport interface ParsedGithubSource {\n org: string;\n repo: string;\n tag: string;\n}\n\nexport interface ParsedGitlabSource {\n namespace: string;\n project: string;\n ref?: string;\n cloneUrl: string;\n}\n\nexport interface ParsedGitSource {\n url: string;\n ref?: string;\n}\n\nexport type ParsedRemoteSource =\n | ({ kind: 'github' } & ParsedGithubSource)\n | ({ kind: 'gitlab' } & ParsedGitlabSource)\n | ({ kind: 'git' } & ParsedGitSource);\n\nfunction splitSourceRef(\n source: string,\n prefix: string,\n defaultRef?: string,\n): [string, string?] | null {\n if (!source.startsWith(prefix)) return null;\n const rest = source.slice(prefix.length).trim();\n if (!rest) return null;\n const refIdx = rest.lastIndexOf('@');\n if (refIdx < 0) return [rest, defaultRef];\n const slug = rest.slice(0, refIdx).trim();\n const ref = rest.slice(refIdx + 1).trim();\n if (!slug || !ref) return null;\n return [slug, ref];\n}\n\nexport function parseGithubSource(source: string): ParsedGithubSource | null {\n const parts = splitSourceRef(source, 'github:', 'latest');\n if (!parts) return null;\n const [slug, tag] = parts;\n const slash = slug.indexOf('/');\n if (slash < 0) return null;\n const org = slug.slice(0, slash).trim();\n const repo = slug.slice(slash + 1).trim();\n if (!org || !repo || !tag) return null;\n return { org, repo, tag };\n}\n\nexport function parseGitlabSource(source: string): ParsedGitlabSource | null {\n const parts = splitSourceRef(source, 'gitlab:');\n if (!parts) return null;\n const [slug, ref] = parts;\n const slash = slug.lastIndexOf('/');\n if (slash < 0) return null;\n const namespace = slug.slice(0, slash).trim();\n const project = slug.slice(slash + 1).trim();\n if (!namespace || !project) return null;\n return {\n namespace,\n project,\n ref,\n cloneUrl: `https://gitlab.com/${namespace}/${project}.git`,\n };\n}\n\nexport function parseGitSource(source: string): ParsedGitSource | null {\n if (!source.startsWith('git+')) return null;\n const rest = source.slice(4).trim();\n if (!rest) return null;\n const hashIdx = rest.lastIndexOf('#');\n const url = (hashIdx < 0 ? rest : rest.slice(0, hashIdx)).trim();\n const ref = hashIdx < 0 ? undefined : rest.slice(hashIdx + 1).trim();\n if (!url || (hashIdx >= 0 && !ref)) return null;\n\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(url);\n } catch {\n return null;\n }\n if (!['https:', 'http:', 'ssh:', 'file:'].includes(parsedUrl.protocol)) {\n return null;\n }\n return { url, ref };\n}\n\nexport function parseRemoteSource(source: string): ParsedRemoteSource | null {\n const github = parseGithubSource(source);\n if (github) return { kind: 'github', ...github };\n\n const gitlab = parseGitlabSource(source);\n if (gitlab) return { kind: 'gitlab', ...gitlab };\n\n const git = parseGitSource(source);\n if (git) return { kind: 'git', ...git };\n\n return null;\n}\n\nexport function isSupportedRemoteSource(source: string): boolean {\n return parseRemoteSource(source) !== null;\n}\n","/**\n * Remove specific cache entry after successful pack materialization.\n * Also provides automatic TTL-based sweep to prevent unbounded cache growth.\n */\n\nimport { join } from 'node:path';\nimport { readdir, rm, stat } from 'node:fs/promises';\nimport { buildCacheKey, getCacheDir } from '../config/remote-fetcher.js';\nimport { parseRemoteSource } from '../config/remote-source.js';\n\n/**\n * Derive the cache key for a sourceForYaml string.\n * Returns null for local sources or unparseable strings.\n */\nexport function cacheKeyFromSource(source: string): string | null {\n const parsed = parseRemoteSource(source);\n if (!parsed) return null;\n\n if (parsed.kind === 'github') {\n return buildCacheKey('github', `${parsed.org}/${parsed.repo}`, parsed.tag);\n }\n if (parsed.kind === 'gitlab') {\n return buildCacheKey('gitlab', `${parsed.namespace}/${parsed.project}`, parsed.ref ?? 'HEAD');\n }\n // git\n return buildCacheKey('git', parsed.url, parsed.ref ?? 'HEAD');\n}\n\n/**\n * Remove the cache directory for a specific install source.\n * No-op for local sources or if cache entry does not exist.\n *\n * @param source - sourceForYaml string (e.g. \"github:org/repo@sha\")\n * @param cacheDir - Override cache directory (defaults to getCacheDir())\n */\nexport async function cleanInstallCache(source: string, cacheDir?: string): Promise<void> {\n const key = cacheKeyFromSource(source);\n if (!key) return; // local source — no cache to clean\n\n const dir = cacheDir ?? getCacheDir();\n const entryPath = join(dir, key);\n await rm(entryPath, { recursive: true, force: true });\n}\n\n/**\n * Remove all cache entries whose mtime is older than maxAgeMs.\n * Defaults to AGENTSBRIDGE_CACHE_MAX_AGE_DAYS env var (default: 30 days).\n * No-op if the cache directory does not exist or is empty.\n *\n * @param cacheDir - Cache directory to sweep (defaults to getCacheDir())\n * @param maxAgeMs - Maximum age in milliseconds before an entry is considered stale\n */\nexport async function sweepStaleCache(cacheDir?: string, maxAgeMs?: number): Promise<void> {\n const dir = cacheDir ?? getCacheDir();\n const threshold =\n maxAgeMs ?? Number(process.env.AGENTSBRIDGE_CACHE_MAX_AGE_DAYS ?? 30) * 86_400_000;\n\n let entries: string[];\n try {\n entries = await readdir(dir);\n } catch {\n return; // cache dir doesn't exist yet\n }\n\n const now = Date.now();\n await Promise.all(\n entries.map(async (entry) => {\n const entryPath = join(dir, entry);\n try {\n const { mtimeMs } = await stat(entryPath);\n if (now - mtimeMs > threshold) {\n await rm(entryPath, { recursive: true, force: true });\n }\n } catch {\n // entry disappeared between readdir and stat — ignore\n }\n }),\n );\n}\n","/**\n * Load all canonical files from .agentsbridge/ into CanonicalFiles.\n */\n\nimport { join } from 'node:path';\nimport type { CanonicalFiles } from '../core/types.js';\nimport { parseRules } from './rules.js';\nimport { parseCommands } from './commands.js';\nimport { parseAgents } from './agents.js';\nimport { parseSkills } from './skills.js';\nimport { parseMcp } from './mcp.js';\nimport { parsePermissions } from './permissions.js';\nimport { parseHooks } from './hooks.js';\nimport { parseIgnore } from './ignore.js';\n\n/**\n * Load all canonical files from .agentsbridge/ at the given project root.\n * Missing directories/files yield empty arrays or null as per each parser.\n *\n * @param projectRoot - Absolute path to project root (containing .agentsbridge/)\n * @returns CanonicalFiles with all parsed data\n */\nexport async function loadCanonicalFiles(projectRoot: string): Promise<CanonicalFiles> {\n const abDir = join(projectRoot, '.agentsbridge');\n\n const [rules, commands, agents, skills, mcp, permissions, hooks, ignore] = await Promise.all([\n parseRules(join(abDir, 'rules')),\n parseCommands(join(abDir, 'commands')),\n parseAgents(join(abDir, 'agents')),\n parseSkills(join(abDir, 'skills')),\n parseMcp(join(abDir, 'mcp.json')),\n parsePermissions(join(abDir, 'permissions.yaml')),\n parseHooks(join(abDir, 'hooks.yaml')),\n parseIgnore(join(abDir, 'ignore')),\n ]);\n\n return {\n rules,\n commands,\n agents,\n skills,\n mcp,\n permissions,\n hooks,\n ignore,\n };\n}\n","/**\n * Parse .agentsbridge/rules/*.md into CanonicalRule objects.\n */\n\nimport { basename } from 'node:path';\nimport type { CanonicalRule } from '../core/types.js';\nimport { readFileSafe, readDirRecursive } from '../utils/fs.js';\nimport { parseFrontmatter } from '../utils/markdown.js';\n\nconst VALID_TRIGGERS = ['always_on', 'model_decision', 'glob', 'manual'] as const;\ntype Trigger = (typeof VALID_TRIGGERS)[number];\n\n/**\n * Coerce value to string array. Handles string, string[], or invalid.\n * @param v - Raw value from YAML\n * @returns Normalized string array\n */\nfunction toStrArray(v: unknown): string[] {\n if (Array.isArray(v)) return v.filter((x): x is string => typeof x === 'string');\n if (typeof v === 'string') return v ? [v] : [];\n return [];\n}\n\n/**\n * Parse all rule files in a rules directory.\n * @param rulesDir - Absolute path to .agentsbridge/rules\n * @returns Array of parsed CanonicalRule, or [] if dir missing/empty\n */\nexport async function parseRules(rulesDir: string): Promise<CanonicalRule[]> {\n const files = await readDirRecursive(rulesDir);\n const mdFiles = files.filter((f) => f.endsWith('.md'));\n const rules: CanonicalRule[] = [];\n for (const path of mdFiles) {\n const content = await readFileSafe(path);\n if (!content) continue;\n const { frontmatter, body } = parseFrontmatter(content);\n const name = basename(path, '.md');\n const rootFromFilename = name === '_root';\n const rootFromFm = frontmatter.root === true;\n const triggerRaw = frontmatter.trigger;\n const trigger: Trigger | undefined =\n typeof triggerRaw === 'string' && VALID_TRIGGERS.includes(triggerRaw as Trigger)\n ? (triggerRaw as Trigger)\n : undefined;\n const codexEmitRaw = frontmatter.codex_emit;\n const codexEmit =\n codexEmitRaw === 'execution'\n ? ('execution' as const)\n : codexEmitRaw === 'advisory'\n ? ('advisory' as const)\n : undefined;\n const instrRaw = frontmatter.codex_instruction;\n const codexInstructionVariant = instrRaw === 'override' ? ('override' as const) : undefined;\n rules.push({\n source: path,\n root: rootFromFilename || rootFromFm,\n targets: toStrArray(frontmatter.targets),\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n globs: toStrArray(frontmatter.globs),\n body,\n ...(trigger !== undefined && { trigger }),\n ...(codexEmit !== undefined && { codexEmit }),\n ...(codexInstructionVariant !== undefined && { codexInstructionVariant }),\n });\n }\n return rules;\n}\n","/**\n * Parse .agentsbridge/commands/*.md into CanonicalCommand objects.\n */\n\nimport { basename } from 'node:path';\nimport type { CanonicalCommand } from '../core/types.js';\nimport { readFileSafe, readDirRecursive } from '../utils/fs.js';\nimport { parseFrontmatter } from '../utils/markdown.js';\n\n/**\n * Coerce value to tools array. Handles comma-separated string, string[], or invalid.\n * @param v - Raw value from YAML (e.g. \"Read, Grep\" or [\"Read\", \"Grep\"])\n * @returns Normalized string array\n */\nfunction toToolsArray(v: unknown): string[] {\n if (Array.isArray(v)) {\n return v\n .filter((x): x is string => typeof x === 'string')\n .map((s) => s.trim())\n .filter(Boolean);\n }\n if (typeof v === 'string') {\n return v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n }\n return [];\n}\n\n/**\n * Parse all command files in a commands directory.\n * @param commandsDir - Absolute path to .agentsbridge/commands\n * @returns Array of parsed CanonicalCommand, or [] if dir missing/empty\n */\nexport async function parseCommands(commandsDir: string): Promise<CanonicalCommand[]> {\n const files = await readDirRecursive(commandsDir);\n const mdFiles = files.filter((f) => f.endsWith('.md'));\n const commands: CanonicalCommand[] = [];\n for (const path of mdFiles) {\n const content = await readFileSafe(path);\n if (!content) continue;\n const { frontmatter, body } = parseFrontmatter(content);\n const name = basename(path, '.md');\n const fromCamel = toToolsArray(frontmatter.allowedTools);\n const fromKebab = toToolsArray(frontmatter['allowed-tools']);\n const allowedTools = fromCamel.length > 0 ? fromCamel : fromKebab;\n commands.push({\n source: path,\n name,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n allowedTools,\n body,\n });\n }\n return commands;\n}\n","/**\n * Parse .agentsbridge/agents/*.md into CanonicalAgent objects.\n */\n\nimport { basename } from 'node:path';\nimport type { CanonicalAgent, Hooks } from '../core/types.js';\nimport { readFileSafe, readDirRecursive } from '../utils/fs.js';\nimport { parseFrontmatter } from '../utils/markdown.js';\n\n/**\n * Coerce value to string array. Handles comma-separated string, YAML array, or invalid.\n * @param v - Raw value from YAML\n * @returns Normalized string array\n */\nfunction toStrArray(v: unknown): string[] {\n if (Array.isArray(v)) {\n return v\n .filter((x): x is string => typeof x === 'string')\n .map((s) => s.trim())\n .filter(Boolean);\n }\n if (typeof v === 'string') {\n return v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n }\n return [];\n}\n\n/**\n * Coerce value to positive integer.\n * @param v - Raw value from YAML\n * @returns Number or 0 if invalid\n */\nfunction toInt(v: unknown): number {\n if (typeof v === 'number' && Number.isInteger(v) && v >= 0) return v;\n if (typeof v === 'string') {\n const n = parseInt(v, 10);\n return Number.isInteger(n) && n >= 0 ? n : 0;\n }\n return 0;\n}\n\n/**\n * Extract hooks object from frontmatter. Must be a plain object.\n * @param v - Raw value\n * @returns Record or empty object\n */\nfunction toHooks(v: unknown): Hooks {\n if (v !== null && typeof v === 'object' && !Array.isArray(v)) {\n return v as Hooks;\n }\n return {};\n}\n\n/**\n * Parse all agent files in an agents directory.\n * @param agentsDir - Absolute path to .agentsbridge/agents\n * @returns Array of parsed CanonicalAgent, or [] if dir missing/empty\n */\nexport async function parseAgents(agentsDir: string): Promise<CanonicalAgent[]> {\n const files = await readDirRecursive(agentsDir);\n const mdFiles = files.filter((f) => f.endsWith('.md'));\n const agents: CanonicalAgent[] = [];\n for (const path of mdFiles) {\n const content = await readFileSafe(path);\n if (!content) continue;\n const { frontmatter, body } = parseFrontmatter(content);\n const name = basename(path, '.md');\n const toolsCamel = toStrArray(frontmatter.tools);\n const toolsKebab = toStrArray(frontmatter['tools']);\n const tools = toolsCamel.length > 0 ? toolsCamel : toolsKebab;\n const disallowedCamel = toStrArray(frontmatter.disallowedTools);\n const disallowedKebab = toStrArray(frontmatter['disallowed-tools']);\n const disallowedTools = disallowedCamel.length > 0 ? disallowedCamel : disallowedKebab;\n const mcpCamel = toStrArray(frontmatter.mcpServers);\n const mcpKebab = toStrArray(frontmatter['mcp-servers']);\n const mcpServers = mcpCamel.length > 0 ? mcpCamel : mcpKebab;\n const skills = toStrArray(frontmatter.skills);\n const maxTurnsCamel = toInt(frontmatter.maxTurns);\n const maxTurnsKebab = toInt(frontmatter['max-turns']);\n const maxTurns = maxTurnsCamel > 0 ? maxTurnsCamel : maxTurnsKebab > 0 ? maxTurnsKebab : 0;\n agents.push({\n source: path,\n name,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n tools,\n disallowedTools,\n model: typeof frontmatter.model === 'string' ? frontmatter.model : '',\n permissionMode:\n typeof frontmatter.permissionMode === 'string'\n ? frontmatter.permissionMode\n : typeof frontmatter['permission-mode'] === 'string'\n ? frontmatter['permission-mode']\n : '',\n maxTurns,\n mcpServers,\n hooks: toHooks(frontmatter.hooks),\n skills,\n memory: typeof frontmatter.memory === 'string' ? frontmatter.memory : '',\n body,\n });\n }\n return agents;\n}\n","/**\n * Parse .agentsbridge/skills/{name}/SKILL.md into CanonicalSkill objects.\n */\n\nimport { basename, join } from 'node:path';\nimport { readdir } from 'node:fs/promises';\nimport type { CanonicalSkill, SkillSupportingFile } from '../core/types.js';\nimport { readFileSafe, readDirRecursive } from '../utils/fs.js';\nimport { parseFrontmatter } from '../utils/markdown.js';\n\n/** Read file content; returns empty string if unreadable */\nasync function readContent(path: string): Promise<string> {\n const c = await readFileSafe(path);\n return c ?? '';\n}\n\nconst SKILL_FILE = 'SKILL.md';\n\n/**\n * List supporting files in a skill directory (all files except SKILL.md).\n * @param skillDir - Absolute path to skill directory\n * @returns Supporting files with relative and absolute paths\n */\nasync function listSupportingFiles(skillDir: string): Promise<SkillSupportingFile[]> {\n const files = await readDirRecursive(skillDir);\n const result: SkillSupportingFile[] = [];\n for (const absPath of files) {\n const raw = absPath.slice(skillDir.length + 1);\n const name = raw.replace(/\\\\/g, '/');\n if (name === SKILL_FILE || name.endsWith(`/${SKILL_FILE}`)) continue;\n const content = await readContent(absPath);\n result.push({ relativePath: name, absolutePath: absPath, content });\n }\n return result.sort((a, b) => a.relativePath.localeCompare(b.relativePath));\n}\n\n/**\n * Parse all skill directories under skillsDir.\n * Each skill lives in skillsDir/{name}/SKILL.md.\n * @param skillsDir - Absolute path to .agentsbridge/skills\n * @returns Array of parsed CanonicalSkill, or [] if dir missing/empty\n */\n/**\n * Parse a single skill directory containing SKILL.md (Anthropic-style leaf folder).\n */\nexport async function parseSkillDirectory(skillDir: string): Promise<CanonicalSkill | null> {\n const skillPath = join(skillDir, SKILL_FILE);\n const content = await readFileSafe(skillPath);\n if (!content) return null;\n const { frontmatter, body } = parseFrontmatter(content);\n const supportingFiles = await listSupportingFiles(skillDir);\n return {\n source: skillPath,\n name: basename(skillDir),\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n body,\n supportingFiles,\n };\n}\n\nexport async function parseSkills(skillsDir: string): Promise<CanonicalSkill[]> {\n let entries: { name: string; isDirectory: () => boolean }[];\n try {\n entries = await readdir(skillsDir, { withFileTypes: true });\n } catch {\n return [];\n }\n const skills: CanonicalSkill[] = [];\n for (const ent of entries) {\n if (!ent.isDirectory()) continue;\n const skillDir = join(skillsDir, ent.name);\n const skillPath = join(skillDir, SKILL_FILE);\n const content = await readFileSafe(skillPath);\n if (!content) continue;\n const { frontmatter, body } = parseFrontmatter(content);\n const supportingFiles = await listSupportingFiles(skillDir);\n skills.push({\n source: skillPath,\n name: ent.name,\n description: typeof frontmatter.description === 'string' ? frontmatter.description : '',\n body,\n supportingFiles,\n });\n }\n return skills.sort((a, b) => a.name.localeCompare(b.name));\n}\n","/**\n * Parse .agentsbridge/mcp.json into McpConfig.\n */\n\nimport { readFileSafe } from '../utils/fs.js';\nimport type { McpConfig, McpServer } from '../core/types.js';\n\nfunction parseStringMap(raw: unknown): Record<string, string> {\n if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) return {};\n return Object.fromEntries(\n Object.entries(raw).filter((entry): entry is [string, string] => typeof entry[1] === 'string'),\n );\n}\n\nfunction parseServer(raw: unknown): McpServer | null {\n if (!raw || typeof raw !== 'object') return null;\n const obj = raw as Record<string, unknown>;\n const type = typeof obj.type === 'string' ? obj.type : 'stdio';\n const env = parseStringMap(obj.env);\n const description = typeof obj.description === 'string' ? obj.description : undefined;\n\n const url = typeof obj.url === 'string' ? obj.url : '';\n if (url) {\n return {\n ...(description !== undefined && { description }),\n type,\n url,\n headers: parseStringMap(obj.headers),\n env,\n };\n }\n\n const command = typeof obj.command === 'string' ? obj.command : '';\n if (!command) return null;\n\n const args = Array.isArray(obj.args)\n ? obj.args.filter((x): x is string => typeof x === 'string')\n : [];\n return {\n ...(description !== undefined && { description }),\n type,\n command,\n args,\n env,\n };\n}\n\n/**\n * Parse mcp.json at the given path.\n * @param mcpPath - Absolute path to .agentsbridge/mcp.json\n * @returns McpConfig or null if file missing, malformed, or lacks mcpServers\n */\nexport async function parseMcp(mcpPath: string): Promise<McpConfig | null> {\n const content = await readFileSafe(mcpPath);\n if (!content) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(content) as unknown;\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== 'object') return null;\n const mcpServersRaw = (parsed as Record<string, unknown>).mcpServers;\n if (mcpServersRaw === undefined) return null;\n if (typeof mcpServersRaw !== 'object' || mcpServersRaw === null) return null;\n const mcpServers: Record<string, McpServer> = {};\n for (const [name, val] of Object.entries(mcpServersRaw)) {\n const server = parseServer(val);\n if (server) mcpServers[name] = server;\n }\n return { mcpServers };\n}\n","/**\n * Parse .agentsbridge/permissions.yaml into Permissions.\n */\n\nimport { parse as parseYaml } from 'yaml';\nimport { readFileSafe } from '../utils/fs.js';\nimport type { Permissions } from '../core/types.js';\n\nfunction ensureStringArray(val: unknown): string[] {\n if (!Array.isArray(val)) return [];\n return val.filter((x): x is string => typeof x === 'string');\n}\n\n/**\n * Parse permissions.yaml at the given path.\n * @param permissionsPath - Absolute path to .agentsbridge/permissions.yaml\n * @returns Permissions or null if file missing or malformed\n */\nexport async function parsePermissions(permissionsPath: string): Promise<Permissions | null> {\n const content = await readFileSafe(permissionsPath);\n if (content === null) return null;\n if (!content.trim()) return { allow: [], deny: [] };\n let parsed: unknown;\n try {\n parsed = parseYaml(content) as unknown;\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== 'object') return null;\n const obj = parsed as Record<string, unknown>;\n const allow = ensureStringArray(obj.allow);\n const deny = ensureStringArray(obj.deny);\n return { allow, deny };\n}\n","/**\n * Parse .agentsbridge/hooks.yaml into Hooks.\n */\n\nimport { parse as parseYaml } from 'yaml';\nimport { readFileSafe } from '../utils/fs.js';\nimport type { HookEntry, Hooks } from '../core/types.js';\nimport { getHookText, getHookPrompt } from '../core/hook-command.js';\n\nconst VALID_TYPES = ['command', 'prompt'] as const;\n\nfunction toHookEntry(raw: unknown): HookEntry | null {\n if (!raw || typeof raw !== 'object') return null;\n const obj = raw as Record<string, unknown>;\n const matcher = obj.matcher;\n if (typeof matcher !== 'string') return null;\n const command = getHookText(obj);\n if (!command) return null;\n const type =\n typeof obj.type === 'string' && VALID_TYPES.includes(obj.type as (typeof VALID_TYPES)[number])\n ? (obj.type as 'command' | 'prompt')\n : undefined;\n const timeout =\n typeof obj.timeout === 'number' && Number.isFinite(obj.timeout) ? obj.timeout : undefined;\n const prompt = getHookPrompt(obj) || undefined;\n return {\n matcher,\n command,\n ...(timeout !== undefined && { timeout }),\n ...(type && { type }),\n ...(prompt && { prompt }),\n };\n}\n\n/**\n * Parse hooks.yaml at the given path.\n * @param hooksPath - Absolute path to .agentsbridge/hooks.yaml\n * @returns Hooks or null if file missing or malformed\n */\nexport async function parseHooks(hooksPath: string): Promise<Hooks | null> {\n const content = await readFileSafe(hooksPath);\n if (content === null) return null;\n if (!content.trim()) return {};\n let parsed: unknown;\n try {\n parsed = parseYaml(content) as unknown;\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== 'object') return null;\n const result: Hooks = {};\n const obj = parsed as Record<string, unknown>;\n for (const [key, val] of Object.entries(obj)) {\n if (!Array.isArray(val)) continue;\n const entries: HookEntry[] = [];\n for (const item of val) {\n const entry = toHookEntry(item);\n if (entry) entries.push(entry);\n }\n if (entries.length > 0) result[key] = entries;\n }\n return result;\n}\n","/**\n * Parse .agentsbridge/ignore into gitignore-style patterns.\n */\n\nimport { readFileSafe } from '../utils/fs.js';\nimport type { IgnorePatterns } from '../core/types.js';\n\n/**\n * Parse ignore file at the given path.\n * @param ignorePath - Absolute path to .agentsbridge/ignore\n * @returns Array of ignore patterns (empty array if file missing or empty)\n */\nexport async function parseIgnore(ignorePath: string): Promise<IgnorePatterns> {\n const content = await readFileSafe(ignorePath);\n if (content === null || !content.trim()) return [];\n\n const lines = content.split(/\\r?\\n/);\n const patterns: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed === '' || trimmed.startsWith('#')) continue;\n patterns.push(trimmed);\n }\n\n return patterns;\n}\n","/**\n * Merge canonical files from extends with local. Overlay wins on same-name conflict.\n */\n\nimport { basename } from 'node:path';\nimport type {\n CanonicalFiles,\n CanonicalRule,\n McpConfig,\n Permissions,\n Hooks,\n} from '../core/types.js';\n\nfunction ruleSlug(r: CanonicalRule): string {\n return basename(r.source, '.md');\n}\n\n/**\n * Merge overlay onto base. Overlay wins on same-name conflict for rules, commands, agents, skills.\n * MCP: overlay servers merge, overlay wins same-name. Permissions: union; local deny wins.\n *\n * @param base - Base canonical files (earlier in merge order)\n * @param overlay - Overlay canonical files (later, wins on conflict)\n * @returns Merged CanonicalFiles\n */\nexport function mergeCanonicalFiles(base: CanonicalFiles, overlay: CanonicalFiles): CanonicalFiles {\n const baseRuleMap = new Map(base.rules.map((r) => [ruleSlug(r), r]));\n for (const r of overlay.rules) {\n baseRuleMap.set(ruleSlug(r), r);\n }\n\n const baseCmdMap = new Map(base.commands.map((c) => [c.name, c]));\n for (const c of overlay.commands) {\n baseCmdMap.set(c.name, c);\n }\n\n const baseAgentMap = new Map(base.agents.map((a) => [a.name, a]));\n for (const a of overlay.agents) {\n baseAgentMap.set(a.name, a);\n }\n\n const baseSkillMap = new Map(base.skills.map((s) => [s.name, s]));\n for (const s of overlay.skills) {\n baseSkillMap.set(s.name, s);\n }\n\n const mcp: McpConfig | null = mergeMcp(base.mcp, overlay.mcp);\n const permissions: Permissions | null = mergePermissions(base.permissions, overlay.permissions);\n const hooks: Hooks | null = mergeHooks(base.hooks, overlay.hooks);\n const ignore = mergeIgnore(base.ignore, overlay.ignore);\n\n return {\n rules: Array.from(baseRuleMap.values()),\n commands: Array.from(baseCmdMap.values()),\n agents: Array.from(baseAgentMap.values()),\n skills: Array.from(baseSkillMap.values()),\n mcp,\n permissions,\n hooks,\n ignore,\n };\n}\n\nfunction mergeMcp(base: McpConfig | null, overlay: McpConfig | null): McpConfig | null {\n if (!base && !overlay) return null;\n const baseServers = base?.mcpServers ?? {};\n const overlayServers = overlay?.mcpServers ?? {};\n return {\n mcpServers: { ...baseServers, ...overlayServers },\n };\n}\n\nfunction mergePermissions(\n base: Permissions | null,\n overlay: Permissions | null,\n): Permissions | null {\n if (!base && !overlay) return null;\n const allow = mergeUniqueStrings(base?.allow ?? [], overlay?.allow ?? []);\n const deny = mergeUniqueStrings(base?.deny ?? [], overlay?.deny ?? []);\n return { allow, deny };\n}\n\nfunction mergeUniqueStrings(base: string[], overlay: string[]): string[] {\n const seen = new Set(base);\n const merged = [...base];\n for (const value of overlay) {\n if (!seen.has(value)) {\n seen.add(value);\n merged.push(value);\n }\n }\n return merged;\n}\n\nfunction mergeHooks(base: Hooks | null, overlay: Hooks | null): Hooks | null {\n if (!base && !overlay) return null;\n const result: Hooks = {};\n const keys = new Set([...Object.keys(base ?? {}), ...Object.keys(overlay ?? {})]) as Set<\n keyof Hooks\n >;\n for (const k of keys) {\n const o = overlay?.[k];\n const b = base?.[k];\n result[k] = o !== undefined && o.length > 0 ? o : (b ?? []);\n }\n return result;\n}\n\nfunction mergeIgnore(base: string[], overlay: string[]): string[] {\n const seen = new Set(base);\n const out = [...base];\n for (const p of overlay) {\n if (!seen.has(p)) {\n seen.add(p);\n out.push(p);\n }\n }\n return out;\n}\n","/**\n * Load canonical slice from one resolved extend (repo root + optional path).\n */\n\nimport { join } from 'node:path';\nimport type { CanonicalFiles } from '../core/types.js';\nimport type { ResolvedExtend } from '../config/resolver.js';\nimport { detectNativeFormat, KNOWN_NATIVE_PATHS } from '../config/native-format-detector.js';\nimport { exists } from '../utils/fs.js';\nimport { logger } from '../utils/logger.js';\nimport { loadCanonicalFiles } from './loader.js';\nimport { importNativeToCanonical } from './native-extends-importer.js';\nimport { isSkillPackLayout, loadSkillsAtExtendPath } from './skill-pack-load.js';\nimport { loadCanonicalSliceAtPath, normalizeSlicePath } from './load-canonical-slice.js';\n\nfunction emptyCanonical(): CanonicalFiles {\n return {\n rules: [],\n commands: [],\n agents: [],\n skills: [],\n mcp: null,\n permissions: null,\n hooks: null,\n ignore: [],\n };\n}\n\n/**\n * Load canonical files contributed by one extend entry.\n */\nexport async function loadCanonicalForExtend(ext: ResolvedExtend): Promise<CanonicalFiles> {\n const base = ext.resolvedPath;\n\n if (!ext.path) {\n const agentsbridgeDir = join(base, '.agentsbridge');\n if (!(await exists(agentsbridgeDir))) {\n if (await isSkillPackLayout(base)) {\n const skills = await loadSkillsAtExtendPath(base);\n return { ...emptyCanonical(), skills };\n }\n const targetName = ext.target ?? (await detectNativeFormat(base));\n if (!targetName) {\n throw new Error(\n `Extend \"${ext.name}\": No supported agent configuration found in ${base}.\\n` +\n `Expected one of: .agentsbridge/, ${KNOWN_NATIVE_PATHS.join(', ')}.`,\n );\n }\n logger.info(\n `[agentsbridge] Extend \"${ext.name}\": ${ext.target ? 'specified' : 'detected'} ${targetName} format, importing to .agentsbridge/...`,\n );\n await importNativeToCanonical(base, targetName);\n }\n return loadCanonicalFiles(base);\n }\n\n const rawRoot = join(base, ext.path);\n if (!(await exists(rawRoot))) {\n throw new Error(`Extend \"${ext.name}\": path does not exist: ${rawRoot}`);\n }\n\n if (ext.target) {\n const agentsbridgeDir = join(base, '.agentsbridge');\n if (!(await exists(agentsbridgeDir))) {\n logger.info(\n `[agentsbridge] Extend \"${ext.name}\": path \"${ext.path}\" with target \"${ext.target}\" — importing at extend root, then loading canonical.`,\n );\n await importNativeToCanonical(base, ext.target);\n }\n return loadCanonicalFiles(base);\n }\n\n const { sliceRoot } = await normalizeSlicePath(rawRoot);\n try {\n return await loadCanonicalSliceAtPath(sliceRoot);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n const wrapped = new Error(`Extend \"${ext.name}\": ${msg}`);\n if (err instanceof Error) wrapped.cause = err;\n throw wrapped;\n }\n}\n","import { join } from 'node:path';\nimport { exists } from '../utils/fs.js';\n\ninterface TargetSignature {\n target: string;\n paths: string[];\n}\n\nconst TARGET_SIGNATURES: TargetSignature[] = [\n {\n target: 'claude-code',\n paths: [\n 'CLAUDE.md',\n '.claude/rules',\n '.claude/commands',\n '.claude/agents',\n '.claude/skills',\n '.claude/settings.json',\n '.claudeignore',\n ],\n },\n {\n target: 'cursor',\n paths: ['.cursorrules', '.cursor/rules', '.cursor', '.cursor/mcp.json'],\n },\n {\n target: 'copilot',\n paths: [\n '.github/copilot-instructions.md',\n '.github/copilot',\n '.github/instructions',\n '.github/prompts',\n '.github/skills',\n '.github/agents',\n '.github/hooks',\n ],\n },\n {\n target: 'gemini-cli',\n paths: ['GEMINI.md', '.gemini', '.gemini/settings.json'],\n },\n {\n target: 'codex-cli',\n paths: ['.codex', '.codex/config.toml', 'AGENTS.md', 'codex.md'],\n },\n {\n target: 'windsurf',\n paths: ['.windsurfrules', '.windsurf', '.windsurf/workflows'],\n },\n {\n target: 'cline',\n paths: ['.clinerules', '.cline'],\n },\n {\n target: 'continue',\n paths: ['.continue', '.continuerc.json'],\n },\n {\n target: 'junie',\n paths: ['.junie', '.junie/guidelines.md'],\n },\n];\n\n/**\n * Detect which native agent format a repo uses by scoring presence of\n * known signature paths. Returns the highest-scoring target name, or null\n * if no recognized format is found (score === 0).\n *\n * Ties break in favour of the earlier entry in TARGET_SIGNATURES.\n *\n * @param repoPath - Absolute path to the repo root to inspect\n * @returns The detected target name, or null if none found\n */\nexport async function detectNativeFormat(repoPath: string): Promise<string | null> {\n let bestTarget: string | null = null;\n let bestScore = 0;\n\n for (const sig of TARGET_SIGNATURES) {\n let score = 0;\n for (const rel of sig.paths) {\n if (await exists(join(repoPath, rel))) score++;\n }\n if (score > bestScore) {\n bestScore = score;\n bestTarget = sig.target;\n }\n }\n\n return bestScore > 0 ? bestTarget : null;\n}\n\n/** Human-readable list of representative recognisable paths, for error messages. */\nexport const KNOWN_NATIVE_PATHS: string[] = TARGET_SIGNATURES.map((sig) => sig.paths[0]).filter(\n (p): p is string => p !== undefined,\n);\n","import type { ImportResult } from '../core/result-types.js';\nimport { importFromClaudeCode } from '../targets/claude-code/importer.js';\nimport { importFromCursor } from '../targets/cursor/importer.js';\nimport { importFromCopilot } from '../targets/copilot/importer.js';\nimport { importFromGemini } from '../targets/gemini-cli/importer.js';\nimport { importFromCodex } from '../targets/codex-cli/importer.js';\nimport { importFromWindsurf } from '../targets/windsurf/importer.js';\nimport { importFromCline } from '../targets/cline/importer.js';\nimport { importFromContinue } from '../targets/continue/importer.js';\nimport { importFromJunie } from '../targets/junie/importer.js';\n\ntype ImportFn = (projectRoot: string) => Promise<ImportResult[]>;\n\nconst NATIVE_IMPORTERS: Record<string, ImportFn> = {\n 'claude-code': importFromClaudeCode,\n cursor: importFromCursor,\n copilot: importFromCopilot,\n 'gemini-cli': importFromGemini,\n 'codex-cli': importFromCodex,\n windsurf: importFromWindsurf,\n cline: importFromCline,\n continue: importFromContinue,\n junie: importFromJunie,\n};\n\n/**\n * Import native agent format files from repoPath into repoPath/.agentsbridge/.\n * Uses the registered importer for the given targetName.\n *\n * @param repoPath - Absolute path to the fetched/cloned repo root\n * @param targetName - Detected target format identifier (e.g. 'claude-code')\n * @returns Import results from the importer\n * @throws Error if no importer is registered for the given target name\n */\nexport async function importNativeToCanonical(\n repoPath: string,\n targetName: string,\n): Promise<ImportResult[]> {\n const importFn = NATIVE_IMPORTERS[targetName];\n if (!importFn) {\n throw new Error(`No importer registered for native target: ${targetName}`);\n }\n return importFn(repoPath);\n}\n","/**\n * Load Anthropic-style skill directories for extends.path (no .agentsbridge).\n */\n\nimport { join } from 'node:path';\nimport { readdir } from 'node:fs/promises';\nimport type { CanonicalSkill } from '../core/types.js';\nimport { exists } from '../utils/fs.js';\nimport { parseSkillDirectory, parseSkills } from './skills.js';\n\nconst SKILL = 'SKILL.md';\n\n/** True if root is a single skill folder or a directory of skill subfolders. */\nexport async function isSkillPackLayout(root: string): Promise<boolean> {\n if (!(await exists(root))) return false;\n if (await exists(join(root, SKILL))) return true;\n try {\n const ents = await readdir(root, { withFileTypes: true });\n for (const e of ents) {\n if (!e.isDirectory() || e.name.startsWith('.')) continue;\n if (await exists(join(root, e.name, SKILL))) return true;\n }\n } catch {\n return false;\n }\n return false;\n}\n\n/** Parse skills at path (registry or single skill leaf). */\nexport async function loadSkillsAtExtendPath(skillsRoot: string): Promise<CanonicalSkill[]> {\n if (!(await exists(skillsRoot))) return [];\n if (await exists(join(skillsRoot, SKILL))) {\n const one = await parseSkillDirectory(skillsRoot);\n return one ? [one] : [];\n }\n return parseSkills(skillsRoot);\n}\n","/**\n * Load canonical slices from a path: .agentsbridge project, partial rules/commands/agents/skills trees.\n */\n\nimport { basename, dirname, join } from 'node:path';\nimport { stat } from 'node:fs/promises';\nimport type { ExtendPick } from '../config/schema.js';\nimport type {\n CanonicalAgent,\n CanonicalCommand,\n CanonicalFiles,\n CanonicalRule,\n CanonicalSkill,\n} from '../core/types.js';\nimport { exists } from '../utils/fs.js';\nimport { parseAgents } from './agents.js';\nimport { loadCanonicalFiles } from './loader.js';\nimport { parseCommands } from './commands.js';\nimport { parseRules } from './rules.js';\nimport { isSkillPackLayout, loadSkillsAtExtendPath } from './skill-pack-load.js';\n\nfunction emptyCanonical(): CanonicalFiles {\n return {\n rules: [],\n commands: [],\n agents: [],\n skills: [],\n mcp: null,\n permissions: null,\n hooks: null,\n ignore: [],\n };\n}\n\nexport function isCanonicalSliceEmpty(c: CanonicalFiles): boolean {\n return (\n c.rules.length === 0 &&\n c.commands.length === 0 &&\n c.agents.length === 0 &&\n c.skills.length === 0 &&\n c.mcp === null &&\n c.permissions === null &&\n c.hooks === null &&\n c.ignore.length === 0\n );\n}\n\n/**\n * If path is a single .md under rules/, commands/, or agents/, return parent dir + pick hint.\n */\nexport async function normalizeSlicePath(absolutePath: string): Promise<{\n sliceRoot: string;\n implicitPick?: ExtendPick;\n}> {\n if (!(await exists(absolutePath))) {\n throw new Error(`Path does not exist: ${absolutePath}`);\n }\n const st = await stat(absolutePath);\n if (st.isDirectory()) {\n return { sliceRoot: absolutePath };\n }\n if (!st.isFile() || !absolutePath.toLowerCase().endsWith('.md')) {\n throw new Error(\n `Install path must be a directory or a .md file inside rules/, commands/, or agents/: ${absolutePath}`,\n );\n }\n const parent = dirname(absolutePath);\n const parentBase = basename(parent);\n const fileBase = basename(absolutePath);\n const slug = fileBase.replace(/\\.md$/i, '');\n if (parentBase === 'rules') {\n return { sliceRoot: parent, implicitPick: { rules: [slug] } };\n }\n if (parentBase === 'commands') {\n return { sliceRoot: parent, implicitPick: { commands: [slug] } };\n }\n if (parentBase === 'agents') {\n return { sliceRoot: parent, implicitPick: { agents: [slug] } };\n }\n throw new Error(\n `Single-file install only supports .md files under rules/, commands/, or agents/. Got: ${absolutePath}`,\n );\n}\n\nasync function parseRulesAt(sliceRoot: string): Promise<CanonicalRule[]> {\n const base = basename(sliceRoot);\n if (base === 'rules') {\n return parseRules(sliceRoot);\n }\n const nested = join(sliceRoot, 'rules');\n if (await exists(nested)) {\n return parseRules(nested);\n }\n return [];\n}\n\nasync function parseCommandsAt(sliceRoot: string): Promise<CanonicalCommand[]> {\n const base = basename(sliceRoot);\n if (base === 'commands') {\n return parseCommands(sliceRoot);\n }\n const nested = join(sliceRoot, 'commands');\n if (await exists(nested)) {\n return parseCommands(nested);\n }\n return [];\n}\n\nasync function parseAgentsAt(sliceRoot: string): Promise<CanonicalAgent[]> {\n const base = basename(sliceRoot);\n if (base === 'agents') {\n return parseAgents(sliceRoot);\n }\n const nested = join(sliceRoot, 'agents');\n if (await exists(nested)) {\n return parseAgents(nested);\n }\n return [];\n}\n\n/** Skill pack at slice root or nested `skills/` (common in upstream repos). */\nasync function loadSkillsForPartialSlice(sliceRoot: string): Promise<CanonicalSkill[]> {\n if (await isSkillPackLayout(sliceRoot)) {\n return loadSkillsAtExtendPath(sliceRoot);\n }\n const nestedSkills = join(sliceRoot, 'skills');\n if (await isSkillPackLayout(nestedSkills)) {\n return loadSkillsAtExtendPath(nestedSkills);\n }\n return [];\n}\n\n/**\n * Load whatever canonical resources exist at sliceRoot (directory).\n */\nexport async function loadCanonicalSliceAtPath(sliceRoot: string): Promise<CanonicalFiles> {\n const ab = join(sliceRoot, '.agentsbridge');\n if (await exists(ab)) {\n return loadCanonicalFiles(sliceRoot);\n }\n\n const partial = emptyCanonical();\n partial.rules = await parseRulesAt(sliceRoot);\n partial.commands = await parseCommandsAt(sliceRoot);\n partial.agents = await parseAgentsAt(sliceRoot);\n\n partial.skills = await loadSkillsForPartialSlice(sliceRoot);\n\n if (isCanonicalSliceEmpty(partial)) {\n throw new Error(\n `No installable resources at ${sliceRoot}. ` +\n 'Expected .agentsbridge/, or rules/, commands/, agents/, or Anthropic-style skills (SKILL.md).',\n );\n }\n\n return partial;\n}\n","/**\n * Apply extends.pick filtering after feature filtering.\n */\n\nimport { basename } from 'node:path';\nimport type { ExtendPick } from '../config/schema.js';\nimport type { CanonicalFiles } from '../core/types.js';\nimport { logger } from '../utils/logger.js';\n\nexport function applyExtendPick(\n canonical: CanonicalFiles,\n features: string[],\n pick: ExtendPick | undefined,\n extendName: string,\n): CanonicalFiles {\n if (!pick) return canonical;\n let next = { ...canonical };\n\n if (pick.skills?.length && features.includes('skills')) {\n const wanted = new Set(pick.skills);\n const prev = next.skills;\n next = { ...next, skills: prev.filter((s) => wanted.has(s.name)) };\n for (const n of pick.skills) {\n if (!prev.some((s) => s.name === n)) {\n logger.warn(\n `[agentsbridge] pick name \"${n}\" not found in skills from extend \"${extendName}\".`,\n );\n }\n }\n }\n\n if (pick.commands?.length && features.includes('commands')) {\n const wanted = new Set(pick.commands);\n const prev = next.commands;\n next = { ...next, commands: prev.filter((c) => wanted.has(c.name)) };\n for (const n of pick.commands) {\n if (!prev.some((c) => c.name === n)) {\n logger.warn(\n `[agentsbridge] pick name \"${n}\" not found in commands from extend \"${extendName}\".`,\n );\n }\n }\n }\n\n if (pick.agents?.length && features.includes('agents')) {\n const wanted = new Set(pick.agents);\n const prev = next.agents;\n next = { ...next, agents: prev.filter((a) => wanted.has(a.name)) };\n for (const n of pick.agents) {\n if (!prev.some((a) => a.name === n)) {\n logger.warn(\n `[agentsbridge] pick name \"${n}\" not found in agents from extend \"${extendName}\".`,\n );\n }\n }\n }\n\n if (pick.rules?.length && features.includes('rules')) {\n const wanted = new Set(pick.rules);\n const prev = next.rules;\n const stem = (src: string): string => basename(src).replace(/\\.md$/i, '');\n next = {\n ...next,\n rules: prev.filter((r) => wanted.has(stem(r.source))),\n };\n for (const n of pick.rules) {\n if (!prev.some((r) => stem(r.source) === n)) {\n logger.warn(\n `[agentsbridge] pick name \"${n}\" not found in rules from extend \"${extendName}\".`,\n );\n }\n }\n }\n\n return next;\n}\n","/**\n * Load canonical resources from materialized packs in .agentsbridge/packs/.\n */\n\nimport { join } from 'node:path';\nimport type { CanonicalFiles } from '../core/types.js';\nimport { parseRules } from './rules.js';\nimport { parseCommands } from './commands.js';\nimport { parseAgents } from './agents.js';\nimport { parseSkills } from './skills.js';\nimport { parseMcp } from './mcp.js';\nimport { parsePermissions } from './permissions.js';\nimport { parseHooks } from './hooks.js';\nimport { parseIgnore } from './ignore.js';\nimport { mergeCanonicalFiles } from './merge.js';\nimport { filterCanonicalByFeatures } from './extends.js';\nimport { applyExtendPick } from './extend-pick.js';\nimport { listPacks } from '../install/pack-reader.js';\n\nfunction emptyCanonical(): CanonicalFiles {\n return {\n rules: [],\n commands: [],\n agents: [],\n skills: [],\n mcp: null,\n permissions: null,\n hooks: null,\n ignore: [],\n };\n}\n\n/**\n * Load canonical files from a single pack directory.\n * Calls parsers directly — packs have no .agentsbridge/ nesting.\n *\n * @param packDir - Absolute path to the pack directory (contains rules/, commands/, etc.)\n */\nexport async function loadPackCanonical(packDir: string): Promise<CanonicalFiles> {\n const [rules, commands, agents, skills, mcp, permissions, hooks, ignore] = await Promise.all([\n parseRules(join(packDir, 'rules')),\n parseCommands(join(packDir, 'commands')),\n parseAgents(join(packDir, 'agents')),\n parseSkills(join(packDir, 'skills')),\n parseMcp(join(packDir, 'mcp.json')),\n parsePermissions(join(packDir, 'permissions.yaml')),\n parseHooks(join(packDir, 'hooks.yaml')),\n parseIgnore(join(packDir, 'ignore')),\n ]);\n return { ...emptyCanonical(), rules, commands, agents, skills, mcp, permissions, hooks, ignore };\n}\n\n/**\n * Load and merge canonical resources from all valid packs.\n * Scans {abDir}/packs/ for pack directories, reads each pack.yaml,\n * filters by declared features, applies pick, then merges.\n *\n * @param abDir - Absolute path containing the packs/ directory\n * (typically the .agentsbridge/ dir, or configDir in tests)\n */\nexport async function loadPacksCanonical(abDir: string): Promise<CanonicalFiles> {\n const packsDir = join(abDir, 'packs');\n const packs = await listPacks(packsDir);\n\n let merged = emptyCanonical();\n for (const { meta, packDir } of packs) {\n const canonical = await loadPackCanonical(packDir);\n const filtered = filterCanonicalByFeatures(canonical, meta.features);\n const picked = applyExtendPick(filtered, meta.features, meta.pick, meta.name);\n merged = mergeCanonicalFiles(merged, picked);\n }\n return merged;\n}\n","/**\n * Read and search pack metadata from .agentsbridge/packs/.\n */\n\nimport { join } from 'node:path';\nimport { readdir } from 'node:fs/promises';\nimport { parse as parseYaml } from 'yaml';\nimport { readFileSafe, exists } from '../utils/fs.js';\nimport { packMetadataSchema, type PackMetadata } from './pack-schema.js';\nimport { parseRemoteSource } from '../config/remote-source.js';\n\n/** Found pack result including its directory path. */\nexport interface FoundPack {\n meta: PackMetadata;\n packDir: string;\n name: string;\n}\n\nexport interface PackLookupScope {\n path?: string;\n target?: PackMetadata['target'];\n as?: PackMetadata['as'];\n features?: PackMetadata['features'];\n}\n\nfunction sourceIdentity(source: string): string {\n const parsed = parseRemoteSource(source);\n if (!parsed) return source.trim();\n\n if (parsed.kind === 'github') {\n return `github:${parsed.org}/${parsed.repo}`;\n }\n if (parsed.kind === 'gitlab') {\n return `gitlab:${parsed.namespace}/${parsed.project}`;\n }\n return `git+${parsed.url}`;\n}\n\nfunction sameFeatures(a: string[], b?: string[]): boolean {\n if (!b) return true;\n return (\n a.length === b.length &&\n [...a].sort().every((feature, index) => feature === [...b].sort()[index])\n );\n}\n\n/**\n * Read and validate pack.yaml from a pack directory.\n * Returns null if missing or invalid.\n */\nexport async function readPackMetadata(packDir: string): Promise<PackMetadata | null> {\n const metaPath = join(packDir, 'pack.yaml');\n const content = await readFileSafe(metaPath);\n if (content === null) return null;\n\n try {\n const raw = parseYaml(content) as unknown;\n return packMetadataSchema.parse(raw);\n } catch {\n return null;\n }\n}\n\n/**\n * Scan packsDir for a pack whose source matches.\n * Returns the FoundPack or null if not found.\n */\nexport async function findExistingPack(\n packsDir: string,\n source: string,\n scope: PackLookupScope,\n): Promise<FoundPack | null> {\n if (!(await exists(packsDir))) return null;\n const requestedIdentity = sourceIdentity(source);\n\n let entries: { name: string; isDirectory: () => boolean }[];\n try {\n entries = await readdir(packsDir, { withFileTypes: true });\n } catch {\n return null;\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const packDir = join(packsDir, entry.name);\n const meta = await readPackMetadata(packDir);\n if (\n meta &&\n sourceIdentity(meta.source) === requestedIdentity &&\n meta.target === scope.target &&\n meta.as === scope.as &&\n sameFeatures(meta.features, scope.features)\n ) {\n return { meta, packDir, name: meta.name };\n }\n }\n return null;\n}\n\n/**\n * List all valid packs in packsDir.\n * Returns array of FoundPack for each valid pack directory.\n */\nexport async function listPacks(packsDir: string): Promise<FoundPack[]> {\n if (!(await exists(packsDir))) return [];\n\n let entries: { name: string; isDirectory: () => boolean }[];\n try {\n entries = await readdir(packsDir, { withFileTypes: true });\n } catch {\n return [];\n }\n\n const result: FoundPack[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const packDir = join(packsDir, entry.name);\n const meta = await readPackMetadata(packDir);\n if (meta) {\n result.push({ meta, packDir, name: meta.name });\n }\n }\n return result;\n}\n","/**\n * Pack metadata schema for .agentsbridge/packs/{name}/pack.yaml\n */\n\nimport { z } from 'zod';\nimport { featureSchema, extendPickSchema, targetSchema } from '../config/schema.js';\nimport { manualInstallAsSchema } from './manual-install-mode.js';\n\nconst sourceKindSchema = z.enum(['github', 'gitlab', 'git', 'local']);\n\nexport const packMetadataSchema = z.object({\n name: z.string().min(1),\n source: z.string().min(1),\n version: z.string().optional(),\n source_kind: sourceKindSchema,\n installed_at: z.string(),\n updated_at: z.string(),\n features: z.array(featureSchema).min(1),\n pick: extendPickSchema.optional(),\n target: targetSchema.optional(),\n path: z.string().optional(),\n paths: z.array(z.string().min(1)).min(1).optional(),\n as: manualInstallAsSchema.optional(),\n content_hash: z.string(),\n});\n\nexport type PackMetadata = z.infer<typeof packMetadataSchema>;\n","/**\n * Explicit install mode for manually typed source folders.\n */\n\nimport { z } from 'zod';\n\nconst MANUAL_INSTALL_AS = ['rules', 'commands', 'agents', 'skills'] as const;\n\nexport const manualInstallAsSchema = z.enum(MANUAL_INSTALL_AS);\nexport type ManualInstallAs = z.infer<typeof manualInstallAsSchema>;\n","/**\n * Lock file management for team collaboration.\n * Tracks checksums of canonical source files.\n */\n\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml';\nimport { join, relative } from 'node:path';\nimport { readFileSafe, writeFileAtomic, readDirRecursive, exists } from '../utils/fs.js';\nimport { hashFile, hashContent } from '../utils/hash.js';\nimport type { LockFile } from '../core/types.js';\nimport { listPacks } from '../install/pack-reader.js';\n\nconst LOCK_FILENAME = '.lock';\n\n/** Paths/patterns for canonical files, relative to .agentsbridge */\nconst CANONICAL_PATTERNS = [\n (r: string) => r.startsWith('rules/') && r.endsWith('.md'),\n (r: string) => r.startsWith('commands/') && r.endsWith('.md'),\n (r: string) => r.startsWith('agents/') && r.endsWith('.md'),\n (r: string) => r.match(/^skills\\/[^/]+\\/.+$/) !== null,\n (r: string) => r === 'mcp.json',\n (r: string) => r === 'permissions.yaml',\n (r: string) => r === 'hooks.yaml',\n (r: string) => r === 'ignore',\n];\n\nfunction isCanonical(relPath: string): boolean {\n if (relPath.startsWith('packs/')) return false; // tracked separately\n return CANONICAL_PATTERNS.some((p) => p(relPath));\n}\n\nconst FEATURE_PATTERNS: Record<string, (path: string) => boolean> = {\n rules: (path) => path.startsWith('rules/'),\n commands: (path) => path.startsWith('commands/'),\n agents: (path) => path.startsWith('agents/'),\n skills: (path) => /^skills\\/[^/]+\\/.+$/.test(path),\n mcp: (path) => path === 'mcp.json',\n permissions: (path) => path === 'permissions.yaml',\n hooks: (path) => path === 'hooks.yaml',\n ignore: (path) => path === 'ignore',\n};\n\n/**\n * Read lock file from .agentsbridge directory.\n * @param abDir - Absolute path to .agentsbridge\n * @returns Parsed LockFile or null if missing\n */\nexport async function readLock(abDir: string): Promise<LockFile | null> {\n const lockPath = join(abDir, LOCK_FILENAME);\n const content = await readFileSafe(lockPath);\n if (content === null) return null;\n\n try {\n const raw = parseYaml(content) as {\n generated_at?: string;\n generated_by?: string;\n lib_version?: string;\n checksums?: Record<string, string>;\n extends?: Record<string, string>;\n packs?: Record<string, string>;\n };\n if (!raw || typeof raw !== 'object') return null;\n return {\n generatedAt: String(raw.generated_at ?? ''),\n generatedBy: String(raw.generated_by ?? ''),\n libVersion: String(raw.lib_version ?? ''),\n checksums: raw.checksums && typeof raw.checksums === 'object' ? raw.checksums : {},\n extends: raw.extends && typeof raw.extends === 'object' ? raw.extends : {},\n packs: raw.packs && typeof raw.packs === 'object' ? raw.packs : {},\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Write lock file to .agentsbridge directory.\n * @param abDir - Absolute path to .agentsbridge\n * @param lock - Lock file data\n */\nexport async function writeLock(abDir: string, lock: LockFile): Promise<void> {\n const lockPath = join(abDir, LOCK_FILENAME);\n const raw = {\n generated_at: lock.generatedAt,\n generated_by: lock.generatedBy,\n lib_version: lock.libVersion,\n checksums: lock.checksums,\n extends: lock.extends,\n packs: lock.packs,\n };\n const content =\n '# Auto-generated. DO NOT EDIT MANUALLY.\\n# Tracks the state of all config files for team conflict resolution.\\n\\n' +\n stringifyYaml(raw);\n await writeFileAtomic(lockPath, content);\n}\n\n/**\n * Build checksums of all canonical files in .agentsbridge.\n * Paths in result are relative to .agentsbridge (e.g. rules/_root.md).\n * @param abDir - Absolute path to .agentsbridge\n * @returns Record of relative path -> sha256:hex\n */\nexport async function buildChecksums(abDir: string): Promise<Record<string, string>> {\n if (!(await exists(abDir))) return {};\n const files = await readDirRecursive(abDir);\n const result: Record<string, string> = {};\n\n for (const fullPath of files) {\n const rel = relative(abDir, fullPath).replace(/\\\\/g, '/');\n if (rel === LOCK_FILENAME) continue;\n if (!isCanonical(rel)) continue;\n\n const h = await hashFile(fullPath);\n if (h !== null) {\n result[rel] = h.startsWith('sha256:') ? h : `sha256:${h}`;\n }\n }\n return result;\n}\n\nexport function detectLockedFeatureViolations(\n lockChecksums: Record<string, string>,\n currentChecksums: Record<string, string>,\n lockFeatures: string[],\n): string[] {\n if (lockFeatures.length === 0) return [];\n\n const matchers = lockFeatures\n .map((feature) => FEATURE_PATTERNS[feature])\n .filter((matcher): matcher is (path: string) => boolean => matcher !== undefined);\n\n if (matchers.length === 0) return [];\n\n const allPaths = new Set([...Object.keys(lockChecksums), ...Object.keys(currentChecksums)]);\n const violations: string[] = [];\n\n for (const path of allPaths) {\n if (!matchers.some((matcher) => matcher(path))) continue;\n if (lockChecksums[path] !== currentChecksums[path]) violations.push(path);\n }\n\n return violations;\n}\n\n/**\n * Build pack checksums from a packs directory.\n * Returns pack-name → content_hash from each pack's pack.yaml.\n * @param packsDir - Absolute path to .agentsbridge/packs/\n */\nexport async function buildPackChecksums(packsDir: string): Promise<Record<string, string>> {\n const packs = await listPacks(packsDir);\n const result: Record<string, string> = {};\n for (const { meta } of packs) {\n result[meta.name] = meta.content_hash;\n }\n return result;\n}\n\n/** Resolved extend for checksum/version building in lock */\nexport interface ResolvedExtendForLock {\n name: string;\n resolvedPath: string;\n /** Resolved version for remote extends. Store as-is in lock. */\n version?: string;\n}\n\n/**\n * Build extend entries for lock. Remote: store version. Local: store local:sha256:hex.\n * @param resolvedExtends - Resolved extend paths (with optional version for remote)\n * @returns Record of extend name -> version string or local:sha256:hex\n */\nexport async function buildExtendChecksums(\n resolvedExtends: ResolvedExtendForLock[],\n): Promise<Record<string, string>> {\n const result: Record<string, string> = {};\n for (const ext of resolvedExtends) {\n if (ext.version !== undefined) {\n result[ext.name] = ext.version;\n continue;\n }\n const abDir = join(ext.resolvedPath, '.agentsbridge');\n const checksums = await buildChecksums(abDir);\n const fingerprint = Object.keys(checksums)\n .sort()\n .map((p) => `${p}:${checksums[p]}`)\n .join('\\n');\n const h = hashContent(fingerprint);\n const hex = h.startsWith('sha256:') ? h : `sha256:${h}`;\n result[ext.name] = `local:${hex}`;\n }\n return result;\n}\n","// SHA-256 hashing\n\nimport { createHash } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\n\n/**\n * Returns SHA-256 hex hash of content.\n * @param content - String to hash\n * @returns Lowercase hex string (64 chars)\n */\nexport function hashContent(content: string): string {\n return createHash('sha256').update(content, 'utf8').digest('hex');\n}\n\n/**\n * Returns SHA-256 hex hash of file content, or null if file doesn't exist.\n * @param path - File path\n * @returns Hash or null\n */\nexport async function hashFile(path: string): Promise<string | null> {\n try {\n const content = await readFile(path, 'utf8');\n return hashContent(content);\n } catch (err) {\n if (err instanceof Error && 'code' in err && err.code === 'ENOENT') {\n return null;\n }\n throw err;\n }\n}\n","import type { ValidatedConfig } from './schema.js';\n\nconst DEFAULT_COMMANDS_TO_SKILLS = {\n 'codex-cli': true,\n} as const;\n\nconst DEFAULT_AGENTS_TO_SKILLS = {\n 'gemini-cli': false, // native .gemini/agents/*.md per agent-structures\n cline: true,\n 'codex-cli': false, // native .codex/agents/*.toml per agent-structures\n windsurf: true,\n} as const;\n\ntype CommandsToSkillsTarget = keyof typeof DEFAULT_COMMANDS_TO_SKILLS;\ntype AgentsToSkillsTarget = keyof typeof DEFAULT_AGENTS_TO_SKILLS;\n\nfunction hasOwnTarget<T extends string>(map: Record<T, boolean>, target: string): target is T {\n return Object.prototype.hasOwnProperty.call(map, target);\n}\n\nexport function usesCommandSkillProjection(target: string): target is CommandsToSkillsTarget {\n return hasOwnTarget(DEFAULT_COMMANDS_TO_SKILLS, target);\n}\n\nexport function usesAgentSkillProjection(target: string): target is AgentsToSkillsTarget {\n return hasOwnTarget(DEFAULT_AGENTS_TO_SKILLS, target);\n}\n\nexport function shouldConvertCommandsToSkills(config: ValidatedConfig, target: string): boolean {\n if (!usesCommandSkillProjection(target)) return false;\n return config.conversions?.commands_to_skills?.[target] ?? DEFAULT_COMMANDS_TO_SKILLS[target];\n}\n\nexport function shouldConvertAgentsToSkills(config: ValidatedConfig, target: string): boolean {\n if (!usesAgentSkillProjection(target)) return false;\n return config.conversions?.agents_to_skills?.[target] ?? DEFAULT_AGENTS_TO_SKILLS[target];\n}\n","import type { TargetGenerators } from './target.interface.js';\n\nconst registry = new Map<string, TargetGenerators>();\n\nexport function registerTarget(target: TargetGenerators): void {\n registry.set(target.name, target);\n}\n\nexport function getTarget(name: string): TargetGenerators {\n const target = registry.get(name);\n if (!target) throw new Error(`Unknown target: ${name}`);\n return target;\n}\n\nexport function getAllTargets(): TargetGenerators[] {\n return [...registry.values()];\n}\n\nexport function resetRegistry(): void {\n registry.clear();\n}\n","/**\n * Generate Claude Code config files from canonical sources.\n */\n\nimport type { CanonicalFiles } from '../../core/types.js';\nimport { getHookCommand, getHookPrompt, hasHookText } from '../../core/hook-command.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\n\nexport interface RulesOutput {\n path: string;\n content: string;\n}\n\n/**\n * Generate CLAUDE.md from root rule + .claude/rules/*.md from non-root rules.\n * @param canonical - Loaded canonical files\n * @returns .claude/CLAUDE.md output (from root rule) + .claude/rules/{slug}.md for contextual rules\n */\nexport function generateRules(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n\n const root = canonical.rules.find((r) => r.root);\n if (root) {\n outputs.push({\n path: '.claude/CLAUDE.md',\n content: root.body.trim() ? root.body : '',\n });\n }\n\n const nonRoot = canonical.rules.filter(\n (r) => !r.root && (r.targets.length === 0 || r.targets.includes('claude-code')),\n );\n for (const rule of nonRoot) {\n const slug = rule.source.split('/').pop()!.replace(/\\.md$/, '');\n const frontmatter: Record<string, unknown> = {};\n if (rule.description) frontmatter.description = rule.description;\n if (rule.globs.length > 0) frontmatter.globs = rule.globs;\n const content = serializeFrontmatter(frontmatter, rule.body.trim() || '');\n outputs.push({ path: `.claude/rules/${slug}.md`, content });\n }\n\n return outputs;\n}\n\n/**\n * Generate .claude/commands/*.md from canonical commands.\n * @param canonical - Loaded canonical files\n * @returns Array of command file outputs, or [] if no commands\n */\nexport function generateCommands(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.commands.map((cmd) => {\n const frontmatter: Record<string, unknown> = {\n description: cmd.description,\n 'allowed-tools': cmd.allowedTools.length > 0 ? cmd.allowedTools : undefined,\n };\n if (frontmatter['allowed-tools'] === undefined) delete frontmatter['allowed-tools'];\n const content = serializeFrontmatter(frontmatter, cmd.body.trim() || '');\n return { path: `.claude/commands/${cmd.name}.md`, content };\n });\n}\n\n/**\n * Generate .claude/agents/*.md from canonical agents.\n * @param canonical - Loaded canonical files\n * @returns Array of agent file outputs, or [] if no agents\n */\nexport function generateAgents(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.agents.map((agent) => {\n const frontmatter: Record<string, unknown> = {\n name: agent.name,\n description: agent.description,\n tools: agent.tools.length > 0 ? agent.tools : undefined,\n disallowedTools: agent.disallowedTools.length > 0 ? agent.disallowedTools : undefined,\n model: agent.model || undefined,\n permissionMode: agent.permissionMode || undefined,\n maxTurns: agent.maxTurns > 0 ? agent.maxTurns : undefined,\n mcpServers: agent.mcpServers.length > 0 ? agent.mcpServers : undefined,\n hooks: Object.keys(agent.hooks).length > 0 ? agent.hooks : undefined,\n skills: agent.skills.length > 0 ? agent.skills : undefined,\n memory: agent.memory || undefined,\n };\n Object.keys(frontmatter).forEach((k) => {\n if (frontmatter[k] === undefined) delete frontmatter[k];\n });\n const content = serializeFrontmatter(frontmatter, agent.body.trim() || '');\n return { path: `.claude/agents/${agent.name}.md`, content };\n });\n}\n\n/**\n * Generate .mcp.json at project root from canonical MCP config.\n * Claude Code uses .mcp.json as the alternative location for MCP server definitions.\n * @param canonical - Loaded canonical files\n * @returns Array with single .mcp.json output, or [] if no MCP config or empty mcpServers\n */\nexport function generateMcp(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.mcp || Object.keys(canonical.mcp.mcpServers).length === 0) return [];\n const content = JSON.stringify({ mcpServers: canonical.mcp.mcpServers }, null, 2);\n return [{ path: '.mcp.json', content }];\n}\n\n/**\n * Generate .claude/skills/{name}/SKILL.md and supporting files from canonical skills.\n * @param canonical - Loaded canonical files\n * @returns Array of skill file outputs (SKILL.md + supporting files per skill)\n */\nexport function generateSkills(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n for (const skill of canonical.skills) {\n const frontmatter: Record<string, unknown> = {\n name: skill.name,\n description: skill.description || undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n const skillContent = serializeFrontmatter(frontmatter, skill.body.trim() || '');\n outputs.push({\n path: `.claude/skills/${skill.name}/SKILL.md`,\n content: skillContent,\n });\n for (const file of skill.supportingFiles) {\n const relPath = file.relativePath.replace(/\\\\/g, '/');\n outputs.push({\n path: `.claude/skills/${skill.name}/${relPath}`,\n content: file.content,\n });\n }\n }\n return outputs;\n}\n\n/**\n * Generate .claude/settings.json with permissions from canonical sources.\n * Merges with existing settings.json to preserve hooks, mcpServers, etc.\n * @param canonical - Loaded canonical files\n * @returns Array with single .claude/settings.json output, or [] if no permissions\n */\nexport function generatePermissions(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.permissions) return [];\n const { allow, deny } = canonical.permissions;\n if (allow.length === 0 && deny.length === 0) return [];\n const content = JSON.stringify({ permissions: { allow, deny } }, null, 2);\n return [{ path: '.claude/settings.json', content }];\n}\n\n/**\n * Convert canonical Hooks to Claude Code settings.json hooks format.\n * Claude Code: { event: [{ matcher, hooks: [{ type, command?, prompt?, timeout? }] }] }\n */\nfunction toClaudeCodeHooks(hooks: import('../../core/types.js').Hooks): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [event, entries] of Object.entries(hooks)) {\n if (!Array.isArray(entries)) continue;\n const translated: Array<{ matcher: string; hooks: unknown[] }> = [];\n for (const e of entries) {\n if (!hasHookText(e)) continue;\n const command = getHookCommand(e);\n const prompt = getHookPrompt(e);\n const value = e.type === 'prompt' ? prompt || command : command || prompt;\n const hookItem: Record<string, unknown> = {\n type: e.type === 'prompt' ? 'prompt' : 'command',\n [e.type === 'prompt' ? 'prompt' : 'command']: value,\n };\n if (e.timeout !== undefined) hookItem.timeout = e.timeout;\n translated.push({ matcher: e.matcher, hooks: [hookItem] });\n }\n if (translated.length > 0) result[event] = translated;\n }\n return result;\n}\n\n/**\n * Generate .claude/settings.json hooks from canonical sources.\n * Merges with existing settings.json to preserve permissions, mcpServers, etc.\n * @param canonical - Loaded canonical files\n * @returns Array with single .claude/settings.json output, or [] if no hooks\n */\nexport function generateHooks(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.hooks || Object.keys(canonical.hooks).length === 0) return [];\n const claudeHooks = toClaudeCodeHooks(canonical.hooks);\n if (Object.keys(claudeHooks).length === 0) return [];\n const content = JSON.stringify({ hooks: claudeHooks }, null, 2);\n return [{ path: '.claude/settings.json', content }];\n}\n\n/**\n * Generate .claudeignore from canonical ignore patterns.\n * Uses gitignore-style syntax (one pattern per line).\n * @param canonical - Loaded canonical files\n * @returns Array with single .claudeignore output, or [] if no patterns\n */\nexport function generateIgnore(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.ignore || canonical.ignore.length === 0) return [];\n const content = canonical.ignore.join('\\n');\n return [{ path: '.claudeignore', content }];\n}\n","import { registerTarget } from '../registry.js';\nimport type { TargetGenerators } from '../target.interface.js';\nimport {\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateMcp,\n generatePermissions,\n generateHooks,\n generateIgnore,\n} from './generator.js';\nimport { importFromClaudeCode } from './importer.js';\n\nconst target: TargetGenerators = {\n name: 'claude-code',\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateMcp,\n generatePermissions,\n generateHooks,\n generateIgnore,\n importFrom: importFromClaudeCode,\n};\n\nregisterTarget(target);\n","/**\n * Generate Cursor config files from canonical sources.\n */\n\nimport type { CanonicalFiles } from '../../core/types.js';\nimport { getHookCommand, getHookPrompt, hasHookText } from '../../core/hook-command.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\n\nexport interface RulesOutput {\n path: string;\n content: string;\n}\n\n/**\n * Generate .cursor/rules/_root.mdc from root rule + .cursor/rules/{slug}.mdc from non-root rules.\n * @param canonical - Loaded canonical files\n * @returns _root.mdc (alwaysApply: true) + one .mdc per contextual rule (alwaysApply: false)\n */\nexport function generateRules(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n\n const root = canonical.rules.find((r) => r.root);\n if (root) {\n const body = root.body.trim() ? root.body : '';\n // Emit AGENTS.md as a plain-body compatibility mirror (§3.1 of cursor format doc)\n outputs.push({ path: 'AGENTS.md', content: body });\n // Emit .cursor/rules/general.mdc as the primary structured rule (§2.1)\n const frontmatter: Record<string, unknown> = { alwaysApply: true };\n if (root.description) frontmatter.description = root.description;\n const content = serializeFrontmatter(frontmatter, body);\n outputs.push({ path: '.cursor/rules/general.mdc', content });\n }\n\n const nonRoot = canonical.rules.filter(\n (r) => !r.root && (r.targets.length === 0 || r.targets.includes('cursor')),\n );\n for (const rule of nonRoot) {\n const slug = rule.source.split('/').pop()!.replace(/\\.md$/, '');\n const alwaysApply = rule.trigger === 'always_on' ? true : false;\n const frontmatter: Record<string, unknown> = { alwaysApply };\n if (rule.description) frontmatter.description = rule.description;\n if (rule.globs.length > 0) frontmatter.globs = rule.globs;\n const content = serializeFrontmatter(frontmatter, rule.body.trim() || '');\n outputs.push({ path: `.cursor/rules/${slug}.mdc`, content });\n }\n\n return outputs;\n}\n\n/**\n * Generate .cursor/commands/*.md from canonical commands.\n * @param canonical - Loaded canonical files\n * @returns Array of command file outputs, or [] if no commands\n */\nexport function generateCommands(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.commands.map((cmd) => ({\n path: `.cursor/commands/${cmd.name}.md`,\n content: cmd.body.trim() || '',\n }));\n}\n\n/**\n * Generate .cursor/mcp.json from canonical MCP config.\n * Cursor stores MCP server definitions in .cursor/mcp.json.\n * @param canonical - Loaded canonical files\n * @returns Array with single .cursor/mcp.json output, or [] if no MCP config or empty mcpServers\n */\nexport function generateMcp(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.mcp || Object.keys(canonical.mcp.mcpServers).length === 0) return [];\n const content = JSON.stringify({ mcpServers: canonical.mcp.mcpServers }, null, 2);\n return [{ path: '.cursor/mcp.json', content }];\n}\n\n/**\n * Generate .cursor/skills/*.md from canonical skills.\n * Cursor uses flat structure: one .md file per skill with frontmatter+body.\n * @param canonical - Loaded canonical files\n * @returns Array of skill file outputs, or [] if no skills\n */\nexport function generateSkills(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n for (const skill of canonical.skills) {\n const frontmatter: Record<string, unknown> = {\n name: skill.name,\n description: skill.description || undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n const content = serializeFrontmatter(frontmatter, skill.body.trim() || '');\n outputs.push({ path: `.cursor/skills/${skill.name}/SKILL.md`, content });\n for (const file of skill.supportingFiles) {\n const relPath = file.relativePath.replace(/\\\\/g, '/');\n outputs.push({ path: `.cursor/skills/${skill.name}/${relPath}`, content: file.content });\n }\n }\n return outputs;\n}\n\n/**\n * Generate .cursor/agents/*.md from canonical agents.\n * @param canonical - Loaded canonical files\n * @returns Array of agent file outputs, or [] if no agents\n */\nexport function generateAgents(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.agents.map((agent) => {\n const frontmatter: Record<string, unknown> = {\n name: agent.name,\n description: agent.description,\n tools: agent.tools.length > 0 ? agent.tools : undefined,\n disallowedTools: agent.disallowedTools.length > 0 ? agent.disallowedTools : undefined,\n model: agent.model || undefined,\n permissionMode: agent.permissionMode || undefined,\n maxTurns: agent.maxTurns > 0 ? agent.maxTurns : undefined,\n mcpServers: agent.mcpServers.length > 0 ? agent.mcpServers : undefined,\n hooks: Object.keys(agent.hooks).length > 0 ? agent.hooks : undefined,\n skills: agent.skills.length > 0 ? agent.skills : undefined,\n memory: agent.memory || undefined,\n };\n Object.keys(frontmatter).forEach((k) => {\n if (frontmatter[k] === undefined) delete frontmatter[k];\n });\n const content = serializeFrontmatter(frontmatter, agent.body.trim() || '');\n return { path: `.cursor/agents/${agent.name}.md`, content };\n });\n}\n\n/**\n * Generate Cursor permissions. Cursor has no native tool-level permission file\n * equivalent to .claude/settings.json; tool allow/deny are Claude-specific.\n * A linter warning is emitted instead (see src/core/linter-permissions.ts).\n * @returns Always [] — permissions are not projected for Cursor\n */\nexport function generatePermissions(_canonical: CanonicalFiles): RulesOutput[] {\n return [];\n}\n\n/**\n * Convert canonical Hooks to Cursor hooks.json format.\n * Same structure as Claude Code: { event: [{ matcher, hooks: [{ type, command?, prompt?, timeout? }] }] }\n */\nfunction toCursorHooks(hooks: import('../../core/types.js').Hooks): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [event, entries] of Object.entries(hooks)) {\n if (!Array.isArray(entries)) continue;\n const translated: Array<{ matcher: string; hooks: unknown[] }> = [];\n for (const e of entries) {\n if (!hasHookText(e)) continue;\n const command = getHookCommand(e);\n const prompt = getHookPrompt(e);\n const value = e.type === 'prompt' ? prompt || command : command || prompt;\n const hookItem: Record<string, unknown> = {\n type: e.type === 'prompt' ? 'prompt' : 'command',\n [e.type === 'prompt' ? 'prompt' : 'command']: value,\n };\n if (e.timeout !== undefined) hookItem.timeout = e.timeout;\n translated.push({ matcher: e.matcher, hooks: [hookItem] });\n }\n if (translated.length > 0) result[event] = translated;\n }\n return result;\n}\n\n/**\n * Generate .cursor/hooks.json from canonical sources.\n * @param canonical - Loaded canonical files\n * @returns Array with single .cursor/hooks.json output, or [] if no hooks\n */\nexport function generateHooks(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.hooks || Object.keys(canonical.hooks).length === 0) return [];\n const cursorHooks = toCursorHooks(canonical.hooks);\n if (Object.keys(cursorHooks).length === 0) return [];\n const content = JSON.stringify({ version: 1, hooks: cursorHooks }, null, 2);\n return [{ path: '.cursor/hooks.json', content }];\n}\n\n/**\n * Generate .cursorignore from canonical ignore patterns.\n * Uses gitignore-style syntax (one pattern per line).\n * Note: .cursorindexingignore is community-sourced and not an officially documented\n * Cursor project file — it is not emitted.\n * @param canonical - Loaded canonical files\n * @returns Array with single .cursorignore output, or [] if no patterns\n */\nexport function generateIgnore(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.ignore || canonical.ignore.length === 0) return [];\n const content = canonical.ignore.join('\\n');\n return [{ path: '.cursorignore', content }];\n}\n","import { registerTarget } from '../registry.js';\nimport type { TargetGenerators } from '../target.interface.js';\nimport {\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateMcp,\n generatePermissions,\n generateHooks,\n generateIgnore,\n} from './generator.js';\nimport { importFromCursor } from './importer.js';\n\nconst target: TargetGenerators = {\n name: 'cursor',\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateMcp,\n generatePermissions,\n generateHooks,\n generateIgnore,\n importFrom: importFromCursor,\n};\n\nregisterTarget(target);\n","/**\n * Generate GitHub Copilot config files from canonical sources.\n * Copilot uses .github/copilot-instructions.md (global), .github/instructions/*.instructions.md (scoped rules),\n * .github/prompts/*.prompt.md (native prompt files), .github/skills/{name}/ (native skills),\n * .github/agents/*.agent.md (native agents), .github/hooks/agentsbridge.json (+ scripts) for hooks.\n */\n\nimport { basename } from 'node:path';\nimport type { CanonicalFiles } from '../../core/types.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\nimport {\n COPILOT_INSTRUCTIONS,\n COPILOT_HOOKS_DIR,\n COPILOT_INSTRUCTIONS_DIR,\n COPILOT_SKILLS_DIR,\n COPILOT_AGENTS_DIR,\n} from './constants.js';\nimport { commandPromptPath, serializeCommandPrompt } from './command-prompt.js';\nimport { hasHookCommand } from './hook-entry.js';\n\nexport interface RulesOutput {\n path: string;\n content: string;\n}\n\nfunction ruleSlug(source: string): string {\n const name = basename(source, '.md');\n return name === '_root' ? 'root' : name;\n}\n\nfunction mapHookEvent(event: string): string | null {\n switch (event) {\n case 'PreToolUse':\n return 'preToolUse';\n case 'PostToolUse':\n return 'postToolUse';\n case 'Notification':\n return 'notification';\n case 'UserPromptSubmit':\n return 'userPromptSubmitted';\n default:\n return null;\n }\n}\n\n/**\n * Build .github/copilot-instructions.md from the canonical root rule.\n * @param canonical - Loaded canonical files\n * @returns Array with copilot-instructions.md output, or [] if no root rule\n */\nexport function generateRules(canonical: CanonicalFiles): RulesOutput[] {\n const root = canonical.rules.find((r) => r.root);\n const outputs: RulesOutput[] = [];\n\n if (root?.body.trim()) {\n outputs.push({ path: COPILOT_INSTRUCTIONS, content: root.body.trim() });\n }\n\n for (const rule of canonical.rules) {\n if (rule.root) continue;\n if (rule.targets.length > 0 && !rule.targets.includes('copilot')) continue;\n if (rule.globs.length === 0) continue; // only emit when globs are present\n const slug = ruleSlug(rule.source);\n const frontmatter: Record<string, unknown> = {\n description: rule.description || undefined,\n applyTo: rule.globs.length === 1 ? rule.globs[0] : rule.globs,\n };\n Object.keys(frontmatter).forEach((k) => {\n if (frontmatter[k] === undefined) delete frontmatter[k];\n });\n const content = serializeFrontmatter(frontmatter, rule.body.trim() || '');\n outputs.push({ path: `${COPILOT_INSTRUCTIONS_DIR}/${slug}.instructions.md`, content });\n }\n\n return outputs;\n}\n\nexport function generateCommands(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.commands.map((command) => ({\n path: commandPromptPath(command.name),\n content: serializeCommandPrompt(command),\n }));\n}\n\n/**\n * Generate .github/skills/{name}/SKILL.md and supporting files from canonical skills.\n * Copilot Agent Skills use SKILL.md with name/description frontmatter.\n * @param canonical - Loaded canonical files\n * @returns Array of skill file outputs\n */\nexport function generateSkills(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n for (const skill of canonical.skills) {\n const frontmatter: Record<string, unknown> = {\n name: skill.name,\n description: skill.description || undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n const skillContent = serializeFrontmatter(frontmatter, skill.body.trim() || '');\n outputs.push({\n path: `${COPILOT_SKILLS_DIR}/${skill.name}/SKILL.md`,\n content: skillContent,\n });\n for (const file of skill.supportingFiles) {\n const relPath = file.relativePath.replace(/\\\\/g, '/');\n outputs.push({\n path: `${COPILOT_SKILLS_DIR}/${skill.name}/${relPath}`,\n content: file.content,\n });\n }\n }\n return outputs;\n}\n\n/**\n * Generate .github/agents/{name}.agent.md from canonical agents.\n * Copilot custom agents use .agent.md extension with YAML frontmatter.\n * @param canonical - Loaded canonical files\n * @returns Array of agent file outputs\n */\nexport function generateAgents(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.agents.map((agent) => {\n const frontmatter: Record<string, unknown> = {\n name: agent.name,\n description: agent.description,\n tools: agent.tools.length > 0 ? agent.tools : undefined,\n model: agent.model || undefined,\n 'mcp-servers': agent.mcpServers.length > 0 ? agent.mcpServers : undefined,\n skills: agent.skills.length > 0 ? agent.skills : undefined,\n };\n Object.keys(frontmatter).forEach((k) => {\n if (frontmatter[k] === undefined) delete frontmatter[k];\n });\n const content = serializeFrontmatter(frontmatter, agent.body.trim() || '');\n return { path: `${COPILOT_AGENTS_DIR}/${agent.name}.agent.md`, content };\n });\n}\n\n/**\n * Generate .github/hooks/agentsbridge.json from canonical hooks.\n */\nexport function generateHooks(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.hooks) return [];\n const hooks = Object.fromEntries(\n Object.entries(canonical.hooks).flatMap(([event, entries]) => {\n const mappedEvent = mapHookEvent(event);\n if (!mappedEvent || !Array.isArray(entries)) return [];\n const mappedEntries = entries\n .filter(\n (entry): entry is NonNullable<typeof entry> =>\n typeof entry === 'object' && entry !== null && hasHookCommand(entry),\n )\n .map((entry, index) => {\n const safePhase = event.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase();\n const hook: Record<string, unknown> = {\n type: 'command',\n bash: `./scripts/${safePhase}-${index}.sh`,\n comment: `Matcher: ${entry.matcher}`,\n };\n if (entry.timeout !== undefined) hook.timeoutSec = Math.ceil(entry.timeout / 1000);\n return hook;\n });\n return mappedEntries.length > 0 ? [[mappedEvent, mappedEntries] as const] : [];\n }),\n );\n if (Object.keys(hooks).length === 0) return [];\n return [\n {\n path: `${COPILOT_HOOKS_DIR}/agentsbridge.json`,\n content: JSON.stringify({ version: 1, hooks }, null, 2),\n },\n ];\n}\n","import type { HookEntry } from '../../core/types.js';\nimport { hasHookCommand as hasNonEmptyHookCommand } from '../../core/hook-command.js';\n\nexport function hasHookCommand(entry: HookEntry): boolean {\n return hasNonEmptyHookCommand(entry);\n}\n","import { registerTarget } from '../registry.js';\nimport type { TargetGenerators } from '../target.interface.js';\nimport {\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateHooks,\n} from './generator.js';\nimport { importFromCopilot } from './importer.js';\n\nconst target: TargetGenerators = {\n name: 'copilot',\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateHooks,\n importFrom: importFromCopilot,\n};\n\nregisterTarget(target);\n","import type { CanonicalFiles } from '../../core/types.js';\nimport { generateEmbeddedSkills } from '../embedded-skill.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\nimport { serializeCommandRule } from './command-rule.js';\nimport {\n CONTINUE_MCP_FILE,\n CONTINUE_PROMPTS_DIR,\n CONTINUE_ROOT_RULE,\n CONTINUE_RULES_DIR,\n CONTINUE_SKILLS_DIR,\n} from './constants.js';\n\nexport interface ContinueOutput {\n path: string;\n content: string;\n}\n\nexport function generateRules(canonical: CanonicalFiles): ContinueOutput[] {\n const outputs: ContinueOutput[] = [];\n const root = canonical.rules.find((rule) => rule.root);\n if (root) {\n const frontmatter: Record<string, unknown> = {};\n if (root.description) frontmatter.description = root.description;\n outputs.push({\n path: CONTINUE_ROOT_RULE,\n content: serializeFrontmatter(frontmatter, root.body.trim() || ''),\n });\n }\n\n for (const rule of canonical.rules) {\n if (rule.root) continue;\n if (rule.targets.length > 0 && !rule.targets.includes('continue')) continue;\n\n const slug = rule.source.split('/').pop()!.replace(/\\.md$/, '');\n const frontmatter: Record<string, unknown> = {};\n if (rule.description) frontmatter.description = rule.description;\n if (rule.globs.length > 0) frontmatter.globs = rule.globs;\n outputs.push({\n path: `${CONTINUE_RULES_DIR}/${slug}.md`,\n content: serializeFrontmatter(frontmatter, rule.body.trim() || ''),\n });\n }\n\n return outputs;\n}\n\nexport function generateCommands(canonical: CanonicalFiles): ContinueOutput[] {\n return canonical.commands.map((command) => ({\n path: `${CONTINUE_PROMPTS_DIR}/${command.name}.md`,\n content: serializeCommandRule(command),\n }));\n}\n\nexport function generateMcp(canonical: CanonicalFiles): ContinueOutput[] {\n if (!canonical.mcp || Object.keys(canonical.mcp.mcpServers).length === 0) return [];\n return [\n {\n path: CONTINUE_MCP_FILE,\n content: JSON.stringify({ mcpServers: canonical.mcp.mcpServers }, null, 2),\n },\n ];\n}\n\nexport function generateSkills(canonical: CanonicalFiles): ContinueOutput[] {\n return generateEmbeddedSkills(canonical, CONTINUE_SKILLS_DIR);\n}\n","import { registerTarget } from '../registry.js';\nimport type { TargetGenerators } from '../target.interface.js';\nimport { generateRules, generateCommands, generateSkills, generateMcp } from './generator.js';\nimport { importFromContinue } from './importer.js';\n\nconst target: TargetGenerators = {\n name: 'continue',\n generateRules,\n generateCommands,\n generateSkills,\n generateMcp,\n importFrom: importFromContinue,\n};\n\nregisterTarget(target);\n","import { basename } from 'node:path';\nimport type { CanonicalFiles } from '../../core/types.js';\nimport { generateEmbeddedSkills } from '../embedded-skill.js';\nimport {\n JUNIE_AGENTS_DIR,\n JUNIE_COMMANDS_DIR,\n JUNIE_DOT_AGENTS,\n JUNIE_RULES_DIR,\n JUNIE_IGNORE,\n JUNIE_MCP_FILE,\n JUNIE_SKILLS_DIR,\n} from './constants.js';\n\nexport interface JunieOutput {\n path: string;\n content: string;\n}\n\nexport function generateRules(canonical: CanonicalFiles): JunieOutput[] {\n const outputs: JunieOutput[] = [];\n const root = canonical.rules.find((rule) => rule.root);\n\n if (root) {\n outputs.push({\n path: JUNIE_DOT_AGENTS,\n content: root.body.trim() || '',\n });\n }\n\n for (const rule of canonical.rules) {\n if (rule.root) continue;\n if (rule.targets.length > 0 && !rule.targets.includes('junie')) continue;\n const slug = basename(rule.source, '.md');\n outputs.push({\n path: `${JUNIE_RULES_DIR}/${slug}.md`,\n content: rule.body.trim() || '',\n });\n }\n\n return outputs;\n}\n\nexport function generateMcp(canonical: CanonicalFiles): JunieOutput[] {\n if (!canonical.mcp || Object.keys(canonical.mcp.mcpServers).length === 0) return [];\n return [\n {\n path: JUNIE_MCP_FILE,\n content: JSON.stringify({ mcpServers: canonical.mcp.mcpServers }, null, 2),\n },\n ];\n}\n\nexport function generateCommands(canonical: CanonicalFiles): JunieOutput[] {\n return canonical.commands.map((command) => {\n return {\n path: `${JUNIE_COMMANDS_DIR}/${command.name}.md`,\n content: command.body.trim() || '',\n };\n });\n}\n\nexport function generateAgents(canonical: CanonicalFiles): JunieOutput[] {\n return canonical.agents.map((agent) => ({\n path: `${JUNIE_AGENTS_DIR}/${agent.name}.md`,\n content: agent.body.trim() || '',\n }));\n}\n\nexport function generateIgnore(canonical: CanonicalFiles): JunieOutput[] {\n if (canonical.ignore.length === 0) return [];\n return [{ path: JUNIE_IGNORE, content: canonical.ignore.join('\\n') }];\n}\n\nexport function generateSkills(canonical: CanonicalFiles): JunieOutput[] {\n return generateEmbeddedSkills(canonical, JUNIE_SKILLS_DIR);\n}\n","import { registerTarget } from '../registry.js';\nimport type { TargetGenerators } from '../target.interface.js';\nimport {\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateMcp,\n generateIgnore,\n} from './generator.js';\nimport { importFromJunie } from './importer.js';\n\nconst target: TargetGenerators = {\n name: 'junie',\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateMcp,\n generateIgnore,\n importFrom: importFromJunie,\n};\n\nregisterTarget(target);\n","/**\n * Generate Gemini CLI config files from canonical sources.\n * Gemini uses GEMINI.md (root + embedded non-root rules as sections), .gemini/commands/*.toml,\n * .gemini/skills/* (skills + embedded agents), and .gemini/settings.json\n * (MCP, ignorePatterns, hooks - postToolUse only).\n */\n\nimport type { CanonicalFiles } from '../../core/types.js';\nimport { getHookCommand, hasHookCommand } from '../../core/hook-command.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\nimport {\n GEMINI_ROOT,\n GEMINI_COMPAT_AGENTS,\n GEMINI_COMMANDS_DIR,\n GEMINI_SETTINGS,\n GEMINI_IGNORE,\n GEMINI_SKILLS_DIR,\n GEMINI_AGENTS_DIR,\n} from './constants.js';\nimport { canonicalCommandNameToGeminiTomlPath } from './command-namespace.js';\n\nexport interface RulesOutput {\n path: string;\n content: string;\n}\n\nfunction serializeTomlMultilineLiteral(value: string): string {\n const normalized = value.replace(/\\r\\n/g, '\\n');\n if (!normalized.includes('\"\"\"')) {\n return `\"\"\"\\n${normalized}\\n\"\"\"`;\n }\n return JSON.stringify(normalized);\n}\n\nfunction serializeGeminiCommand(cmd: CanonicalFiles['commands'][number]): string {\n const lines = [\n `description = ${JSON.stringify(cmd.description || cmd.name)}`,\n `prompt = ${serializeTomlMultilineLiteral(cmd.body.trim() || '')}`,\n ];\n return lines.join('\\n') + '\\n';\n}\n\nfunction mapHookEvent(event: string): string | null {\n switch (event) {\n case 'PreToolUse':\n return 'BeforeTool';\n case 'PostToolUse':\n return 'AfterTool';\n case 'Notification':\n return 'Notification';\n default:\n return null;\n }\n}\n\n/**\n * Generate GEMINI.md from root rule and non-root rules as ---‑separated sections.\n * @param canonical - Loaded canonical files\n * @returns Array of rule outputs, or [] if no rules for gemini-cli\n */\nexport function generateRules(canonical: CanonicalFiles): RulesOutput[] {\n const root = canonical.rules.find((r) => r.root);\n const nonRootRules = canonical.rules.filter((r) => {\n if (r.root) return false;\n if (r.targets.length > 0 && !r.targets.includes('gemini-cli')) return false;\n return true;\n });\n\n if (!root && nonRootRules.length === 0) return [];\n\n // Build GEMINI.md: root body + non-root rule sections separated by ---\n // Gemini CLI has no native .gemini/rules/ directory; all rules go into GEMINI.md.\n const sections: string[] = [];\n\n if (root) {\n sections.push(root.body.trim());\n }\n\n for (const rule of nonRootRules) {\n const parts: string[] = [];\n if (rule.description) {\n parts.push(`## ${rule.description}`);\n parts.push('');\n }\n parts.push(rule.body.trim());\n sections.push(parts.join('\\n'));\n }\n\n // Join non-empty sections with --- separators\n const nonEmpty = sections.filter((s) => s.length > 0);\n const content = nonEmpty.join('\\n\\n---\\n\\n');\n\n // Compatibility mirror:\n // - `AGENTS.md` is root-only to avoid conflicts with Codex/Cline.\n const outputs: RulesOutput[] = [{ path: GEMINI_ROOT, content }];\n if (root) {\n // `AGENTS.md` is a shared, cross-target compatibility mirror.\n // Codex/Cline expect shared GitHub Agents skill links under `.agents/skills/...`,\n // but Gemini would otherwise rewrite them to `.gemini/skills/...`, causing collisions.\n const compatAgentsContent = root.body\n .trim()\n .replace(/\\.agentsbridge\\/skills\\//g, '.agents/skills/');\n outputs.push({ path: GEMINI_COMPAT_AGENTS, content: compatAgentsContent });\n }\n return outputs;\n}\n\n/**\n * Generate .gemini/commands/*.toml from canonical commands.\n * @param canonical - Loaded canonical files\n * @returns Array of command outputs, or [] if no commands\n */\nexport function generateCommands(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.commands.map((cmd) => ({\n path: canonicalCommandNameToGeminiTomlPath(cmd.name, GEMINI_COMMANDS_DIR),\n content: serializeGeminiCommand(cmd),\n }));\n}\n\n/**\n * Generate native .gemini/agents/{name}.md from canonical agents.\n */\nexport function generateAgents(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.agents.map((agent) => {\n const frontmatter: Record<string, unknown> = {\n name: agent.name,\n kind: 'local',\n description: agent.description || undefined,\n tools: agent.tools.length > 0 ? agent.tools : undefined,\n model: agent.model || undefined,\n maxTurns: agent.maxTurns > 0 ? agent.maxTurns : undefined,\n permissionMode: agent.permissionMode || undefined,\n disallowedTools: agent.disallowedTools.length > 0 ? agent.disallowedTools : undefined,\n };\n Object.keys(frontmatter).forEach((k) => {\n if (frontmatter[k] === undefined) delete frontmatter[k];\n });\n const content = serializeFrontmatter(frontmatter, agent.body.trim() || '');\n return { path: `${GEMINI_AGENTS_DIR}/${agent.name}.md`, content };\n });\n}\n\n/**\n * Generate .gemini/skills/{name}/SKILL.md and supporting files (Agent Skills standard).\n * @param canonical - Loaded canonical files\n * @returns Array of skill file outputs\n */\nexport function generateSkills(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n for (const skill of canonical.skills) {\n const frontmatter: Record<string, unknown> = {\n name: skill.name,\n description: skill.description || undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n const skillContent = serializeFrontmatter(frontmatter, skill.body.trim() || '');\n outputs.push({\n path: `${GEMINI_SKILLS_DIR}/${skill.name}/SKILL.md`,\n content: skillContent,\n });\n for (const file of skill.supportingFiles) {\n const relPath = file.relativePath.replace(/\\\\/g, '/');\n outputs.push({\n path: `${GEMINI_SKILLS_DIR}/${skill.name}/${relPath}`,\n content: file.content,\n });\n }\n }\n return outputs;\n}\n\n/**\n * Generate .gemini/settings.json with mcpServers and hooks.\n * @param canonical - Loaded canonical files\n * @returns Array with single settings.json output, or [] if nothing to emit\n */\nexport function generateSettings(canonical: CanonicalFiles): RulesOutput[] {\n const settings: Record<string, unknown> = {};\n let hasAnyNativeSettings = false;\n\n if (canonical.mcp && Object.keys(canonical.mcp.mcpServers).length > 0) {\n settings.mcpServers = canonical.mcp.mcpServers;\n hasAnyNativeSettings = true;\n }\n if (canonical.agents.length > 0) {\n settings.experimental = { enableAgents: true };\n hasAnyNativeSettings = true;\n }\n if (canonical.hooks) {\n const hookEntries = Object.entries(canonical.hooks).flatMap(([event, entries]) => {\n const mappedEvent = mapHookEvent(event);\n if (!mappedEvent || !Array.isArray(entries)) return [];\n const mappedEntries = entries\n .filter(\n (entry): entry is NonNullable<typeof entry> =>\n typeof entry === 'object' && entry !== null && hasHookCommand(entry),\n )\n .map((entry, index) => ({\n matcher: entry!.matcher,\n hooks: [\n {\n name: `${mappedEvent}-${index + 1}`,\n type: 'command',\n command: getHookCommand(entry),\n timeout: entry!.timeout,\n },\n ],\n }));\n return mappedEntries.length > 0 ? [[mappedEvent, mappedEntries] as const] : [];\n });\n if (hookEntries.length > 0) {\n settings.hooks = Object.fromEntries(hookEntries);\n hasAnyNativeSettings = true;\n }\n }\n\n // Compatibility: Gemini can also load `AGENTS.md` if we list it in `context.fileName`.\n if (hasAnyNativeSettings) {\n settings.context = { fileName: [GEMINI_ROOT, GEMINI_COMPAT_AGENTS] };\n }\n\n if (Object.keys(settings).length === 0) return [];\n return [{ path: GEMINI_SETTINGS, content: JSON.stringify(settings, null, 2) }];\n}\n\nexport function generateIgnore(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.ignore || canonical.ignore.length === 0) return [];\n return [{ path: GEMINI_IGNORE, content: canonical.ignore.join('\\n') }];\n}\n","import { relative } from 'node:path';\n\n/**\n * Convert canonical command names into Gemini CLI nested slash-style command paths.\n *\n * Gemini docs: `.gemini/commands/git/commit.toml` maps to `/git:commit`.\n * This function maps `git:commit` -> `git/commit.toml`.\n */\nexport function canonicalCommandNameToGeminiTomlPath(cmdName: string, commandsDir: string): string {\n const parts = cmdName.split(':').filter(Boolean);\n const fileBase = parts.length > 0 ? parts.pop()! : cmdName;\n const dirs = parts; // remaining segments\n const fullParts = [commandsDir, ...dirs, `${fileBase}.toml`];\n return fullParts.join('/');\n}\n\n/**\n * Convert Gemini CLI nested command file path back to canonical `:`-delimited command name.\n *\n * Example:\n * srcPath: `<root>/.gemini/commands/git/commit.toml`\n * => name: `git:commit`\n */\nexport function geminiTomlPathToCanonicalCommandName(\n srcPath: string,\n geminiCommandsRoot: string,\n): string {\n const rel = relative(geminiCommandsRoot, srcPath).replace(/\\\\/g, '/');\n const noExt = rel.replace(/\\.(toml|md)$/i, '');\n const segments = noExt.split('/').filter(Boolean);\n return segments.join(':');\n}\n","import type { CanonicalFiles } from '../../core/types.js';\nimport { GEMINI_DEFAULT_POLICIES_FILE } from './constants.js';\n\ntype RuleDecision = 'allow' | 'deny' | 'ask_user';\n\nfunction escapeTomlBasicString(value: string): string {\n // JSON string escaping is close enough for TOML basic strings.\n return JSON.stringify(value);\n}\n\nfunction escapeRegexLiteral(value: string): string {\n // Escape all regex metacharacters so the literal is matched inside argsPattern.\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction parsePermissionExpr(\n expr: string,\n):\n | { kind: 'tool'; tool: string }\n | { kind: 'bash'; prefix: string }\n | { kind: 'read'; path: string }\n | { kind: 'unknown'; raw: string } {\n const bash = expr.match(/^Bash\\((.*)\\)$/);\n if (bash && typeof bash[1] === 'string') return { kind: 'bash', prefix: bash[1] };\n const read = expr.match(/^Read\\((.*)\\)$/);\n if (read && typeof read[1] === 'string') return { kind: 'read', path: read[1] };\n\n if (expr === 'Read' || expr === 'Grep' || expr === 'LS' || expr === 'WebFetch') {\n return { kind: 'tool', tool: expr };\n }\n\n return { kind: 'unknown', raw: expr };\n}\n\nfunction ruleForDecision(decision: RuleDecision, priority: number, tomlFields: string[]): string {\n return [\n '[[rule]]',\n `decision = ${escapeTomlBasicString(decision)}`,\n `priority = ${priority}`,\n ...tomlFields,\n '',\n ].join('\\n');\n}\n\nfunction permissionExprToGeminiRule(\n expr: string,\n decision: RuleDecision,\n priority: number,\n): string | null {\n const parsed = parsePermissionExpr(expr);\n\n const TOOLNAME_MAP = {\n Read: 'read_file',\n Grep: 'grep_search',\n LS: 'list_directory',\n WebFetch: 'web_fetch',\n Bash: 'run_shell_command',\n } as const;\n\n if (parsed.kind === 'tool') {\n const toolName = TOOLNAME_MAP[parsed.tool as keyof typeof TOOLNAME_MAP] ?? parsed.tool;\n return ruleForDecision(decision, priority, [`toolName = ${escapeTomlBasicString(toolName)}`]);\n }\n\n if (parsed.kind === 'bash') {\n // Canonical format uses `prefix:*` (e.g. `curl:*`). Gemini policy uses `commandPrefix`.\n const normalizedPrefix = parsed.prefix.replace(/:\\*$/u, '').replace(/\\*$/u, '').trim();\n return ruleForDecision(decision, priority, [\n `toolName = ${escapeTomlBasicString(TOOLNAME_MAP.Bash)}`,\n `commandPrefix = ${escapeTomlBasicString(normalizedPrefix)}`,\n ]);\n }\n\n if (parsed.kind === 'read') {\n return ruleForDecision(decision, priority, [\n `toolName = ${escapeTomlBasicString(TOOLNAME_MAP.Read)}`,\n `argsPattern = ${escapeTomlBasicString(escapeRegexLiteral(parsed.path))}`,\n ]);\n }\n\n // Preserve unrecognized expressions as best-effort toolName entries.\n return ruleForDecision(decision, priority, [`toolName = ${escapeTomlBasicString(parsed.raw)}`]);\n}\n\nexport function generateGeminiPermissionsPolicies(\n canonical: CanonicalFiles,\n): Array<{ path: string; content: string }> {\n if (!canonical.permissions) return [];\n const { allow, deny } = canonical.permissions;\n const total = allow.length + deny.length;\n if (total === 0) return [];\n\n const rules: string[] = [];\n allow.forEach((expr, idx) => {\n const rule = permissionExprToGeminiRule(expr, 'allow', 100 + idx);\n if (rule) rules.push(rule);\n });\n deny.forEach((expr, idx) => {\n const rule = permissionExprToGeminiRule(expr, 'deny', 200 + idx);\n if (rule) rules.push(rule);\n });\n\n if (rules.length === 0) return [];\n\n return [\n {\n path: GEMINI_DEFAULT_POLICIES_FILE,\n content: rules.join('\\n'),\n },\n ];\n}\n","import { registerTarget } from '../registry.js';\nimport type { TargetGenerators } from '../target.interface.js';\nimport {\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateSettings,\n generateIgnore,\n} from './generator.js';\nimport { generateGeminiPermissionsPolicies } from './policies-generator.js';\nimport { importFromGemini } from './importer.js';\n\nconst target: TargetGenerators = {\n name: 'gemini-cli',\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateSettings,\n generateIgnore,\n generatePermissions: generateGeminiPermissionsPolicies,\n importFrom: importFromGemini,\n};\n\nregisterTarget(target);\n","/**\n * Generate Cline config files from canonical sources.\n * Cline uses .clinerules (rules, workflows), .clineignore, .cline/mcp_settings.json, .cline/skills (skills).\n * Supports rules, workflows (from canonical commands), ignore, MCP, skills. Skips agents, hooks, permissions.\n */\n\nimport { basename } from 'node:path';\nimport type { CanonicalFiles } from '../../core/types.js';\nimport { hasHookCommand } from '../../core/hook-command.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\nimport {\n projectedAgentSkillDirName,\n serializeProjectedAgentSkill,\n} from '../projected-agent-skill.js';\nimport {\n CLINE_RULES_DIR,\n CLINE_AGENTS_MD,\n CLINE_IGNORE,\n CLINE_MCP_SETTINGS,\n CLINE_SKILLS_DIR,\n CLINE_WORKFLOWS_DIR,\n CLINE_HOOKS_DIR,\n} from './constants.js';\n\nexport interface RulesOutput {\n path: string;\n content: string;\n}\n\nfunction ruleSlug(source: string): string {\n const name = basename(source, '.md');\n return name === '_root' ? 'root' : name;\n}\n\n/**\n * Generate .clinerules/*.md from canonical rules.\n * Cline supports plain markdown with optional frontmatter.\n * Root rule → AGENTS.md, non-root → .clinerules/{slug}.md\n *\n * @param canonical - Loaded canonical files\n * @returns Array of rule outputs, or [] if no rules for cline\n */\nexport function generateRules(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n const root = canonical.rules.find((r) => r.root);\n\n if (root) {\n const body = root.body.trim() ? root.body : '';\n outputs.push({ path: CLINE_AGENTS_MD, content: body });\n }\n\n for (const rule of canonical.rules) {\n if (rule.root) continue;\n if (rule.targets.length > 0 && !rule.targets.includes('cline')) continue;\n const slug = ruleSlug(rule.source);\n const frontmatter: Record<string, unknown> = {\n description: rule.description || undefined,\n paths: rule.globs.length > 0 ? rule.globs : undefined,\n };\n Object.keys(frontmatter).forEach((k) => {\n if (frontmatter[k] === undefined) delete frontmatter[k];\n });\n const content =\n Object.keys(frontmatter).length > 0\n ? serializeFrontmatter(frontmatter, rule.body.trim() || '')\n : rule.body.trim() || '';\n outputs.push({ path: `${CLINE_RULES_DIR}/${slug}.md`, content });\n }\n\n return outputs;\n}\n\n/**\n * Generate .clinerules/workflows/{name}.md from canonical commands.\n * Cline workflows are slash-invokable prompts analogous to Cursor/Windsurf commands.\n * Per Cline doc section 6.4: command description → workflow intro paragraph.\n *\n * @param canonical - Loaded canonical files\n * @returns Array of workflow file outputs, or [] if no commands\n */\nexport function generateWorkflows(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.commands.map((cmd) => {\n const desc = cmd.description.trim();\n const body = cmd.body.trim();\n const content = desc && body ? `${desc}\\n\\n${body}` : desc || body;\n return { path: `${CLINE_WORKFLOWS_DIR}/${cmd.name}.md`, content };\n });\n}\n\n/**\n * Generate .clineignore from canonical ignore patterns.\n *\n * @param canonical - Loaded canonical files\n * @returns Array with single .clineignore output, or [] if no patterns\n */\nexport function generateIgnore(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.ignore || canonical.ignore.length === 0) return [];\n const content = canonical.ignore.join('\\n');\n return [{ path: CLINE_IGNORE, content }];\n}\n\n/**\n * Generate .cline/mcp_settings.json from canonical MCP config.\n * Cline uses mcpServers format compatible with canonical.\n *\n * @param canonical - Loaded canonical files\n * @returns Array with single output, or [] if no MCP\n */\nexport function generateMcp(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.mcp || Object.keys(canonical.mcp.mcpServers).length === 0) return [];\n const content = JSON.stringify({ mcpServers: canonical.mcp.mcpServers }, null, 2);\n return [{ path: CLINE_MCP_SETTINGS, content }];\n}\n\n/**\n * Generate projected agent skills for Cline from canonical agents.\n */\nexport function generateAgents(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.agents.map((agent) => ({\n path: `${CLINE_SKILLS_DIR}/${projectedAgentSkillDirName(agent.name)}/SKILL.md`,\n content: serializeProjectedAgentSkill(agent),\n }));\n}\n\nfunction safeEventName(event: string): string {\n return event.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase();\n}\n\nfunction buildHookScript(command: string, matcher: string): string {\n return [\n '#!/usr/bin/env bash',\n `# agentsbridge-matcher: ${matcher}`,\n `# agentsbridge-command: ${command}`,\n 'set -e',\n command,\n '',\n ].join('\\n');\n}\n\n/**\n * Generate .clinerules/hooks/{event}-{index}.sh from canonical hooks.\n * Cline hooks are deterministic shell scripts at .clinerules/hooks/.\n *\n * @param canonical - Loaded canonical files\n * @returns Array of hook script outputs, or [] if no hooks\n */\nexport function generateHooks(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.hooks || Object.keys(canonical.hooks).length === 0) return [];\n const outputs: RulesOutput[] = [];\n for (const [event, entries] of Object.entries(canonical.hooks)) {\n if (!Array.isArray(entries)) continue;\n let index = 0;\n for (const entry of entries) {\n if (!hasHookCommand(entry)) continue;\n outputs.push({\n path: `${CLINE_HOOKS_DIR}/${safeEventName(event)}-${index}.sh`,\n content: buildHookScript(entry.command, entry.matcher),\n });\n index++;\n }\n }\n return outputs;\n}\n\n/**\n * Generate .cline/skills/{name}/SKILL.md and supporting files.\n *\n * @param canonical - Loaded canonical files\n * @returns Array of skill file outputs\n */\nexport function generateSkills(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n for (const skill of canonical.skills) {\n const frontmatter: Record<string, unknown> = {\n name: skill.name,\n description: skill.description || undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n const skillContent = serializeFrontmatter(frontmatter, skill.body.trim() || '');\n outputs.push({\n path: `${CLINE_SKILLS_DIR}/${skill.name}/SKILL.md`,\n content: skillContent,\n });\n for (const file of skill.supportingFiles) {\n const relPath = file.relativePath.replace(/\\\\/g, '/');\n outputs.push({\n path: `${CLINE_SKILLS_DIR}/${skill.name}/${relPath}`,\n content: file.content,\n });\n }\n }\n return outputs;\n}\n","import { registerTarget } from '../registry.js';\nimport type { TargetGenerators } from '../target.interface.js';\nimport {\n generateRules,\n generateWorkflows,\n generateAgents,\n generateSkills,\n generateMcp,\n generateIgnore,\n generateHooks,\n} from './generator.js';\nimport { importFromCline } from './importer.js';\n\nconst target: TargetGenerators = {\n name: 'cline',\n generateRules,\n generateWorkflows,\n generateAgents,\n generateSkills,\n generateMcp,\n generateHooks,\n generateIgnore,\n importFrom: importFromCline,\n};\n\nregisterTarget(target);\n","import type { McpServer, StdioMcpServer, UrlMcpServer } from './types.js';\n\nconst INTERPOLATION_PATTERN = /\\$\\{[^}]+\\}|\\$[A-Za-z_][A-Za-z0-9_]*/;\n\nexport function isStdioMcpServer(server: McpServer): server is StdioMcpServer {\n return 'command' in server;\n}\n\nexport function isUrlMcpServer(server: McpServer): server is UrlMcpServer {\n return 'url' in server;\n}\n\nexport function hasInterpolation(value: string): boolean {\n return INTERPOLATION_PATTERN.test(value);\n}\n\nexport function usesCursorSensitiveInterpolation(server: McpServer): boolean {\n if (Object.keys(server.env).length > 0) return true;\n if (!isUrlMcpServer(server)) return false;\n if (hasInterpolation(server.url)) return true;\n return Object.values(server.headers).some(hasInterpolation);\n}\n","/**\n * Generate Codex CLI config files from canonical sources.\n * Per codex-cli-project-level-advanced.md: root → `AGENTS.md`; advisory rules → nested\n * `AGENTS.md` / `AGENTS.override.md`; execution policy → `.codex/rules/*.rules` (Starlark).\n */\n\nimport type { CanonicalCommand, CanonicalFiles, StdioMcpServer } from '../../core/types.js';\nimport { isStdioMcpServer } from '../../core/mcp-servers.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\nimport type { CanonicalAgent } from '../../core/types.js';\nimport { basename } from 'node:path';\nimport {\n AGENTS_MD,\n CODEX_AGENTS_DIR,\n CODEX_RULES_DIR,\n CODEX_SKILLS_DIR,\n CODEX_CONFIG_TOML,\n} from './constants.js';\nimport { commandSkillDirName, serializeCommandSkill } from './command-skill.js';\nimport { codexAdvisoryInstructionPath } from './codex-rule-paths.js';\n\nexport interface RulesOutput {\n path: string;\n content: string;\n}\n\nfunction looksLikeCodexRulesDsl(body: string): boolean {\n return /(^|\\n)\\s*[A-Za-z_][A-Za-z0-9_]*\\s*\\(/.test(body);\n}\n\nfunction toCodexRulesComments(body: string): string {\n return body\n .split('\\n')\n .map((line) => (line.length > 0 ? `# ${line}` : '#'))\n .join('\\n');\n}\n\nfunction toSafeCodexRulesContent(body: string): string {\n const trimmed = body.trim();\n if (!trimmed) return '';\n if (looksLikeCodexRulesDsl(trimmed)) return `${trimmed}\\n`;\n const lines: string[] = [\n '# agentsbridge: canonical execution rule body is not Codex DSL',\n '# The original body is preserved below as comments.',\n '# Replace with Codex rules DSL (for example prefix_rule(...)) to enforce behavior.',\n '#',\n ...toCodexRulesComments(trimmed).split('\\n'),\n '#',\n '# Example template:',\n '# prefix_rule(',\n '# pattern = [\"git\", \"status\"],',\n '# decision = \"allow\",',\n '# justification = \"Allow safe status checks\",',\n '# )',\n ];\n return `${lines.join('\\n')}\\n`;\n}\n\n/**\n * Generate AGENTS.md from root rule; advisory non-root → nested instruction files;\n * `codex_emit: execution` → `.codex/rules/{slug}.rules` (Starlark or safe comments).\n *\n * @param canonical - Loaded canonical files\n * @returns AGENTS.md + nested `AGENTS*.md` + optional `.codex/rules/*.rules`\n */\nexport function generateRules(canonical: CanonicalFiles): RulesOutput[] {\n const root = canonical.rules.find((r) => r.root);\n const outputs: RulesOutput[] = [];\n if (root) {\n outputs.push({ path: AGENTS_MD, content: root.body.trim() });\n }\n\n for (const rule of canonical.rules) {\n if (rule.root) continue;\n if (rule.targets.length > 0 && !rule.targets.includes('codex-cli')) continue;\n const slug = basename(rule.source, '.md');\n if (rule.codexEmit === 'execution') {\n outputs.push({\n path: `${CODEX_RULES_DIR}/${slug}.rules`,\n content: toSafeCodexRulesContent(rule.body),\n });\n continue;\n }\n outputs.push({\n path: codexAdvisoryInstructionPath(rule),\n content: rule.body.trim(),\n });\n }\n\n return outputs;\n}\n\n/**\n * Generate .agents/skills/{name}/SKILL.md and supporting files from canonical skills.\n * Uses the standard agentskills.io format also shared with Claude Code and Cline.\n *\n * @param canonical - Loaded canonical files\n * @returns Array of skill file outputs\n */\nexport function generateSkills(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n for (const skill of canonical.skills) {\n const frontmatter: Record<string, unknown> = {\n name: skill.name,\n description: skill.description || undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n const skillContent = serializeFrontmatter(frontmatter, skill.body.trim() || '');\n outputs.push({\n path: `${CODEX_SKILLS_DIR}/${skill.name}/SKILL.md`,\n content: skillContent,\n });\n for (const file of skill.supportingFiles) {\n const relPath = file.relativePath.replace(/\\\\/g, '/');\n outputs.push({\n path: `${CODEX_SKILLS_DIR}/${skill.name}/${relPath}`,\n content: file.content,\n });\n }\n }\n return outputs;\n}\n\nfunction commandToSkillOutput(command: CanonicalCommand): RulesOutput {\n return {\n path: `${CODEX_SKILLS_DIR}/${commandSkillDirName(command.name)}/SKILL.md`,\n content: serializeCommandSkill(command),\n };\n}\n\nexport function generateCommands(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.commands.map(commandToSkillOutput);\n}\n\n/**\n * Generate .codex/agents/*.toml from canonical agents.\n * Per docs/agent-structures/codex-cli-project-level-advanced.md: native agent format.\n */\nexport function generateAgents(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.agents.map((agent) => ({\n path: `${CODEX_AGENTS_DIR}/${agent.name}.toml`,\n content: serializeAgentToCodexToml(agent),\n }));\n}\n\nfunction serializeAgentToCodexToml(agent: CanonicalAgent): string {\n const lines: string[] = [];\n lines.push(`name = ${JSON.stringify(agent.name)}`);\n if (agent.description) {\n lines.push(`description = ${JSON.stringify(agent.description)}`);\n }\n if (agent.model) {\n lines.push(`model = ${JSON.stringify(agent.model)}`);\n }\n if (agent.permissionMode === 'read-only' || agent.permissionMode === 'deny') {\n lines.push('sandbox_mode = \"read-only\"');\n } else if (agent.permissionMode === 'allow') {\n lines.push('sandbox_mode = \"workspace-write\"');\n }\n const body = agent.body.trim() || '';\n if (body.includes(\"'''\")) {\n const escaped = body.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n lines.push(`developer_instructions = \"\"\"\\n${escaped}\\n\"\"\"`);\n } else {\n lines.push(`developer_instructions = '''\\n${body}\\n'''`);\n }\n return lines.join('\\n') + '\\n';\n}\n\n/**\n * Generate .codex/config.toml with [mcp_servers.*] sections from canonical MCP config.\n * Codex reads project-level MCP from .codex/config.toml (when project is trusted).\n *\n * @param canonical - Loaded canonical files\n * @returns Array with single config.toml output, or [] if no MCP\n */\nexport function generateMcp(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.mcp || Object.keys(canonical.mcp.mcpServers).length === 0) return [];\n const stdioServers: Record<string, StdioMcpServer> = Object.fromEntries(\n Object.entries(canonical.mcp.mcpServers).flatMap(([name, server]) =>\n isStdioMcpServer(server) ? [[name, server] as const] : [],\n ),\n );\n if (Object.keys(stdioServers).length === 0) return [];\n const content = serializeMcpToToml(stdioServers);\n return [{ path: CODEX_CONFIG_TOML, content }];\n}\n\n/**\n * Serialize MCP servers to Codex config.toml format.\n * Each server becomes a [mcp_servers.{name}] table section.\n */\nfunction serializeMcpToToml(mcpServers: Record<string, StdioMcpServer>): string {\n const sections: string[] = [];\n\n for (const [name, server] of Object.entries(mcpServers)) {\n const quotedName = needsTomlQuoting(name) ? `\"${name}\"` : name;\n const lines: string[] = [];\n lines.push(`[mcp_servers.${quotedName}]`);\n lines.push(`command = ${JSON.stringify(server.command)}`);\n const argsToml = '[' + server.args.map((arg) => JSON.stringify(arg)).join(', ') + ']';\n lines.push(`args = ${argsToml}`);\n\n const envEntries = Object.entries(server.env);\n if (envEntries.length > 0) {\n const envParts = envEntries\n .map(([k, v]) => `${needsTomlQuoting(k) ? JSON.stringify(k) : k} = ${JSON.stringify(v)}`)\n .join(', ');\n lines.push(`env = { ${envParts} }`);\n }\n\n sections.push(lines.join('\\n'));\n }\n\n return sections.join('\\n\\n') + '\\n';\n}\n\n/** Returns true if a TOML bare key needs quoting (not A-Z a-z 0-9 - _). */\nfunction needsTomlQuoting(key: string): boolean {\n return !/^[A-Za-z0-9_-]+$/.test(key);\n}\n","/**\n * Codex advisory instruction paths per docs/agent-structures/codex-cli-project-level-advanced.md §2.1, §4.1, §6.2:\n * non-execution rules use nested `AGENTS.md` or `AGENTS.override.md`, not `.codex/rules/*.rules`.\n */\n\nimport { basename } from 'node:path';\nimport type { CanonicalRule } from '../../core/types.js';\n\nfunction sanitizeRelativeDir(rawPrefix: string): string | null {\n const normalized = rawPrefix.replace(/\\\\/g, '/').replace(/\\/+/g, '/');\n const stripped = normalized.startsWith('./') ? normalized.slice(2) : normalized;\n if (stripped.length === 0 || stripped === '.' || stripped === '..') return null;\n if (stripped.startsWith('/') || stripped.startsWith('../') || stripped.includes('/../'))\n return null;\n const segments = stripped.split('/');\n if (segments.some((segment) => segment.length === 0 || segment === '.' || segment === '..')) {\n return null;\n }\n return stripped;\n}\n\nfunction directoryPrefixFromGlob(glob: string): string | null {\n const normalized = glob.replace(/\\\\/g, '/');\n if (normalized.startsWith('{')) return null;\n const wildcardIndex = normalized.search(/[*{]/);\n if (wildcardIndex < 0) {\n const trimmed = normalized.replace(/\\/+$/, '');\n return trimmed.length > 0 ? sanitizeRelativeDir(trimmed) : null;\n }\n if (wildcardIndex === 0) return null;\n const prefix = normalized.slice(0, wildcardIndex).replace(/\\/+$/, '');\n return prefix.length > 0 ? sanitizeRelativeDir(prefix) : null;\n}\n\nfunction advisorySubdir(rule: Pick<CanonicalRule, 'source' | 'globs'>): string {\n for (const glob of rule.globs) {\n const prefix = directoryPrefixFromGlob(glob);\n if (prefix !== null && !prefix.includes('**')) return prefix;\n }\n return basename(rule.source, '.md');\n}\n\n/**\n * Relative path for an advisory (non-execution) canonical rule: `{dir}/AGENTS.md` or override variant.\n */\nexport function codexAdvisoryInstructionPath(rule: CanonicalRule): string {\n const dir = advisorySubdir(rule);\n const file = rule.codexInstructionVariant === 'override' ? 'AGENTS.override.md' : 'AGENTS.md';\n return `${dir}/${file}`;\n}\n","import { registerTarget } from '../registry.js';\nimport type { TargetGenerators } from '../target.interface.js';\nimport {\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateMcp,\n} from './generator.js';\nimport { importFromCodex } from './importer.js';\n\nconst target: TargetGenerators = {\n name: 'codex-cli',\n generateRules,\n generateCommands,\n generateAgents,\n generateSkills,\n generateMcp,\n importFrom: importFromCodex,\n};\n\nregisterTarget(target);\n","/**\n * Generate Windsurf config files from canonical sources.\n * Windsurf uses .windsurfrules (root, flat no frontmatter), .windsurf/rules/*.md,\n * .windsurf/workflows/*.md, .windsurf/skills/* (skills + embedded agents), hooks, and ignore files.\n * MCP is emitted as project-owned setup/reference config (.windsurf/mcp_config.example.json).\n * Permissions remain unsupported.\n */\n\nimport { basename } from 'node:path';\nimport type { CanonicalFiles } from '../../core/types.js';\nimport { getHookCommand, getHookPrompt, hasHookText } from '../../core/hook-command.js';\nimport { serializeFrontmatter } from '../../utils/markdown.js';\nimport {\n projectedAgentSkillDirName,\n serializeProjectedAgentSkill,\n} from '../projected-agent-skill.js';\nimport {\n WINDSURF_RULES_DIR,\n CODEIUM_IGNORE,\n WINDSURF_AGENTS_MD,\n WINDSURF_WORKFLOWS_DIR,\n WINDSURF_SKILLS_DIR,\n WINDSURF_MCP_EXAMPLE_FILE,\n WINDSURF_HOOKS_FILE,\n} from './constants.js';\n\nexport interface RulesOutput {\n path: string;\n content: string;\n}\n\nfunction ruleSlug(source: string): string {\n const name = basename(source, '.md');\n return name === '_root' ? 'root' : name;\n}\n\nfunction directoryScopedRuleDir(globs: string[]): string | null {\n if (globs.length === 0) return null;\n const dirs = globs\n .map((glob) => glob.split('/')[0] ?? '')\n .filter((segment) => /^[A-Za-z0-9._-]+$/.test(segment));\n if (dirs.length !== globs.length) return null;\n return dirs.every((dir) => dir === dirs[0]) ? dirs[0]! : null;\n}\n\n/**\n * Generate AGENTS.md (root, flat) and .windsurf/rules/*.md from canonical rules.\n * Root rule body only (no frontmatter). Non-root rules get frontmatter.\n *\n * @param canonical - Loaded canonical files\n * @returns Array of rule outputs, or [] if no root rule\n */\nexport function generateRules(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n const root = canonical.rules.find((r) => r.root);\n if (!root) return [];\n\n outputs.push({\n path: WINDSURF_AGENTS_MD,\n content: root.body.trim(),\n });\n\n for (const rule of canonical.rules) {\n if (rule.root) continue;\n if (rule.targets.length > 0 && !rule.targets.includes('windsurf')) continue;\n const slug = ruleSlug(rule.source);\n const normalizedTrigger = rule.trigger || (rule.globs.length > 0 ? 'glob' : undefined);\n const frontmatter: Record<string, unknown> = {\n description: rule.description || undefined,\n trigger: normalizedTrigger,\n glob: rule.globs.length === 1 ? rule.globs[0] : undefined,\n globs: rule.globs.length > 1 ? rule.globs : undefined,\n };\n Object.keys(frontmatter).forEach((k) => {\n if (frontmatter[k] === undefined) delete frontmatter[k];\n });\n const content =\n Object.keys(frontmatter).length > 0\n ? serializeFrontmatter(frontmatter, rule.body.trim() || '')\n : rule.body.trim() || '';\n outputs.push({ path: `${WINDSURF_RULES_DIR}/${slug}.md`, content });\n\n const dir = directoryScopedRuleDir(rule.globs);\n if (dir) {\n outputs.push({ path: `${dir}/AGENTS.md`, content: rule.body.trim() || '' });\n }\n }\n\n return outputs;\n}\n\n/**\n * Generate .windsurfignore and .codeiumignore from canonical ignore patterns.\n * Both files use the same content; .codeiumignore is the official Windsurf path per docs.\n *\n * @param canonical - Loaded canonical files\n * @returns Array with both ignore file outputs, or [] if no patterns\n */\nexport function generateIgnore(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.ignore || canonical.ignore.length === 0) return [];\n return [{ path: CODEIUM_IGNORE, content: canonical.ignore.join('\\n') }];\n}\n\n/**\n * Generate .windsurf/workflows/{name}.md from canonical commands.\n * Windsurf treats workflows as structured command definitions.\n *\n * @param canonical - Loaded canonical files\n * @returns Array of workflow file outputs, or [] if no commands\n */\nexport function generateWorkflows(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.commands.map((cmd) => {\n const frontmatter: Record<string, unknown> = {\n description: cmd.description.trim() || undefined,\n allowedTools: cmd.allowedTools.length > 0 ? cmd.allowedTools : undefined,\n };\n Object.keys(frontmatter).forEach((key) => {\n if (frontmatter[key] === undefined) delete frontmatter[key];\n });\n const content =\n Object.keys(frontmatter).length > 0\n ? serializeFrontmatter(frontmatter, cmd.body.trim() || '')\n : cmd.body.trim();\n return {\n path: `${WINDSURF_WORKFLOWS_DIR}/${cmd.name}.md`,\n content,\n };\n });\n}\n\n/**\n * Generate projected agent skills for Windsurf from canonical agents.\n */\nexport function generateAgents(canonical: CanonicalFiles): RulesOutput[] {\n return canonical.agents.map((agent) => ({\n path: `${WINDSURF_SKILLS_DIR}/${projectedAgentSkillDirName(agent.name)}/SKILL.md`,\n content: serializeProjectedAgentSkill(agent),\n }));\n}\n\n/**\n * Generate .windsurf/mcp_config.example.json from canonical MCP config.\n * This is emitted as a project-owned setup/reference artifact.\n */\nexport function generateMcp(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.mcp || Object.keys(canonical.mcp.mcpServers).length === 0) return [];\n return [\n {\n path: WINDSURF_MCP_EXAMPLE_FILE,\n content: JSON.stringify({ mcpServers: canonical.mcp.mcpServers }, null, 2),\n },\n ];\n}\n\nfunction windsurfEventName(event: string): string {\n const explicit: Record<string, string> = {\n PreToolUse: 'pre_tool_use',\n PostToolUse: 'post_tool_use',\n Notification: 'notification',\n UserPromptSubmit: 'user_prompt_submit',\n SubagentStart: 'subagent_start',\n SubagentStop: 'subagent_stop',\n };\n if (explicit[event]) return explicit[event];\n return event\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/[-\\s]+/g, '_')\n .toLowerCase();\n}\n\nfunction toWindsurfHooks(hooks: import('../../core/types.js').Hooks): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [event, entries] of Object.entries(hooks)) {\n if (!Array.isArray(entries)) continue;\n const translated: Array<Record<string, unknown>> = [];\n for (const entry of entries) {\n if (!hasHookText(entry)) continue;\n const command = getHookCommand(entry);\n const prompt = getHookPrompt(entry);\n const value = entry.type === 'prompt' ? prompt || command : command || prompt;\n if (!value) continue;\n translated.push({ command: value, show_output: true });\n }\n if (translated.length > 0) result[windsurfEventName(event)] = translated;\n }\n return result;\n}\n\n/**\n * Generate .windsurf/hooks.json from canonical hooks.\n */\nexport function generateHooks(canonical: CanonicalFiles): RulesOutput[] {\n if (!canonical.hooks || Object.keys(canonical.hooks).length === 0) return [];\n const hooks = toWindsurfHooks(canonical.hooks);\n if (Object.keys(hooks).length === 0) return [];\n return [{ path: WINDSURF_HOOKS_FILE, content: JSON.stringify({ hooks }, null, 2) }];\n}\n\n/**\n * Generate .windsurf/skills/{name}/SKILL.md + supporting files from canonical skills.\n *\n * @param canonical - Loaded canonical files\n * @returns Array of skill file outputs, or [] if no skills\n */\nexport function generateSkills(canonical: CanonicalFiles): RulesOutput[] {\n const outputs: RulesOutput[] = [];\n for (const skill of canonical.skills) {\n const frontmatter: Record<string, unknown> = {\n name: skill.name,\n description: skill.description || undefined,\n };\n if (frontmatter.description === undefined) delete frontmatter.description;\n const content =\n Object.keys(frontmatter).length > 0\n ? serializeFrontmatter(frontmatter, skill.body.trim() || '')\n : skill.body.trim() || '';\n outputs.push({ path: `${WINDSURF_SKILLS_DIR}/${skill.name}/SKILL.md`, content });\n for (const sf of skill.supportingFiles) {\n outputs.push({\n path: `${WINDSURF_SKILLS_DIR}/${skill.name}/${sf.relativePath}`,\n content: sf.content,\n });\n }\n }\n return outputs;\n}\n","import { registerTarget } from '../registry.js';\nimport type { TargetGenerators } from '../target.interface.js';\nimport {\n generateRules,\n generateWorkflows,\n generateAgents,\n generateSkills,\n generateIgnore,\n generateMcp,\n generateHooks,\n} from './generator.js';\nimport { importFromWindsurf } from './importer.js';\n\nconst target: TargetGenerators = {\n name: 'windsurf',\n generateRules,\n generateWorkflows,\n generateAgents,\n generateSkills,\n generateMcp,\n generateHooks,\n generateIgnore,\n importFrom: importFromWindsurf,\n};\n\nregisterTarget(target);\n","import { basename } from 'node:path';\nimport type { CanonicalFiles } from './types.js';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport { addSkillDirectoryMappings } from './reference-map-directories.js';\nimport {\n ruleTargetPath,\n commandTargetPath,\n agentTargetPath,\n SKILL_DIRS,\n} from './reference-map-targets.js';\nimport { AGENTS_MD } from '../targets/codex-cli/constants.js';\nimport { GEMINI_ROOT } from '../targets/gemini-cli/constants.js';\nimport { WINDSURF_AGENTS_MD, WINDSURF_RULES_ROOT } from '../targets/windsurf/constants.js';\n\nexport function isMarkdownLikeOutput(path: string): boolean {\n return (\n path.endsWith('.md') ||\n path.endsWith('.mdc') ||\n path === '.claude/CLAUDE.md' ||\n path === AGENTS_MD ||\n path === GEMINI_ROOT ||\n path === WINDSURF_AGENTS_MD ||\n path === WINDSURF_RULES_ROOT\n );\n}\n\nfunction addDirectoryMapping(refs: Map<string, string>, from: string, to: string): void {\n refs.set(from, to);\n refs.set(`${from}/`, `${to}/`);\n}\n\nexport function buildReferenceMap(\n target: string,\n canonical: CanonicalFiles,\n config: ValidatedConfig,\n): Map<string, string> {\n const refs = new Map<string, string>();\n\n for (const rule of canonical.rules) {\n const path = ruleTargetPath(target, rule);\n if (path) refs.set(`.agentsbridge/rules/${basename(rule.source)}`, path);\n }\n\n for (const command of canonical.commands) {\n const path = commandTargetPath(target, command.name, config);\n if (path) refs.set(`.agentsbridge/commands/${command.name}.md`, path);\n }\n\n for (const agent of canonical.agents) {\n const path = agentTargetPath(target, agent.name, config);\n if (path) refs.set(`.agentsbridge/agents/${agent.name}.md`, path);\n }\n\n const skillDir = SKILL_DIRS[target];\n if (!skillDir) return refs;\n\n for (const skill of canonical.skills) {\n addDirectoryMapping(refs, `.agentsbridge/skills/${skill.name}`, `${skillDir}/${skill.name}`);\n refs.set(`.agentsbridge/skills/${skill.name}/SKILL.md`, `${skillDir}/${skill.name}/SKILL.md`);\n for (const file of skill.supportingFiles) {\n const relativePath = file.relativePath.replace(/\\\\/g, '/');\n const canonicalPath = `.agentsbridge/skills/${skill.name}/${relativePath}`;\n const targetPath = `${skillDir}/${skill.name}/${relativePath}`;\n refs.set(canonicalPath, targetPath);\n addSkillDirectoryMappings(refs, canonicalPath, targetPath);\n }\n }\n\n return refs;\n}\n","import { posix } from 'node:path';\n\nfunction addDirectoryMapping(refs: Map<string, string>, from: string, to: string): void {\n refs.set(from, to);\n refs.set(`${from}/`, `${to}/`);\n}\n\nexport function addSkillDirectoryMappings(\n refs: Map<string, string>,\n canonicalPath: string,\n targetPath: string,\n): void {\n let fromDir = posix.dirname(canonicalPath);\n let toDir = posix.dirname(targetPath);\n\n while (fromDir !== '.agentsbridge/skills' && fromDir !== '.') {\n addDirectoryMapping(refs, fromDir, toDir);\n fromDir = posix.dirname(fromDir);\n toDir = posix.dirname(toDir);\n }\n}\n","import { basename } from 'node:path';\nimport type { CanonicalFiles } from './types.js';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport {\n shouldConvertAgentsToSkills,\n shouldConvertCommandsToSkills,\n} from '../config/conversions.js';\nimport { continueCommandRulePath } from '../targets/continue/command-rule.js';\nimport {\n CONTINUE_RULES_DIR,\n CONTINUE_ROOT_RULE,\n CONTINUE_SKILLS_DIR,\n} from '../targets/continue/constants.js';\nimport {\n JUNIE_AGENTS_DIR,\n JUNIE_COMMANDS_DIR,\n JUNIE_RULES_DIR,\n JUNIE_SKILLS_DIR,\n} from '../targets/junie/constants.js';\nimport { commandPromptPath } from '../targets/copilot/command-prompt.js';\nimport {\n COPILOT_AGENTS_DIR,\n COPILOT_INSTRUCTIONS_DIR,\n COPILOT_SKILLS_DIR,\n} from '../targets/copilot/constants.js';\nimport { commandSkillDirName } from '../targets/codex-cli/command-skill.js';\nimport {\n AGENTS_MD,\n CODEX_AGENTS_DIR,\n CODEX_RULES_DIR,\n CODEX_SKILLS_DIR,\n} from '../targets/codex-cli/constants.js';\nimport { codexAdvisoryInstructionPath } from '../targets/codex-cli/codex-rule-paths.js';\nimport {\n CLINE_AGENTS_MD,\n CLINE_RULES_DIR,\n CLINE_SKILLS_DIR,\n CLINE_WORKFLOWS_DIR,\n} from '../targets/cline/constants.js';\nimport {\n GEMINI_AGENTS_DIR,\n GEMINI_COMMANDS_DIR,\n GEMINI_ROOT,\n GEMINI_SKILLS_DIR,\n} from '../targets/gemini-cli/constants.js';\nimport { projectedAgentSkillDirName } from '../targets/projected-agent-skill.js';\nimport {\n WINDSURF_AGENTS_MD,\n WINDSURF_RULES_DIR,\n WINDSURF_SKILLS_DIR,\n WINDSURF_WORKFLOWS_DIR,\n} from '../targets/windsurf/constants.js';\n\nconst ROOT_RULE_PATHS: Record<string, string> = {\n 'claude-code': '.claude/CLAUDE.md',\n cursor: '.cursor/rules/general.mdc',\n copilot: '.github/copilot-instructions.md',\n continue: CONTINUE_ROOT_RULE,\n junie: '.junie/AGENTS.md',\n 'gemini-cli': GEMINI_ROOT,\n cline: CLINE_AGENTS_MD,\n 'codex-cli': AGENTS_MD,\n windsurf: WINDSURF_AGENTS_MD,\n};\n\nexport const SKILL_DIRS: Record<string, string> = {\n 'claude-code': '.claude/skills',\n cursor: '.cursor/skills',\n copilot: COPILOT_SKILLS_DIR,\n continue: CONTINUE_SKILLS_DIR,\n junie: JUNIE_SKILLS_DIR,\n 'gemini-cli': GEMINI_SKILLS_DIR,\n cline: CLINE_SKILLS_DIR,\n 'codex-cli': CODEX_SKILLS_DIR,\n windsurf: WINDSURF_SKILLS_DIR,\n};\n\nexport function ruleTargetPath(\n target: string,\n rule: CanonicalFiles['rules'][number],\n): string | null {\n if (rule.root) return ROOT_RULE_PATHS[target] ?? null;\n if (rule.targets.length > 0 && !rule.targets.includes(target)) return null;\n\n const slug = basename(rule.source, '.md');\n switch (target) {\n case 'claude-code':\n return `.claude/rules/${slug}.md`;\n case 'cursor':\n return `.cursor/rules/${slug}.mdc`;\n case 'copilot':\n return `${COPILOT_INSTRUCTIONS_DIR}/${slug}.instructions.md`;\n case 'continue':\n return `${CONTINUE_RULES_DIR}/${slug}.md`;\n case 'junie':\n return `${JUNIE_RULES_DIR}/${slug}.md`;\n case 'gemini-cli':\n // Non-root rules are embedded as sections in GEMINI.md, not separate files.\n // See docs/agent-structures/gemini-cli-project-level-advanced.md\n return GEMINI_ROOT;\n case 'cline':\n return `${CLINE_RULES_DIR}/${slug}.md`;\n case 'codex-cli':\n if (rule.codexEmit === 'execution') return `${CODEX_RULES_DIR}/${slug}.rules`;\n return codexAdvisoryInstructionPath(rule);\n case 'windsurf':\n return `${WINDSURF_RULES_DIR}/${slug}.md`;\n default:\n return null;\n }\n}\n\nexport function commandTargetPath(\n target: string,\n name: string,\n config: ValidatedConfig,\n): string | null {\n switch (target) {\n case 'claude-code':\n return `.claude/commands/${name}.md`;\n case 'cursor':\n return `.cursor/commands/${name}.md`;\n case 'copilot':\n return commandPromptPath(name);\n case 'continue':\n return continueCommandRulePath(name);\n case 'junie':\n return `${JUNIE_COMMANDS_DIR}/${name}.md`;\n case 'gemini-cli':\n if (name.includes(':')) {\n const parts = name.split(':').filter(Boolean);\n const fileBase = parts.pop() ?? name;\n const dirs = parts;\n return `${GEMINI_COMMANDS_DIR}/${dirs.join('/')}/${fileBase}.toml`;\n }\n return `${GEMINI_COMMANDS_DIR}/${name}.toml`;\n case 'cline':\n return `${CLINE_WORKFLOWS_DIR}/${name}.md`;\n case 'codex-cli':\n return shouldConvertCommandsToSkills(config, target)\n ? `${CODEX_SKILLS_DIR}/${commandSkillDirName(name)}/SKILL.md`\n : null;\n case 'windsurf':\n return `${WINDSURF_WORKFLOWS_DIR}/${name}.md`;\n default:\n return null;\n }\n}\n\nexport function agentTargetPath(\n target: string,\n name: string,\n config: ValidatedConfig,\n): string | null {\n switch (target) {\n case 'claude-code':\n return `.claude/agents/${name}.md`;\n case 'cursor':\n return `.cursor/agents/${name}.md`;\n case 'copilot':\n return `${COPILOT_AGENTS_DIR}/${name}.agent.md`;\n case 'junie':\n return `${JUNIE_AGENTS_DIR}/${name}.md`;\n case 'gemini-cli':\n return shouldConvertAgentsToSkills(config, target)\n ? `${SKILL_DIRS[target]}/${projectedAgentSkillDirName(name)}/SKILL.md`\n : `${GEMINI_AGENTS_DIR}/${name}.md`;\n case 'cline':\n case 'windsurf':\n return shouldConvertAgentsToSkills(config, target)\n ? `${SKILL_DIRS[target]}/${projectedAgentSkillDirName(name)}/SKILL.md`\n : null;\n case 'codex-cli':\n return `${CODEX_AGENTS_DIR}/${name}.toml`;\n default:\n return null;\n }\n}\n","import type { CanonicalFiles, GenerateResult } from './types.js';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport { buildReferenceMap } from './reference-map.js';\n\nconst AGENTS_SUFFIX = 'AGENTS.md';\n\nfunction isCodexAgents(result: GenerateResult): boolean {\n return result.target === 'codex-cli' && result.path.endsWith(AGENTS_SUFFIX);\n}\n\nfunction isWindsurfAgents(result: GenerateResult): boolean {\n return result.target === 'windsurf' && result.path.endsWith(AGENTS_SUFFIX);\n}\n\nfunction isClineAgents(result: GenerateResult): boolean {\n return result.target === 'cline' && result.path.endsWith(AGENTS_SUFFIX);\n}\n\nfunction isCursorAgents(result: GenerateResult): boolean {\n return result.target === 'cursor' && result.path.endsWith(AGENTS_SUFFIX);\n}\n\nfunction reverseReferenceMap(\n target: string,\n canonical: CanonicalFiles,\n config: ValidatedConfig,\n cache: Map<string, Map<string, string>>,\n): Map<string, string> {\n const cached = cache.get(target);\n if (cached) return cached;\n\n const reversed = new Map<string, string>();\n for (const [canonicalPath, targetPath] of buildReferenceMap(target, canonical, config)) {\n if (!reversed.has(targetPath)) reversed.set(targetPath, canonicalPath);\n }\n cache.set(target, reversed);\n return reversed;\n}\n\nfunction normalizeContent(content: string, refs: Map<string, string>): string {\n const entries = [...refs.entries()].sort(([left], [right]) => right.length - left.length);\n let normalized = content;\n\n for (const [targetPath, canonicalPath] of entries) {\n normalized = normalized.split(targetPath).join(canonicalPath);\n }\n\n return normalized;\n}\n\nfunction hasEquivalentCanonicalContent(\n left: GenerateResult,\n right: GenerateResult,\n canonical: CanonicalFiles,\n config: ValidatedConfig,\n cache: Map<string, Map<string, string>>,\n): boolean {\n const leftRefs = reverseReferenceMap(left.target, canonical, config, cache);\n const rightRefs = reverseReferenceMap(right.target, canonical, config, cache);\n\n return normalizeContent(left.content, leftRefs) === normalizeContent(right.content, rightRefs);\n}\n\nexport function preferEquivalentCodexAgents(\n results: GenerateResult[],\n canonical: CanonicalFiles,\n config: ValidatedConfig,\n): GenerateResult[] {\n const codexByPath = new Map<string, GenerateResult>();\n for (const result of results) {\n if (isCodexAgents(result)) codexByPath.set(result.path, result);\n }\n\n const reverseCache = new Map<string, Map<string, string>>();\n return results.filter((result) => {\n if (!isWindsurfAgents(result) && !isClineAgents(result) && !isCursorAgents(result)) return true;\n const codexResult = codexByPath.get(result.path);\n if (!codexResult) return true;\n return !hasEquivalentCanonicalContent(codexResult, result, canonical, config, reverseCache);\n });\n}\n","import { existsSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport type { CanonicalFiles, GenerateResult } from './types.js';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport { rewriteFileLinks } from './link-rebaser.js';\nimport { buildArtifactPathMap, buildOutputSourceMap } from './output-source-map.js';\n\nfunction collectPlannedPaths(projectRoot: string, results: GenerateResult[]): Set<string> {\n const planned = new Set<string>();\n for (const result of results) {\n const absolutePath = join(projectRoot, result.path);\n planned.add(absolutePath);\n let current = dirname(absolutePath);\n while (current.startsWith(projectRoot) && !planned.has(current)) {\n planned.add(current);\n if (current === projectRoot) break;\n current = dirname(current);\n }\n }\n return planned;\n}\n\nfunction artifactCacheKey(result: GenerateResult): string {\n return result.target === 'copilot' && result.path.startsWith('.github/instructions/')\n ? `${result.target}:instructions`\n : result.target;\n}\n\nexport function rewriteGeneratedReferences(\n results: GenerateResult[],\n canonical: CanonicalFiles,\n config: ValidatedConfig,\n projectRoot: string,\n): GenerateResult[] {\n const plannedPaths = collectPlannedPaths(projectRoot, results);\n const artifactCache = new Map<string, Map<string, string>>();\n const sourceCache = new Map<string, Map<string, string>>();\n\n return results.map((result) => {\n const sourceMap =\n sourceCache.get(result.target) ??\n (() => {\n const built = buildOutputSourceMap(result.target, canonical, config);\n sourceCache.set(result.target, built);\n return built;\n })();\n const sourceFile = sourceMap.get(result.path);\n if (!sourceFile) return result;\n\n const cacheKey = artifactCacheKey(result);\n const artifactMap =\n artifactCache.get(cacheKey) ??\n (() => {\n const built = buildArtifactPathMap(\n result.target,\n canonical,\n config,\n projectRoot,\n result.path,\n );\n artifactCache.set(cacheKey, built);\n return built;\n })();\n const rewritten = rewriteFileLinks({\n content: result.content,\n projectRoot,\n sourceFile,\n destinationFile: join(projectRoot, result.path),\n translatePath: (absolutePath) => artifactMap.get(absolutePath) ?? absolutePath,\n pathExists: (absolutePath) => plannedPaths.has(absolutePath) || existsSync(absolutePath),\n });\n\n return rewritten.content === result.content\n ? result\n : { ...result, content: rewritten.content };\n });\n}\n","import { join, normalize as normalizePath } from 'node:path';\nimport type { CanonicalFiles } from './types.js';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport { buildReferenceMap } from './reference-map.js';\nimport { GEMINI_COMPAT_AGENTS } from '../targets/gemini-cli/constants.js';\n\nfunction canonicalRulePath(rule: CanonicalFiles['rules'][number]): string {\n return `.agentsbridge/rules/${rule.source.split('/').pop()!}`;\n}\n\nfunction canonicalCommandPath(command: CanonicalFiles['commands'][number]): string {\n return `.agentsbridge/commands/${command.name}.md`;\n}\n\nfunction canonicalAgentPath(agent: CanonicalFiles['agents'][number]): string {\n return `.agentsbridge/agents/${agent.name}.md`;\n}\n\nfunction canonicalSkillPath(skill: CanonicalFiles['skills'][number]): string {\n return `.agentsbridge/skills/${skill.name}/SKILL.md`;\n}\n\nfunction directoryScopedRuleDir(globs: string[]): string | null {\n if (globs.length === 0) return null;\n const dirs = globs\n .map((glob) => glob.split('/')[0] ?? '')\n .filter((segment) => /^[A-Za-z0-9._-]+$/.test(segment));\n if (dirs.length !== globs.length) return null;\n return dirs.every((dir) => dir === dirs[0]) ? dirs[0]! : null;\n}\n\nfunction copilotInstructionsPath(rule: CanonicalFiles['rules'][number]): string {\n const slug = rule.source.split('/').pop()!.replace(/\\.md$/, '');\n return `.github/instructions/${slug}.instructions.md`;\n}\n\nfunction ruleOutputPaths(\n target: string,\n rule: CanonicalFiles['rules'][number],\n refs: Map<string, string>,\n): string[] {\n const paths: string[] = [];\n const targetPath = refs.get(canonicalRulePath(rule));\n if (targetPath) paths.push(targetPath);\n\n if (target === 'copilot' && !rule.root && rule.globs.length > 0) {\n paths.push(copilotInstructionsPath(rule));\n }\n\n if ((target === 'cline' || target === 'cursor') && rule.root) {\n paths.push('AGENTS.md');\n }\n\n if (target === 'windsurf') {\n if (rule.root) {\n paths.push('AGENTS.md');\n } else {\n const dir = directoryScopedRuleDir(rule.globs);\n if (dir) paths.push(`${dir}/AGENTS.md`);\n }\n }\n\n // Gemini AGENTS.md compatibility mirror is generated from root rule content and must\n // participate in source mapping for reference rewriting.\n if (target === 'gemini-cli') {\n paths.push(GEMINI_COMPAT_AGENTS);\n }\n\n return paths;\n}\n\nexport function buildArtifactPathMap(\n target: string,\n canonical: CanonicalFiles,\n config: ValidatedConfig,\n projectRoot: string,\n destinationPath?: string,\n): Map<string, string> {\n const refs = new Map(\n [...buildReferenceMap(target, canonical, config)].map(([canonicalPath, targetPath]) => [\n normalizePath(join(projectRoot, canonicalPath)),\n normalizePath(join(projectRoot, targetPath)),\n ]),\n );\n\n if (target === 'copilot' && destinationPath?.startsWith('.github/instructions/')) {\n for (const rule of canonical.rules) {\n if (rule.root || rule.globs.length === 0) continue;\n refs.set(\n normalizePath(join(projectRoot, canonicalRulePath(rule))),\n normalizePath(join(projectRoot, copilotInstructionsPath(rule))),\n );\n }\n }\n\n return refs;\n}\n\nexport function buildOutputSourceMap(\n target: string,\n canonical: CanonicalFiles,\n config: ValidatedConfig,\n): Map<string, string> {\n const refs = buildReferenceMap(target, canonical, config);\n const sourceMap = new Map<string, string>();\n\n for (const rule of canonical.rules) {\n for (const targetPath of ruleOutputPaths(target, rule, refs)) {\n sourceMap.set(targetPath, rule.source);\n }\n }\n for (const command of canonical.commands) {\n const targetPath = refs.get(canonicalCommandPath(command));\n if (targetPath) sourceMap.set(targetPath, command.source);\n }\n for (const agent of canonical.agents) {\n const targetPath = refs.get(canonicalAgentPath(agent));\n if (targetPath) sourceMap.set(targetPath, agent.source);\n }\n for (const skill of canonical.skills) {\n const skillTargetPath = refs.get(canonicalSkillPath(skill));\n if (skillTargetPath) sourceMap.set(skillTargetPath, skill.source);\n for (const file of skill.supportingFiles) {\n const canonicalPath = `.agentsbridge/skills/${skill.name}/${file.relativePath.replace(/\\\\/g, '/')}`;\n const targetPath = refs.get(canonicalPath);\n if (targetPath) sourceMap.set(targetPath, file.absolutePath);\n }\n }\n\n return sourceMap;\n}\n","import type { GenerateResult } from './types.js';\n\nfunction statusRank(status: GenerateResult['status']): number {\n switch (status) {\n case 'created':\n return 3;\n case 'updated':\n return 2;\n case 'unchanged':\n return 1;\n case 'skipped':\n return 0;\n }\n}\n\n/**\n * Resolve duplicate generated outputs that target the same path.\n * Identical content is deduplicated; conflicting content throws.\n *\n * @param results - Raw generated outputs collected per target/feature\n * @returns Deduplicated results preserving first-seen order\n */\nexport function resolveOutputCollisions(results: GenerateResult[]): GenerateResult[] {\n const deduped: GenerateResult[] = [];\n\n for (const result of results) {\n const existingIdx = deduped.findIndex((entry) => entry.path === result.path);\n if (existingIdx === -1) {\n deduped.push(result);\n continue;\n }\n\n const existing = deduped[existingIdx]!;\n if (existing.content !== result.content) {\n throw new Error(\n `Conflicting generated outputs for ${result.path}: ${existing.target} and ${result.target} produce different content.`,\n );\n }\n\n if (statusRank(result.status) > statusRank(existing.status)) {\n deduped[existingIdx] = {\n ...existing,\n status: result.status,\n currentContent: result.currentContent ?? existing.currentContent,\n };\n }\n }\n\n return deduped;\n}\n\nexport function refreshResultStatus(result: GenerateResult): GenerateResult {\n const status =\n result.currentContent === undefined\n ? 'created'\n : result.currentContent !== result.content\n ? 'updated'\n : 'unchanged';\n\n return result.status === status ? result : { ...result, status };\n}\n","import { join } from 'node:path';\nimport type { CanonicalFiles, GenerateResult } from './types.js';\nimport { readFileSafe } from '../utils/fs.js';\nimport { getTarget } from '../targets/registry.js';\nimport type { TargetGenerators } from '../targets/target.interface.js';\n\nexport function computeStatus(existing: string | null, content: string): GenerateResult['status'] {\n if (existing === null) return 'created';\n if (existing !== content) return 'updated';\n return 'unchanged';\n}\n\nexport async function generateFeature(\n results: GenerateResult[],\n targets: string[],\n canonical: CanonicalFiles,\n projectRoot: string,\n enabled: boolean,\n getGen: (\n t: TargetGenerators,\n ) => ((c: CanonicalFiles) => { path: string; content: string }[]) | undefined,\n skip?: (target: string) => boolean,\n): Promise<void> {\n if (!enabled) return;\n for (const target of targets) {\n let t: TargetGenerators;\n try {\n t = getTarget(target);\n } catch {\n continue;\n }\n const gen = getGen(t);\n if (!gen) continue;\n if (skip?.(target)) continue;\n for (const out of gen(canonical)) {\n const existing = await readFileSafe(join(projectRoot, out.path));\n results.push({\n target,\n path: out.path,\n content: out.content,\n currentContent: existing ?? undefined,\n status: computeStatus(existing, out.content),\n });\n }\n }\n}\n","import { join } from 'node:path';\nimport type { CanonicalFiles, GenerateResult } from './types.js';\nimport { readFileSafe } from '../utils/fs.js';\nimport { addHookScriptAssets } from '../targets/copilot/hook-assets.js';\nimport { GEMINI_SETTINGS } from '../targets/gemini-cli/constants.js';\nimport { getTarget } from '../targets/registry.js';\nimport { computeStatus } from './engine-feature-loop.js';\nimport {\n SETTINGS_JSON_PATHS,\n mergeSettingsJson,\n mergeGeminiSettingsJson,\n} from './engine-settings.js';\n\nexport async function generatePermissionsFeature(\n results: GenerateResult[],\n targets: string[],\n canonical: CanonicalFiles,\n projectRoot: string,\n): Promise<void> {\n for (const target of targets) {\n let t;\n try {\n t = getTarget(target);\n } catch {\n continue;\n }\n const gen = t.generatePermissions;\n if (!gen) continue;\n for (const out of gen(canonical)) {\n const existing = await readFileSafe(join(projectRoot, out.path));\n const content =\n existing !== null && SETTINGS_JSON_PATHS.includes(out.path)\n ? mergeSettingsJson(existing, out.content)\n : out.content;\n results.push({\n target,\n path: out.path,\n content,\n currentContent: existing ?? undefined,\n status: computeStatus(existing, content),\n });\n }\n }\n}\n\nexport async function generateHooksFeature(\n results: GenerateResult[],\n targets: string[],\n canonical: CanonicalFiles,\n projectRoot: string,\n): Promise<void> {\n for (const target of targets) {\n let t;\n try {\n t = getTarget(target);\n } catch {\n continue;\n }\n const gen = t.generateHooks;\n if (!gen) continue;\n const outputs =\n target === 'copilot'\n ? await addHookScriptAssets(projectRoot, canonical, gen(canonical))\n : gen(canonical);\n for (const out of outputs) {\n const existing = await readFileSafe(join(projectRoot, out.path));\n let content = out.content;\n if (SETTINGS_JSON_PATHS.includes(out.path)) {\n const pendingIdx = results.findIndex((r) => r.path === out.path && r.target === target);\n const pendingResult = pendingIdx >= 0 ? results[pendingIdx] : undefined;\n const base = pendingResult?.content ?? existing;\n if (base !== null) {\n content = mergeSettingsJson(base, out.content);\n }\n if (pendingIdx >= 0) {\n results.splice(pendingIdx, 1);\n }\n }\n results.push({\n target,\n path: out.path,\n content,\n currentContent: existing ?? undefined,\n status: computeStatus(existing, content),\n });\n }\n }\n}\n\nexport async function generateGeminiSettingsFeature(\n results: GenerateResult[],\n targets: string[],\n canonical: CanonicalFiles,\n projectRoot: string,\n): Promise<void> {\n for (const target of targets) {\n if (target !== 'gemini-cli') continue;\n let t;\n try {\n t = getTarget(target);\n } catch {\n continue;\n }\n const gen = t.generateSettings;\n if (!gen) continue;\n const outputs = gen(canonical);\n if (outputs.length === 0) continue;\n for (const out of outputs) {\n const existing = await readFileSafe(join(projectRoot, out.path));\n const content =\n existing !== null && out.path === GEMINI_SETTINGS\n ? mergeGeminiSettingsJson(existing, out.content)\n : out.content;\n results.push({\n target,\n path: out.path,\n content,\n currentContent: existing ?? undefined,\n status: computeStatus(existing, content),\n });\n }\n }\n}\n","import { join, relative } from 'node:path';\nimport type { CanonicalFiles } from '../../core/types.js';\nimport { readFileSafe } from '../../utils/fs.js';\nimport { COPILOT_HOOKS_DIR } from './constants.js';\nimport type { RulesOutput } from './generator.js';\nimport { hasHookCommand } from './hook-entry.js';\n\nconst SCRIPT_PREFIX_RE =\n /^(?<prefix>\\s*(?:(?:bash|sh|zsh)\\s+)?)[\"']?(?<path>(?:\\.\\.\\/|\\.\\/|[^/\\s\"'`]+\\/)[^\\s\"'`]+)[\"']?(?<suffix>(?:\\s.*)?)$/;\n\nfunction safePhaseName(phase: string): string {\n return phase.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase();\n}\n\nfunction toRepoRelative(projectRoot: string, sourcePath: string): string | null {\n const repoRelative = relative(projectRoot, sourcePath).replace(/\\\\/g, '/');\n if (!repoRelative || repoRelative.startsWith('../')) return null;\n return repoRelative;\n}\n\nfunction rewriteWrapperCommand(command: string, assetRelativePath: string): string {\n const match = command.match(SCRIPT_PREFIX_RE);\n if (!match?.groups) return command;\n const prefix = match.groups['prefix'] ?? '';\n const suffix = match.groups['suffix'] ?? '';\n return `${prefix}\"$HOOK_DIR/${assetRelativePath}\"${suffix}`;\n}\n\nasync function buildAssetOutput(\n projectRoot: string,\n command: string,\n): Promise<{ assetPath: string; content: string; rewrittenCommand: string } | null> {\n const match = command.match(SCRIPT_PREFIX_RE);\n const sourceToken = match?.groups?.['path'];\n if (!sourceToken) return null;\n\n const sourcePath = join(projectRoot, sourceToken);\n const assetContent = await readFileSafe(sourcePath);\n if (assetContent === null) return null;\n\n const repoRelative = toRepoRelative(projectRoot, sourcePath);\n if (!repoRelative) return null;\n\n return {\n assetPath: `${COPILOT_HOOKS_DIR}/scripts/${repoRelative}`,\n content: assetContent,\n rewrittenCommand: rewriteWrapperCommand(command, repoRelative),\n };\n}\n\nfunction wrapperPath(event: string, index: number): string {\n return `${COPILOT_HOOKS_DIR}/scripts/${safePhaseName(event)}-${index}.sh`;\n}\n\nfunction buildWrapper(command: string, matcher: string): string {\n return [\n '#!/usr/bin/env bash',\n `# agentsbridge-matcher: ${matcher}`,\n `# agentsbridge-command: ${command}`,\n 'set -e',\n command,\n '',\n ].join('\\n');\n}\n\nexport async function addHookScriptAssets(\n projectRoot: string,\n canonical: CanonicalFiles,\n outputs: RulesOutput[],\n): Promise<RulesOutput[]> {\n if (!canonical.hooks) return outputs;\n\n const wrapperOutputs: RulesOutput[] = [];\n const assetOutputs = new Map<string, RulesOutput>();\n\n for (const [event, entries] of Object.entries(canonical.hooks)) {\n if (!Array.isArray(entries)) continue;\n let index = 0;\n for (const entry of entries) {\n if (!hasHookCommand(entry)) continue;\n const scriptPath = wrapperPath(event, index);\n let command = entry.command;\n const asset = await buildAssetOutput(projectRoot, entry.command);\n if (asset) {\n command = asset.rewrittenCommand;\n if (!assetOutputs.has(asset.assetPath)) {\n assetOutputs.set(asset.assetPath, { path: asset.assetPath, content: asset.content });\n }\n }\n\n const wrapper = buildWrapper(command, entry.matcher).replace(\n 'set -e\\n',\n 'set -e\\nHOOK_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\\n',\n );\n wrapperOutputs.push({ path: scriptPath, content: wrapper });\n index++;\n }\n }\n\n return [...outputs, ...wrapperOutputs, ...assetOutputs.values()];\n}\n","export const SETTINGS_JSON_PATHS = ['.claude/settings.json', '.gemini/settings.json'];\n\nexport function mergeSettingsJson(existing: string, newContent: string): string {\n let base: Record<string, unknown>;\n try {\n const parsed = JSON.parse(existing) as Record<string, unknown>;\n base = parsed && typeof parsed === 'object' ? parsed : {};\n } catch {\n base = {};\n }\n const incoming = JSON.parse(newContent) as Record<string, unknown>;\n const merged = { ...base };\n if (incoming.permissions !== undefined) merged.permissions = incoming.permissions;\n if (incoming.hooks !== undefined) merged.hooks = incoming.hooks;\n return JSON.stringify(merged, null, 2);\n}\n\nexport function mergeGeminiSettingsJson(existing: string, newContent: string): string {\n let base: Record<string, unknown>;\n try {\n const parsed = JSON.parse(existing) as Record<string, unknown>;\n base = parsed && typeof parsed === 'object' ? parsed : {};\n } catch {\n base = {};\n }\n const incoming = JSON.parse(newContent) as Record<string, unknown>;\n const merged = { ...base };\n if (incoming.mcpServers !== undefined) merged.mcpServers = incoming.mcpServers;\n if (incoming.hooks !== undefined) merged.hooks = incoming.hooks;\n if (incoming.experimental !== undefined) merged.experimental = incoming.experimental;\n if (incoming.context !== undefined) merged.context = incoming.context;\n return JSON.stringify(merged, null, 2);\n}\n","/**\n * Generate orchestrator: produces target-specific files from canonical sources.\n */\n\nimport type { CanonicalFiles, GenerateResult } from './types.js';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport {\n shouldConvertAgentsToSkills,\n shouldConvertCommandsToSkills,\n} from '../config/conversions.js';\nimport '../targets/claude-code/index.js';\nimport '../targets/cursor/index.js';\nimport '../targets/copilot/index.js';\nimport '../targets/continue/index.js';\nimport '../targets/junie/index.js';\nimport '../targets/gemini-cli/index.js';\nimport '../targets/cline/index.js';\nimport '../targets/codex-cli/index.js';\nimport '../targets/windsurf/index.js';\nimport { preferEquivalentCodexAgents } from './output-overlap.js';\nimport { rewriteGeneratedReferences } from './reference-rewriter.js';\nimport { resolveOutputCollisions, refreshResultStatus } from './engine-collision.js';\nimport { generateFeature } from './engine-feature-loop.js';\nimport {\n generatePermissionsFeature,\n generateHooksFeature,\n generateGeminiSettingsFeature,\n} from './engine-optional-features.js';\n\nexport interface GenerateContext {\n config: ValidatedConfig;\n canonical: CanonicalFiles;\n projectRoot: string;\n targetFilter?: string[];\n}\n\nexport { resolveOutputCollisions };\n\n/**\n * Generate target files from canonical sources.\n * @param ctx - Config, canonical files, project root, optional target filter\n * @returns GenerateResult[] with status per file\n */\nexport async function generate(ctx: GenerateContext): Promise<GenerateResult[]> {\n const { config, canonical, projectRoot, targetFilter } = ctx;\n const targets = targetFilter\n ? config.targets.filter((t) => targetFilter.includes(t))\n : config.targets;\n const hasRules = config.features.includes('rules');\n const hasCommands = config.features.includes('commands');\n const hasAgents = config.features.includes('agents');\n const hasSkills = config.features.includes('skills');\n const hasMcp = config.features.includes('mcp');\n const hasPermissions = config.features.includes('permissions');\n const hasHooks = config.features.includes('hooks');\n const hasIgnore = config.features.includes('ignore');\n\n const results: GenerateResult[] = [];\n\n await generateFeature(results, targets, canonical, projectRoot, hasRules, (t) => t.generateRules);\n\n await generateFeature(\n results,\n targets,\n canonical,\n projectRoot,\n hasCommands,\n (t) => t.generateWorkflows ?? t.generateCommands,\n (target) => target === 'codex-cli' && !shouldConvertCommandsToSkills(config, target),\n );\n\n await generateFeature(\n results,\n targets,\n canonical,\n projectRoot,\n hasAgents,\n (t) => t.generateAgents,\n // Skip cline/windsurf when not projecting agents to skills (no native agent path).\n // gemini-cli and codex-cli use native agent paths, so never skip.\n (target) =>\n ['cline', 'windsurf'].includes(target) && !shouldConvertAgentsToSkills(config, target),\n );\n\n await generateFeature(\n results,\n targets,\n canonical,\n projectRoot,\n hasSkills,\n (t) => t.generateSkills,\n );\n await generateFeature(results, targets, canonical, projectRoot, hasMcp, (t) => t.generateMcp);\n\n // Permissions: same pattern but merges with existing settings.json\n if (hasPermissions) await generatePermissionsFeature(results, targets, canonical, projectRoot);\n\n // Hooks: merges with any pending permissions result for same path\n if (hasHooks) await generateHooksFeature(results, targets, canonical, projectRoot);\n\n await generateFeature(\n results,\n targets,\n canonical,\n projectRoot,\n hasIgnore,\n (t) => t.generateIgnore,\n );\n\n // Gemini settings: when mcp, ignore, hooks, or agents (experimental.enableAgents) enabled\n if (hasMcp || hasIgnore || hasHooks || hasAgents) {\n await generateGeminiSettingsFeature(results, targets, canonical, projectRoot);\n }\n\n const rewrittenResults = rewriteGeneratedReferences(results, canonical, config, projectRoot).map(\n refreshResultStatus,\n );\n\n return resolveOutputCollisions(preferEquivalentCodexAgents(rewrittenResults, canonical, config));\n}\n","/**\n * Compatibility matrix builder: maps features to target support levels.\n */\n\nimport { basename } from 'node:path';\nimport type { CanonicalFiles, CompatibilityRow, SupportLevel } from './types.js';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport {\n shouldConvertAgentsToSkills,\n shouldConvertCommandsToSkills,\n} from '../config/conversions.js';\nimport { SUPPORT_MATRIX, LEVEL_SYMBOL } from './matrix-data.js';\n\n/**\n * Build compatibility rows for enabled features.\n * @param config - Validated config (targets, features)\n * @param canonical - Loaded canonical files (counts per feature)\n * @returns CompatibilityRow[] for enabled features only\n */\nexport function buildCompatibilityMatrix(\n config: ValidatedConfig,\n canonical: CanonicalFiles,\n): CompatibilityRow[] {\n const rows: CompatibilityRow[] = [];\n const targets = config.targets;\n\n for (const featureId of config.features) {\n const supportMap = SUPPORT_MATRIX[featureId];\n if (!supportMap) continue;\n\n let label: string;\n let count: number;\n\n switch (featureId) {\n case 'rules':\n count = canonical.rules.length;\n label = 'rules';\n break;\n case 'commands':\n count = canonical.commands.length;\n label = count > 0 ? `commands (${count})` : 'commands';\n break;\n case 'agents':\n count = canonical.agents.length;\n label = count > 0 ? `agents (${count})` : 'agents';\n break;\n case 'skills':\n count = canonical.skills.length;\n label = count > 0 ? `skills (${count})` : 'skills';\n break;\n case 'mcp':\n count = canonical.mcp ? Object.keys(canonical.mcp.mcpServers).length : 0;\n label = count > 0 ? `mcp (${count} servers)` : 'mcp';\n break;\n case 'hooks':\n count = countHooks(canonical.hooks);\n label = count > 0 ? `hooks (${count})` : 'hooks';\n break;\n case 'ignore':\n count = canonical.ignore.length > 0 ? 1 : 0;\n label = 'ignore';\n break;\n case 'permissions':\n count =\n canonical.permissions &&\n (canonical.permissions.allow.length > 0 || canonical.permissions.deny.length > 0)\n ? 1\n : 0;\n label = 'permissions';\n break;\n default:\n continue;\n }\n\n const support: Record<string, SupportLevel> = {};\n for (const t of targets) {\n const level = getEffectiveSupportLevel(config, featureId, t, supportMap[t] ?? 'none');\n support[t] = level;\n }\n\n rows.push({ feature: label, count, support });\n }\n\n return rows;\n}\n\nfunction getEffectiveSupportLevel(\n config: ValidatedConfig,\n featureId: string,\n target: string,\n baseLevel: SupportLevel,\n): SupportLevel {\n if (baseLevel !== 'embedded') return baseLevel;\n if (featureId === 'commands' && target === 'codex-cli') {\n return shouldConvertCommandsToSkills(config, target) ? 'embedded' : 'none';\n }\n if (featureId === 'agents' && ['cline', 'windsurf'].includes(target)) {\n return shouldConvertAgentsToSkills(config, target) ? 'embedded' : 'none';\n }\n return baseLevel;\n}\n\nfunction countHooks(hooks: CanonicalFiles['hooks']): number {\n if (!hooks) return 0;\n let n = 0;\n for (const arr of Object.values(hooks)) {\n if (Array.isArray(arr)) n += arr.length;\n }\n return n;\n}\n\n/**\n * Format compatibility matrix as ASCII table.\n * @param rows - Compatibility rows from buildCompatibilityMatrix\n * @param targets - Target IDs for column order\n * @returns Formatted string\n */\nexport function formatMatrix(rows: CompatibilityRow[], targets: string[]): string {\n const maxTargetLen = Math.max(12, ...targets.map((t) => t.length));\n const targetLabels = targets.map((t) => (t === 'claude-code' ? 'Claude' : t));\n const colWidth = Math.max(8, maxTargetLen);\n const featWidth = Math.max(12, ...rows.map((r) => r.feature.length));\n\n const pad = (s: string, w: number): string => s.padEnd(w);\n const border = (chars: string[]): string => '┌' + chars.join('┬') + '┐';\n const sep = (chars: string[]): string => '├' + chars.join('┼') + '┤';\n const bottom = (chars: string[]): string => '└' + chars.join('┴') + '┘';\n\n const cols = [featWidth, ...targets.map(() => colWidth)];\n const top = border(cols.map((w) => '─'.repeat(w)));\n const bot = bottom(cols.map((w) => '─'.repeat(w)));\n\n const headerCells = [pad('Feature', featWidth), ...targetLabels.map((l) => pad(l, colWidth))];\n const header = border(headerCells.map((c, i) => c.padEnd(cols[i]!)));\n const headerSep = sep(cols.map((w) => '─'.repeat(w)));\n\n const bodyRows = rows.map((r) => {\n const cells = [pad(r.feature, featWidth)];\n for (const t of targets) {\n const sym = LEVEL_SYMBOL[r.support[t] ?? 'none'];\n cells.push(pad(` ${sym} `, colWidth));\n }\n return sep(\n cells.map((c, i) => (c.length > cols[i]! ? c.slice(0, cols[i]) : c.padEnd(cols[i]!))),\n );\n });\n\n const lines = [top, header, headerSep, ...bodyRows, bot];\n lines.push('');\n lines.push('Legend: ✓ = native 📝 = embedded ⚠ = partial – = not supported');\n return lines.join('\\n');\n}\n\n/**\n * Format per-file details for --verbose output.\n * @param canonical - Loaded canonical files\n * @returns Formatted string listing files per feature\n */\nexport function formatVerboseDetails(canonical: CanonicalFiles): string {\n const lines: string[] = [];\n if (canonical.rules.length > 0) {\n lines.push(`rules: ${canonical.rules.map((r) => basename(r.source)).join(', ')}`);\n }\n if (canonical.commands.length > 0) {\n lines.push(`commands: ${canonical.commands.map((c) => basename(c.source)).join(', ')}`);\n }\n if (canonical.agents.length > 0) {\n lines.push(`agents: ${canonical.agents.map((a) => basename(a.source)).join(', ')}`);\n }\n if (canonical.skills.length > 0) {\n lines.push(`skills: ${canonical.skills.map((s) => s.name).join(', ')}`);\n }\n if (canonical.mcp && Object.keys(canonical.mcp.mcpServers).length > 0) {\n lines.push(`mcp: ${Object.keys(canonical.mcp.mcpServers).join(', ')}`);\n }\n if (canonical.hooks) {\n const count = Object.values(canonical.hooks).reduce(\n (n, arr) => n + (Array.isArray(arr) ? arr.length : 0),\n 0,\n );\n if (count > 0) lines.push(`hooks: ${count} entries in hooks.yaml`);\n }\n if (canonical.ignore.length > 0) {\n lines.push('ignore: .agentsbridge/ignore');\n }\n if (canonical.permissions) {\n const total = canonical.permissions.allow.length + canonical.permissions.deny.length;\n if (total > 0) lines.push('permissions: .agentsbridge/permissions.yaml');\n }\n if (lines.length === 0) return '';\n return '\\nPer-file details:\\n' + lines.join('\\n') + '\\n';\n}\n","import type { SupportLevel } from './types.js';\nimport { TARGET_IDS, TARGET_CATALOG } from '../targets/target-catalog.js';\n\nconst FEATURE_IDS = [\n 'rules',\n 'commands',\n 'agents',\n 'skills',\n 'mcp',\n 'hooks',\n 'ignore',\n 'permissions',\n] as const;\n\n/** PRD-defined support: feature -> target -> level */\nexport const SUPPORT_MATRIX: Record<string, Record<string, SupportLevel>> = Object.fromEntries(\n FEATURE_IDS.map((feature) => [\n feature,\n Object.fromEntries(\n TARGET_IDS.map((target) => [target, TARGET_CATALOG[target].capabilities[feature]]),\n ),\n ]),\n) as Record<string, Record<string, SupportLevel>>;\n\nexport const LEVEL_SYMBOL: Record<SupportLevel, string> = {\n native: '✓',\n embedded: '📝',\n partial: '⚠',\n none: '–',\n};\n","/**\n * agentsbridge matrix — show compatibility matrix for current config.\n */\n\nimport { loadConfigFromDir } from '../../config/loader.js';\nimport { loadCanonicalWithExtends } from '../../canonical/extends.js';\nimport { buildCompatibilityMatrix, formatMatrix, formatVerboseDetails } from '../../core/matrix.js';\nimport { logger } from '../../utils/logger.js';\n\n/**\n * Run the matrix command.\n * @param flags - CLI flags (targets, verbose)\n * @param projectRoot - Project root (default process.cwd())\n */\nexport async function runMatrix(\n flags: Record<string, string | boolean>,\n projectRoot?: string,\n): Promise<void> {\n const root = projectRoot ?? process.cwd();\n const targetStr = flags.targets;\n const targetFilter =\n typeof targetStr === 'string' && targetStr\n ? targetStr\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : undefined;\n\n const { config, configDir } = await loadConfigFromDir(root);\n const { canonical } = await loadCanonicalWithExtends(config, configDir);\n\n const targets = targetFilter ?? config.targets;\n const rows = buildCompatibilityMatrix(config, canonical);\n\n if (rows.length === 0) {\n logger.info('No features enabled. Enable features in agentsbridge.yaml.');\n return;\n }\n\n const table = formatMatrix(rows, targets);\n process.stdout.write(table);\n process.stdout.write('\\n');\n\n if (flags.verbose === true) {\n const details = formatVerboseDetails(canonical);\n if (details) {\n process.stdout.write(details);\n process.stdout.write('\\n');\n }\n }\n}\n","/**\n * agentsbridge init — create agentsbridge.yaml and .agentsbridge/ scaffold.\n * With --yes: auto-import detected tool configs (Story 5.2 Smart Init).\n */\n\nimport { join } from 'node:path';\nimport { exists, readFileSafe, writeFileAtomic, mkdirp } from '../../utils/fs.js';\nimport { logger } from '../../utils/logger.js';\nimport { importFromClaudeCode } from '../../targets/claude-code/importer.js';\nimport { importFromCursor } from '../../targets/cursor/importer.js';\nimport { importFromCopilot } from '../../targets/copilot/importer.js';\nimport { importFromContinue } from '../../targets/continue/importer.js';\nimport { importFromJunie } from '../../targets/junie/importer.js';\nimport { importFromGemini } from '../../targets/gemini-cli/importer.js';\nimport { importFromCline } from '../../targets/cline/importer.js';\nimport { importFromCodex } from '../../targets/codex-cli/importer.js';\nimport { importFromWindsurf } from '../../targets/windsurf/importer.js';\nimport type { ImportResult } from '../../core/types.js';\nimport {\n buildConfig,\n LOCAL_TEMPLATE,\n TEMPLATE_ROOT_RULE,\n TEMPLATE_EXAMPLE_RULE,\n TEMPLATE_EXAMPLE_COMMAND,\n TEMPLATE_EXAMPLE_AGENT,\n TEMPLATE_EXAMPLE_SKILL,\n TEMPLATE_MCP,\n TEMPLATE_HOOKS,\n TEMPLATE_PERMISSIONS,\n TEMPLATE_IGNORE,\n} from './init-templates.js';\nimport { detectExistingConfigs } from './init-detect.js';\n\nconst CONFIG_FILENAME = 'agentsbridge.yaml';\nconst LOCAL_CONFIG_FILENAME = 'agentsbridge.local.yaml';\nconst GITIGNORE_ENTRIES = ['agentsbridge.local.yaml', '.agentsbridgecache'];\n\nconst IMPORTERS: Record<string, (root: string) => Promise<ImportResult[]>> = {\n 'claude-code': importFromClaudeCode,\n cursor: importFromCursor,\n copilot: importFromCopilot,\n continue: importFromContinue,\n junie: importFromJunie,\n 'gemini-cli': importFromGemini,\n cline: importFromCline,\n 'codex-cli': importFromCodex,\n windsurf: importFromWindsurf,\n};\n\n/**\n * Append entries to .gitignore if not already present.\n */\nasync function appendToGitignore(projectRoot: string): Promise<void> {\n const gitignorePath = join(projectRoot, '.gitignore');\n const current = (await readFileSafe(gitignorePath)) ?? '';\n const lines = new Set(current.split('\\n').map((s) => s.trim()));\n const toAdd = GITIGNORE_ENTRIES.filter((e) => !lines.has(e));\n if (toAdd.length === 0) return;\n const suffix = current.endsWith('\\n') || current === '' ? '' : '\\n';\n await writeFileAtomic(gitignorePath, current + suffix + toAdd.join('\\n') + '\\n');\n}\n\n/**\n * Write template scaffold — one example file per canonical type.\n */\nasync function writeScaffold(projectRoot: string): Promise<void> {\n const ab = (rel: string): string => join(projectRoot, '.agentsbridge', rel);\n\n await mkdirp(ab('rules'));\n await writeFileAtomic(ab('rules/_root.md'), TEMPLATE_ROOT_RULE);\n logger.success('Created .agentsbridge/rules/_root.md');\n\n await writeFileAtomic(ab('rules/example.md'), TEMPLATE_EXAMPLE_RULE);\n logger.success('Created .agentsbridge/rules/example.md');\n\n await mkdirp(ab('commands'));\n await writeFileAtomic(ab('commands/example.md'), TEMPLATE_EXAMPLE_COMMAND);\n logger.success('Created .agentsbridge/commands/example.md');\n\n await mkdirp(ab('agents'));\n await writeFileAtomic(ab('agents/example.md'), TEMPLATE_EXAMPLE_AGENT);\n logger.success('Created .agentsbridge/agents/example.md');\n\n await mkdirp(ab('skills/example'));\n await writeFileAtomic(ab('skills/example/SKILL.md'), TEMPLATE_EXAMPLE_SKILL);\n logger.success('Created .agentsbridge/skills/example/SKILL.md');\n\n await writeFileAtomic(ab('mcp.json'), TEMPLATE_MCP);\n logger.success('Created .agentsbridge/mcp.json');\n\n await writeFileAtomic(ab('hooks.yaml'), TEMPLATE_HOOKS);\n logger.success('Created .agentsbridge/hooks.yaml');\n\n await writeFileAtomic(ab('permissions.yaml'), TEMPLATE_PERMISSIONS);\n logger.success('Created .agentsbridge/permissions.yaml');\n\n await writeFileAtomic(ab('ignore'), TEMPLATE_IGNORE);\n logger.success('Created .agentsbridge/ignore');\n}\n\nexport { detectExistingConfigs };\n\n/**\n * Run the init command.\n * @param projectRoot - Project root (default process.cwd())\n * @param options - Optional flags: yes (auto-import without prompting)\n * @throws Error if already initialized\n */\nexport async function runInit(projectRoot: string, options: { yes?: boolean } = {}): Promise<void> {\n const configPath = join(projectRoot, CONFIG_FILENAME);\n if (await exists(configPath)) {\n throw new Error(`Already initialized. ${CONFIG_FILENAME} exists. Remove it first to re-init.`);\n }\n\n const existing = await detectExistingConfigs(projectRoot);\n\n if (existing.length > 0) {\n logger.info(`Found existing configurations: ${existing.join(', ')}`);\n\n if (options.yes) {\n logger.info('Auto-importing existing configurations (--yes)...');\n let totalImported = 0;\n for (const toolId of existing) {\n const importerFn = IMPORTERS[toolId];\n if (!importerFn) continue;\n const results = await importerFn(projectRoot);\n for (const r of results) {\n logger.success(` ${r.fromPath.replace(projectRoot + '/', '')} → ${r.toPath}`);\n }\n totalImported += results.length;\n }\n if (totalImported > 0) {\n logger.info(`Imported ${totalImported} file(s) from ${existing.length} tool(s).`);\n }\n\n await writeFileAtomic(configPath, buildConfig(existing));\n logger.success(`Created ${CONFIG_FILENAME} (targets: ${existing.join(', ')})`);\n } else {\n logger.info(\n `Run 'agentsbridge init --yes' to auto-import, or 'agentsbridge import --from <tool>' manually.`,\n );\n await writeScaffold(projectRoot);\n await writeFileAtomic(configPath, buildConfig([]));\n logger.success(`Created ${CONFIG_FILENAME}`);\n }\n } else {\n await writeScaffold(projectRoot);\n await writeFileAtomic(configPath, buildConfig([]));\n logger.success(`Created ${CONFIG_FILENAME}`);\n }\n\n const localPath = join(projectRoot, LOCAL_CONFIG_FILENAME);\n await writeFileAtomic(localPath, LOCAL_TEMPLATE);\n logger.success(`Created ${LOCAL_CONFIG_FILENAME}`);\n\n await appendToGitignore(projectRoot);\n logger.success('Updated .gitignore');\n}\n","/**\n * Template data for agentsbridge init command.\n */\n\nconst ALL_TARGETS = [\n 'claude-code',\n 'cursor',\n 'copilot',\n 'continue',\n 'junie',\n 'gemini-cli',\n 'cline',\n 'codex-cli',\n 'windsurf',\n];\n\nconst ALL_FEATURES = [\n 'rules',\n 'commands',\n 'agents',\n 'skills',\n 'mcp',\n 'hooks',\n 'ignore',\n 'permissions',\n];\n\n/**\n * Build agentsbridge.yaml content for the given targets.\n * @param targets - Target tool IDs to include; uses all targets if empty\n */\nexport function buildConfig(targets: string[]): string {\n const targetList = (targets.length > 0 ? targets : ALL_TARGETS).map((t) => ` - ${t}`).join('\\n');\n const featureList = ALL_FEATURES.map((f) => ` - ${f}`).join('\\n');\n return `version: 1\\ntargets:\\n${targetList}\\nfeatures:\\n${featureList}\\n`;\n}\n\n// ─── Canonical file templates ─────────────────────────────────────────────────\n\nexport const TEMPLATE_ROOT_RULE = `---\nroot: true\ndescription: \"Project rules\"\n---\n\n# Project Rules\n\nAdd your project-wide instructions here.\nThis file is always included in AI tool context and synced to all configured tools.\n`;\n\nexport const TEMPLATE_EXAMPLE_RULE = `---\ndescription: \"Example contextual rule — rename and customize\"\n# targets: [claude-code, cursor] # limit to specific tools (optional)\n# globs: [\"src/**/*.ts\"] # activate only for matching files (optional)\n---\n\n# Example Rule\n\nReplace this with your coding standards, conventions, or domain-specific guidelines.\n`;\n\nexport const TEMPLATE_EXAMPLE_COMMAND = `---\ndescription: \"Example command — rename and customize\"\n# allowed-tools: [Read, Grep, Glob, Bash]\n---\n\nDescribe the task for this command here.\nCommands are invoked on-demand (e.g. /example) with a focused tool set.\n`;\n\nexport const TEMPLATE_EXAMPLE_AGENT = `---\nname: example-agent\ndescription: \"Example subagent — rename and customize\"\n# tools: [Read, Grep, Glob]\n# model: sonnet\n# permissionMode: ask\n# maxTurns: 10\n---\n\nDescribe this agent's role and instructions here.\nAgents are specialized subagents with restricted tools and a specific purpose.\n`;\n\nexport const TEMPLATE_EXAMPLE_SKILL = `---\nname: example-skill\ndescription: \"Example skill — rename and customize\"\n---\n\n# Example Skill\n\nDescribe the skill procedure here.\nSkills are reusable multi-step procedures that commands and agents can reference.\n`;\n\nexport const TEMPLATE_MCP = `{\n \"mcpServers\": {\n // \"github\": {\n // \"type\": \"stdio\",\n // \"command\": \"npx\",\n // \"args\": [\"-y\", \"@modelcontextprotocol/server-github\"],\n // \"env\": { \"GITHUB_TOKEN\": \"$GITHUB_TOKEN\" }\n // },\n // \"filesystem\": {\n // \"type\": \"stdio\",\n // \"command\": \"npx\",\n // \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allow\"]\n // }\n }\n}\n`;\n\nexport const TEMPLATE_HOOKS = `# Lifecycle hooks — run shell commands before/after AI tool use\n# Events: PreToolUse, PostToolUse, SubagentStart, SubagentStop\n# Matcher: tool name pattern (e.g. \"Edit|Write\", \"Bash\", \"*\")\n#\n# PreToolUse:\n# - matcher: Edit|Write\n# type: command\n# command: npm run lint --fix\n#\n# PostToolUse:\n# - matcher: Edit|Write\n# type: command\n# command: npm test --passWithNoTests\n`;\n\nexport const TEMPLATE_PERMISSIONS = `# Tool permission allow/deny lists\n#\n# allow:\n# - Bash(npm run:*)\n# - Bash(git add:*)\n# - Bash(git commit:*)\n#\n# deny:\n# - Bash(rm -rf:*)\n# - Bash(git push --force:*)\nallow: []\ndeny: []\n`;\n\nexport const TEMPLATE_IGNORE = `# Patterns ignored by all configured AI tools (gitignore syntax)\n#\n# node_modules/\n# dist/\n# .env*\n# *.log\n# coverage/\n`;\n\nexport const LOCAL_TEMPLATE = `# Personal overrides — NOT committed to git\n# Uncomment and customize for your local setup:\n\n# targets:\n# - claude-code\n# - continue\n# - junie\n# - cursor\n\n# conversions:\n# commands_to_skills:\n# codex-cli: false\n# agents_to_skills:\n# windsurf: false\n#\n# overrides:\n# claude-code:\n# model: opus\n`;\n","/**\n * Detection helpers for agentsbridge init command.\n */\n\nimport { join } from 'node:path';\nimport { exists } from '../../utils/fs.js';\n\n/** AI tool indicators for detection. */\nexport const TOOL_INDICATORS: Array<{ id: string; paths: string[] }> = [\n { id: 'claude-code', paths: ['CLAUDE.md', '.claude/rules', '.claude/commands'] },\n { id: 'cursor', paths: ['.cursor/rules', '.cursor/mcp.json'] },\n {\n id: 'copilot',\n paths: [\n '.github/copilot-instructions.md',\n '.github/copilot',\n '.github/instructions',\n '.github/prompts',\n '.github/skills',\n '.github/agents',\n '.github/hooks',\n ],\n },\n { id: 'continue', paths: ['.continue/rules', '.continue/skills', '.continue/mcpServers'] },\n {\n id: 'junie',\n paths: [\n '.junie/guidelines.md',\n '.junie/AGENTS.md',\n '.junie/skills',\n '.junie/mcp/mcp.json',\n '.aiignore',\n ],\n },\n { id: 'gemini-cli', paths: ['GEMINI.md', '.gemini'] },\n { id: 'cline', paths: ['.clinerules', '.cline'] },\n { id: 'codex-cli', paths: ['codex.md'] },\n { id: 'windsurf', paths: ['.windsurfrules', '.windsurf'] },\n];\n\n/**\n * Detect existing AI tool configs in the project.\n * @param projectRoot - Project root directory\n * @returns Array of tool IDs that have configs\n */\nexport async function detectExistingConfigs(projectRoot: string): Promise<string[]> {\n const found: string[] = [];\n for (const { id, paths } of TOOL_INDICATORS) {\n for (const p of paths) {\n const full = join(projectRoot, p);\n if (await exists(full)) {\n found.push(id);\n break;\n }\n }\n }\n return [...new Set(found)];\n}\n","/**\n * agentsbridge import — import config from a tool into canonical .agentsbridge/.\n */\n\nimport { relative } from 'node:path';\nimport { logger } from '../../utils/logger.js';\nimport {\n TARGET_IDS,\n getTargetCatalogEntry,\n isBuiltinTargetId,\n} from '../../targets/target-catalog.js';\n\n/**\n * Run the import command.\n * @param flags - CLI flags (from)\n * @param projectRoot - Project root (default process.cwd())\n */\nexport async function runImport(\n flags: Record<string, string | boolean>,\n projectRoot?: string,\n): Promise<void> {\n const root = projectRoot ?? process.cwd();\n const from = flags.from;\n if (typeof from !== 'string' || !from) {\n throw new Error('--from is required. Example: agentsbridge import --from claude-code');\n }\n const normalized = from.toLowerCase().trim();\n if (!isBuiltinTargetId(normalized)) {\n throw new Error(`Unknown --from \"${from}\". Supported: ${TARGET_IDS.join(', ')}.`);\n }\n\n const target = getTargetCatalogEntry(normalized);\n const results = await target.importFrom(root);\n if (results.length === 0) {\n logger.info(target.emptyImportMessage);\n return;\n }\n for (const r of results) {\n const fromRel = relative(root, r.fromPath);\n logger.success(`${fromRel} → ${r.toPath}`);\n }\n logger.info(\n `Imported ${results.length} file(s). Run 'agentsbridge generate' to sync to other tools.`,\n );\n}\n","/**\n * Diff engine: produces unified diffs between generated content and on-disk files.\n */\n\nimport { createTwoFilesPatch } from 'diff';\nimport type { GenerateResult } from './types.js';\n\nexport interface DiffEntry {\n path: string;\n patch: string;\n}\n\nexport interface DiffSummary {\n new: number;\n updated: number;\n unchanged: number;\n deleted: number;\n}\n\nexport interface ComputeDiffResult {\n diffs: DiffEntry[];\n summary: DiffSummary;\n}\n\n/**\n * Compute unified diffs for generate results.\n * @param results - Output from engine.generate()\n * @returns Diffs for created/updated files plus summary counts\n */\nexport function computeDiff(results: GenerateResult[]): ComputeDiffResult {\n const diffs: DiffEntry[] = [];\n const summary: DiffSummary = { new: 0, updated: 0, unchanged: 0, deleted: 0 };\n\n for (const r of results) {\n if (r.status === 'unchanged') {\n summary.unchanged++;\n continue;\n }\n if (r.status === 'created') {\n summary.new++;\n const patch = createTwoFilesPatch(\n `${r.path} (current)`,\n `${r.path} (generated)`,\n '',\n r.content,\n undefined,\n undefined,\n { context: 3 },\n );\n diffs.push({ path: r.path, patch });\n continue;\n }\n if (r.status === 'updated' && r.currentContent !== undefined) {\n summary.updated++;\n const patch = createTwoFilesPatch(\n `${r.path} (current)`,\n `${r.path} (generated)`,\n r.currentContent,\n r.content,\n undefined,\n undefined,\n { context: 3 },\n );\n diffs.push({ path: r.path, patch });\n continue;\n }\n }\n\n return { diffs, summary };\n}\n\n/**\n * Format diff summary for user display.\n * @param summary - Counts from computeDiff\n * @returns Human-readable string\n */\nexport function formatDiffSummary(summary: DiffSummary): string {\n return `${summary.new} files would be created, ${summary.updated} updated, ${summary.unchanged} unchanged, ${summary.deleted} deleted`;\n}\n","/**\n * agentsbridge diff — show what would change on the next generate.\n */\n\nimport { loadConfigFromDir } from '../../config/loader.js';\nimport { loadCanonicalWithExtends } from '../../canonical/extends.js';\nimport { generate as runEngine } from '../../core/engine.js';\nimport { computeDiff, formatDiffSummary } from '../../core/differ.js';\nimport { logger } from '../../utils/logger.js';\n\n/**\n * Run the diff command.\n * @param flags - CLI flags (targets)\n * @param projectRoot - Project root (default process.cwd())\n */\nexport async function runDiff(\n flags: Record<string, string | boolean>,\n projectRoot?: string,\n): Promise<void> {\n const root = projectRoot ?? process.cwd();\n const targetStr = flags.targets;\n const targetFilter =\n typeof targetStr === 'string' && targetStr\n ? targetStr\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : undefined;\n\n const { config, configDir } = await loadConfigFromDir(root);\n const { canonical } = await loadCanonicalWithExtends(config, configDir);\n\n const results = await runEngine({\n config,\n canonical,\n projectRoot: configDir,\n targetFilter,\n });\n\n if (results.length === 0) {\n logger.info('No files to generate (no root rule or rules feature disabled).');\n return;\n }\n\n const { diffs, summary } = computeDiff(results);\n for (const d of diffs) {\n process.stdout.write(d.patch);\n }\n logger.info(formatDiffSummary(summary));\n}\n","/**\n * Lint engine: validates canonical files against target constraints.\n */\n\nimport { relative } from 'node:path';\nimport type { CanonicalFiles, LintDiagnostic } from './types.js';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport { readDirRecursive } from '../utils/fs.js';\nimport { lintCommands } from './linter-commands.js';\nimport { lintMcp } from './linter-mcp.js';\nimport { lintPermissions } from './linter-permissions.js';\nimport { lintHooks } from './linter-hooks.js';\nimport { getTargetCatalogEntry, isBuiltinTargetId } from '../targets/target-catalog.js';\n\nconst EXCLUDE_DIRS = ['node_modules', '.git', 'dist', 'coverage', '.agentsbridge'];\n\n/**\n * Get project file paths relative to projectRoot, excluding common dirs.\n */\nasync function getProjectFiles(projectRoot: string): Promise<string[]> {\n const all = await readDirRecursive(projectRoot);\n const filtered = all.filter((p) => {\n const rel = relative(projectRoot, p);\n return !EXCLUDE_DIRS.some((d) => rel.includes(`/${d}/`) || rel.startsWith(`${d}/`));\n });\n return filtered.map((p) => relative(projectRoot, p));\n}\n\n/**\n * Run lint across all enabled targets.\n * @param config - Validated config\n * @param canonical - Loaded canonical files\n * @param projectRoot - Project root (for glob matching)\n * @param targetFilter - Optional target filter (e.g. from --targets)\n * @returns All diagnostics, and whether any are errors\n */\nexport async function runLint(\n config: ValidatedConfig,\n canonical: CanonicalFiles,\n projectRoot: string,\n targetFilter?: string[],\n): Promise<{ diagnostics: LintDiagnostic[]; hasErrors: boolean }> {\n const targets = targetFilter\n ? config.targets.filter((t) => targetFilter.includes(t))\n : config.targets;\n const hasRules = config.features.includes('rules');\n const hasCommands = config.features.includes('commands');\n const hasMcp = config.features.includes('mcp');\n const hasPermissions = config.features.includes('permissions');\n const hasHooks = config.features.includes('hooks');\n\n const diagnostics: LintDiagnostic[] = [];\n const projectFiles = await getProjectFiles(projectRoot);\n\n for (const target of targets) {\n const linter = isBuiltinTargetId(target) ? getTargetCatalogEntry(target).lintRules : null;\n if (hasRules && linter) {\n diagnostics.push(...linter(canonical, projectRoot, projectFiles));\n }\n if (hasCommands) {\n diagnostics.push(...lintCommands(canonical, target));\n }\n if (hasMcp) {\n diagnostics.push(...lintMcp(canonical, target));\n }\n if (hasPermissions) {\n diagnostics.push(...lintPermissions(canonical, target));\n }\n if (hasHooks) {\n diagnostics.push(...lintHooks(canonical, target));\n }\n }\n\n const hasErrors = diagnostics.some((d) => d.level === 'error');\n return { diagnostics, hasErrors };\n}\n","import type { CanonicalFiles, LintDiagnostic } from './types.js';\n\nexport function lintCommands(canonical: CanonicalFiles, target: string): LintDiagnostic[] {\n if (canonical.commands.length === 0) return [];\n return canonical.commands.flatMap((command) => {\n if (target === 'copilot' && command.allowedTools.length > 0) {\n return [\n {\n level: 'warning' as const,\n file: command.source,\n target,\n message: 'Copilot prompt files do not enforce canonical allowed-tools natively.',\n },\n ];\n }\n\n if (\n target === 'cursor' &&\n (command.description.length > 0 || command.allowedTools.length > 0)\n ) {\n return [\n {\n level: 'warning' as const,\n file: command.source,\n target,\n message:\n 'Cursor command files are plain Markdown; command description and allowed-tools metadata are not projected.',\n },\n ];\n }\n\n if (target === 'gemini-cli' && command.allowedTools.length > 0) {\n return [\n {\n level: 'warning' as const,\n file: command.source,\n target,\n message: 'Gemini TOML command files do not project canonical allowed-tools metadata.',\n },\n ];\n }\n\n if (target === 'continue' && command.allowedTools.length > 0) {\n return [\n {\n level: 'warning' as const,\n file: command.source,\n target,\n message:\n 'Continue invokable prompt rules do not natively enforce canonical allowed-tools metadata.',\n },\n ];\n }\n\n if (\n ['cline', 'windsurf'].includes(target) &&\n (command.description.length > 0 || command.allowedTools.length > 0)\n ) {\n return [\n {\n level: 'warning' as const,\n file: command.source,\n target,\n message: `${target} workflow files are plain Markdown; command description and allowed-tools metadata are not projected.`,\n },\n ];\n }\n\n return [];\n });\n}\n","import type { CanonicalFiles, LintDiagnostic } from './types.js';\nimport { isUrlMcpServer, usesCursorSensitiveInterpolation } from './mcp-servers.js';\n\nexport function lintMcp(canonical: CanonicalFiles, target: string): LintDiagnostic[] {\n if (!canonical.mcp || Object.keys(canonical.mcp.mcpServers).length === 0) return [];\n\n const diagnostics: LintDiagnostic[] = [];\n for (const [name, server] of Object.entries(canonical.mcp.mcpServers)) {\n if (target === 'cursor' && usesCursorSensitiveInterpolation(server)) {\n diagnostics.push({\n level: 'warning',\n file: '.agentsbridge/mcp.json',\n target,\n message: `MCP server \"${name}\" uses env vars or URL/header interpolation; Cursor handling may differ from canonical MCP.`,\n });\n }\n\n if (target === 'codex-cli' && typeof server.description === 'string' && server.description) {\n diagnostics.push({\n level: 'warning',\n file: '.agentsbridge/mcp.json',\n target,\n message: `MCP server \"${name}\" has a description, but codex-cli does not project MCP descriptions into .codex/config.toml.`,\n });\n }\n\n if (target === 'codex-cli' && isUrlMcpServer(server)) {\n diagnostics.push({\n level: 'warning',\n file: '.agentsbridge/mcp.json',\n target,\n message: `MCP server \"${name}\" uses ${server.type} transport; codex-cli only generates stdio MCP servers.`,\n });\n }\n\n if (target === 'junie' && isUrlMcpServer(server)) {\n diagnostics.push({\n level: 'warning',\n file: '.agentsbridge/mcp.json',\n target,\n message: `MCP server \"${name}\" uses ${server.type} transport; Junie project mcp.json currently documents stdio MCP servers only.`,\n });\n }\n }\n return diagnostics;\n}\n","import type { CanonicalFiles, LintDiagnostic } from './types.js';\n\nexport function lintPermissions(canonical: CanonicalFiles, target: string): LintDiagnostic[] {\n if (!canonical.permissions) return [];\n if (target !== 'cursor') return [];\n const hasEntries =\n canonical.permissions.allow.length > 0 || canonical.permissions.deny.length > 0;\n if (!hasEntries) return [];\n\n return [\n {\n level: 'warning',\n file: '.agentsbridge/permissions.yaml',\n target,\n message: 'Cursor permissions are partial; tool-level allow/deny may lose fidelity.',\n },\n ];\n}\n","import type { CanonicalFiles, LintDiagnostic } from './types.js';\n\nexport function lintHooks(canonical: CanonicalFiles, target: string): LintDiagnostic[] {\n if (!canonical.hooks || Object.keys(canonical.hooks).length === 0) return [];\n if (target === 'gemini-cli') {\n const supported = new Set(['PreToolUse', 'PostToolUse', 'Notification']);\n return Object.keys(canonical.hooks)\n .filter((event) => !supported.has(event))\n .map((event) => ({\n level: 'warning' as const,\n file: '.agentsbridge/hooks.yaml',\n target,\n message: `${event} is not supported by gemini-cli; only PreToolUse, PostToolUse, and Notification are projected.`,\n }));\n }\n\n if (target === 'copilot') {\n const supported = new Set(['PreToolUse', 'PostToolUse', 'Notification', 'UserPromptSubmit']);\n return Object.keys(canonical.hooks)\n .filter((event) => !supported.has(event))\n .map((event) => ({\n level: 'warning' as const,\n file: '.agentsbridge/hooks.yaml',\n target,\n message: `${event} is not supported by Copilot hooks; only PreToolUse, PostToolUse, Notification, and UserPromptSubmit are projected.`,\n }));\n }\n\n return [];\n}\n","/**\n * agentsbridge lint — validate canonical files against target constraints.\n */\n\nimport { loadConfigFromDir } from '../../config/loader.js';\nimport { loadCanonicalWithExtends } from '../../canonical/extends.js';\nimport { runLint } from '../../core/linter.js';\nimport { logger } from '../../utils/logger.js';\n\n/**\n * Run the lint command.\n * @param flags - CLI flags (targets, verbose)\n * @param projectRoot - Project root (default process.cwd())\n * @returns Exit code: 1 if errors, 0 otherwise\n */\nexport async function runLintCmd(\n flags: Record<string, string | boolean>,\n projectRoot?: string,\n): Promise<number> {\n const root = projectRoot ?? process.cwd();\n const targetStr = flags.targets;\n const targetFilter =\n typeof targetStr === 'string' && targetStr\n ? targetStr\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : undefined;\n\n const { config, configDir } = await loadConfigFromDir(root);\n const { canonical } = await loadCanonicalWithExtends(config, configDir);\n\n const { diagnostics, hasErrors } = await runLint(config, canonical, configDir, targetFilter);\n\n if (diagnostics.length === 0) {\n logger.success('All checks passed.');\n return 0;\n }\n\n const errors = diagnostics.filter((d) => d.level === 'error');\n const warnings = diagnostics.filter((d) => d.level === 'warning');\n\n if (errors.length > 0) {\n for (const d of errors) {\n logger.error(`${d.file} (${d.target}): ${d.message}`);\n }\n }\n if (warnings.length > 0) {\n for (const d of warnings) {\n logger.warn(`${d.file} (${d.target}): ${d.message}`);\n }\n }\n\n const errCount = errors.length;\n const warnCount = warnings.length;\n logger.info(\n `${errCount} error${errCount !== 1 ? 's' : ''}, ${warnCount} warning${warnCount !== 1 ? 's' : ''}`,\n );\n\n return hasErrors ? 1 : 0;\n}\n","/**\n * agentsbridge watch — watch canonical files and regenerate on change.\n */\n\nimport { join, relative } from 'node:path';\nimport chokidar from 'chokidar';\nimport { loadConfigFromDir } from '../../config/loader.js';\nimport { loadCanonicalWithExtends } from '../../canonical/extends.js';\nimport { runGenerate } from './generate.js';\nimport { runMatrix } from './matrix.js';\nimport { logger } from '../../utils/logger.js';\n\nconst DEBOUNCE_MS = 300;\n\nfunction shouldIgnoreWatchPath(configDir: string, changedPath: string): boolean {\n const relPath = relative(configDir, changedPath).replace(/\\\\/g, '/');\n // Chokidar can report paths through different resolution layers; use `endsWith`\n // so we reliably ignore lock-file churn regardless of relative prefixing.\n return relPath.endsWith('.agentsbridge/.lock') || relPath.endsWith('.agentsbridge/.lock.tmp');\n}\n\n/**\n * Compute a fingerprint of current features for change detection.\n */\nfunction featureFingerprint(\n features: string[],\n rulesCount: number,\n commandsCount: number,\n agentsCount: number,\n skillsCount: number,\n mcpServerCount: number,\n permissionsCount: number,\n hooksCount: number,\n ignoreCount: number,\n): string {\n return JSON.stringify({\n features,\n rulesCount,\n commandsCount,\n agentsCount,\n skillsCount,\n mcpServerCount,\n permissionsCount,\n hooksCount,\n ignoreCount,\n });\n}\n\n/**\n * Run the watch command.\n * Watches .agentsbridge/ and agentsbridge.yaml. On change: debounce 300ms, re-run\n * generate, print compact summary, show matrix if features changed.\n * @param flags - CLI flags (targets, verbose)\n * @param projectRoot - Project root (default process.cwd())\n * @returns Object with stop() to stop watching\n * @throws When not initialized (no agentsbridge.yaml)\n */\nexport async function runWatch(\n flags: Record<string, string | boolean>,\n projectRoot?: string,\n): Promise<{ stop: () => Promise<void> }> {\n const root = projectRoot ?? process.cwd();\n const { configDir } = await loadConfigFromDir(root);\n\n const paths = [\n join(configDir, '.agentsbridge'),\n join(configDir, 'agentsbridge.yaml'),\n join(configDir, 'agentsbridge.local.yaml'),\n ];\n\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let lastFingerprint: string | null = null;\n let stopped = false;\n let pendingRun: Promise<void> | null = null;\n\n const run = async (): Promise<void> => {\n if (stopped) return;\n debounceTimer = null;\n const { config, configDir: dir } = await loadConfigFromDir(root);\n const { canonical } = await loadCanonicalWithExtends(config, dir);\n\n const mcpServerCount = canonical.mcp ? Object.keys(canonical.mcp.mcpServers).length : 0;\n const permissionsCount = canonical.permissions\n ? canonical.permissions.allow.length + canonical.permissions.deny.length\n : 0;\n const hooksCount = canonical.hooks\n ? Object.values(canonical.hooks).reduce(\n (sum, arr) => sum + (Array.isArray(arr) ? arr.length : 0),\n 0,\n )\n : 0;\n const ignoreCount = canonical.ignore.length;\n const fp = featureFingerprint(\n config.features,\n canonical.rules.length,\n canonical.commands.length,\n canonical.agents.length,\n canonical.skills.length,\n mcpServerCount,\n permissionsCount,\n hooksCount,\n ignoreCount,\n );\n const featuresChanged = lastFingerprint !== null && lastFingerprint !== fp;\n lastFingerprint = fp;\n\n if (stopped) return;\n await runGenerate(flags, root, { printMatrix: false });\n\n if (stopped) return;\n if (featuresChanged) {\n await runMatrix(flags, root);\n } else {\n logger.info('Regenerated.');\n }\n };\n\n const scheduleRun = (): void => {\n const runPromise = run()\n .catch((err: unknown) => {\n if (!stopped) {\n const message = err instanceof Error ? err.message : String(err);\n logger.error(message);\n }\n })\n .finally(() => {\n if (pendingRun === runPromise) pendingRun = null;\n });\n pendingRun = runPromise;\n };\n\n const schedule = (): void => {\n if (stopped) return;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(scheduleRun, DEBOUNCE_MS);\n };\n\n const watcher = chokidar.watch(paths, { ignoreInitial: true });\n watcher.on('all', (_eventName, changedPath) => {\n if (shouldIgnoreWatchPath(configDir, changedPath)) return;\n schedule();\n });\n\n logger.info('Watching .agentsbridge/ and agentsbridge.yaml...');\n pendingRun = run();\n await pendingRun;\n pendingRun = null;\n\n return {\n stop: async (): Promise<void> => {\n stopped = true;\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n debounceTimer = null;\n }\n await watcher.close();\n if (pendingRun) await pendingRun;\n },\n };\n}\n","/**\n * agentsbridge check — CI integration for team collaboration.\n * Verifies canonical files match the lock file.\n */\n\nimport { join } from 'node:path';\nimport { loadConfigFromDir } from '../../config/loader.js';\nimport { resolveExtendPaths } from '../../config/resolver.js';\nimport {\n readLock,\n buildChecksums,\n buildExtendChecksums,\n detectLockedFeatureViolations,\n} from '../../config/lock.js';\nimport { logger } from '../../utils/logger.js';\n\n/**\n * Run the check command.\n * @param flags - CLI flags (unused for check)\n * @param projectRoot - Project root (default process.cwd())\n * @returns Exit code: 1 if mismatch or no lock, 0 if OK\n */\nexport async function runCheck(\n flags: Record<string, string | boolean>,\n projectRoot?: string,\n): Promise<number> {\n void flags;\n const root = projectRoot ?? process.cwd();\n\n const { config, configDir } = await loadConfigFromDir(root);\n const abDir = join(configDir, '.agentsbridge');\n\n const lock = await readLock(abDir);\n if (lock === null) {\n logger.error(\"Not initialized for collaboration. Run 'agentsbridge generate' first.\");\n return 1;\n }\n\n const current = await buildChecksums(abDir);\n const resolvedExtends = await resolveExtendPaths(config, configDir);\n const currentExtends =\n resolvedExtends.length > 0 ? await buildExtendChecksums(resolvedExtends) : {};\n\n const lockPaths = new Set(Object.keys(lock.checksums));\n const currentPaths = new Set(Object.keys(current));\n\n const modified: string[] = [];\n const added: string[] = [];\n const removed: string[] = [];\n\n for (const path of lockPaths) {\n const c = current[path];\n if (c === undefined) {\n removed.push(path);\n } else if (c !== lock.checksums[path]) {\n modified.push(path);\n }\n }\n for (const path of currentPaths) {\n if (!lockPaths.has(path)) {\n added.push(path);\n }\n }\n\n const extendNames = new Set([...Object.keys(lock.extends), ...Object.keys(currentExtends)]);\n const extendModified: string[] = [];\n for (const name of extendNames) {\n const c = currentExtends[name];\n const l = lock.extends[name];\n if (c !== l) {\n extendModified.push(name);\n }\n }\n\n if (\n modified.length === 0 &&\n added.length === 0 &&\n removed.length === 0 &&\n extendModified.length === 0\n ) {\n logger.success('Lock file is in sync.');\n return 0;\n }\n\n const lockedViolations = new Set(\n detectLockedFeatureViolations(\n lock.checksums,\n current,\n config.collaboration?.lock_features ?? [],\n ),\n );\n\n logger.error('Conflict detected:');\n for (const p of extendModified) {\n logger.error(` extend \"${p}\" was modified`);\n }\n for (const p of modified) {\n const suffix = lockedViolations.has(p) ? ' [LOCKED]' : '';\n logger.error(` ${p} was modified${suffix}`);\n }\n for (const p of added) {\n const suffix = lockedViolations.has(p) ? ' [LOCKED]' : '';\n logger.error(` ${p} was added${suffix}`);\n }\n for (const p of removed) {\n const suffix = lockedViolations.has(p) ? ' [LOCKED]' : '';\n logger.error(` ${p} was removed${suffix}`);\n }\n logger.info(\n \"Run 'agentsbridge merge' to resolve, or 'agentsbridge generate --force' to accept current state.\",\n );\n return 1;\n}\n","/**\n * agentsbridge merge — resolve git merge conflicts in .agentsbridge/.lock.\n * Rebuilds lock checksums from current canonical files when conflict markers present.\n */\n\nimport { join } from 'node:path';\nimport { loadConfigFromDir } from '../../config/loader.js';\nimport { hasLockConflict, resolveLockConflict } from '../../core/merger.js';\nimport { getVersion } from '../version.js';\nimport { logger } from '../../utils/logger.js';\n\n/**\n * Run the merge command.\n * @param flags - CLI flags (unused for merge)\n * @param projectRoot - Project root (default process.cwd())\n */\nexport async function runMerge(\n flags: Record<string, string | boolean>,\n projectRoot?: string,\n): Promise<void> {\n void flags;\n const root = projectRoot ?? process.cwd();\n\n const { config, configDir } = await loadConfigFromDir(root);\n const abDir = join(configDir, '.agentsbridge');\n\n const hasConflict = await hasLockConflict(abDir);\n if (!hasConflict) {\n logger.info('No conflicts to resolve.');\n return;\n }\n\n await resolveLockConflict(abDir, getVersion(), config);\n logger.success('Lock file conflict resolved.');\n}\n","/**\n * Resolve git merge conflicts in .agentsbridge/.lock.\n * When .lock has conflict markers, rebuilds checksums from current canonical files.\n */\n\nimport { dirname, join } from 'node:path';\nimport { readFileSafe } from '../utils/fs.js';\nimport {\n buildChecksums,\n buildExtendChecksums,\n buildPackChecksums,\n writeLock,\n} from '../config/lock.js';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport { resolveExtendPaths } from '../config/resolver.js';\n\nconst LOCK_FILENAME = '.lock';\nconst CONFLICT_MARKER = '<<<<<<<';\n\n/**\n * Check if the lock file contains git merge conflict markers.\n * @param abDir - Absolute path to .agentsbridge\n * @returns True if lock has conflict markers\n */\nexport async function hasLockConflict(abDir: string): Promise<boolean> {\n const lockPath = join(abDir, LOCK_FILENAME);\n const content = await readFileSafe(lockPath);\n if (content === null) return false;\n return content.includes(CONFLICT_MARKER);\n}\n\n/**\n * Resolve lock conflict by rebuilding checksums from current canonical files.\n * Assumes user has already resolved conflicted canonical files (e.g. via git/editor).\n * @param abDir - Absolute path to .agentsbridge\n * @param libVersion - Library version for the new lock\n * @param config - Optional config for extend checksums\n * @throws Error if lock has no conflict or does not exist\n */\nexport async function resolveLockConflict(\n abDir: string,\n libVersion: string,\n config?: ValidatedConfig,\n): Promise<void> {\n const hasConflict = await hasLockConflict(abDir);\n if (!hasConflict) {\n throw new Error('No conflict to resolve.');\n }\n\n const checksums = await buildChecksums(abDir);\n const configDir = dirname(abDir);\n const resolvedExtends = config ? await resolveExtendPaths(config, configDir) : [];\n const extendChecksums =\n resolvedExtends.length > 0 ? await buildExtendChecksums(resolvedExtends) : {};\n const packChecksums = await buildPackChecksums(join(abDir, 'packs'));\n const generatedBy = process.env['USER'] ?? process.env['USERNAME'] ?? 'unknown';\n\n await writeLock(abDir, {\n generatedAt: new Date().toISOString(),\n generatedBy,\n libVersion,\n checksums,\n extends: extendChecksums,\n packs: packChecksums,\n });\n}\n","/**\n * agentsbridge install orchestration.\n */\n\nimport { join } from 'node:path';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport { loadCanonicalWithExtends } from '../canonical/extends.js';\nimport { loadConfigFromDir } from '../config/loader.js';\nimport { logger } from '../utils/logger.js';\nimport { exists } from '../utils/fs.js';\nimport { runGenerate } from '../cli/commands/generate.js';\nimport { resolveInstallResolvedPath } from './run-install-resolve.js';\nimport { isGitAvailable } from './git-pin.js';\nimport {\n hasInstallableResources,\n resolveAgentPool,\n resolveCommandPool,\n resolveRulePool,\n resolveSkillPool,\n} from './pool-resolution.js';\nimport { resolveInstallConflicts } from './install-conflicts.js';\nimport { parseInstallSource } from './url-parser.js';\nimport {\n buildInstallPick,\n deriveInstallFeatures,\n ensureInstallSelection,\n pickForSelectedResources,\n} from './install-entry-selection.js';\nimport { ruleSlug } from './validate-resources.js';\nimport { writeInstallAsExtend } from './install-extend-entry.js';\nimport { installAsPack } from './run-install-pack.js';\nimport { maybeRunInstallSync } from './install-sync.js';\nimport { selectInstallEntryName } from './install-name.js';\nimport { readInstallFlags } from './install-flags.js';\nimport { resolveInstallDiscovery } from './install-discovery.js';\nimport { applyReplayInstallScope, type InstallReplayScope } from './install-replay.js';\nimport { resolveManualInstallPersistence } from './manual-install-persistence.js';\nexport async function runInstall(\n flags: Record<string, string | boolean>,\n args: string[],\n projectRoot: string,\n replay?: InstallReplayScope,\n): Promise<void> {\n const {\n sync,\n dryRun,\n force,\n useExtends,\n explicitPath,\n explicitTarget,\n explicitAs,\n nameOverride,\n } = readInstallFlags(flags);\n const sourceArg = args[0]?.trim();\n if (\n await maybeRunInstallSync({\n sync,\n projectRoot,\n loadConfigDir: async (root) => (await loadConfigFromDir(root)).configDir,\n reinstall: async (entry) => {\n const replayPaths = entry.paths && entry.paths.length > 0 ? entry.paths : [entry.path];\n for (const replayPath of replayPaths) {\n await runInstall(\n {\n ...(force ? { force: true } : {}),\n ...(dryRun ? { dryRun: true } : {}),\n name: entry.name,\n ...(entry.target ? { target: entry.target } : {}),\n ...(replayPath ? { path: replayPath } : {}),\n ...(entry.as ? { as: entry.as } : {}),\n },\n [entry.source],\n projectRoot,\n { features: entry.features, pick: entry.pick },\n );\n }\n },\n })\n ) {\n return;\n }\n\n if (!sourceArg) {\n throw new Error(\n 'Missing source. Usage: agentsbridge install <source> [--path ...] [--target ...]',\n );\n }\n const tty = process.stdin.isTTY;\n if (!tty && !force && !dryRun) {\n throw new Error('Non-interactive terminal: use --force or --dry-run for agentsbridge install.');\n }\n const { config, configDir } = await loadConfigFromDir(projectRoot);\n const parsed = await parseInstallSource(sourceArg, configDir, explicitPath);\n if (parsed.kind !== 'local' && !(await isGitAvailable())) {\n throw new Error('git is required for remote installs. Please install git and try again.');\n }\n const { resolvedPath, sourceForYaml, version } = await resolveInstallResolvedPath(\n parsed,\n sourceArg,\n );\n const pathInRepo = parsed.pathInRepo.replace(/^\\/+|\\/+$/g, '');\n const contentRoot = pathInRepo ? join(resolvedPath, pathInRepo) : resolvedPath;\n if (!(await exists(contentRoot))) {\n throw new Error(`Install path does not exist: ${contentRoot}`);\n }\n const persisted = await resolveManualInstallPersistence({\n as: explicitAs,\n contentRoot,\n pathInRepo,\n });\n const { prep, implicitPick, narrowed, discoveredFeatures } = await resolveInstallDiscovery({\n resolvedPath,\n contentRoot,\n pathInRepo,\n explicitTarget,\n explicitAs,\n replayPick: replay?.pick,\n });\n try {\n const { narrowed: effectiveNarrowed, discoveredFeatures: effectiveFeatures } =\n applyReplayInstallScope(narrowed, discoveredFeatures, replay);\n if (!hasInstallableResources(effectiveNarrowed)) {\n throw new Error(\n implicitPick || prep.scopedFeatures\n ? 'No resources match the install path or implicit selection (check pick names exist at that path).'\n : 'No supported resources found to install (skills, rules, commands, agents).',\n );\n }\n const skillsPool = await resolveSkillPool(effectiveNarrowed, force, dryRun, tty);\n const rulesPool = await resolveRulePool(effectiveNarrowed, force, dryRun, tty);\n const commandsPool = await resolveCommandPool(effectiveNarrowed, force, dryRun, tty);\n const agentsPool = await resolveAgentPool(effectiveNarrowed, force, dryRun, tty);\n const preConflict = {\n skills: skillsPool.length,\n rules: rulesPool.length,\n commands: commandsPool.length,\n agents: agentsPool.length,\n };\n const { canonical: merged } = await loadCanonicalWithExtends(config, configDir);\n const selected =\n !force && !dryRun && tty\n ? await resolveInstallConflicts(merged, {\n skills: skillsPool,\n rules: rulesPool,\n commands: commandsPool,\n agents: agentsPool,\n })\n : {\n skillNames: skillsPool.map((s) => s.name),\n ruleSlugs: rulesPool.map((r) => ruleSlug(r)),\n commandNames: commandsPool.map((c) => c.name),\n agentNames: agentsPool.map((a) => a.name),\n };\n ensureInstallSelection({ selected, discoveredFeatures: effectiveFeatures, preConflict });\n const entryFeatures = (replay?.features ??\n deriveInstallFeatures(effectiveFeatures, selected)) as ValidatedConfig['features'];\n if (entryFeatures.length === 0) {\n throw new Error('No features left to install after selection.');\n }\n const pick =\n pickForSelectedResources(replay?.pick, selected) ??\n persisted.pick ??\n buildInstallPick({\n pathInRepo: persisted.pathInRepo ?? pathInRepo,\n implicitPick,\n preConflictCounts: preConflict,\n selected,\n });\n const entryName = selectInstallEntryName({\n config,\n parsed,\n entryFeatures,\n nameOverride,\n });\n if (useExtends) {\n await writeInstallAsExtend({\n configDir,\n config,\n entryArgs: {\n name: entryName,\n source: sourceForYaml,\n version,\n features: entryFeatures,\n path: persisted.pathInRepo,\n pick,\n yamlTarget: prep.yamlTarget,\n },\n dryRun,\n });\n if (dryRun) return;\n } else {\n if (dryRun) {\n logger.info(`[dry-run] Would install pack \"${entryName}\" to .agentsbridge/packs/.`);\n return;\n }\n await installAsPack({\n configDir,\n packName: entryName,\n narrowed: effectiveNarrowed,\n selected,\n sourceForYaml,\n version,\n sourceKind: parsed.kind,\n entryFeatures,\n pick,\n yamlTarget: prep.yamlTarget,\n pathInRepo: persisted.pathInRepo,\n manualAs: explicitAs,\n renameExistingPack: nameOverride === '',\n });\n }\n const genCode = await runGenerate({}, configDir);\n if (genCode !== 0) {\n logger.warn('Generate failed after install. Fix the issue and run agentsbridge generate.');\n }\n } finally {\n if (prep.cleanup) {\n await prep.cleanup();\n }\n }\n}\n","/**\n * Resolve git refs to full SHAs (install pinning).\n */\n\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execFileAsync = promisify(execFile);\n\nasync function runGit(args: string[]): Promise<string> {\n const { stdout } = await execFileAsync('git', args, {\n env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },\n });\n return stdout.trim();\n}\n\n/** True if git is available on PATH. */\nexport async function isGitAvailable(): Promise<boolean> {\n try {\n await runGit(['--version']);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Resolve a remote ref (branch or tag) to a commit SHA via ls-remote.\n */\nexport async function gitLsRemoteResolve(remoteUrl: string, ref: string): Promise<string> {\n const tryRefs = [ref, `refs/heads/${ref}`, `refs/tags/${ref}`];\n let lastErr: unknown;\n for (const r of tryRefs) {\n try {\n const out = await runGit(['ls-remote', remoteUrl, r]);\n const line = out\n .split('\\n')\n .map((l) => l.trim())\n .find((l) => l.length > 0);\n if (!line) continue;\n const sha = line.split(/\\s+/)[0];\n if (sha && /^[0-9a-f]{40}$/i.test(sha)) return sha;\n } catch (e) {\n lastErr = e;\n }\n }\n throw new Error(\n `Could not resolve ref \"${ref}\" for ${remoteUrl}: ${lastErr instanceof Error ? lastErr.message : String(lastErr)}`,\n );\n}\n\n/** Resolve branch/tag/HEAD to full SHA for pinning. */\nexport async function resolveRemoteRefForInstall(ref: string, remoteUrl: string): Promise<string> {\n const r = ref === '' ? 'HEAD' : ref;\n if (/^[0-9a-f]{40}$/i.test(r)) return r.toLowerCase();\n if (r === 'HEAD') {\n const out = await runGit(['ls-remote', remoteUrl, 'HEAD']);\n const line = out.split('\\n').find((l) => l.trim().length > 0);\n if (!line) throw new Error(`Could not resolve HEAD for ${remoteUrl}`);\n const sha = line.split(/\\s+/)[0];\n if (!sha || !/^[0-9a-f]{40}$/i.test(sha)) {\n throw new Error(`Invalid ls-remote HEAD line for ${remoteUrl}`);\n }\n return sha.toLowerCase();\n }\n return gitLsRemoteResolve(remoteUrl, r);\n}\n","/**\n * Fetch remote content for install (strict network; pinned SHA).\n */\n\nimport { fetchRemoteExtend, getCacheDir } from '../config/remote-fetcher.js';\nimport { resolveRemoteRefForInstall } from './git-pin.js';\nimport type { ParsedInstallSource } from './url-parser.js';\n\nexport interface FetchInstallResult {\n resolvedPath: string;\n sourceForYaml: string;\n version?: string;\n}\n\nexport async function fetchInstallSource(parsed: ParsedInstallSource): Promise<FetchInstallResult> {\n if (parsed.kind === 'local') {\n return {\n resolvedPath: parsed.localRoot!,\n sourceForYaml: parsed.localSourceForYaml!,\n };\n }\n\n const remote = parsed.gitRemoteUrl;\n if (!remote) throw new Error('Internal error: missing git remote URL');\n\n const sha = await resolveRemoteRefForInstall(parsed.rawRef || 'HEAD', remote);\n\n if (parsed.kind === 'github') {\n const src = `github:${parsed.org}/${parsed.repo}@${sha}`;\n const fetched = await fetchRemoteExtend(src, 'install', {\n cacheDir: getCacheDir(),\n refresh: false,\n allowOfflineFallback: false,\n });\n return { resolvedPath: fetched.resolvedPath, sourceForYaml: src, version: sha };\n }\n\n if (parsed.kind === 'gitlab') {\n const src = `gitlab:${parsed.org}/${parsed.repo}@${sha}`;\n const fetched = await fetchRemoteExtend(src, 'install', {\n cacheDir: getCacheDir(),\n refresh: false,\n allowOfflineFallback: false,\n });\n return { resolvedPath: fetched.resolvedPath, sourceForYaml: src, version: sha };\n }\n\n const fragment = sha;\n const base = (parsed.gitPlusBase ?? remote).split('#')[0];\n const src = `git+${base}#${fragment}`;\n const fetched = await fetchRemoteExtend(src, 'install', {\n cacheDir: getCacheDir(),\n refresh: false,\n allowOfflineFallback: false,\n });\n return { resolvedPath: fetched.resolvedPath, sourceForYaml: src, version: sha };\n}\n","/**\n * Resolve local or fetched path for agentsbridge install.\n */\n\nimport { fetchInstallSource } from './fetch-install-source.js';\nimport type { ParsedInstallSource } from './url-parser.js';\n\nexport async function resolveInstallResolvedPath(\n parsed: ParsedInstallSource,\n sourceArg: string,\n): Promise<{ resolvedPath: string; sourceForYaml: string; version?: string }> {\n if (parsed.kind === 'local') {\n return {\n resolvedPath: parsed.localRoot!,\n sourceForYaml: parsed.localSourceForYaml!,\n };\n }\n try {\n const fetched = await fetchInstallSource(parsed);\n return {\n resolvedPath: fetched.resolvedPath,\n sourceForYaml: fetched.sourceForYaml,\n version: fetched.version,\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n const err = new Error(\n `Failed to fetch from ${sourceArg}: ${msg}. Check your network connection and try again.`,\n );\n if (e instanceof Error) err.cause = e;\n throw err;\n }\n}\n","/**\n * Interactive install prompts (TTY only).\n */\n\nimport * as readline from 'node:readline';\n\nexport async function confirm(message: string): Promise<boolean> {\n if (!process.stdin.isTTY) return false;\n return new Promise((resolve) => {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n rl.question(`${message} (y/n) `, (answer) => {\n rl.close();\n const a = answer.trim().toLowerCase();\n resolve(a === 'y' || a === 'yes');\n });\n });\n}\n","/**\n * Validate discovered resources for install.\n */\n\nimport { basename } from 'node:path';\nimport type {\n CanonicalAgent,\n CanonicalCommand,\n CanonicalRule,\n CanonicalSkill,\n} from '../core/types.js';\n\nexport interface SkillValidation {\n skill: CanonicalSkill;\n ok: boolean;\n reason?: string;\n}\n\nexport function validateSkill(skill: CanonicalSkill): SkillValidation {\n if (!skill.description.trim()) {\n return { skill, ok: false, reason: 'missing description in frontmatter' };\n }\n return { skill, ok: true };\n}\n\nexport interface RuleValidation {\n rule: CanonicalRule;\n ok: boolean;\n reason?: string;\n}\n\nexport function validateRule(rule: CanonicalRule): RuleValidation {\n if (!rule.description.trim()) {\n return { rule, ok: false, reason: 'missing description in frontmatter' };\n }\n return { rule, ok: true };\n}\n\nexport interface CommandValidation {\n command: CanonicalCommand;\n ok: boolean;\n reason?: string;\n}\n\nexport function validateCommand(command: CanonicalCommand): CommandValidation {\n if (!command.description.trim()) {\n return { command, ok: false, reason: 'missing description in frontmatter' };\n }\n return { command, ok: true };\n}\n\nexport interface AgentValidation {\n agent: CanonicalAgent;\n ok: boolean;\n reason?: string;\n}\n\nexport function validateAgent(agent: CanonicalAgent): AgentValidation {\n if (!agent.description.trim()) {\n return { agent, ok: false, reason: 'missing description in frontmatter' };\n }\n return { agent, ok: true };\n}\n\nexport function ruleSlug(rule: CanonicalRule): string {\n return basename(rule.source).replace(/\\.md$/i, '');\n}\n","/**\n * Build validated resource pools for install (description checks + optional prompts).\n */\n\nimport type {\n CanonicalAgent,\n CanonicalCommand,\n CanonicalFiles,\n CanonicalRule,\n CanonicalSkill,\n} from '../core/types.js';\nimport { confirm } from './prompts.js';\nimport {\n validateAgent,\n validateCommand,\n validateRule,\n validateSkill,\n ruleSlug,\n} from './validate-resources.js';\n\nexport function hasArrayResources(c: CanonicalFiles): boolean {\n return !!(c.skills.length || c.rules.length || c.commands.length || c.agents.length);\n}\n\nexport function hasInstallableResources(c: CanonicalFiles): boolean {\n return (\n hasArrayResources(c) ||\n c.mcp !== null ||\n c.permissions !== null ||\n c.hooks !== null ||\n c.ignore.length > 0\n );\n}\n\nexport async function resolveSkillPool(\n narrowed: CanonicalFiles,\n force: boolean,\n dryRun: boolean,\n tty: boolean,\n): Promise<CanonicalSkill[]> {\n const skillCandidates = narrowed.skills.map((s) => validateSkill(s));\n let pool = skillCandidates.filter((c) => c.ok).map((c) => c.skill);\n const invalid = skillCandidates.filter((c) => !c.ok);\n if (!force && !dryRun && tty) {\n for (const inv of invalid) {\n const ok = await confirm(\n `Include invalid skill \"${inv.skill.name}\" anyway? (${inv.reason}). You can fix it later.`,\n );\n if (ok) pool.push(inv.skill);\n }\n } else if (force) {\n pool = skillCandidates.map((c) => c.skill);\n }\n if (dryRun) {\n pool = skillCandidates.filter((c) => c.ok).map((c) => c.skill);\n }\n return pool;\n}\n\nexport async function resolveRulePool(\n narrowed: CanonicalFiles,\n force: boolean,\n dryRun: boolean,\n tty: boolean,\n): Promise<CanonicalRule[]> {\n const candidates = narrowed.rules.map((r) => validateRule(r));\n let pool = candidates.filter((c) => c.ok).map((c) => c.rule);\n const invalid = candidates.filter((c) => !c.ok);\n if (!force && !dryRun && tty) {\n for (const inv of invalid) {\n const ok = await confirm(\n `Include invalid rule \"${ruleSlug(inv.rule)}\" anyway? (${inv.reason}). You can fix it later.`,\n );\n if (ok) pool.push(inv.rule);\n }\n } else if (force) {\n pool = candidates.map((c) => c.rule);\n }\n if (dryRun) {\n pool = candidates.filter((c) => c.ok).map((c) => c.rule);\n }\n return pool;\n}\n\nexport async function resolveCommandPool(\n narrowed: CanonicalFiles,\n force: boolean,\n dryRun: boolean,\n tty: boolean,\n): Promise<CanonicalCommand[]> {\n const candidates = narrowed.commands.map((c) => validateCommand(c));\n let pool = candidates.filter((c) => c.ok).map((c) => c.command);\n const invalid = candidates.filter((c) => !c.ok);\n if (!force && !dryRun && tty) {\n for (const inv of invalid) {\n const ok = await confirm(\n `Include invalid command \"${inv.command.name}\" anyway? (${inv.reason}). You can fix it later.`,\n );\n if (ok) pool.push(inv.command);\n }\n } else if (force) {\n pool = candidates.map((c) => c.command);\n }\n if (dryRun) {\n pool = candidates.filter((c) => c.ok).map((c) => c.command);\n }\n return pool;\n}\n\nexport async function resolveAgentPool(\n narrowed: CanonicalFiles,\n force: boolean,\n dryRun: boolean,\n tty: boolean,\n): Promise<CanonicalAgent[]> {\n const candidates = narrowed.agents.map((a) => validateAgent(a));\n let pool = candidates.filter((c) => c.ok).map((c) => c.agent);\n const invalid = candidates.filter((c) => !c.ok);\n if (!force && !dryRun && tty) {\n for (const inv of invalid) {\n const ok = await confirm(\n `Include invalid agent \"${inv.agent.name}\" anyway? (${inv.reason}). You can fix it later.`,\n );\n if (ok) pool.push(inv.agent);\n }\n } else if (force) {\n pool = candidates.map((c) => c.agent);\n }\n if (dryRun) {\n pool = candidates.filter((c) => c.ok).map((c) => c.agent);\n }\n return pool;\n}\n","/**\n * Interactive collision checks against merged canonical before writing an extend.\n */\n\nimport type {\n CanonicalAgent,\n CanonicalCommand,\n CanonicalFiles,\n CanonicalRule,\n CanonicalSkill,\n} from '../core/types.js';\nimport { confirm } from './prompts.js';\nimport { ruleSlug } from './validate-resources.js';\n\nexport async function resolveInstallConflicts(\n merged: CanonicalFiles,\n pools: {\n skills: CanonicalSkill[];\n rules: CanonicalRule[];\n commands: CanonicalCommand[];\n agents: CanonicalAgent[];\n },\n): Promise<{\n skillNames: string[];\n ruleSlugs: string[];\n commandNames: string[];\n agentNames: string[];\n}> {\n let skillsSel = pools.skills.map((s) => s.name);\n let rulesSel = pools.rules.map((r) => ruleSlug(r));\n let commandsSel = pools.commands.map((c) => c.name);\n let agentsSel = pools.agents.map((a) => a.name);\n\n for (const s of pools.skills) {\n if (merged.skills.some((x) => x.name === s.name)) {\n const ok = await confirm(\n `Skill \"${s.name}\" already exists in merged config. Add extend anyway?`,\n );\n if (!ok) skillsSel = skillsSel.filter((n) => n !== s.name);\n }\n }\n for (const r of pools.rules) {\n const slug = ruleSlug(r);\n if (merged.rules.some((x) => ruleSlug(x) === slug)) {\n const ok = await confirm(\n `Rule \"${slug}\" already exists in merged config. Add extend anyway?`,\n );\n if (!ok) rulesSel = rulesSel.filter((n) => n !== slug);\n }\n }\n for (const c of pools.commands) {\n if (merged.commands.some((x) => x.name === c.name)) {\n const ok = await confirm(\n `Command \"${c.name}\" already exists in merged config. Add extend anyway?`,\n );\n if (!ok) commandsSel = commandsSel.filter((n) => n !== c.name);\n }\n }\n for (const a of pools.agents) {\n if (merged.agents.some((x) => x.name === a.name)) {\n const ok = await confirm(\n `Agent \"${a.name}\" already exists in merged config. Add extend anyway?`,\n );\n if (!ok) agentsSel = agentsSel.filter((n) => n !== a.name);\n }\n }\n\n return {\n skillNames: skillsSel,\n ruleSlugs: rulesSel,\n commandNames: commandsSel,\n agentNames: agentsSel,\n };\n}\n","/**\n * Parse install sources: GitHub/GitLab tree URLs, git SSH/HTTPS, local paths.\n */\n\nimport { resolve, relative, sep } from 'node:path';\nimport { exists } from '../utils/fs.js';\nimport {\n parseGithubBlobUrl,\n parseGithubTreeUrl,\n parseGitlabBlobUrl,\n parseGitlabTreeUrl,\n parseGitSshGithub,\n parseGitSshGitlab,\n} from './url-parser-remotes.js';\n\nexport {\n parseGithubBlobUrl,\n parseGithubTreeUrl,\n parseGitlabBlobUrl,\n parseGitlabTreeUrl,\n parseGitSshGithub,\n parseGitSshGitlab,\n};\n\nexport type InstallSourceKind = 'github' | 'gitlab' | 'git' | 'local';\n\nexport interface ParsedInstallSource {\n kind: InstallSourceKind;\n /** Branch/tag name before pinning (GitHub/GitLab) or SHA for git+. */\n rawRef: string;\n org?: string;\n repo?: string;\n /** Clone URL for git ls-remote / generic git. */\n gitRemoteUrl?: string;\n /** Parsed git+ source without fragment (caller resolves SHA). */\n gitPlusBase?: string;\n /** Path inside repo (POSIX). Empty = repo root. */\n pathInRepo: string;\n /** Local project root (directory containing .agentsbridge or repo root). */\n localRoot?: string;\n /** Relative source string for agentsbridge.yaml (local paths). */\n localSourceForYaml?: string;\n}\n\nfunction toPosix(p: string): string {\n return p.split(sep).join('/');\n}\n\n/**\n * Parse user input into structured source. `configDir` is used to resolve relative locals.\n * `explicitPath` is CLI --path (overrides URL path when set).\n */\nexport async function parseInstallSource(\n raw: string,\n configDir: string,\n explicitPath?: string,\n): Promise<ParsedInstallSource> {\n const trimmed = raw.trim();\n const pathFlag = explicitPath?.trim().replace(/\\\\/g, '/') ?? '';\n\n if (trimmed.startsWith('git+')) {\n const hashIdx = trimmed.lastIndexOf('#');\n const base = hashIdx < 0 ? trimmed : trimmed.slice(0, hashIdx);\n const ref = hashIdx < 0 ? 'HEAD' : trimmed.slice(hashIdx + 1);\n const rest = base.slice(4);\n return {\n kind: 'git',\n rawRef: ref,\n gitPlusBase: rest,\n gitRemoteUrl: rest,\n pathInRepo: pathFlag,\n };\n }\n\n if (trimmed.startsWith('https://') || trimmed.startsWith('http://')) {\n const gh = parseGithubTreeUrl(trimmed) ?? parseGithubBlobUrl(trimmed);\n if (gh) {\n return {\n kind: 'github',\n rawRef: gh.ref,\n org: gh.org,\n repo: gh.repo,\n gitRemoteUrl: `https://github.com/${gh.org}/${gh.repo}.git`,\n pathInRepo: pathFlag || gh.path,\n };\n }\n const gl = parseGitlabTreeUrl(trimmed) ?? parseGitlabBlobUrl(trimmed);\n if (gl) {\n return {\n kind: 'gitlab',\n rawRef: gl.ref,\n org: gl.namespace,\n repo: gl.project,\n gitRemoteUrl: `https://gitlab.com/${gl.namespace}/${gl.project}.git`,\n pathInRepo: pathFlag || gl.path,\n };\n }\n }\n\n if (trimmed.startsWith('git@github.com:')) {\n const p = parseGitSshGithub(trimmed);\n if (!p) throw new Error(`Invalid GitHub SSH URL: ${trimmed}`);\n return {\n kind: 'github',\n rawRef: 'HEAD',\n org: p.org,\n repo: p.repo,\n gitRemoteUrl: `https://github.com/${p.org}/${p.repo}.git`,\n pathInRepo: pathFlag,\n };\n }\n\n if (trimmed.startsWith('git@gitlab.com:')) {\n const p = parseGitSshGitlab(trimmed);\n if (!p) throw new Error(`Invalid GitLab SSH URL: ${trimmed}`);\n return {\n kind: 'gitlab',\n rawRef: 'HEAD',\n gitRemoteUrl: `https://gitlab.com/${p.namespace}/${p.project}.git`,\n pathInRepo: pathFlag,\n };\n }\n\n if (trimmed.startsWith('git@')) {\n const m = trimmed.match(/^git@([^:]+):(.+?)(?:\\.git)?$/);\n if (!m) throw new Error(`Invalid SSH git URL: ${trimmed}`);\n const host = m[1];\n const pathPart = m[2]!.replace(/\\.git$/i, '');\n return {\n kind: 'git',\n rawRef: 'HEAD',\n gitRemoteUrl: `ssh://git@${host}/${pathPart}.git`,\n pathInRepo: pathFlag,\n };\n }\n\n const githubSource = trimmed.match(/^github:([^/]+)\\/(.+?)@([^/@]+)$/);\n if (githubSource) {\n const org = githubSource[1]!;\n const repo = githubSource[2]!;\n const ref = githubSource[3]!;\n return {\n kind: 'github',\n rawRef: ref,\n org,\n repo,\n gitRemoteUrl: `https://github.com/${org}/${repo}.git`,\n pathInRepo: pathFlag,\n };\n }\n\n const gitlabSource = trimmed.match(/^gitlab:(.+)\\/([^/@]+)@([^/@]+)$/);\n if (gitlabSource) {\n const namespace = gitlabSource[1]!;\n const project = gitlabSource[2]!;\n const ref = gitlabSource[3]!;\n return {\n kind: 'gitlab',\n rawRef: ref,\n org: namespace,\n repo: project,\n gitRemoteUrl: `https://gitlab.com/${namespace}/${project}.git`,\n pathInRepo: pathFlag,\n };\n }\n\n const absLocal = resolve(configDir, trimmed);\n if (!(await exists(absLocal))) {\n throw new Error(`Path does not exist: ${absLocal}`);\n }\n\n const abMarker = `${sep}.agentsbridge${sep}`;\n const idx = absLocal.indexOf(abMarker);\n if (idx >= 0) {\n const root = absLocal.slice(0, idx);\n const after = absLocal.slice(idx + abMarker.length);\n const pathFromAb = toPosix(after.replace(/\\\\/g, '/')).replace(/^\\/+/, '');\n const localSource = relative(configDir, root) || '.';\n return {\n kind: 'local',\n rawRef: '',\n pathInRepo: pathFlag || pathFromAb.replace(/\\.md$/i, '').replace(/\\/$/, ''),\n localRoot: root,\n localSourceForYaml: localSource.startsWith('..')\n ? localSource\n : `./${localSource}`.replace(/^\\.\\/\\./, '.'),\n };\n }\n\n const localSource = relative(configDir, absLocal) || '.';\n return {\n kind: 'local',\n rawRef: '',\n pathInRepo: pathFlag,\n localRoot: absLocal,\n localSourceForYaml: localSource.startsWith('..')\n ? localSource\n : `./${localSource}`.replace(/^\\.\\/\\./, '.'),\n };\n}\n","/**\n * GitHub / GitLab tree URL and SSH helpers for install source parsing.\n */\n\nimport { URL } from 'node:url';\n\n/** GitHub https://github.com/org/repo/tree/ref/rest */\nexport function parseGithubTreeUrl(urlStr: string): {\n org: string;\n repo: string;\n ref: string;\n path: string;\n} | null {\n try {\n const u = new URL(urlStr);\n if (u.hostname !== 'github.com') return null;\n const parts = u.pathname.split('/').filter(Boolean);\n const ti = parts.indexOf('tree');\n if (ti < 2 || ti + 1 >= parts.length) return null;\n const org = parts[0];\n const repo = parts[1];\n const ref = parts[ti + 1];\n const path = parts.slice(ti + 2).join('/');\n if (!org || !repo || !ref) return null;\n return { org, repo, ref, path: path || '' };\n } catch {\n return null;\n }\n}\n\n/** GitHub https://github.com/org/repo/blob/ref/rest */\nexport function parseGithubBlobUrl(urlStr: string): {\n org: string;\n repo: string;\n ref: string;\n path: string;\n} | null {\n try {\n const u = new URL(urlStr);\n if (u.hostname !== 'github.com') return null;\n const parts = u.pathname.split('/').filter(Boolean);\n const bi = parts.indexOf('blob');\n if (bi < 2 || bi + 1 >= parts.length) return null;\n const org = parts[0];\n const repo = parts[1];\n const ref = parts[bi + 1];\n const path = parts.slice(bi + 2).join('/');\n if (!org || !repo || !ref || !path) return null;\n return { org, repo, ref, path };\n } catch {\n return null;\n }\n}\n\n/** GitLab https://gitlab.com/group/project/-/tree/ref/path */\nexport function parseGitlabTreeUrl(urlStr: string): {\n namespace: string;\n project: string;\n ref: string;\n path: string;\n} | null {\n try {\n const u = new URL(urlStr);\n if (u.hostname !== 'gitlab.com') return null;\n const parts = u.pathname.split('/').filter(Boolean);\n const ti = parts.indexOf('-');\n if (ti < 0 || parts[ti + 1] !== 'tree') return null;\n const treeIdx = ti + 1;\n if (treeIdx + 1 >= parts.length) return null;\n const ref = parts[treeIdx + 1];\n const path = parts.slice(treeIdx + 2).join('/');\n const before = parts.slice(0, ti);\n if (before.length < 2) return null;\n const project = before[before.length - 1];\n const namespace = before.slice(0, -1).join('/');\n if (!namespace || !project || !ref) return null;\n return { namespace, project, ref, path: path || '' };\n } catch {\n return null;\n }\n}\n\n/** GitLab https://gitlab.com/group/project/-/blob/ref/path */\nexport function parseGitlabBlobUrl(urlStr: string): {\n namespace: string;\n project: string;\n ref: string;\n path: string;\n} | null {\n try {\n const u = new URL(urlStr);\n if (u.hostname !== 'gitlab.com') return null;\n const parts = u.pathname.split('/').filter(Boolean);\n const marker = parts.indexOf('-');\n if (marker < 0 || parts[marker + 1] !== 'blob') return null;\n const blobIdx = marker + 1;\n if (blobIdx + 1 >= parts.length) return null;\n const ref = parts[blobIdx + 1];\n const path = parts.slice(blobIdx + 2).join('/');\n const before = parts.slice(0, marker);\n if (before.length < 2) return null;\n const project = before[before.length - 1];\n const namespace = before.slice(0, -1).join('/');\n if (!namespace || !project || !ref || !path) return null;\n return { namespace, project, ref, path };\n } catch {\n return null;\n }\n}\n\n/** git@github.com:org/repo.git */\nexport function parseGitSshGithub(ssh: string): { org: string; repo: string } | null {\n const m = ssh.match(/^git@github\\.com:([^/]+)\\/(.+?)(?:\\.git)?$/i);\n if (!m) return null;\n return { org: m[1]!, repo: m[2]!.replace(/\\.git$/i, '') };\n}\n\nexport function parseGitSshGitlab(ssh: string): { namespace: string; project: string } | null {\n const m = ssh.match(/^git@gitlab\\.com:(.+?)(?:\\.git)?$/i);\n if (!m) return null;\n const rest = m[1]!.replace(/\\.git$/i, '');\n const parts = rest.split('/').filter(Boolean);\n if (parts.length < 2) return null;\n const project = parts[parts.length - 1]!;\n const namespace = parts.slice(0, -1).join('/');\n return { namespace, project };\n}\n","/**\n * Derive install entry selection metadata from narrowed resource pools.\n */\n\nimport type { ExtendPick } from '../config/schema.js';\n\nexport interface InstallSelectedNames {\n skillNames: string[];\n ruleSlugs: string[];\n commandNames: string[];\n agentNames: string[];\n}\n\nexport function pickForSelectedResources(\n pick: ExtendPick | undefined,\n selected: InstallSelectedNames,\n): ExtendPick | undefined {\n if (!pick) return undefined;\n const filtered: ExtendPick = {};\n const skills = pick.skills?.filter((name) => selected.skillNames.includes(name));\n const rules = pick.rules?.filter((name) => selected.ruleSlugs.includes(name));\n const commands = pick.commands?.filter((name) => selected.commandNames.includes(name));\n const agents = pick.agents?.filter((name) => selected.agentNames.includes(name));\n if (skills && skills.length > 0) filtered.skills = skills;\n if (rules && rules.length > 0) filtered.rules = rules;\n if (commands && commands.length > 0) filtered.commands = commands;\n if (agents && agents.length > 0) filtered.agents = agents;\n return Object.keys(filtered).length > 0 ? filtered : undefined;\n}\n\nfunction pathEndsWithName(pathInRepo: string, name: string): boolean {\n const segments = pathInRepo.split('/').filter(Boolean);\n return segments.length > 0 && segments[segments.length - 1] === name;\n}\n\nfunction inferSingleNamePick(\n pathInRepo: string,\n names: string[],\n totalBeforeConflict: number,\n): boolean {\n if (totalBeforeConflict !== 1 || names.length !== 1) return false;\n return pathEndsWithName(pathInRepo, names[0]!);\n}\n\nexport function buildInstallPick(args: {\n pathInRepo: string;\n implicitPick?: ExtendPick;\n preConflictCounts: { skills: number; rules: number; commands: number; agents: number };\n selected: InstallSelectedNames;\n}): ExtendPick | undefined {\n const { pathInRepo, implicitPick, preConflictCounts, selected } = args;\n const out: ExtendPick = {};\n\n const addSkills =\n selected.skillNames.length > 0 &&\n (Boolean(implicitPick?.skills?.length) ||\n selected.skillNames.length < preConflictCounts.skills ||\n inferSingleNamePick(pathInRepo, selected.skillNames, preConflictCounts.skills));\n const addRules =\n selected.ruleSlugs.length > 0 &&\n (Boolean(implicitPick?.rules?.length) ||\n selected.ruleSlugs.length < preConflictCounts.rules ||\n inferSingleNamePick(pathInRepo, selected.ruleSlugs, preConflictCounts.rules));\n const addCommands =\n selected.commandNames.length > 0 &&\n (Boolean(implicitPick?.commands?.length) ||\n selected.commandNames.length < preConflictCounts.commands ||\n inferSingleNamePick(pathInRepo, selected.commandNames, preConflictCounts.commands));\n const addAgents =\n selected.agentNames.length > 0 &&\n (Boolean(implicitPick?.agents?.length) ||\n selected.agentNames.length < preConflictCounts.agents ||\n inferSingleNamePick(pathInRepo, selected.agentNames, preConflictCounts.agents));\n\n if (addSkills) out.skills = [...selected.skillNames];\n if (addRules) out.rules = [...selected.ruleSlugs];\n if (addCommands) out.commands = [...selected.commandNames];\n if (addAgents) out.agents = [...selected.agentNames];\n return Object.keys(out).length ? out : undefined;\n}\n\nexport function deriveInstallFeatures(\n discoveredFeatures: string[],\n selected: InstallSelectedNames,\n): string[] {\n const set = new Set(discoveredFeatures);\n if (selected.skillNames.length === 0) set.delete('skills');\n if (selected.ruleSlugs.length === 0) set.delete('rules');\n if (selected.commandNames.length === 0) set.delete('commands');\n if (selected.agentNames.length === 0) set.delete('agents');\n return [...set];\n}\n\nfunction isEmptyInstallSelection(selected: InstallSelectedNames): boolean {\n return (\n selected.skillNames.length === 0 &&\n selected.ruleSlugs.length === 0 &&\n selected.commandNames.length === 0 &&\n selected.agentNames.length === 0\n );\n}\n\nexport function ensureInstallSelection(args: {\n selected: InstallSelectedNames;\n discoveredFeatures: string[];\n preConflict: { skills: number; rules: number; commands: number; agents: number };\n}): void {\n const { selected, discoveredFeatures, preConflict } = args;\n const had = (feature: string): boolean => discoveredFeatures.includes(feature);\n const dropped =\n (had('skills') && selected.skillNames.length === 0 && preConflict.skills > 0 && 'skills') ||\n (had('rules') && selected.ruleSlugs.length === 0 && preConflict.rules > 0 && 'rules') ||\n (had('commands') &&\n selected.commandNames.length === 0 &&\n preConflict.commands > 0 &&\n 'commands') ||\n (had('agents') && selected.agentNames.length === 0 && preConflict.agents > 0 && 'agents');\n if (dropped) {\n throw new Error(`No ${dropped} selected to install.`);\n }\n\n const hasSingletonFeatures = discoveredFeatures.some((feature) =>\n ['mcp', 'permissions', 'hooks', 'ignore'].includes(feature),\n );\n if (isEmptyInstallSelection(selected) && !hasSingletonFeatures) {\n throw new Error('No resources selected to install.');\n }\n}\n","/**\n * Build NewExtendEntry for agentsbridge install and write it to agentsbridge.yaml.\n */\n\nimport { join } from 'node:path';\nimport type { ExtendPick, ValidatedConfig } from '../config/schema.js';\nimport { targetSchema } from '../config/schema.js';\nimport type { NewExtendEntry } from './merge-extend-entry.js';\nimport { assertExtendNameAvailable } from './merge-extend-entry.js';\nimport { writeAgentsbridgeWithNewExtend } from './yaml-writer.js';\nimport { logger } from '../utils/logger.js';\n\nexport interface WriteExtendArgs {\n configDir: string;\n config: ValidatedConfig;\n entryArgs: Parameters<typeof toNewExtendEntry>[0];\n dryRun: boolean;\n}\n\n/**\n * Write a new extends entry to agentsbridge.yaml, or log dry-run info.\n */\nexport async function writeInstallAsExtend(args: WriteExtendArgs): Promise<void> {\n const { configDir, config, entryArgs, dryRun } = args;\n const entry = toNewExtendEntry(entryArgs);\n assertExtendNameAvailable(config.extends, entry);\n if (dryRun) {\n logger.info(`[dry-run] Would add extend:\\n${JSON.stringify(entry, null, 2)}`);\n return;\n }\n const configPath = join(configDir, 'agentsbridge.yaml');\n await writeAgentsbridgeWithNewExtend(configPath, config, entry);\n logger.success(`Wrote extends entry \"${entry.name}\" to agentsbridge.yaml.`);\n}\n\nexport function toNewExtendEntry(args: {\n name: string;\n source: string;\n version?: string;\n features: ValidatedConfig['features'];\n path?: string;\n pick?: ExtendPick;\n yamlTarget?: string;\n}): NewExtendEntry {\n return {\n name: args.name,\n source: args.source,\n version: args.version,\n features: args.features,\n path: args.path,\n pick: args.pick,\n target: args.yamlTarget !== undefined ? targetSchema.parse(args.yamlTarget) : undefined,\n };\n}\n","/**\n * Merge a new install extend entry into an existing extends list (same source updates).\n */\n\nimport type { ExtendPick, ValidatedConfig } from '../config/schema.js';\n\ntype ExtEntry = ValidatedConfig['extends'][number];\n\nexport interface NewExtendEntry {\n name: string;\n source: string;\n version?: string;\n features: ExtEntry['features'];\n path?: string;\n pick?: ExtendPick;\n target?: ExtEntry['target'];\n}\n\nexport function assertExtendNameAvailable(\n extendsList: { name: string; source: string }[],\n entry: NewExtendEntry,\n): void {\n const hit = extendsList.find((e) => e.name === entry.name && e.source !== entry.source);\n if (hit) {\n throw new Error(\n `Extends entry \"${entry.name}\" already exists with a different source. Use --name to provide a different name.`,\n );\n }\n}\n\nfunction mergePick(\n oldPick: ExtendPick | undefined,\n incomingFeatures: string[],\n incomingPick: ExtendPick | undefined,\n): ExtendPick | undefined {\n if (incomingPick === undefined) {\n if (!oldPick) return undefined;\n const out: ExtendPick = { ...oldPick };\n for (const k of ['skills', 'commands', 'rules', 'agents'] as const) {\n if (incomingFeatures.includes(k)) {\n delete out[k];\n }\n }\n return Object.keys(out).length ? out : undefined;\n }\n\n const out: ExtendPick = { ...oldPick };\n for (const k of ['skills', 'commands', 'rules', 'agents'] as const) {\n if (!(k in incomingPick)) continue;\n const bv = incomingPick[k];\n if (bv === undefined || bv.length === 0) {\n delete out[k];\n continue;\n }\n out[k] = [...new Set([...(oldPick?.[k] ?? []), ...bv])];\n }\n return Object.keys(out).length ? out : undefined;\n}\n\nexport function mergeExtendList(\n existing: ValidatedConfig['extends'],\n incoming: NewExtendEntry,\n): ValidatedConfig['extends'] {\n const idx = existing.findIndex((e) => e.source === incoming.source);\n if (idx < 0) {\n return [\n ...existing,\n {\n name: incoming.name,\n source: incoming.source,\n version: incoming.version,\n features: incoming.features,\n path: incoming.path,\n pick: incoming.pick,\n target: incoming.target,\n },\n ];\n }\n\n const old = existing[idx]!;\n const features = [...new Set([...old.features, ...incoming.features])] as ExtEntry['features'];\n const pick = mergePick(old.pick, incoming.features as string[], incoming.pick);\n\n return existing.map((e, i) =>\n i === idx\n ? {\n name: incoming.name,\n source: incoming.source,\n version: incoming.version ?? old.version,\n features,\n path: incoming.path !== undefined ? incoming.path : old.path,\n pick,\n target: (incoming.target ?? old.target) as ExtEntry['target'],\n }\n : e,\n );\n}\n","/**\n * Write agentsbridge.yaml after merging extends (full-document stringify).\n */\n\nimport { parse as parseYaml, stringify } from 'yaml';\nimport type { ValidatedConfig } from '../config/schema.js';\nimport { readFileSafe, writeFileAtomic } from '../utils/fs.js';\nimport { mergeExtendList, type NewExtendEntry } from './merge-extend-entry.js';\n\n/**\n * Merge extends into config on disk and write YAML.\n */\nexport async function writeAgentsbridgeWithNewExtend(\n configPath: string,\n currentConfig: ValidatedConfig,\n entry: NewExtendEntry,\n): Promise<void> {\n const content = await readFileSafe(configPath);\n if (content === null) throw new Error(`Missing config: ${configPath}`);\n\n const raw = parseYaml(content) as Record<string, unknown>;\n const mergedExtends = mergeExtendList(currentConfig.extends, entry);\n raw.extends = mergedExtends as unknown;\n\n const out = stringify(raw, { indent: 2, lineWidth: 0 });\n await writeFileAtomic(configPath, out.endsWith('\\n') ? out : `${out}\\n`);\n}\n","/**\n * Materialize an install as a local pack (default install behavior).\n */\n\nimport { join } from 'node:path';\nimport { rename } from 'node:fs/promises';\nimport type { CanonicalFiles } from '../core/types.js';\nimport type { ExtendPick } from '../config/schema.js';\nimport type { PackMetadata } from './pack-schema.js';\nimport { materializePack } from './pack-writer.js';\nimport { findExistingPack, readPackMetadata } from './pack-reader.js';\nimport { mergeIntoPack } from './pack-merge.js';\nimport { cleanInstallCache } from './cache-cleanup.js';\nimport { ruleSlug } from './validate-resources.js';\nimport { targetSchema } from '../config/schema.js';\nimport { logger } from '../utils/logger.js';\nimport { buildInstallManifestEntry, upsertInstallManifestEntry } from './install-manifest.js';\nimport type { ManualInstallAs } from './manual-install-mode.js';\nimport { exists } from '../utils/fs.js';\n\nexport interface InstallAsPackArgs {\n configDir: string;\n packName: string;\n narrowed: CanonicalFiles;\n selected: {\n skillNames: string[];\n ruleSlugs: string[];\n commandNames: string[];\n agentNames: string[];\n };\n sourceForYaml: string;\n version?: string;\n sourceKind: PackMetadata['source_kind'];\n entryFeatures: PackMetadata['features'];\n pick: ExtendPick | undefined;\n yamlTarget?: string;\n pathInRepo?: string;\n manualAs?: ManualInstallAs;\n renameExistingPack?: boolean;\n}\n\nfunction pathScope(pathInRepo?: string): Pick<PackMetadata, 'path' | 'paths'> {\n if (!pathInRepo) {\n return { path: undefined, paths: undefined };\n }\n return { path: pathInRepo, paths: undefined };\n}\n\nfunction applySelection(\n canonical: CanonicalFiles,\n selected: InstallAsPackArgs['selected'],\n): CanonicalFiles {\n const skillSet = new Set(selected.skillNames);\n const ruleSlugSet = new Set(selected.ruleSlugs);\n const cmdSet = new Set(selected.commandNames);\n const agentSet = new Set(selected.agentNames);\n return {\n ...canonical,\n skills: canonical.skills.filter((s) => skillSet.has(s.name)),\n rules: canonical.rules.filter((r) => ruleSlugSet.has(ruleSlug(r))),\n commands: canonical.commands.filter((c) => cmdSet.has(c.name)),\n agents: canonical.agents.filter((a) => agentSet.has(a.name)),\n };\n}\n\n/**\n * Install discovered resources as a local pack (default mode).\n * Detects existing pack by source to merge incrementally.\n * Cleans cache entry on success for remote sources.\n */\nexport async function installAsPack(args: InstallAsPackArgs): Promise<void> {\n const {\n configDir,\n packName,\n narrowed,\n selected,\n sourceForYaml,\n version,\n sourceKind,\n entryFeatures,\n pick,\n yamlTarget,\n pathInRepo,\n manualAs,\n renameExistingPack,\n } = args;\n\n const packsDir = join(configDir, '.agentsbridge', 'packs');\n const selectedCanonical = applySelection(narrowed, selected);\n const now = new Date().toISOString();\n const parsedTarget = yamlTarget !== undefined ? targetSchema.parse(yamlTarget) : undefined;\n\n const existingPack = await findExistingPack(packsDir, sourceForYaml, {\n target: parsedTarget,\n as: manualAs,\n features: entryFeatures,\n });\n let persistedName = packName;\n let persistedFeatures = entryFeatures;\n let persistedPick = pick;\n let persistedPath = pathInRepo;\n let persistedPaths: string[] | undefined;\n if (existingPack) {\n let packDir = existingPack.packDir;\n let packMeta = existingPack.meta;\n if (renameExistingPack && existingPack.name !== packName) {\n const nextDir = join(packsDir, packName);\n if (await exists(nextDir)) {\n throw new Error(\n `Auto-generated pack name \"${packName}\" collides with an existing incompatible pack. Use --name to choose a different pack name.`,\n );\n }\n await rename(existingPack.packDir, nextDir);\n packDir = nextDir;\n packMeta = { ...existingPack.meta, name: packName };\n }\n const mergedMeta = await mergeIntoPack(\n packDir,\n packMeta,\n selectedCanonical,\n entryFeatures as string[],\n pick,\n {\n source: sourceForYaml,\n ...(version !== undefined ? { version } : {}),\n ...(parsedTarget !== undefined ? { target: parsedTarget } : {}),\n ...(pathInRepo ? { path: pathInRepo } : {}),\n ...(manualAs !== undefined ? { as: manualAs } : {}),\n },\n );\n persistedName = mergedMeta.name;\n persistedFeatures = mergedMeta.features;\n persistedPick = mergedMeta.pick;\n persistedPath = mergedMeta.path;\n persistedPaths = mergedMeta.paths;\n logger.success(`Updated pack \"${mergedMeta.name}\" in .agentsbridge/packs/.`);\n } else {\n const collidingMeta = await readPackMetadata(join(packsDir, packName));\n if (collidingMeta) {\n throw new Error(\n `Auto-generated pack name \"${packName}\" collides with an existing incompatible pack. Use --name to choose a different pack name.`,\n );\n }\n await materializePack(packsDir, packName, selectedCanonical, {\n name: packName,\n source: sourceForYaml,\n ...(version !== undefined && { version }),\n source_kind: sourceKind,\n installed_at: now,\n updated_at: now,\n features: entryFeatures,\n ...(pick !== undefined && { pick }),\n ...(parsedTarget !== undefined && { target: parsedTarget }),\n ...pathScope(pathInRepo),\n ...(manualAs !== undefined && { as: manualAs }),\n });\n logger.success(`Installed pack \"${packName}\" to .agentsbridge/packs/.`);\n }\n\n await upsertInstallManifestEntry(\n configDir,\n buildInstallManifestEntry({\n name: persistedName,\n source: sourceForYaml,\n version,\n sourceKind,\n features: persistedFeatures,\n pick: persistedPick,\n target: parsedTarget,\n path: persistedPath,\n paths: persistedPaths,\n as: manualAs,\n }),\n );\n\n if (sourceKind !== 'local') {\n await cleanInstallCache(sourceForYaml);\n }\n}\n","/**\n * Materialize canonical files into a pack directory.\n */\n\nimport { join, basename, dirname } from 'node:path';\nimport { rm, rename, mkdir, copyFile } from 'node:fs/promises';\nimport { stringify as yamlStringify } from 'yaml';\nimport type { CanonicalFiles } from '../core/types.js';\nimport type { PackMetadata } from './pack-schema.js';\nimport { writeFileAtomic, exists, mkdirp } from '../utils/fs.js';\nimport { hashPackContent } from './pack-hash.js';\n\ntype PackMetadataInput = Omit<PackMetadata, 'content_hash'>;\n\n/** Write rules to packDir/rules/ by copying source files. */\nasync function writeRules(canonical: CanonicalFiles, packDir: string): Promise<void> {\n if (canonical.rules.length === 0) return;\n const rulesDir = join(packDir, 'rules');\n await mkdirp(rulesDir);\n for (const rule of canonical.rules) {\n const dest = join(rulesDir, basename(rule.source));\n await copyFile(rule.source, dest);\n }\n}\n\n/** Write commands to packDir/commands/ by copying source files. */\nasync function writeCommands(canonical: CanonicalFiles, packDir: string): Promise<void> {\n if (canonical.commands.length === 0) return;\n const dir = join(packDir, 'commands');\n await mkdirp(dir);\n for (const cmd of canonical.commands) {\n const dest = join(dir, basename(cmd.source));\n await copyFile(cmd.source, dest);\n }\n}\n\n/** Write agents to packDir/agents/ by copying source files. */\nasync function writeAgents(canonical: CanonicalFiles, packDir: string): Promise<void> {\n if (canonical.agents.length === 0) return;\n const dir = join(packDir, 'agents');\n await mkdirp(dir);\n for (const agent of canonical.agents) {\n const dest = join(dir, basename(agent.source));\n await copyFile(agent.source, dest);\n }\n}\n\n/** Write skills to packDir/skills/{name}/ with SKILL.md and supporting files. */\nasync function writeSkills(canonical: CanonicalFiles, packDir: string): Promise<void> {\n if (canonical.skills.length === 0) return;\n const skillsDir = join(packDir, 'skills');\n await mkdirp(skillsDir);\n for (const skill of canonical.skills) {\n const skillDestDir = join(skillsDir, skill.name);\n await mkdirp(skillDestDir);\n // Copy SKILL.md\n await copyFile(skill.source, join(skillDestDir, 'SKILL.md'));\n // Copy supporting files\n for (const sf of skill.supportingFiles) {\n const destPath = join(skillDestDir, sf.relativePath);\n await mkdirp(dirname(destPath));\n await copyFile(sf.absolutePath, destPath);\n }\n }\n}\n\nasync function writeSettings(canonical: CanonicalFiles, packDir: string): Promise<void> {\n if (canonical.mcp !== null) {\n await writeFileAtomic(join(packDir, 'mcp.json'), `${JSON.stringify(canonical.mcp, null, 2)}\\n`);\n }\n if (canonical.permissions !== null) {\n await writeFileAtomic(join(packDir, 'permissions.yaml'), yamlStringify(canonical.permissions));\n }\n if (canonical.hooks !== null) {\n await writeFileAtomic(join(packDir, 'hooks.yaml'), yamlStringify(canonical.hooks));\n }\n if (canonical.ignore.length > 0) {\n await writeFileAtomic(join(packDir, 'ignore'), `${canonical.ignore.join('\\n')}\\n`);\n }\n}\n\n/**\n * Materialize canonical resources into a pack directory under packsDir.\n * Uses atomic .tmp → rename pattern.\n *\n * @param packsDir - Absolute path to .agentsbridge/packs/\n * @param packName - Directory name for this pack\n * @param canonical - Canonical files to write (already filtered + picked)\n * @param metadataInput - Pack metadata without content_hash (computed after write)\n * @returns Full PackMetadata including content_hash\n */\nexport async function materializePack(\n packsDir: string,\n packName: string,\n canonical: CanonicalFiles,\n metadataInput: PackMetadataInput,\n): Promise<PackMetadata> {\n const tmpDir = join(packsDir, `${packName}.tmp`);\n const finalDir = join(packsDir, packName);\n\n // Clean up stale .tmp if exists\n if (await exists(tmpDir)) {\n await rm(tmpDir, { recursive: true, force: true });\n }\n\n await mkdirp(tmpDir);\n\n // Write canonical resources\n await writeRules(canonical, tmpDir);\n await writeCommands(canonical, tmpDir);\n await writeAgents(canonical, tmpDir);\n await writeSkills(canonical, tmpDir);\n await writeSettings(canonical, tmpDir);\n\n // Compute content hash (excludes pack.yaml)\n const contentHash = await hashPackContent(tmpDir);\n\n // Write pack.yaml\n const metadata: PackMetadata = { ...metadataInput, content_hash: contentHash };\n await writeFileAtomic(join(tmpDir, 'pack.yaml'), yamlStringify(metadata));\n\n // Atomic rename to final\n if (await exists(finalDir)) {\n await rm(finalDir, { recursive: true, force: true });\n }\n await mkdir(packsDir, { recursive: true });\n await rename(tmpDir, finalDir);\n\n return metadata;\n}\n","/**\n * Content hashing for pack integrity.\n */\n\nimport { relative } from 'node:path';\nimport { readDirRecursive } from '../utils/fs.js';\nimport { hashFile, hashContent } from '../utils/hash.js';\n\nconst PACK_YAML = 'pack.yaml';\n\n/**\n * Compute sha256 fingerprint of all files in packDir, excluding pack.yaml.\n * Returns a stable hash string prefixed with \"sha256:\".\n */\nexport async function hashPackContent(packDir: string): Promise<string> {\n const files = await readDirRecursive(packDir);\n\n const entries: string[] = [];\n for (const fullPath of files.sort()) {\n const rel = relative(packDir, fullPath).replace(/\\\\/g, '/');\n if (rel === PACK_YAML) continue;\n const h = await hashFile(fullPath);\n if (h !== null) {\n entries.push(`${rel}:${h}`);\n }\n }\n\n const fingerprint = entries.join('\\n');\n const hex = hashContent(fingerprint);\n return `sha256:${hex}`;\n}\n","/**\n * Incrementally merge new canonical resources into an existing pack.\n */\n\nimport { join, basename, dirname } from 'node:path';\nimport { copyFile } from 'node:fs/promises';\nimport { stringify as yamlStringify } from 'yaml';\nimport type { CanonicalFiles } from '../core/types.js';\nimport type { PackMetadata } from './pack-schema.js';\nimport type { ExtendPick } from '../config/schema.js';\nimport { writeFileAtomic, mkdirp } from '../utils/fs.js';\nimport { hashPackContent } from './pack-hash.js';\n\nexport interface PackMetadataRefresh {\n source: string;\n version?: string;\n target?: PackMetadata['target'];\n path?: string;\n as?: PackMetadata['as'];\n}\n\n/** Union two string arrays, deduplicating. */\nfunction union(a: string[], b: string[]): string[] {\n return [...new Set([...a, ...b])];\n}\n\nfunction mergePathScope(\n existing: Pick<PackMetadata, 'path' | 'paths'>,\n incomingPath?: string,\n): Pick<PackMetadata, 'path' | 'paths'> {\n const existingIsRoot = existing.path === undefined && existing.paths === undefined;\n if (existingIsRoot || incomingPath === undefined) {\n return { path: undefined, paths: undefined };\n }\n\n const merged = union(existing.paths ?? (existing.path ? [existing.path] : []), [incomingPath]);\n if (merged.length === 1) {\n return { path: merged[0], paths: undefined };\n }\n return { path: undefined, paths: merged };\n}\n\n/** Merge picks: if newPick is undefined for a feature, remove the restriction (all). */\nfunction mergePick(\n existing: ExtendPick | undefined,\n newFeatures: string[],\n newPick: ExtendPick | undefined,\n): ExtendPick | undefined {\n const result: ExtendPick = { ...existing };\n\n for (const feature of newFeatures as (keyof ExtendPick)[]) {\n if (newPick && newPick[feature] !== undefined) {\n // Union specific lists\n result[feature] = union(result[feature] ?? [], newPick[feature]!);\n } else {\n // No pick = install all → remove restriction\n delete result[feature];\n }\n }\n\n // Return undefined if no restrictions remain\n const hasAny =\n (result.skills?.length ?? 0) > 0 ||\n (result.rules?.length ?? 0) > 0 ||\n (result.commands?.length ?? 0) > 0 ||\n (result.agents?.length ?? 0) > 0;\n return hasAny ? result : undefined;\n}\n\n/** Copy new rules into packDir/rules/. */\nasync function mergeRules(canonical: CanonicalFiles, packDir: string): Promise<void> {\n if (canonical.rules.length === 0) return;\n const dir = join(packDir, 'rules');\n await mkdirp(dir);\n for (const rule of canonical.rules) {\n await copyFile(rule.source, join(dir, basename(rule.source)));\n }\n}\n\n/** Copy new commands into packDir/commands/. */\nasync function mergeCommands(canonical: CanonicalFiles, packDir: string): Promise<void> {\n if (canonical.commands.length === 0) return;\n const dir = join(packDir, 'commands');\n await mkdirp(dir);\n for (const cmd of canonical.commands) {\n await copyFile(cmd.source, join(dir, basename(cmd.source)));\n }\n}\n\n/** Copy new agents into packDir/agents/. */\nasync function mergeAgents(canonical: CanonicalFiles, packDir: string): Promise<void> {\n if (canonical.agents.length === 0) return;\n const dir = join(packDir, 'agents');\n await mkdirp(dir);\n for (const agent of canonical.agents) {\n await copyFile(agent.source, join(dir, basename(agent.source)));\n }\n}\n\n/** Copy new skills into packDir/skills/. */\nasync function mergeSkills(canonical: CanonicalFiles, packDir: string): Promise<void> {\n if (canonical.skills.length === 0) return;\n const skillsDir = join(packDir, 'skills');\n await mkdirp(skillsDir);\n for (const skill of canonical.skills) {\n const destDir = join(skillsDir, skill.name);\n await mkdirp(destDir);\n await copyFile(skill.source, join(destDir, 'SKILL.md'));\n for (const sf of skill.supportingFiles) {\n const destPath = join(destDir, sf.relativePath);\n await mkdirp(dirname(destPath));\n await copyFile(sf.absolutePath, destPath);\n }\n }\n}\n\nasync function mergeSettings(canonical: CanonicalFiles, packDir: string): Promise<void> {\n if (canonical.mcp !== null) {\n await writeFileAtomic(join(packDir, 'mcp.json'), `${JSON.stringify(canonical.mcp, null, 2)}\\n`);\n }\n if (canonical.permissions !== null) {\n await writeFileAtomic(join(packDir, 'permissions.yaml'), yamlStringify(canonical.permissions));\n }\n if (canonical.hooks !== null) {\n await writeFileAtomic(join(packDir, 'hooks.yaml'), yamlStringify(canonical.hooks));\n }\n if (canonical.ignore.length > 0) {\n await writeFileAtomic(join(packDir, 'ignore'), `${canonical.ignore.join('\\n')}\\n`);\n }\n}\n\n/**\n * Merge new canonical resources into an existing pack directory.\n * Adds new files alongside existing ones. Updates metadata.\n *\n * @param packDir - Absolute path to the existing pack directory\n * @param existingMeta - Current pack.yaml metadata\n * @param newCanonical - New canonical resources to add\n * @param newFeatures - Feature names being added\n * @param newPick - Optional pick for the new features (undefined = all)\n * @returns Updated PackMetadata\n */\nexport async function mergeIntoPack(\n packDir: string,\n existingMeta: PackMetadata,\n newCanonical: CanonicalFiles,\n newFeatures: string[],\n newPick: ExtendPick | undefined,\n refresh?: PackMetadataRefresh,\n): Promise<PackMetadata> {\n // Write new resources\n await mergeRules(newCanonical, packDir);\n await mergeCommands(newCanonical, packDir);\n await mergeAgents(newCanonical, packDir);\n await mergeSkills(newCanonical, packDir);\n await mergeSettings(newCanonical, packDir);\n\n // Merge metadata\n const mergedFeatures = union(existingMeta.features, newFeatures) as PackMetadata['features'];\n const mergedPick = mergePick(existingMeta.pick, newFeatures, newPick);\n const mergedPathScope = mergePathScope(existingMeta, refresh?.path);\n const contentHash = await hashPackContent(packDir);\n const updatedAt = new Date().toISOString();\n\n const updatedMeta: PackMetadata = {\n ...existingMeta,\n source: refresh?.source ?? existingMeta.source,\n ...(refresh?.version !== undefined\n ? { version: refresh.version }\n : existingMeta.version !== undefined\n ? { version: existingMeta.version }\n : {}),\n features: mergedFeatures,\n pick: mergedPick,\n ...(refresh?.target !== undefined\n ? { target: refresh.target }\n : existingMeta.target !== undefined\n ? { target: existingMeta.target }\n : {}),\n ...mergedPathScope,\n ...(refresh?.as !== undefined\n ? { as: refresh.as }\n : existingMeta.as !== undefined\n ? { as: existingMeta.as }\n : {}),\n updated_at: updatedAt,\n content_hash: contentHash,\n };\n\n await writeFileAtomic(join(packDir, 'pack.yaml'), yamlStringify(updatedMeta));\n return updatedMeta;\n}\n","/**\n * Persist install provenance so packs can be re-synced after local deletion.\n */\n\nimport { join } from 'node:path';\nimport { parse as parseYaml, stringify as yamlStringify } from 'yaml';\nimport { z } from 'zod';\nimport { extendPickSchema, featureSchema, targetSchema } from '../config/schema.js';\nimport { readFileSafe, writeFileAtomic } from '../utils/fs.js';\nimport { manualInstallAsSchema, type ManualInstallAs } from './manual-install-mode.js';\n\nconst installManifestEntrySchema = z.object({\n name: z.string().min(1),\n source: z.string().min(1),\n version: z.string().optional(),\n source_kind: z.enum(['github', 'gitlab', 'git', 'local']),\n features: z.array(featureSchema).min(1),\n pick: extendPickSchema.optional(),\n target: targetSchema.optional(),\n path: z.string().optional(),\n paths: z.array(z.string().min(1)).min(1).optional(),\n as: manualInstallAsSchema.optional(),\n});\n\nconst installManifestSchema = z.object({\n version: z.literal(1),\n installs: z.array(installManifestEntrySchema).default([]),\n});\n\nexport type InstallManifestEntry = z.infer<typeof installManifestEntrySchema>;\n\nfunction sameFeatures(a: string[], b: string[]): boolean {\n return (\n a.length === b.length &&\n [...a].sort().every((feature, index) => feature === [...b].sort()[index])\n );\n}\n\nfunction sameInstallIdentity(a: InstallManifestEntry, b: InstallManifestEntry): boolean {\n return (\n a.source === b.source &&\n a.target === b.target &&\n a.as === b.as &&\n sameFeatures(a.features, b.features)\n );\n}\n\nfunction manifestPath(configDir: string): string {\n return join(configDir, '.agentsbridge', 'installs.yaml');\n}\n\nexport async function readInstallManifest(configDir: string): Promise<InstallManifestEntry[]> {\n const content = await readFileSafe(manifestPath(configDir));\n if (content === null) return [];\n try {\n return installManifestSchema.parse(parseYaml(content) as unknown).installs;\n } catch {\n return [];\n }\n}\n\nexport async function upsertInstallManifestEntry(\n configDir: string,\n entry: InstallManifestEntry,\n): Promise<void> {\n const installs = await readInstallManifest(configDir);\n const next = installs.filter(\n (install) => install.name !== entry.name && !sameInstallIdentity(install, entry),\n );\n next.push(entry);\n await writeFileAtomic(\n manifestPath(configDir),\n yamlStringify({ version: 1, installs: next.sort((a, b) => a.name.localeCompare(b.name)) }),\n );\n}\n\nexport function buildInstallManifestEntry(args: {\n name: string;\n source: string;\n version?: string;\n sourceKind: InstallManifestEntry['source_kind'];\n features: InstallManifestEntry['features'];\n pick?: InstallManifestEntry['pick'];\n target?: InstallManifestEntry['target'];\n path?: string;\n paths?: string[];\n as?: ManualInstallAs;\n}): InstallManifestEntry {\n return installManifestEntrySchema.parse({\n name: args.name,\n source: args.source,\n version: args.version,\n source_kind: args.sourceKind,\n features: args.features,\n pick: args.pick,\n target: args.target,\n path: args.path,\n paths: args.paths,\n as: args.as,\n });\n}\n","/**\n * Reinstall missing local packs from the persisted install manifest.\n */\n\nimport { join } from 'node:path';\nimport { exists } from '../utils/fs.js';\nimport { logger } from '../utils/logger.js';\nimport { readInstallManifest, type InstallManifestEntry } from './install-manifest.js';\n\nexport async function syncInstalledPacks(args: {\n configDir: string;\n reinstall: (entry: InstallManifestEntry) => Promise<void>;\n}): Promise<void> {\n const installs = await readInstallManifest(args.configDir);\n if (installs.length === 0) {\n logger.info('No recorded installs found in .agentsbridge/installs.yaml.');\n return;\n }\n\n const missing = [];\n for (const entry of installs) {\n const packDir = join(args.configDir, '.agentsbridge', 'packs', entry.name);\n if (!(await exists(packDir))) {\n missing.push(entry);\n }\n }\n\n if (missing.length === 0) {\n logger.info('All recorded packs are already installed.');\n return;\n }\n\n for (const entry of missing) {\n await args.reinstall(entry);\n }\n logger.success(`Reinstalled ${missing.length} pack(s) from .agentsbridge/installs.yaml.`);\n}\n\nexport async function maybeRunInstallSync(args: {\n sync: boolean;\n projectRoot: string;\n loadConfigDir: (projectRoot: string) => Promise<string>;\n reinstall: (entry: InstallManifestEntry) => Promise<void>;\n}): Promise<boolean> {\n if (!args.sync) return false;\n const configDir = await args.loadConfigDir(args.projectRoot);\n await syncInstalledPacks({ configDir, reinstall: args.reinstall });\n return true;\n}\n","/**\n * Auto-generate extends entry names for install.\n */\n\nimport { URL } from 'node:url';\nimport type { ParsedInstallSource } from './url-parser.js';\n\nfunction sanitize(base: string): string {\n return base\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\nfunction gitUrlLastSegments(url: string): string {\n try {\n const u = new URL(url.replace(/^git\\+/, 'https://').replace(/^ssh:\\/\\/git@/, 'https://'));\n const segs = u.pathname.split('/').filter(Boolean);\n if (segs.length === 0) return 'repo';\n const last = segs[segs.length - 1]!.replace(/\\.git$/i, '');\n if (segs.length >= 2) {\n const prev = segs[segs.length - 2]!.replace(/\\.git$/i, '');\n return `${prev}-${last}`;\n }\n return last;\n } catch {\n return 'repo';\n }\n}\n\nexport function suggestExtendName(\n parsed: ParsedInstallSource,\n opts: { featureHint?: string },\n usedNames: Set<string>,\n): string {\n let base: string;\n if (parsed.kind === 'local') {\n const root = parsed.localRoot ?? 'local';\n const parts = root.split(/[/\\\\]/).filter(Boolean);\n base = parts[parts.length - 1] ?? 'local';\n } else if (parsed.kind === 'github' && parsed.org && parsed.repo) {\n base = `${parsed.org}-${parsed.repo}`;\n } else if (parsed.kind === 'gitlab' && parsed.org && parsed.repo) {\n base = `${parsed.org.replace(/\\//g, '-')}-${parsed.repo}`;\n } else if (parsed.gitRemoteUrl) {\n base = gitUrlLastSegments(parsed.gitRemoteUrl);\n } else {\n base = 'extend';\n }\n\n if (opts.featureHint) {\n base = `${base}-${opts.featureHint}`;\n } else {\n base = `${base}-pack`;\n }\n\n const baseName = sanitize(base) || 'extend';\n if (!usedNames.has(baseName)) return baseName;\n let n = 2;\n while (usedNames.has(`${baseName}-${n}`)) n++;\n return `${baseName}-${n}`;\n}\n","/**\n * Derive the persisted name for an install entry.\n */\n\nimport type { ValidatedConfig } from '../config/schema.js';\nimport { suggestExtendName } from './name-generator.js';\n\nexport function selectInstallEntryName(args: {\n config: ValidatedConfig;\n parsed: Parameters<typeof suggestExtendName>[0];\n entryFeatures: ValidatedConfig['features'];\n nameOverride: string;\n}): string {\n const { config, parsed, entryFeatures, nameOverride } = args;\n const used = new Set(config.extends.map((entry) => entry.name));\n return (\n nameOverride ||\n suggestExtendName(\n parsed,\n { featureHint: entryFeatures.length === 1 ? entryFeatures[0] : undefined },\n used,\n )\n );\n}\n","/**\n * Parse and validate install command flags.\n */\n\nimport { manualInstallAsSchema } from './manual-install-mode.js';\n\nexport function readInstallFlags(flags: Record<string, string | boolean>): {\n sync: boolean;\n dryRun: boolean;\n force: boolean;\n useExtends: boolean;\n explicitPath?: string;\n explicitTarget?: string;\n explicitAs?: ReturnType<typeof manualInstallAsSchema.parse>;\n nameOverride: string;\n} {\n return {\n sync: flags.sync === true,\n dryRun: flags['dry-run'] === true,\n force: flags.force === true,\n useExtends: flags.extends === true,\n explicitPath: typeof flags.path === 'string' ? flags.path : undefined,\n explicitTarget: typeof flags.target === 'string' ? flags.target.trim() : undefined,\n explicitAs:\n typeof flags.as === 'string' ? manualInstallAsSchema.parse(flags.as.trim()) : undefined,\n nameOverride: typeof flags.name === 'string' ? flags.name.trim() : '',\n };\n}\n","/**\n * Discover canonical resources at a content root (install / validate).\n */\n\nimport type { ExtendPick } from '../config/schema.js';\nimport type { CanonicalFiles } from '../core/types.js';\nimport { loadCanonicalSliceAtPath, normalizeSlicePath } from '../canonical/load-canonical-slice.js';\n\n/** Feature keys present in a canonical snapshot (install / extends). */\nexport function featuresFromCanonical(c: CanonicalFiles): string[] {\n const f: string[] = [];\n if (c.skills.length) f.push('skills');\n if (c.rules.length) f.push('rules');\n if (c.commands.length) f.push('commands');\n if (c.agents.length) f.push('agents');\n if (c.mcp !== null) f.push('mcp');\n if (c.permissions !== null) f.push('permissions');\n if (c.hooks !== null) f.push('hooks');\n if (c.ignore.length) f.push('ignore');\n return f;\n}\n\n/**\n * Resolve file vs directory, then load canonical slice (rules/commands/agents/skills / .agentsbridge).\n */\nexport async function discoverFromContentRoot(contentRoot: string): Promise<{\n canonical: CanonicalFiles;\n features: string[];\n implicitPick?: ExtendPick;\n}> {\n const { sliceRoot, implicitPick } = await normalizeSlicePath(contentRoot);\n const canonical = await loadCanonicalSliceAtPath(sliceRoot);\n return {\n canonical,\n features: featuresFromCanonical(canonical),\n implicitPick,\n };\n}\n","/**\n * Narrow discovered canonical slice for install, then derive extends.pick and features.\n */\n\nimport type { ExtendPick } from '../config/schema.js';\nimport type { CanonicalFiles } from '../core/types.js';\nimport { ruleSlug } from './validate-resources.js';\n\n/**\n * Narrow install discovery to implicit pick names.\n * Omitted pick keys clear that category (path-scoped install must not keep other imported features).\n * Clears mcp/permissions/hooks/ignore when narrowing — install pick does not carry those.\n */\nexport function narrowDiscoveredForImplicitPick(\n canonical: CanonicalFiles,\n implicit?: ExtendPick,\n): CanonicalFiles {\n if (!implicit) return canonical;\n\n let next: CanonicalFiles = {\n ...canonical,\n mcp: null,\n permissions: null,\n hooks: null,\n ignore: [],\n };\n\n if (implicit.skills !== undefined) {\n const w = new Set(implicit.skills);\n next = {\n ...next,\n skills: implicit.skills.length === 0 ? [] : next.skills.filter((s) => w.has(s.name)),\n };\n } else {\n next = { ...next, skills: [] };\n }\n\n if (implicit.rules !== undefined) {\n const w = new Set(implicit.rules);\n next = {\n ...next,\n rules: implicit.rules.length === 0 ? [] : next.rules.filter((r) => w.has(ruleSlug(r))),\n };\n } else {\n next = { ...next, rules: [] };\n }\n\n if (implicit.commands !== undefined) {\n const w = new Set(implicit.commands);\n next = {\n ...next,\n commands: implicit.commands.length === 0 ? [] : next.commands.filter((c) => w.has(c.name)),\n };\n } else {\n next = { ...next, commands: [] };\n }\n\n if (implicit.agents !== undefined) {\n const w = new Set(implicit.agents);\n next = {\n ...next,\n agents: implicit.agents.length === 0 ? [] : next.agents.filter((a) => w.has(a.name)),\n };\n } else {\n next = { ...next, agents: [] };\n }\n\n return next;\n}\n\nfunction featuresFromImplicitPick(implicit: ExtendPick | undefined): string[] | undefined {\n if (!implicit) return undefined;\n const features: string[] = [];\n if (implicit.skills !== undefined) features.push('skills');\n if (implicit.rules !== undefined) features.push('rules');\n if (implicit.commands !== undefined) features.push('commands');\n if (implicit.agents !== undefined) features.push('agents');\n return features.length > 0 ? features : undefined;\n}\n\nexport function narrowDiscoveredForInstallScope(\n canonical: CanonicalFiles,\n options: { implicitPick?: ExtendPick; scopedFeatures?: string[] },\n): CanonicalFiles {\n const { implicitPick } = options;\n const scopedFeatures = options.scopedFeatures ?? featuresFromImplicitPick(implicitPick);\n if (!implicitPick && !scopedFeatures) return canonical;\n\n const allowed = new Set(scopedFeatures ?? []);\n let next: CanonicalFiles = {\n ...canonical,\n mcp: !scopedFeatures || allowed.has('mcp') ? canonical.mcp : null,\n permissions: !scopedFeatures || allowed.has('permissions') ? canonical.permissions : null,\n hooks: !scopedFeatures || allowed.has('hooks') ? canonical.hooks : null,\n ignore: !scopedFeatures || allowed.has('ignore') ? canonical.ignore : [],\n };\n\n if (implicitPick?.skills !== undefined) {\n const w = new Set(implicitPick.skills);\n next = {\n ...next,\n skills: implicitPick.skills.length === 0 ? [] : next.skills.filter((s) => w.has(s.name)),\n };\n } else if (scopedFeatures && !allowed.has('skills')) {\n next = { ...next, skills: [] };\n }\n\n if (implicitPick?.rules !== undefined) {\n const w = new Set(implicitPick.rules);\n next = {\n ...next,\n rules: implicitPick.rules.length === 0 ? [] : next.rules.filter((r) => w.has(ruleSlug(r))),\n };\n } else if (scopedFeatures && !allowed.has('rules')) {\n next = { ...next, rules: [] };\n }\n\n if (implicitPick?.commands !== undefined) {\n const w = new Set(implicitPick.commands);\n next = {\n ...next,\n commands:\n implicitPick.commands.length === 0 ? [] : next.commands.filter((c) => w.has(c.name)),\n };\n } else if (scopedFeatures && !allowed.has('commands')) {\n next = { ...next, commands: [] };\n }\n\n if (implicitPick?.agents !== undefined) {\n const w = new Set(implicitPick.agents);\n next = {\n ...next,\n agents: implicitPick.agents.length === 0 ? [] : next.agents.filter((a) => w.has(a.name)),\n };\n } else if (scopedFeatures && !allowed.has('agents')) {\n next = { ...next, agents: [] };\n }\n\n return next;\n}\n","/**\n * Stage manually typed install folders as canonical content under a temp .agentsbridge tree.\n */\n\nimport { basename, dirname, join, relative } from 'node:path';\nimport { cp, mkdtemp, stat, rm } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { mkdirp, readDirRecursive } from '../utils/fs.js';\nimport { isSkillPackLayout } from '../canonical/skill-pack-load.js';\nimport type { ManualInstallAs } from './manual-install-mode.js';\n\nexport interface ManualInstallScope {\n discoveryRoot: string;\n cleanup: () => Promise<void>;\n}\n\ninterface ManualInstallScopeOptions {\n preferredSkillNames?: string[];\n}\n\nasync function createStageRoot(): Promise<ManualInstallScope> {\n const stageBase = await mkdtemp(join(tmpdir(), 'ab-install-manual-'));\n const discoveryRoot = join(stageBase, 'repo');\n await mkdirp(join(discoveryRoot, '.agentsbridge'));\n return {\n discoveryRoot,\n cleanup: async (): Promise<void> => {\n await rm(stageBase, { recursive: true, force: true });\n },\n };\n}\n\nasync function stageMarkdownCollection(sourceRoot: string, destinationDir: string): Promise<void> {\n const info = await stat(sourceRoot);\n if (info.isFile()) {\n if (!sourceRoot.toLowerCase().endsWith('.md')) {\n throw new Error(`Manual install only supports .md files for this collection: ${sourceRoot}`);\n }\n await mkdirp(destinationDir);\n await cp(sourceRoot, join(destinationDir, basename(sourceRoot)));\n return;\n }\n\n const files = (await readDirRecursive(sourceRoot)).filter((file) =>\n file.toLowerCase().endsWith('.md'),\n );\n if (files.length === 0) {\n throw new Error(`No .md files found under ${sourceRoot} for manual install.`);\n }\n\n const usedNames = new Map<string, string>();\n await mkdirp(destinationDir);\n for (const file of files) {\n const name = basename(file);\n const previous = usedNames.get(name);\n if (previous) {\n throw new Error(\n `Manual install found duplicate file name \"${name}\" under ${sourceRoot} (${previous} and ${file}).`,\n );\n }\n usedNames.set(name, file);\n await cp(file, join(destinationDir, name));\n }\n}\n\nasync function stagePreferredSkills(\n sourceRoot: string,\n destinationDir: string,\n preferredSkillNames: string[],\n): Promise<boolean> {\n if (preferredSkillNames.length === 0) {\n return false;\n }\n\n const wanted = new Set(preferredSkillNames);\n const matches = new Map<string, string>();\n for (const file of await readDirRecursive(sourceRoot)) {\n if (!file.endsWith('/SKILL.md') && !file.endsWith('\\\\SKILL.md')) continue;\n const skillDir = dirname(file);\n const skillName = basename(skillDir);\n if (!wanted.has(skillName)) continue;\n const previous = matches.get(skillName);\n if (previous && previous !== skillDir) {\n throw new Error(\n `Manual skill replay found duplicate skill \"${skillName}\" under ${sourceRoot} (${previous} and ${skillDir}).`,\n );\n }\n matches.set(skillName, skillDir);\n }\n\n if (matches.size !== preferredSkillNames.length) return false;\n\n await mkdirp(destinationDir);\n for (const skillName of preferredSkillNames) {\n await cp(matches.get(skillName)!, join(destinationDir, skillName), { recursive: true });\n }\n return true;\n}\n\nasync function stageSkills(\n sourceRoot: string,\n destinationDir: string,\n options: ManualInstallScopeOptions = {},\n): Promise<void> {\n const info = await stat(sourceRoot);\n if (info.isFile()) {\n if (basename(sourceRoot) !== 'SKILL.md') {\n throw new Error(`Manual skill install expects SKILL.md or a skill directory: ${sourceRoot}`);\n }\n const skillName = basename(dirname(sourceRoot));\n const skillDir = join(destinationDir, skillName);\n await mkdirp(skillDir);\n await cp(dirname(sourceRoot), skillDir, { recursive: true });\n return;\n }\n\n if (await isSkillPackLayout(sourceRoot)) {\n if ((await stat(join(sourceRoot, 'SKILL.md')).catch(() => null))?.isFile()) {\n if (\n await stagePreferredSkills(sourceRoot, destinationDir, options.preferredSkillNames ?? [])\n ) {\n return;\n }\n const skillDir = join(destinationDir, basename(sourceRoot));\n await mkdirp(destinationDir);\n await cp(sourceRoot, skillDir, { recursive: true });\n return;\n }\n if (await stagePreferredSkills(sourceRoot, destinationDir, options.preferredSkillNames ?? [])) {\n return;\n }\n await mkdirp(destinationDir);\n const entries = await readDirRecursive(sourceRoot);\n const roots = new Set<string>();\n for (const file of entries.filter(\n (entry) => entry.endsWith('/SKILL.md') || entry.endsWith('\\\\SKILL.md'),\n )) {\n roots.add(relative(sourceRoot, dirname(file)).split(/[\\\\/]/)[0]!);\n }\n for (const root of roots) {\n await cp(join(sourceRoot, root), join(destinationDir, root), { recursive: true });\n }\n return;\n }\n\n throw new Error(\n `Manual skill install expects a skill directory or skills collection at ${sourceRoot}.`,\n );\n}\n\nexport async function stageManualInstallScope(\n sourceRoot: string,\n as: ManualInstallAs,\n options: ManualInstallScopeOptions = {},\n): Promise<ManualInstallScope> {\n const staged = await createStageRoot();\n try {\n const destDir = join(staged.discoveryRoot, '.agentsbridge', as);\n if (as === 'skills') {\n await stageSkills(sourceRoot, destDir, options);\n } else {\n await stageMarkdownCollection(sourceRoot, destDir);\n }\n return staged;\n } catch (error) {\n await staged.cleanup();\n throw error;\n }\n}\n","/**\n * Discovery flow for explicit `install --as ...` manual collection installs.\n */\n\nimport type { ExtendPick } from '../config/schema.js';\nimport { discoverFromContentRoot, featuresFromCanonical } from './discover-resources.js';\nimport { narrowDiscoveredForInstallScope } from './resource-selection.js';\nimport { stageManualInstallScope } from './manual-install-scope.js';\nimport type { ManualInstallAs } from './manual-install-mode.js';\n\nexport async function resolveManualDiscoveredForInstall(\n sourceRoot: string,\n explicitAs: ManualInstallAs,\n explicitTarget?: string,\n replayPick?: ExtendPick,\n): Promise<{\n prep: {\n yamlTarget?: string;\n scopedFeatures?: string[];\n cleanup: () => Promise<void>;\n };\n narrowed: Awaited<ReturnType<typeof discoverFromContentRoot>>['canonical'];\n discoveredFeatures: string[];\n}> {\n const staged = await stageManualInstallScope(sourceRoot, explicitAs, {\n preferredSkillNames: explicitAs === 'skills' ? replayPick?.skills : undefined,\n });\n const { canonical } = await discoverFromContentRoot(staged.discoveryRoot);\n const narrowed = narrowDiscoveredForInstallScope(canonical, {\n scopedFeatures: [explicitAs],\n });\n return {\n prep: {\n yamlTarget: explicitTarget,\n scopedFeatures: [explicitAs],\n cleanup: staged.cleanup,\n },\n narrowed,\n discoveredFeatures: featuresFromCanonical(narrowed),\n };\n}\n","/**\n * Stage native repos for install discovery without mutating the source checkout.\n * Scoped native paths are resolved from importer results; canonical paths still use slice loading.\n */\n\nimport { join } from 'node:path';\nimport type { ExtendPick } from '../config/schema.js';\nimport { targetSchema } from '../config/schema.js';\nimport { detectNativeFormat } from '../config/native-format-detector.js';\nimport { exists } from '../utils/fs.js';\nimport {\n pathSupportsNativePick,\n validateTargetMatchesPath,\n extendPickHasArrays,\n targetHintFromNativePath,\n} from './native-path-pick.js';\nimport { inferImplicitPickFromNativePath, isImplicitPickEmpty } from './native-path-pick-infer.js';\nimport { stageImportedNativeRepo, stageNativeInstallScope } from './native-install-scope.js';\n\nexport interface PrepareInstallDiscoveryResult {\n discoveryRoot: string;\n implicitPick?: ExtendPick;\n scopedFeatures?: string[];\n /** Written to extends.target when native import or path-scoped install applies */\n yamlTarget?: string;\n importHappened: boolean;\n cleanup?: () => Promise<void>;\n}\n\n/**\n * Resolve where to run slice/canonical discovery and optional implicit pick for scoped paths.\n */\nexport async function prepareInstallDiscovery(\n repoRoot: string,\n contentRoot: string,\n pathInRepo: string,\n options: { explicitTarget?: string },\n): Promise<PrepareInstallDiscoveryResult> {\n const explicitTarget = options.explicitTarget?.trim();\n if (explicitTarget) {\n targetSchema.parse(explicitTarget);\n }\n\n const posixPath = pathInRepo.replace(/\\\\/g, '/').replace(/^\\/+|\\/+$/g, '');\n validateTargetMatchesPath(explicitTarget, posixPath);\n\n const agentsbridgeAtRoot = join(repoRoot, '.agentsbridge');\n const hasAbRoot = await exists(agentsbridgeAtRoot);\n const pathHint = posixPath ? targetHintFromNativePath(posixPath) : undefined;\n const detectedTarget =\n !hasAbRoot && !explicitTarget ? ((await detectNativeFormat(repoRoot)) ?? undefined) : undefined;\n\n if (!explicitTarget && pathHint && detectedTarget && pathHint !== detectedTarget) {\n throw new Error(\n `Install path suggests native layout \"${pathHint}\" but auto-detect imported \"${detectedTarget}\". ` +\n `Use --target ${pathHint} for this path, or install from the repo root without a conflicting subtree path.`,\n );\n }\n\n const effectiveTarget = explicitTarget ?? pathHint ?? detectedTarget;\n const shouldStageNativeScope =\n Boolean(posixPath) && Boolean(effectiveTarget) && !posixPath.startsWith('.agentsbridge');\n\n if (!hasAbRoot && effectiveTarget) {\n if (shouldStageNativeScope) {\n const staged = await stageNativeInstallScope(repoRoot, posixPath, effectiveTarget);\n return {\n discoveryRoot: staged.stageRoot,\n implicitPick: staged.pick,\n scopedFeatures: staged.features,\n yamlTarget: effectiveTarget,\n importHappened: true,\n cleanup: staged.cleanup,\n };\n }\n\n const staged = await stageImportedNativeRepo(repoRoot, effectiveTarget);\n return {\n discoveryRoot: posixPath ? join(staged.stageRoot, posixPath) : staged.stageRoot,\n yamlTarget: effectiveTarget,\n importHappened: true,\n cleanup: staged.cleanup,\n };\n }\n\n let discoveryRoot: string;\n if (!hasAbRoot) {\n discoveryRoot = contentRoot;\n } else if (!posixPath) {\n discoveryRoot = repoRoot;\n } else if (effectiveTarget && pathSupportsNativePick(posixPath, effectiveTarget)) {\n discoveryRoot = repoRoot;\n } else {\n discoveryRoot = contentRoot;\n }\n\n let implicitPick: ExtendPick | undefined;\n let scopedFeatures: string[] | undefined;\n let cleanup: (() => Promise<void>) | undefined;\n if (shouldStageNativeScope && effectiveTarget) {\n const staged = await stageNativeInstallScope(repoRoot, posixPath, effectiveTarget);\n discoveryRoot = staged.stageRoot;\n implicitPick = staged.pick;\n scopedFeatures = staged.features;\n cleanup = staged.cleanup;\n } else if (\n discoveryRoot === repoRoot &&\n posixPath &&\n effectiveTarget &&\n pathSupportsNativePick(posixPath, effectiveTarget)\n ) {\n implicitPick = await inferImplicitPickFromNativePath(repoRoot, posixPath, effectiveTarget);\n if (isImplicitPickEmpty(implicitPick)) {\n throw new Error(\n `No installable native resources found under \"${posixPath}\" for target \"${effectiveTarget}\".`,\n );\n }\n }\n\n let yamlTarget: string | undefined;\n if (explicitTarget) {\n yamlTarget = explicitTarget;\n } else if (\n effectiveTarget &&\n ((implicitPick && extendPickHasArrays(implicitPick)) || (scopedFeatures?.length ?? 0) > 0)\n ) {\n yamlTarget = effectiveTarget;\n }\n\n return {\n discoveryRoot,\n implicitPick,\n scopedFeatures,\n yamlTarget,\n importHappened: cleanup !== undefined,\n cleanup,\n };\n}\n","/**\n * Map install pathInRepo to target hint and whether repo-root discovery + pick inference applies.\n */\n\nimport type { ExtendPick } from '../config/schema.js';\n\n/** Longest-match first */\nconst PATH_PREFIX_TO_TARGET: { prefix: string; target: string }[] = [\n { prefix: '.gemini/commands', target: 'gemini-cli' },\n { prefix: '.github/instructions', target: 'copilot' },\n { prefix: '.github/copilot-instructions.md', target: 'copilot' },\n { prefix: '.github/copilot', target: 'copilot' },\n { prefix: '.github/prompts', target: 'copilot' },\n { prefix: '.github/skills', target: 'copilot' },\n { prefix: '.github/agents', target: 'copilot' },\n { prefix: '.github/hooks', target: 'copilot' },\n { prefix: '.claude/commands', target: 'claude-code' },\n { prefix: '.claude/rules', target: 'claude-code' },\n { prefix: '.claude/skills', target: 'claude-code' },\n { prefix: '.claude/agents', target: 'claude-code' },\n { prefix: '.cursor/commands', target: 'cursor' },\n { prefix: '.cursor/rules', target: 'cursor' },\n { prefix: '.cursor/agents', target: 'cursor' },\n { prefix: '.cursor/skills', target: 'cursor' },\n { prefix: '.continue/prompts', target: 'continue' },\n { prefix: '.continue/rules', target: 'continue' },\n { prefix: '.continue/skills', target: 'continue' },\n { prefix: '.junie/commands', target: 'junie' },\n { prefix: '.junie/rules', target: 'junie' },\n { prefix: '.junie/agents', target: 'junie' },\n { prefix: '.junie/skills', target: 'junie' },\n { prefix: '.cline/skills', target: 'cline' },\n { prefix: '.clinerules/workflows', target: 'cline' },\n { prefix: '.windsurf/rules', target: 'windsurf' },\n { prefix: '.codex', target: 'codex-cli' },\n];\n\nfunction norm(p: string): string {\n return p.replace(/\\\\/g, '/').replace(/^\\/+|\\/+$/g, '');\n}\n\n/** Best-effort target id from a native subtree path (for install path scoping). */\nexport function targetHintFromNativePath(pathInRepoPosix: string): string | undefined {\n const p = norm(pathInRepoPosix);\n const sorted = [...PATH_PREFIX_TO_TARGET].sort((a, b) => b.prefix.length - a.prefix.length);\n for (const { prefix, target } of sorted) {\n if (p === prefix || p.startsWith(`${prefix}/`)) return target;\n }\n return undefined;\n}\n\n/** True when path is under a native layout we can narrow with inferImplicitPickFromNativePath. */\nexport function pathSupportsNativePick(pathInRepoPosix: string, target: string): boolean {\n const hint = targetHintFromNativePath(pathInRepoPosix);\n return hint === target;\n}\n\nexport function resolveEffectiveTargetForInstall(args: {\n explicitTarget?: string;\n importHappened: boolean;\n usedTargetFromImport?: string;\n pathInRepoPosix: string;\n}): string | undefined {\n if (args.explicitTarget) return args.explicitTarget;\n const hint = args.pathInRepoPosix ? targetHintFromNativePath(args.pathInRepoPosix) : undefined;\n if (hint) return hint;\n if (args.importHappened && args.usedTargetFromImport) return args.usedTargetFromImport;\n return undefined;\n}\n\nexport function validateTargetMatchesPath(\n explicitTarget: string | undefined,\n pathInRepoPosix: string,\n): void {\n if (!explicitTarget || !pathInRepoPosix) return;\n const hint = targetHintFromNativePath(pathInRepoPosix);\n if (hint && hint !== explicitTarget) {\n throw new Error(\n `--target \"${explicitTarget}\" does not match the install path (native path suggests \"${hint}\"). ` +\n 'Omit --target to auto-detect, or point at a subtree for that target.',\n );\n }\n}\n\nexport function extendPickHasArrays(p: ExtendPick): boolean {\n return (\n (p.commands?.length ?? 0) +\n (p.rules?.length ?? 0) +\n (p.skills?.length ?? 0) +\n (p.agents?.length ?? 0) >\n 0\n );\n}\n","/**\n * Infer extends.pick from native files under pathInRepo (all install-supported targets).\n */\n\nimport { basename, join } from 'node:path';\nimport type { ExtendPick } from '../config/schema.js';\nimport { readDirRecursive } from '../utils/fs.js';\nimport { inferGeminiCommandNamesFromFiles } from './gemini-install-commands.js';\nimport { GEMINI_COMMANDS_DIR } from '../targets/gemini-cli/constants.js';\nimport { CLINE_SKILLS_DIR, CLINE_WORKFLOWS_DIR } from '../targets/cline/constants.js';\nimport { skillNamesFromNativeSkillDir } from './native-skill-scan.js';\nimport { inferCopilotPickFromPath } from './native-path-pick-infer-copilot.js';\n\nasync function mdNames(dir: string, ext: string): Promise<string[]> {\n const files = await readDirRecursive(dir);\n const e = ext.toLowerCase();\n return [\n ...new Set(files.filter((f) => f.toLowerCase().endsWith(e)).map((f) => basename(f, ext))),\n ].sort();\n}\n\nexport async function inferImplicitPickFromNativePath(\n repoRoot: string,\n pathInRepoPosix: string,\n target: string,\n): Promise<ExtendPick> {\n const posixPath = pathInRepoPosix.replace(/\\\\/g, '/').replace(/^\\/+|\\/+$/g, '');\n const scan = join(repoRoot, ...posixPath.split('/'));\n\n if (target === 'gemini-cli') {\n if (posixPath === GEMINI_COMMANDS_DIR || posixPath.startsWith(`${GEMINI_COMMANDS_DIR}/`)) {\n const commands = await inferGeminiCommandNamesFromFiles(repoRoot, posixPath);\n return commands.length ? { commands } : {};\n }\n return {};\n }\n\n if (target === 'claude-code') {\n if (posixPath.startsWith('.claude/commands')) {\n const commands = await mdNames(scan, '.md');\n return commands.length ? { commands } : {};\n }\n if (posixPath.startsWith('.claude/rules')) {\n const rules = await mdNames(scan, '.md');\n return rules.length ? { rules } : {};\n }\n if (posixPath.startsWith('.claude/agents')) {\n const agents = await mdNames(scan, '.md');\n return agents.length ? { agents } : {};\n }\n if (posixPath.startsWith('.claude/skills/')) {\n const rel = posixPath.replace(/^\\.claude\\/skills\\/?/, '');\n const first = rel.split('/').filter(Boolean)[0];\n return first ? { skills: [first] } : {};\n }\n return {};\n }\n\n if (target === 'cursor') {\n if (posixPath.startsWith('.cursor/rules')) {\n const rules = await mdNames(scan, '.mdc');\n return rules.length ? { rules } : {};\n }\n if (posixPath.startsWith('.cursor/commands')) {\n const commands = await mdNames(scan, '.md');\n return commands.length ? { commands } : {};\n }\n if (posixPath.startsWith('.cursor/agents')) {\n const agents = await mdNames(scan, '.md');\n return agents.length ? { agents } : {};\n }\n if (posixPath.startsWith('.cursor/skills')) {\n const skills = await skillNamesFromNativeSkillDir(scan);\n return skills.length ? { skills } : {};\n }\n return {};\n }\n\n if (target === 'copilot') {\n return inferCopilotPickFromPath(repoRoot, posixPath);\n }\n\n if (target === 'windsurf' && posixPath.startsWith('.windsurf/rules')) {\n const rules = await mdNames(scan, '.md');\n return rules.length ? { rules } : {};\n }\n\n if (target === 'cline') {\n if (posixPath.startsWith(CLINE_SKILLS_DIR)) {\n const skills = await skillNamesFromNativeSkillDir(scan);\n return skills.length ? { skills } : {};\n }\n if (posixPath.startsWith(CLINE_WORKFLOWS_DIR)) {\n const commands = await mdNames(scan, '.md');\n return commands.length ? { commands } : {};\n }\n return {};\n }\n\n if (target === 'continue') {\n if (posixPath.startsWith('.continue/rules')) {\n const rules = await mdNames(scan, '.md');\n return rules.length ? { rules } : {};\n }\n if (posixPath.startsWith('.continue/prompts')) {\n const commands = await mdNames(scan, '.md');\n return commands.length ? { commands } : {};\n }\n if (posixPath.startsWith('.continue/skills')) {\n const skills = await skillNamesFromNativeSkillDir(scan);\n return skills.length ? { skills } : {};\n }\n return {};\n }\n\n if (target === 'junie') {\n if (posixPath.startsWith('.junie/commands')) {\n const commands = await mdNames(scan, '.md');\n return commands.length ? { commands } : {};\n }\n if (posixPath.startsWith('.junie/rules')) {\n const rules = await mdNames(scan, '.md');\n return rules.length ? { rules } : {};\n }\n if (posixPath.startsWith('.junie/agents')) {\n const agents = await mdNames(scan, '.md');\n return agents.length ? { agents } : {};\n }\n if (posixPath.startsWith('.junie/skills')) {\n const skills = await skillNamesFromNativeSkillDir(scan);\n return skills.length ? { skills } : {};\n }\n return {};\n }\n\n if (target === 'codex-cli' && posixPath.startsWith('.codex')) {\n const files = await readDirRecursive(scan);\n const rules = [\n ...new Set(\n files.filter((f) => f.toLowerCase().endsWith('.md')).map((f) => basename(f, '.md')),\n ),\n ].sort();\n return rules.length ? { rules } : {};\n }\n\n return {};\n}\n\nexport function isImplicitPickEmpty(p: ExtendPick): boolean {\n return (\n (p.commands?.length ?? 0) +\n (p.rules?.length ?? 0) +\n (p.skills?.length ?? 0) +\n (p.agents?.length ?? 0) ===\n 0\n );\n}\n","/**\n * Infer canonical Gemini command names from native files under a repo path (install).\n */\n\nimport { join, relative } from 'node:path';\nimport { readDirRecursive } from '../utils/fs.js';\nimport { GEMINI_COMMANDS_DIR } from '../targets/gemini-cli/constants.js';\n\n/** True when pathInRepo (POSIX, trimmed) is `.gemini/commands` or a subpath. */\nexport function isUnderGeminiCommands(pathInRepoPosix: string): boolean {\n const p = pathInRepoPosix.replace(/^\\/+|\\/+$/g, '');\n return p === '.gemini/commands' || p.startsWith('.gemini/commands/');\n}\n\n/**\n * List canonical command names for native `.toml`/`.md` under pathInRepo, relative to `.gemini/commands`.\n */\nexport async function inferGeminiCommandNamesFromFiles(\n repoRoot: string,\n pathInRepoPosix: string,\n): Promise<string[]> {\n const commandsRoot = join(repoRoot, ...GEMINI_COMMANDS_DIR.split('/'));\n const scanDir = join(repoRoot, ...pathInRepoPosix.split('/'));\n const files = await readDirRecursive(scanDir);\n const names: string[] = [];\n for (const f of files) {\n if (!/\\.(toml|md)$/i.test(f)) continue;\n const rel = relative(commandsRoot, f).replace(/\\\\/g, '/');\n if (rel.startsWith('..') || rel === '') continue;\n const noExt = rel.replace(/\\.(toml|md)$/i, '');\n const name = noExt.split('/').filter(Boolean).join(':');\n if (name) names.push(name);\n }\n return [...new Set(names)].sort();\n}\n","/**\n * Skill name discovery from native skill trees (SKILL.md + flat *.md).\n */\n\nimport { basename, dirname, relative } from 'node:path';\nimport { readDirRecursive } from '../utils/fs.js';\n\n/** Names from `.../{name}/SKILL.md` plus top-level `*.md` in scanRoot (flat skills). */\nexport async function skillNamesFromNativeSkillDir(scanRoot: string): Promise<string[]> {\n const files = await readDirRecursive(scanRoot);\n const names = new Set<string>();\n for (const f of files) {\n if (basename(f) === 'SKILL.md') {\n names.add(basename(dirname(f)));\n continue;\n }\n const rel = relative(scanRoot, f).replace(/\\\\/g, '/');\n if (!rel.includes('/') && f.toLowerCase().endsWith('.md')) {\n names.add(basename(f, '.md'));\n }\n }\n return [...names].filter(Boolean).sort();\n}\n","/**\n * Copilot native path → extends.pick for install.\n */\n\nimport { basename, join } from 'node:path';\nimport type { ExtendPick } from '../config/schema.js';\nimport { readDirRecursive } from '../utils/fs.js';\nimport { COPILOT_PROMPTS_DIR } from '../targets/copilot/constants.js';\nimport { skillNamesFromNativeSkillDir } from './native-skill-scan.js';\n\nexport async function inferCopilotPickFromPath(\n repoRoot: string,\n posixPath: string,\n): Promise<ExtendPick> {\n const scan = join(repoRoot, ...posixPath.split('/'));\n if (posixPath.startsWith(COPILOT_PROMPTS_DIR)) {\n const files = await readDirRecursive(scan);\n const commands = [\n ...new Set(\n files\n .filter((f) => f.toLowerCase().endsWith('.prompt.md'))\n .map((f) => basename(f, '.prompt.md')),\n ),\n ].sort();\n return commands.length ? { commands } : {};\n }\n if (posixPath.startsWith('.github/copilot') && !posixPath.includes('copilot-instructions.md')) {\n const files = await readDirRecursive(scan);\n const rules = [\n ...new Set(\n files\n .filter((f) => f.includes('.instructions.md'))\n .map((f) => basename(f).replace(/\\.instructions\\.md$/i, '')),\n ),\n ].sort();\n return rules.length ? { rules } : {};\n }\n if (posixPath.startsWith('.github/instructions')) {\n const files = await readDirRecursive(scan);\n const names = new Set<string>();\n for (const f of files) {\n const b = basename(f);\n if (b.toLowerCase().endsWith('.instructions.md'))\n names.add(b.replace(/\\.instructions\\.md$/i, ''));\n else if (b.toLowerCase().endsWith('.md')) names.add(basename(f, '.md'));\n }\n const rules = [...names].sort();\n return rules.length ? { rules } : {};\n }\n if (posixPath.startsWith('.github/skills')) {\n const skills = await skillNamesFromNativeSkillDir(scan);\n return skills.length ? { skills } : {};\n }\n if (posixPath.startsWith('.github/agents')) {\n const files = await readDirRecursive(scan);\n const agents = [\n ...new Set(\n files\n .filter((f) => f.toLowerCase().endsWith('.agent.md'))\n .map((f) => basename(f, '.agent.md')),\n ),\n ].sort();\n return agents.length ? { agents } : {};\n }\n return {};\n}\n","/**\n * Derive install scope from real native importer results for a target subtree/file.\n */\n\nimport { basename, join, relative } from 'node:path';\nimport { cp, mkdtemp, rm } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport type { ExtendPick } from '../config/schema.js';\nimport type { ImportResult } from '../core/types.js';\nimport { importNativeToCanonical } from '../canonical/native-extends-importer.js';\n\nexport interface StagedImportedNativeRepo {\n stageRoot: string;\n results: ImportResult[];\n cleanup: () => Promise<void>;\n}\n\nexport interface NativeInstallScope {\n stageRoot: string;\n pick?: ExtendPick;\n features: string[];\n cleanup: () => Promise<void>;\n}\n\nfunction normalizePath(path: string): string {\n return path.replace(/\\\\/g, '/').replace(/\\/+$/, '');\n}\n\nfunction overlapsPath(requested: string, imported: string): boolean {\n const a = normalizePath(requested);\n const b = normalizePath(imported);\n return a === b || a.startsWith(`${b}/`) || b.startsWith(`${a}/`);\n}\n\nfunction addUnique(target: string[] | undefined, value: string): string[] {\n const next = target ?? [];\n if (!next.includes(value)) next.push(value);\n return next;\n}\n\nasync function makeStageRoot(repoRoot: string): Promise<{\n stageRoot: string;\n cleanup: () => Promise<void>;\n}> {\n const stageBase = await mkdtemp(join(tmpdir(), 'ab-install-native-'));\n const stageRoot = join(stageBase, 'repo');\n const cleanup = async (): Promise<void> => {\n await rm(stageBase, { recursive: true, force: true });\n };\n\n try {\n await cp(repoRoot, stageRoot, { recursive: true });\n return { stageRoot, cleanup };\n } catch (error) {\n await cleanup();\n throw error;\n }\n}\n\nfunction buildPickFromResults(results: ImportResult[], stageRoot: string): ExtendPick | undefined {\n let pick: ExtendPick | undefined;\n\n for (const result of results) {\n if (result.feature === 'rules' && result.toPath.startsWith('.agentsbridge/rules/')) {\n pick = {\n ...pick,\n rules: addUnique(pick?.rules, basename(result.toPath, '.md')),\n };\n continue;\n }\n if (result.feature === 'commands' && result.toPath.startsWith('.agentsbridge/commands/')) {\n pick = {\n ...pick,\n commands: addUnique(pick?.commands, basename(result.toPath, '.md')),\n };\n continue;\n }\n if (result.feature === 'agents' && result.toPath.startsWith('.agentsbridge/agents/')) {\n pick = {\n ...pick,\n agents: addUnique(pick?.agents, basename(result.toPath, '.md')),\n };\n continue;\n }\n if (result.feature === 'skills' && result.toPath.startsWith('.agentsbridge/skills/')) {\n const rel = normalizePath(\n relative(join(stageRoot, '.agentsbridge', 'skills'), join(stageRoot, result.toPath)),\n );\n const skillName = rel.split('/')[0];\n if (skillName) {\n pick = {\n ...pick,\n skills: addUnique(pick?.skills, skillName),\n };\n }\n }\n }\n\n if (!pick) return undefined;\n const hasAny =\n (pick.rules?.length ?? 0) +\n (pick.commands?.length ?? 0) +\n (pick.agents?.length ?? 0) +\n (pick.skills?.length ?? 0) >\n 0;\n return hasAny ? pick : undefined;\n}\n\nfunction scopeImportedResults(\n pathInRepoPosix: string,\n stageRoot: string,\n results: ImportResult[],\n target: string,\n): Omit<NativeInstallScope, 'cleanup' | 'stageRoot'> {\n const requestedPath = join(stageRoot, ...normalizePath(pathInRepoPosix).split('/'));\n const filtered = results.filter((result) => overlapsPath(requestedPath, result.fromPath));\n if (filtered.length === 0) {\n throw new Error(\n `No installable native resources found under \"${pathInRepoPosix}\" for target \"${target}\".`,\n );\n }\n\n return {\n features: [...new Set(filtered.map((result) => result.feature))],\n pick: buildPickFromResults(filtered, stageRoot),\n };\n}\n\nexport async function stageImportedNativeRepo(\n repoRoot: string,\n target: string,\n): Promise<StagedImportedNativeRepo> {\n const { stageRoot, cleanup } = await makeStageRoot(repoRoot);\n try {\n const results = await importNativeToCanonical(stageRoot, target);\n return { stageRoot, results, cleanup };\n } catch (error) {\n await cleanup();\n throw error;\n }\n}\n\nexport async function stageNativeInstallScope(\n repoRoot: string,\n pathInRepoPosix: string,\n target: string,\n): Promise<NativeInstallScope> {\n const staged = await stageImportedNativeRepo(repoRoot, target);\n try {\n return {\n stageRoot: staged.stageRoot,\n cleanup: staged.cleanup,\n ...scopeImportedResults(pathInRepoPosix, staged.stageRoot, staged.results, target),\n };\n } catch (error) {\n await staged.cleanup();\n throw error;\n }\n}\n","/**\n * Discovery phase for agentsbridge install (native import + slice load + narrow).\n */\n\nimport { discoverFromContentRoot, featuresFromCanonical } from './discover-resources.js';\nimport { narrowDiscoveredForInstallScope } from './resource-selection.js';\nimport { prepareInstallDiscovery } from './prepare-install-discovery.js';\nimport type { PrepareInstallDiscoveryResult } from './prepare-install-discovery.js';\nimport type { CanonicalFiles } from '../core/types.js';\nimport type { ExtendPick } from '../config/schema.js';\n\nexport async function resolveDiscoveredForInstall(\n resolvedPath: string,\n contentRoot: string,\n pathInRepo: string,\n explicitTarget: string | undefined,\n): Promise<{\n prep: PrepareInstallDiscoveryResult;\n discovered: CanonicalFiles;\n implicitPick: ExtendPick | undefined;\n narrowed: CanonicalFiles;\n discoveredFeatures: string[];\n}> {\n const prep = await prepareInstallDiscovery(resolvedPath, contentRoot, pathInRepo, {\n explicitTarget,\n });\n\n const { canonical: discovered, implicitPick: sliceImplicitPick } = await discoverFromContentRoot(\n prep.discoveryRoot,\n );\n\n const implicitPick = sliceImplicitPick ?? prep.implicitPick;\n const narrowed = narrowDiscoveredForInstallScope(discovered, {\n implicitPick,\n scopedFeatures: prep.scopedFeatures,\n });\n const discoveredFeatures = featuresFromCanonical(narrowed);\n\n return { prep, discovered, implicitPick, narrowed, discoveredFeatures };\n}\n","/**\n * Choose manual or native install discovery based on explicit flags.\n */\n\nimport { resolveManualDiscoveredForInstall } from './manual-install-discovery.js';\nimport { resolveDiscoveredForInstall } from './run-install-discovery.js';\nimport type { ExtendPick } from '../config/schema.js';\nimport type { ManualInstallAs } from './manual-install-mode.js';\n\nexport async function resolveInstallDiscovery(args: {\n resolvedPath: string;\n contentRoot: string;\n pathInRepo: string;\n explicitTarget?: string;\n explicitAs?: ManualInstallAs;\n replayPick?: ExtendPick;\n}): Promise<ReturnType<typeof resolveDiscoveredForInstall>> {\n if (args.explicitAs) {\n return {\n implicitPick: undefined,\n ...(await resolveManualDiscoveredForInstall(\n args.contentRoot,\n args.explicitAs,\n args.explicitTarget,\n args.replayPick,\n )),\n } as Awaited<ReturnType<typeof resolveDiscoveredForInstall>>;\n }\n return resolveDiscoveredForInstall(\n args.resolvedPath,\n args.contentRoot,\n args.pathInRepo,\n args.explicitTarget,\n );\n}\n","/**\n * Apply saved install manifest scope when replaying `install --sync`.\n */\n\nimport type { ValidatedConfig } from '../config/schema.js';\nimport type { CanonicalFiles } from '../core/types.js';\nimport { featuresFromCanonical } from './discover-resources.js';\nimport { narrowDiscoveredForInstallScope } from './resource-selection.js';\n\nexport interface InstallReplayScope {\n features?: ValidatedConfig['features'];\n pick?: NonNullable<ValidatedConfig['extends'][number]['pick']>;\n}\n\nexport function applyReplayInstallScope(\n narrowed: CanonicalFiles,\n discoveredFeatures: string[],\n replay?: InstallReplayScope,\n): { narrowed: CanonicalFiles; discoveredFeatures: string[] } {\n if (!replay?.features && !replay?.pick) {\n return { narrowed, discoveredFeatures };\n }\n const replayNarrowed = narrowDiscoveredForInstallScope(narrowed, {\n scopedFeatures: replay.features,\n implicitPick: replay.pick,\n });\n return {\n narrowed: replayNarrowed,\n discoveredFeatures: featuresFromCanonical(replayNarrowed),\n };\n}\n","/**\n * Normalize persisted install path/pick for manual single-item installs.\n */\n\nimport { basename, dirname } from 'node:path';\nimport { stat } from 'node:fs/promises';\nimport type { ExtendPick } from '../config/schema.js';\nimport type { ManualInstallAs } from './manual-install-mode.js';\n\nexport interface ManualInstallPersistence {\n pathInRepo?: string;\n pick?: ExtendPick;\n}\n\nfunction trimDot(pathInRepo: string): string | undefined {\n return pathInRepo === '.' || pathInRepo === '' ? undefined : pathInRepo;\n}\n\nfunction markdownPick(as: Exclude<ManualInstallAs, 'skills'>, pathValue: string): ExtendPick {\n const name = basename(pathValue).replace(/\\.md$/i, '');\n if (as === 'agents') return { agents: [name] };\n if (as === 'commands') return { commands: [name] };\n return { rules: [name] };\n}\n\nexport async function resolveManualInstallPersistence(args: {\n as?: ManualInstallAs;\n contentRoot: string;\n pathInRepo: string;\n}): Promise<ManualInstallPersistence> {\n if (!args.as) {\n return { pathInRepo: trimDot(args.pathInRepo) };\n }\n\n const normalizedPath = args.pathInRepo.replace(/^\\/+|\\/+$/g, '');\n const info = await stat(args.contentRoot);\n\n if (args.as !== 'skills' && info.isFile() && args.contentRoot.toLowerCase().endsWith('.md')) {\n return {\n pathInRepo: trimDot(dirname(normalizedPath)),\n pick: markdownPick(args.as, normalizedPath || args.contentRoot),\n };\n }\n\n if (args.as === 'skills') {\n if (info.isFile() && basename(args.contentRoot) === 'SKILL.md') {\n const skillDir = normalizedPath ? dirname(normalizedPath) : dirname(args.contentRoot);\n return {\n pathInRepo: trimDot(dirname(skillDir)),\n pick: { skills: [basename(skillDir)] },\n };\n }\n if (info.isDirectory()) {\n const skillDir = normalizedPath || basename(args.contentRoot);\n const skillFile = `${args.contentRoot.replace(/\\/+$/g, '')}/SKILL.md`;\n try {\n const skillStat = await stat(skillFile);\n if (skillStat.isFile()) {\n return {\n pathInRepo: trimDot(dirname(skillDir)),\n pick: { skills: [basename(skillDir)] },\n };\n }\n } catch {\n return { pathInRepo: trimDot(normalizedPath) };\n }\n }\n }\n\n return { pathInRepo: trimDot(normalizedPath) };\n}\n","/**\n * agentsbridge install — add pinned extends entries from git or local paths.\n */\n\nimport { runInstall as runInstallCore } from '../../install/run-install.js';\n\nexport async function runInstall(\n flags: Record<string, string | boolean>,\n args: string[],\n projectRoot: string,\n): Promise<void> {\n await runInstallCore(flags, args, projectRoot);\n}\n"],"mappings":"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","names":["realpathSync","resolve","fileURLToPath","pad","require","join","resolve","parseYaml","join","dirname","resolve","dirname","join","dirname","join","basename","relative","dirname","existsSync","realpathSync","join","basename","dirname","join","toStringArray","join","dirname","AB_RULES","AB_COMMANDS","AB_AGENTS","basename","target","win32","win32","existsSync","realpathSync","target","join","basename","toStringArray","basename","dirname","dirname","basename","join","AB_RULES","AB_COMMANDS","AB_AGENTS","basename","join","join","dirname","yamlStringify","join","dirname","AB_RULES","AB_COMMANDS","AB_AGENTS","AB_SKILLS","join","dirname","basename","relative","stat","join","basename","join","toStringArray","basename","join","join","join","readdir","join","join","readdir","AGENTSBRIDGE_RULES","AGENTSBRIDGE_COMMANDS","join","stat","join","dirname","basename","join","AB_RULES","AB_COMMANDS","AB_AGENTS","basename","join","join","dirname","yamlStringify","AB_PERMISSIONS","AB_HOOKS","AB_IGNORE","importSettings","join","dirname","importIgnore","join","basename","dirname","relative","AB_SKILLS","importSkills","join","basename","dirname","relative","AB_RULES","AB_COMMANDS","AB_AGENTS","AB_MCP","importRules","importCommands","importAgents","importSkills","importSettings","importIgnore","join","dirname","join","relative","dirname","basename","AGENTS_MD","join","basename","Buffer","Buffer","AB_RULES","join","basename","join","AB_MCP","importMcp","join","readdir","join","relative","dirname","AB_COMMANDS","AB_AGENTS","AB_SKILLS","importSkills","join","readdir","relative","dirname","parseToml","AB_RULES","importRules","importSkills","importAgents","importMcp","join","basename","AGENTS_MD","relative","dirname","join","basename","dirname","relative","yamlStringify","join","basename","readdir","AGENTSBRIDGE_COMMANDS","AGENTSBRIDGE_AGENTS","AGENTSBRIDGE_SKILLS","toStringArray","join","basename","importSkills","readdir","AGENTSBRIDGE_RULES","AGENTSBRIDGE_IGNORE","AGENTSBRIDGE_MCP","join","relative","dirname","basename","importSkills","importMcp","yamlStringify","join","basename","basename","toStringArray","basename","serializeImportedCommand","join","dirname","basename","yamlStringify","AB_HOOKS","importHooks","join","dirname","basename","yamlStringify","join","basename","dirname","AB_AGENTS","importAgents","join","basename","importSkills","dirname","AGENTSBRIDGE_RULES","AB_COMMANDS","join","basename","importCommands","importAgents","importSkills","importHooks","serializeImportedCommand","basename","join","readdir","dirname","join","relative","AB_SKILLS","readdir","join","relative","dirname","basename","toStringArray","basename","serializeImportedCommand","AB_RULES","AB_COMMANDS","AB_MCP","toStringArray","importRules","importCommands","importMcp","join","basename","serializeImportedCommand","basename","join","AB_MCP","AB_IGNORE","readMcpServers","toStringArray","importRules","join","basename","importMcp","importCommands","importAgents","importIgnore","join","basename","dirname","relative","basename","join","relative","parseToml","join","parseToml","AGENTSBRIDGE_MCP","AGENTSBRIDGE_HOOKS","AGENTSBRIDGE_IGNORE","parseToml","join","AGENTSBRIDGE_RULES","AGENTSBRIDGE_COMMANDS","basename","join","rel","relative","parseToml","parseToml","stringifyYaml","join","AB_PERMISSIONS","join","parseToml","stringifyYaml","AGENTSBRIDGE_RULES","AGENTSBRIDGE_COMMANDS","AGENTSBRIDGE_AGENTS","AGENTSBRIDGE_SKILLS","join","c","basename","dirname","relative","serializeFrontmatter","relative","relative","TARGET","lintRules","TARGET","lintRules","TARGET","lintRules","TARGET","lintRules","TARGET","lintRules","TARGET","lintRules","relative","TARGET","lintRules","relative","TARGET","lintRules","lintRules","resolve","join","dirname","parseYaml","join","mkdir","rm","resolve","join","mkdir","rename","rm","join","buildCacheKey","join","rm","mkdir","rename","join","readdir","writeFile","mkdir","rm","buildCacheKey","join","topDir","rm","mkdir","writeFile","readdir","URL","join","readdir","rm","stat","join","rm","readdir","stat","join","rm","mkdir","resolve","join","basename","basename","basename","toToolsArray","basename","basename","toStrArray","toHooks","basename","basename","join","readdir","c","join","basename","readdir","parseYaml","parseYaml","parseYaml","parseYaml","join","basename","c","join","join","rel","join","join","readdir","join","readdir","basename","dirname","join","stat","c","stat","dirname","basename","join","emptyCanonical","join","basename","c","basename","join","join","readdir","parseYaml","z","z","z","join","parseYaml","readdir","emptyCanonical","join","emptyCanonical","join","parseYaml","stringifyYaml","join","relative","readFile","join","parseYaml","stringifyYaml","rel","relative","target","target","generateRules","generateCommands","generateMcp","generateSkills","generateAgents","generatePermissions","generateHooks","generateIgnore","target","generateRules","generateCommands","generateAgents","generateSkills","generateMcp","generatePermissions","generateHooks","generateIgnore","basename","hasHookCommand","ruleSlug","basename","generateRules","generateCommands","generateSkills","generateAgents","generateHooks","hasHookCommand","target","generateRules","generateCommands","generateAgents","generateSkills","generateHooks","generateRules","generateCommands","generateMcp","generateSkills","target","generateRules","generateCommands","generateSkills","generateMcp","basename","generateRules","basename","generateMcp","generateCommands","generateAgents","generateIgnore","generateSkills","target","generateRules","generateCommands","generateAgents","generateSkills","generateMcp","generateIgnore","relative","mapHookEvent","generateRules","generateCommands","generateAgents","generateSkills","generateIgnore","target","generateRules","generateCommands","generateAgents","generateSkills","generateIgnore","basename","ruleSlug","basename","generateRules","generateIgnore","generateMcp","generateAgents","generateHooks","generateSkills","target","generateRules","generateAgents","generateSkills","generateMcp","generateHooks","generateIgnore","basename","basename","generateRules","AGENTS_MD","basename","generateSkills","generateCommands","generateAgents","generateMcp","target","generateRules","generateCommands","generateAgents","generateSkills","generateMcp","basename","ruleSlug","basename","generateRules","generateIgnore","generateWorkflows","generateAgents","generateMcp","generateHooks","generateSkills","target","generateRules","generateWorkflows","generateAgents","generateSkills","generateMcp","generateHooks","generateIgnore","basename","posix","addDirectoryMapping","basename","AGENTS_MD","target","basename","addDirectoryMapping","target","basename","target","existsSync","dirname","join","join","normalizePath","directoryScopedRuleDir","target","normalizePath","join","join","dirname","existsSync","join","target","join","join","join","relative","relative","join","hasHookCommand","target","join","target","basename","target","target","pad","sep","c","basename","target","resolve","join","join","join","join","CONFIG_FILENAME","LOCAL_CONFIG_FILENAME","join","rel","join","CONFIG_FILENAME","LOCAL_CONFIG_FILENAME","relative","target","relative","relative","target","target","target","target","rel","relative","target","join","relative","relative","join","join","join","c","join","dirname","join","LOCK_FILENAME","join","dirname","join","join","execFile","promisify","execFileAsync","runGit","src","fetched","resolve","basename","ruleSlug","c","ruleSlug","ruleSlug","c","resolve","relative","sep","URL","sep","resolve","localSource","relative","join","out","parseYaml","parseYaml","join","join","rename","join","basename","dirname","rm","rename","mkdir","copyFile","yamlStringify","relative","rel","relative","join","basename","copyFile","dirname","yamlStringify","rm","mkdir","rename","join","basename","dirname","copyFile","yamlStringify","mergePick","join","copyFile","basename","dirname","yamlStringify","join","parseYaml","yamlStringify","z","z","sameFeatures","join","parseYaml","yamlStringify","ruleSlug","c","join","rename","join","join","URL","c","ruleSlug","c","basename","dirname","join","relative","stat","rm","join","rm","stat","basename","dirname","relative","join","target","basename","join","join","relative","join","rel","relative","basename","dirname","relative","basename","dirname","rel","relative","basename","join","join","basename","basename","target","join","rel","basename","join","relative","cp","mkdtemp","rm","tmpdir","normalizePath","target","mkdtemp","join","tmpdir","rm","cp","basename","rel","relative","join","staged","basename","dirname","stat","join","ruleSlug","c","runInstall","c","runInstall","fileURLToPath","resolve","realpathSync"]}